[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 674

 

Спасибо.
 

Такая проблема.

Начал модифицировать эксперт из учебника - 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 на дневках и текущем таймфрейме сходятся - окрасить свечу либо в красный либо синий цвет в зависимости от направления.

Файлы:
 

Нельзя вот так объявлять массивы

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]; // Минимальная цена бара

Компилятор видит что вместо указания размерности массива стоит переменная. Он попросту будет не знать, какое количество памяти нужно выделить под будущий массив. Вот и не работает у Вас код 

 
drknn:

Нельзя вот так объявлять массивы

Компилятор видит что вместо указания размерности массива стоит переменная. Он попросту будет не знать, какое количество памяти нужно выделить под будущий массив. Вот и не работает у Вас код

дело в том, что я эту часть эксперта не трогал - и оно все работало - а указанная часть кода взята из учебника по MQL4 - вот отсюда https://c.mql4.com/book/mq4/experts/strings.mq4

 
victor417:

дело в том, что я эту часть эксперта не трогал - и оно все работало - а указанная часть кода взята из учебника по MQL4 - вот отсюда https://c.mql4.com/book/mq4/experts/strings.mq4


Если в учебнике массивы так объявлены, то это весьма странно. Выделили бы Вы комментарием тот участок кода, который внесли ВЫ.

Я и не читал того учебника. А чем автор обосновывает там правомерность такого вот объявления массива

 

Заметил странную особенность - чем больше объём котировок, тем сильнее тормозит тестер... Если я начинаю тест с 1999 года, то он быстренько "бежит", но чем ближе к настоящему времени, тем сильнее тормоза... 2008 год и ближе к "сегодня" - вообще невозможно тестировать в режиме визуализации.

Как вообще бороться с тормозами тестера???

 

drknn:

Нельзя вот так объявлять массивы

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]; // Минимальная цена бара

Компилятор видит что вместо указания размерности массива стоит переменная. Он попросту будет не знать, какое количество памяти нужно выделить под будущий массив. Вот и не работает у Вас код

Если в учебнике массивы так объявлены, то это весьма странно. Выделили бы Вы комментарием тот участок кода, который внесли ВЫ.

Я и не читал того учебника. А чем автор обосновывает там правомерность такого вот объявления массива?

Вижу инициализацию переменных. Где массивы?

Таймсерии? ;)

 
Здравствуйте,может кто уже делал индикатор зигзаг чтобы он изгибался тока при минимально заданном отклонении от хай лоу но в пунктах...например если задать отклонение 50 пп все что меньше он считал за шум..на форуме я чес гря не знаю как искать в таком большом колличестве всякого..заранее спасибо.
 

Подскажите пожалуйста, у меня проблема с тестером.

 В отчете показывает что Общий убыток = 863, а максимальная просадка = 1427. как это может быть?

 Если смотреть на кривую баланса - то там видно что макс. просадка - 863.

 Что это за глюк такой, подскажите пожалуйста, или может быть так надо?  

 

 

 

 

 

Заренее спасибо) 

 
Здравствуйте!Сможет ли кто-нибудь добавить сюда трейлингстоп;и стоплосс каждый раз другой выставляется...Исправьте,пожалуйста.
Файлы:
a_sidus_1.mq4  5 kb
Причина обращения: