#property indicator_type1 DRAW_COLOR_CANDLES

 

Приветствую.

Столкнулся с эффектом, который не могу исправить. Подскажите, что нужно сделать для преодоления сего досадного глюка.

Для простоты возьмём исходный код индикатора Хейкен Аши из стандартной поставки терминала. Полностью оставим его без изменений, но добавим пару строк:

...
// ДОБАВИМ ВХОДНОЙ ПЕРЕКЛЮЧАТЕЛЬ
input bool _Show_HA = false; 
...
// ДОБАВИМ ПРОВЕРКУ ПЕРЕКЛЮЧАТЕЛЯ В НАЧАЛО OnCalculate()
if ( _Show_HA ) {
// НУ И ДАЛЕЕ, СОБСТВЕННО, ИСХОДНЫЙ КОД БЕЗ ИЗМЕНЕНИЙ

Теперь если повесить на график эту модификацию, отражающую суть моей проблемы, то пощёлкав по таймфреймам получим вот такую картинку:

https://charts.mql5.com/4/18/eurusd-d1-metaquotes-software-corp-temp-file-screenshot-46157.png

Соответственно вопрос - как избавиться от этого?

P.S. Проблема решена: https://www.mql5.com/ru/forum/21154/page2#comment_783885

 
wtvirtual:

Приветствую.

Столкнулся с эффектом, который не могу исправить. Подскажите, что нужно сделать для преодоления сего досадного глюка.

Для простоты возьмём исходный код индикатора Хейкен Аши из стандартной поставки терминала. Полностью оставим его без изменений, но добавим пару строк:

Теперь если повесить на график эту модификацию, отражающую суть моей проблемы, то пощёлкав по таймфреймам получим вот такую картинку:

https://charts.mql5.com/4/18/eurusd-d1-metaquotes-software-corp-temp-file-screenshot-46157.png

Соответственно вопрос - как избавиться от этого?

Поправьте меня, но где в стандартной поставке этот индикатор?

 
barabashkakvn:

Поправьте меня, но где в стандартной поставке этот индикатор?

БазоваяДиректорияТерминала\MQL5\Indicators\Examples\Heiken_Ashi.mq5

Не знаю, есть ли исходник в КаталогеДанных, но в БазовойДиректории есть.

 
Впрочем, зачем искать? Прикрепляю исходник к сообщению.
Файлы:
 
wtvirtual:
Впрочем, зачем искать? Прикрепляю исходник к сообщению.
input bool _Show_HA = false;
.
.
.
//+------------------------------------------------------------------+
//| Heiken Ashi                                                      |
//+------------------------------------------------------------------+
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 i,limit;
if ( _Show_HA ) {  // _Show_HA==false, значит будем всегда выходить из OnCalculate без просчета индикатора
//--- preliminary calculations
   if(prev_calculated==0)
     {
      //--- set first candle
При таком коде, OnCalculate() никогда не произведет расчет индикатора
 
barabashkakvn:
При таком коде, OnCalculate() никогда не произведет расчет индикатора
И что с того? Как это относится к сути моей проблемы?
 
wtvirtual:
И что с того? Как это относится к сути моей проблемы?
Для решения проблемы, эту проблему нужно, по крайней мере, увидеть.
 
barabashkakvn:
Для решения проблемы, эту проблему нужно, по крайней мере, увидеть.
Суть проблемы хорошо видна на картинке. Индикатор не следует логике переключателя. Когда переключатель в "трю", хейкен рисует свои свечи. Когда переключатель в "фолз", хейкен всё равно рисует, причём что попало, произвольные данные. Причём только под МТ5. Под МТ4 как и положено - ничего не рисует. Доступно объяснил? :)
 
wtvirtual:
Суть проблемы хорошо видна на картинке. Индикатор не следует логике переключателя. Когда переключатель в "трю", хейкен рисует свои свечи. Когда переключатель в "фолз", хейкен всё равно рисует, причём что попало, произвольные данные. Причём только под МТ5. Под МТ4 как и положено - ничего не рисует. Доступно объяснил? :)
У меня при значении флага == false индикатор ничего не рисует - и это логично, так как при флаге == false происходит выход из OnCalculate без единого расчета.
 
barabashkakvn:
У меня при значении флага == false индикатор ничего не рисует - и это логично, так как при флаге == false происходит выход из OnCalculate без единого расчета.
Прочтите ещё раз первый пост. И пощёлкайте по разным ТФ туда-сюда, от Н4 до месяца.
 
wtvirtual:
Прочтите ещё раз первый пост. И пощёлкайте по разным ТФ туда-сюда, от Н4 до месяца.

Еще раз - на любом таймфрейме при флаге == false абсолютно ничего не происходит, потому что - смотреть выше. Вам нужно модифицированный индикатор пересохранить под другим именем, а в теле индикатора изменить описание. 

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

Причина обращения: