Здравствуйте уважаемые профессионалы MQL. Скажите пожалуйста как создать индикатор, чтобы он отрисовывался на истории сразу после перемещения на график не дожидаясь тиков?
У индикатора обработчик OnCalculate() запускается сразу после выполнения обработчика OnInit(), не дожидаясь тика. Это у советника по-другому. Таким образом, непонятно, о чем вопрос. Приведите более полное описание проблемы. Или, может быть, проблема с каким-то конкретным индикатором. Тогда нужен его код.
У индикатора обработчик OnCalculate() запускается сразу после выполнения обработчика OnInit(), не дожидаясь тика. Это у советника по-другому. Таким образом, непонятно, о чем вопрос. Приведите более полное описание проблемы. Или, может быть, проблема с каким-то конкретным индикатором. Тогда нужен его код.
Нужно чтобы сразу отрисовывался индикатор iMA вот инициализация
sma1=iMA(Symbol(),PERIOD_CURRENT,nMA1Period,nMA1Sdvig,MODE_SMA,PRICE_CLOSE);
sma2=iMA(Symbol(),PERIOD_CURRENT,nMA2Period,nMA2Sdvig,MODE_SMA,PRICE_CLOSE);
sma3=iMA(Symbol(),PERIOD_CURRENT,nMA3Period,nMA3Sdvig,MODE_SMA,PRICE_CLOSE);
atr1=iATR(Symbol(),PERIOD_CURRENT,nATR);
SetIndexBuffer(0,ma1,INDICATOR_DATA);
SetIndexBuffer(1,ma2,INDICATOR_DATA);
SetIndexBuffer(2,ma3,INDICATOR_DATA);
SetIndexBuffer(3,atr,INDICATOR_CALCULATIONS);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrMA1Color);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrMA2Color);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrMA3Color);
ENUM_DRAW_TYPE enDrawType=DRAW_LINE;
if(!bShowMA)
{
enDrawType=DRAW_NONE;
}
PlotIndexSetInteger(0,PLOT_DRAW_TYPE,enDrawType);
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,enDrawType);
PlotIndexSetInteger(2,PLOT_DRAW_TYPE,enDrawType);
ArraySetAsSeries(ma1, true);
ArraySetAsSeries(ma2, true);
ArraySetAsSeries(ma3, true);
ArraySetAsSeries(atr, true);
А вот работа в OnCalculate(...)
int limit = rates_total - prev_calculated;
if(limit>1)
{
CopyBuffer(sma1,0,0,limit,ma1);
CopyBuffer(sma2,0,0,limit,ma2);
CopyBuffer(sma3,0,0,limit,ma3);
CopyBuffer(sma4,0,0,limit,ma4);
CopyBuffer(atr1,0,0,limit,atr);
.......
}
Но картинку я вижу только по 1му тику
Нужно чтобы сразу отрисовывался индикатор iMA вот инициализация
Но картинку я вижу только по 1му тику
В представленном коде не видно никаких проблем. Другое дело, что это лишь фрагменты кода. Прикрепите, пожалуйста полный код в виде файла, чтобы можно было запустить его и проверить.
В представленном коде не видно никаких проблем. Другое дело, что это лишь фрагменты кода. Прикрепите, пожалуйста полный код в виде файла, чтобы можно было запустить его и проверить.
разве что оно так не работает :-)
сколько баров доступно в sma1 ?? "а хрен его знает..." но копируем limit..и к тому-же в индикаторный буфер, а не в динамический массив
Здравствуйте уважаемые профессионалы MQL. Скажите пожалуйста как создать индикатор, чтобы он отрисовывался на истории сразу после перемещения на график не дожидаясь тиков?
сделайте отдельную функцию расчета индикатора, которую будете вызывать один раз в самом конце кода инициализации индикатора и в OnCalculate, тем самым получите расчет индикатора не дожидаясь прихода нового тика.
придется заморочиться, раз уж так необходимо не ждать прихода тика.
или в OnCalculate как обычно делаете и отдельно свою функцию для однократного вызова в OnInit, но конечно будет код пообъёмнее.
в каком месте все подобрали ЭТО и таскаете от места к месту ? ЭТО ведь даже не 4-ка..это что-то дремучее, mql3
и ArraySetAsSeries() - надо делать почти всегда перед началом обращений к массивам, в OnCalculate так точно. И точно не в конце OnInit. Непосредственно ПЕРЕД ОБРАЩЕНИЯМИ. А не после инициализации
в каком месте все подобрали ЭТО и таскаете от места к месту ? ЭТО ведь даже не 4-ка..это что-то дремучее, mql3
и ArraySetAsSeries() - надо делать почти всегда перед началом обращений к массивам, в OnCalculate так точно. И точно не в конце OnInit. Непосредственно ПЕРЕД ОБРАЩЕНИЯМИ. А не после инициализации
ArraySetAsSeries для буферов можно делать только один раз в ините. а вот прайсы в онкалькулейт действительно, нужно в ArraySetAsSeries превращать каждый раз.
а можно вызвать перед обращениями и быть уверенным в дальнейшем результате. Что ни один метод после OnInit не перекинул серийность как ему(и авторам терминала в разных билдах) вздумается.
1 вызов функции, который изменяет 1 флажок. Но нервы спокойны и ошибки минимизированы
в каком месте все подобрали ЭТО и таскаете от места к месту ? ЭТО ведь даже не 4-ка..это что-то дремучее, mql3
https://www.mql5.com/ru/docs/series/copybuffer в примере ищите to_copy
не читайте советских газет :-)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования