В OnTimer/OnChartEvent и вызвать OnCalculate, передав в нее нужное значение prev_calculate...
отличная мысль, кроме двух моментов: как передать const &double open[] c прочими и как принудить терминал перерисовать индикаторные буферы до получения тика
чтобы даже при отсутствии тиков функция была вызвана, буферы перевычислены и линии индикаторов перечерчены ?
причём главное даже не вызов OnCalculate - а просто указать терминалу, что данные в буферах (например в OnTimer, OnChartEvent), поменялись от момента X и их надо перевывести. Например пользователь ткнул OBJ_BUTTON и параметры изменились
ChartRedraw() не предлагать :-) он про объекты, а с буферами наискосок работает, то да то нет.
ChartSetSymbolPeriod() с указанием текущего символа и периода эмулирует тик (примечание в справке).
Правда в индикаторах очень не рекомендуется устанавливать им текущие символ и период графика - может вызвать клинч.
- www.mql5.com
отличная мысль, кроме двух моментов: как передать const &double open[] c прочими и как принудить терминал перерисовать индикаторные буферы до получения тика
Передавать пустышки:
double open[]; OnCalculate(open, ...);
А в OnCalculate не использовать их. Я уже давно не использую массивы-таймсерии, т. к. в одно время был баг в МТ4, когда количество баров выдавалось одно, а размеры массивов-таймсерий не соответствовали им (вроде исправили). В итоге нарывался на out of range и проверить было невозможно. При использовании iTime и прочих вылета, как минимум, не будет.
чтобы даже при отсутствии тиков функция была вызвана, буферы перевычислены и линии индикаторов перечерчены ?
причём главное даже не вызов OnCalculate - а просто указать терминалу, что данные в буферах (например в OnTimer, OnChartEvent), поменялись от момента X и их надо перевывести. Например пользователь ткнул OBJ_BUTTON и параметры изменились
ChartRedraw() не предлагать :-) он про объекты, а с буферами наискосок работает, то да то нет.
Вот здесь https://www.mql5.com/ru/code/16210
индикатор перерисовывается, при любом изменении стакана
- www.mql5.com
Вот здесь https://www.mql5.com/ru/code/16210
индикатор перерисовывается, при любом изменении стакана
в выходные он будет перерисовываться ? вот юзер взял и жмакнул кнопку и коэффициенты стали другими..
кстати и интерфейс OnCalculate там старый, и похоже что deprecated. Вроде уже нельзя вызывать OnCalc от 4-х параметров (как индикатор от буфера), поэтому Medium Average в терминале как памятник уходящей эпохе - когда-то можно было и так :-)
Я не заморачиваюсь и делаю так:
int OnCalculate(const int rates_total,... { priv = prev_calculated; return(rates_total); } //+------------------------------------------------------------------+ void OnTimer() { if(priv <= 0)//если выходные или нет новых тиков ChartSetSymbolPeriod(0, _Symbol, PERIOD_CURRENT); else EventKillTimer(); } //+------------------------------------------------------------------+
Нормально в выходные запускает индикаторы, которые не рассчитываются с первого раза.
в выходные он будет перерисовываться ? вот юзер взял и жмакнул кнопку и коэффициенты стали другими..
В OnCalculate нет никакой магии, никто там ему глазом не подмигивает, типа - перерисуйся. Нужно всего лишь записать данные в буфер, а дальше все автоматически произойдет. Это и есть ChartRedraw для индикатора.
в выходные он будет перерисовываться ? вот юзер взял и жмакнул кнопку и коэффициенты стали другими..
кстати и интерфейс OnCalculate там старый, и похоже что deprecated. Вроде уже нельзя вызывать OnCalc от 4-х параметров (как индикатор от буфера), поэтому Medium Average в терминале как памятник уходящей эпохе - когда-то можно было и так :-)
Похоже Вам ничего не нужно.
Вам дали готовое работающее решение, а Вам даже лень потратить ровно 40 секунд чтобы скачать и скомпелить.
Ковыряйтесь дальше!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
чтобы даже при отсутствии тиков функция была вызвана, буферы перевычислены и линии индикаторов перечерчены ?
причём главное даже не вызов OnCalculate - а просто указать терминалу, что данные в буферах (например в OnTimer, OnChartEvent), поменялись от момента X и их надо перевывести. Например пользователь ткнул OBJ_BUTTON и параметры изменились
ChartRedraw() не предлагать :-) он про объекты, а с буферами наискосок работает, то да то нет.