- Ошибки, баги, вопросы
- Индикатор от индикатора
- Особенности языка mql5, тонкости и приёмы работы
Не могу понять в чем проблема:
Суть индикатора если мувинг растет красим в синий если падает в красный.
На минутном графике как и в тестере по прохождению нескольких баров индикатор отображается скомкано не сглажено, так отрисовывается после запуска.
Если индикатор переустановить или пере компилировать то все отображается верно. В чем трабл понять не могу.
Хелп плиз ... Под утро уже не соображаю ...
До компиляции или переустановки:
После компиляции или переустановки
Код индюка
//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property strict #property indicator_chart_window #property indicator_buffers 2 double MA1up[],MA1dw[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexStyle(0,DRAW_LINE,0,1,clrBlue); SetIndexBuffer(0,MA1up); SetIndexStyle(1,DRAW_LINE,0,1,clrRed); SetIndexBuffer(1,MA1dw); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit=0; if(prev_calculated>rates_total || prev_calculated<=0) // проверка на первый старт limit=rates_total-1; else limit=rates_total-prev_calculated; for(int i=0; i<limit; i++) MA1up[i]=iMA(NULL,0,21,0,2,0,i); for(int i=0;i<limit;i++) if(MA1up[i+1]>MA1up[i]) { MA1dw[i]=MA1up[i]; MA1dw[i+1]=MA1up[i+1]; } return(rates_total); } //+------------------------------------------------------------------+
Не могу понять в чем проблема:
Суть индикатора если мувинг растет красим в синий если падает в красный.
На минутном графике как и в тестере по прохождению нескольких баров индикатор отображается скомкано не сглажено, так отрисовывается после запуска.
Если индикатор переустановить или пере компилировать то все отображается верно. В чем трабл понять не могу.
Хелп плиз ... Под утро уже не соображаю ...
До компиляции или переустановки:
После компиляции или переустановки
Код индюка
Вы пробовали в окне данных проверять значения индикатора в "проблемных" местах?
upd: чем хорош mql5. Можно тип индикатора задать DRAW_COLOR_LINE и с бубном танцевать не нужно! Один буфер - значение, один буфер - цвет. Не уверен, поддерживает ли mql4 этот синтаксис.
Вы пробовали в окне данных проверять значения индикатора в "проблемных" местах?
upd: чем хорош mql5. Можно тип индикатора задать DRAW_COLOR_LINE и с бубном танцевать не нужно! Один буфер - значение, один буфер - цвет. Не уверен, поддерживает ли mql4 этот синтаксис.
Для мт4
Я по синтаксису понял, что для МТ4, Вы на вопрос не ответили.
Не могу понять какое проблемное место может быть в этом индикаторе ?
Это я уже понял. Повторюсь, Вы пробовали сравнивать значения буферов в окне данных?
Могу предложить вариант обнулять буфер MA1up когда те же значения заносятся в буфер MA1dw.
Это я уже понял. Повторюсь, Вы пробовали сравнивать значения буферов в окне данных?
Могу предложить вариант обнулять буфер MA1up когда те же значения заносятся в буфер MA1dw.
У меня с индикаторами как то не особо складывается, ((( ))))))
Нет не пробовал, задаюсь вопросом что я могу получить сравнивая значения буферов ?
У меня с индикаторами как то не особо складывается, ((( ))))))
Нет не пробовал, задаюсь вопросом что я могу получить сравнивая значения буферов ?
Что происходит сейчас. Вы полностью в цикле заполняете один буфер - up. Далее, в следующем цикле сравниваете значения и если i значение < i+1 - заносите оба этих значения в буфер dw. Получается, что оба буфера имеют одинаковые значения по некоторым свечам. Если Вы уберете дубли проблема, возможно, исчезнет.
Спасибо. проблема исчезнет с наложением линий друг на друга, но скомканность все равно останется.
Вот такая проверка - она покажет сколько раз пересчитывается нулевой бар (и вообще, пересчитывается-ли):
for(int i=0; i<limit; i++) { Print("limit=",limit,"; rates_total=",rates_total,"; prev_calculated=",prev_calculated); MA1up[i]=iMA(NULL,0,21,0,2,0,i); }
Правда при первом проходе будет много принтов, но потом всё станет видно.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования