[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 674
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
https://www.mql5.com/ru/forum/491
Спасибо.
Такая проблема.
Начал модифицировать эксперт из учебника - strings.mq4 (ссылка на экспертhttps://c.mql4.com/book/mq4/experts/strings.mq4)
Добавил буквально пару строк, а он, зараза, не работает. Понятно что накосячил, но вот найти ошибку не могу.
Итак. Все изменения сосредоточены в блоке 10.
Вот оригинал:
//-------------------------------------------------------------- 10 --
int Create(int Ind_Bar, int Line) // Пользовательская функция..
{ // ..создания объекта
color Color; // Цвет объекта
datetime T_Bar=Time [Ind_Bar]; // Время открытия бара
double O_Bar=Open [Ind_Bar]; // Цена открытия бара
double C_Bar=Close[Ind_Bar]; // Цена закрытия бара
double H_Bar=High [Ind_Bar]; // Максимальная цена бара
double L_Bar=Low [Ind_Bar]; // Минимальная цена бара
string Nom_Lin =Line + "_"; // Строка - номер линии
// string Nom_Lin = DoubleToStr(Line,0)+"_";// Можно и так
string Str_Time=TimeToStr(T_Bar); // Строка - время откр.
string His_Name=Prefix+Nom_Lin+Str_Time;// Имя созаваемого объект
if (O_Bar < C_Bar) Color=Blue; // Выбор цвета в зависимости..
if (O_Bar > C_Bar) Color=Red; // .. от характеристик бара
if (O_Bar ==C_Bar) Color=Green;
switch(Line) // Тонкая или толстая линия
{
case 1: // Тонкая линия
ObjectCreate(His_Name,OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
break; // Выход из switch
case 2: // Толстая линия
ObjectCreate(His_Name,OBJ_TREND,0,T_Bar,O_Bar,T_Bar,C_Bar);
ObjectSet( His_Name, OBJPROP_WIDTH, 3);// Стиль
}
ObjectSet( His_Name, OBJPROP_COLOR, Color); // Цвет
ObjectSet( His_Name, OBJPROP_RAY, false); // Луч
ObjectSetText(His_Name,"Объект создан экспертом",10);// Описание
return; // Выход из польз. ф-ии
}
А вот то что я наваял (компилируется без ошибок): (см. также прикрепленный файл)
//-------------------------------------------------------------- 10 --int Create(int Ind_Bar, int Line) // Пользовательская функция..
{ // ..создания объекта
color Color; // Цвет объекта
datetime T_Bar=Time [Ind_Bar]; // Время открытия бара
double O_Bar=Open [Ind_Bar]; // Цена открытия бара
double C_Bar=Close[Ind_Bar]; // Цена закрытия бара
double H_Bar=High [Ind_Bar]; // Максимальная цена бара
double L_Bar=Low [Ind_Bar]; // Минимальная цена бара
//-------------------изменения---------------------------------------
double Macd_M_D1=iMACD(NULL,1440,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
// Вверху - обращение к МАКД расчет на дневках основной линии
double Macd_S_D1=iMACD(NULL,1440,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
// Это обращение к МАКД и расчет Сигнальной линии на дневках
double Macd_M_H4=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
// Это обращение к МАКД и расчет основной линии на текущем таймфрейме
double Macd_S_H4=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
// Это обращение к МАКД и расчет сигнальной линии на текущем таймфрейме
string Nom_Lin =Line + "_"; // Строка - номер линии
// string Nom_Lin = DoubleToStr(Line,0)+"_";// Можно и так
string Str_Time=TimeToStr(T_Bar); // Строка - время откр.
string His_Name=Prefix+Nom_Lin+Str_Time;// Имя созаваемого объект
if ((Macd_M_D1 < Macd_S_D1)&&(Macd_M_H4 < Macd_S_H4))Color=Blue;
if ((Macd_M_D1 > Macd_S_D1)&&(Macd_M_H4 > Macd_S_H4))Color=Red;
//
//if (O_Bar < C_Bar) Color=Blue; // Выбор цвета в зависимости..
//if (O_Bar > C_Bar) Color=Red; // .. от характеристик бара
//if (O_Bar ==C_Bar) Color=Green;
//-------------------изменения---------------------------------------
Цель - если показания MACD на дневках и текущем таймфрейме сходятся - окрасить свечу либо в красный либо синий цвет в зависимости от направления.
Нельзя вот так объявлять массивы
Компилятор видит что вместо указания размерности массива стоит переменная. Он попросту будет не знать, какое количество памяти нужно выделить под будущий массив. Вот и не работает у Вас код
Нельзя вот так объявлять массивы
Компилятор видит что вместо указания размерности массива стоит переменная. Он попросту будет не знать, какое количество памяти нужно выделить под будущий массив. Вот и не работает у Вас код
дело в том, что я эту часть эксперта не трогал - и оно все работало - а указанная часть кода взята из учебника по MQL4 - вот отсюда https://c.mql4.com/book/mq4/experts/strings.mq4
дело в том, что я эту часть эксперта не трогал - и оно все работало - а указанная часть кода взята из учебника по MQL4 - вот отсюда https://c.mql4.com/book/mq4/experts/strings.mq4
Если в учебнике массивы так объявлены, то это весьма странно. Выделили бы Вы комментарием тот участок кода, который внесли ВЫ.
Я и не читал того учебника. А чем автор обосновывает там правомерность такого вот объявления массива?
Заметил странную особенность - чем больше объём котировок, тем сильнее тормозит тестер... Если я начинаю тест с 1999 года, то он быстренько "бежит", но чем ближе к настоящему времени, тем сильнее тормоза... 2008 год и ближе к "сегодня" - вообще невозможно тестировать в режиме визуализации.
Как вообще бороться с тормозами тестера???
drknn:
Нельзя вот так объявлять массивы
Компилятор видит что вместо указания размерности массива стоит переменная. Он попросту будет не знать, какое количество памяти нужно выделить под будущий массив. Вот и не работает у Вас код
Если в учебнике массивы так объявлены, то это весьма странно. Выделили бы Вы комментарием тот участок кода, который внесли ВЫ.
Я и не читал того учебника. А чем автор обосновывает там правомерность такого вот объявления массива?
Вижу инициализацию переменных. Где массивы?
Таймсерии? ;)
Подскажите пожалуйста, у меня проблема с тестером.
В отчете показывает что Общий убыток = 863, а максимальная просадка = 1427. как это может быть?
Если смотреть на кривую баланса - то там видно что макс. просадка - 863.
Что это за глюк такой, подскажите пожалуйста, или может быть так надо?
Заренее спасибо)