Anton: Архитектурно событие таймера является событием чарта, соответственно в данном случае индикаторы его получать не могут.
Как программно заставить индикатор, вызываемый через iCustom, отрисоваться (то есть спровоцировать вызов OnCalculate), в случае отсутствия поступления тиков (например, в выходные)?
Если в этом индикаторе в свою очередь вызываются другие индикаторы, то при первом автоматическом вызове OnCalculate сразу после выхода из OnInit данные этих индикаторов не будут рассчитаны, и более того, индикатор не сможет "подождать" их просчета не выходя из OnCalculate. А следующего вызова OnCalculate не будет до конца выходных, когда начнутся первые тики. При этом ни OnTimer, ни OnChartEvent в таком индикаторе не работают, чтобы вызвать перерисовку когда данные будут получены. В итоге единственный способ который я вижу - через DLL вызывать из контекстного меню окна пункт "Обновить" на графике - не думаю, что разработчики планировали именно этот способ для нормальной работы индикаторов в МТ5. Иначе пользователю придется куковать у графика нажимая эту кнопку, пока индикатор не отрисуется, что вряд ли его обрадует.
Ilya Malev: Если в этом индикаторе в свою очередь вызываются другие индикаторы, то при первом автоматическом вызове OnCalculate сразу после выхода из OnInit данные этих индикаторов не будут рассчитаны, и более того, индикатор не сможет "подождать" их просчета не выходя из OnCalculate. А следующего вызова OnCalculate не будет до конца выходных, когда начнутся первые тики. При этом ни OnTimer, ни OnChartEvent в таком индикаторе не работают, чтобы вызвать перерисовку когда данные будут получены. В итоге единственный способ который я вижу - через DLL вызывать из контекстного меню окна пункт "Обновить" на графике - не думаю, что разработчики планировали именно этот способ для нормальной работы индикаторов в МТ5. Иначе пользователю придется куковать у графика нажимая эту кнопку, пока индикатор не отрисуется, что вряд ли его обрадует.
Может выложите версию для МТ5? ) Не знаю для чего она нужна в МТ4, но в МТ5 будет реальная польза - в виду безвыходности ситуации, о которой я выше написал.
а раньше все было нормально
build 1178. Ошибка компиляции: 'B' - template mismatch
а раньше все было нормально
Почему событие OnTimer не запускается в индикаторах, вызываемых через iCustom?
Архитектурно событие таймера является событием чарта, соответственно в данном случае индикаторы его получать не могут.
Если в этом индикаторе в свою очередь вызываются другие индикаторы, то при первом автоматическом вызове OnCalculate сразу после выхода из OnInit данные этих индикаторов не будут рассчитаны, и более того, индикатор не сможет "подождать" их просчета не выходя из OnCalculate. А следующего вызова OnCalculate не будет до конца выходных, когда начнутся первые тики. При этом ни OnTimer, ни OnChartEvent в таком индикаторе не работают, чтобы вызвать перерисовку когда данные будут получены. В итоге единственный способ который я вижу - через DLL вызывать из контекстного меню окна пункт "Обновить" на графике - не думаю, что разработчики планировали именно этот способ для нормальной работы индикаторов в МТ5. Иначе пользователю придется куковать у графика нажимая эту кнопку, пока индикатор не отрисуется, что вряд ли его обрадует.
если для МТ4:
так не получится? https://www.mql5.com/ru/code/11678
так не получится? https://www.mql5.com/ru/code/11678
Этот скрипт для MetaTrader 4 :)
В МТ4 как раз все данные предупредительно рассчитываются терминалом до получения их в программах mql4
Этот скрипт для MetaTrader 4 :)
В МТ4 как раз все данные предупредительно рассчитываются терминалом до получения их в программах mql4
да, я после уточнил
ЗЫ: интересно, а эти коды сообщений которые работают для МТ4 не подойдёт для МТ5 )
да, я после уточнил