Как, гарантировано, получить сигнал от рисующего индикатора?

 

Здравствуйте. Индикатор может перерисовывать больше шести баров.

Изменяться цвет линии может на третьем или на пятом баре, нестабильный он.

Как узнать, что сейчас цвет изменился, неважно на каком баре?

      sell_1=NormalizeDouble(iCustom(Symbol(),0,"mymy",1,1),Digits);
      sell_2=NormalizeDouble(iCustom(Symbol(),0,"mymy",1,2),Digits);
      if(sell_1!=0.0 && sell_1_2==0.0)
      {
       open_pos(magic);
      }
 
lil_lil:

Здравствуйте. Индикатор может перерисовывать больше шести баров.

Изменяться цвет линии может на третьем или на пятом баре, нестабильный он.

Как узнать, что сейчас цвет изменился, неважно на каком баре?

В вашем кусочке кода слишком мало информации, что бы понять логику работы индикатора.

 
Vitalii Ananev:

В вашем кусочке кода слишком мало информации, что бы понять логику работы индикатора.

Кода индикатора нет. Этот кусочек - вызов индикатора и открытие позиции по сигналу на первом баре. Позиции открываются, но бывает, проверялось на визуализации, что линия индикатора зелёная на первом баре, цена, быстро вниз и красной становится линия на 3, 4 или 6 баров назад, разумеется такую перемену цвета мой код пропускает. Как, в текущий момент, узнать что цвет изменился?

 
lil_lil:

Кода индикатора нет. Этот кусочек - вызов индикатора и открытие позиции по сигналу на первом баре. Позиции открываются, но бывает, проверялось на визуализации, что линия индикатора зелёная на первом баре, цена, быстро вниз и красной становится линия на 3, 4 или 6 баров назад, разумеется такую перемену цвета мой код пропускает. Как, в текущий момент, узнать что цвет изменился?

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

 
lil_lil:

Кода индикатора нет. Этот кусочек - вызов индикатора и открытие позиции по сигналу на первом баре. Позиции открываются, но бывает, проверялось на визуализации, что линия индикатора зелёная на первом баре, цена, быстро вниз и красной становится линия на 3, 4 или 6 баров назад, разумеется такую перемену цвета мой код пропускает. Как, в текущий момент, узнать что цвет изменился?

Попробуйте проанализировать показания индикатора. Запустите этот индикатор в тестере стратегий в режиме визуализации и метод моделирования  "По ценам открытия ..."  Откройте "окно данных" (Ctrl+D) и в этом окне можно увидеть какие данные выдают все индикаторные буферы. В этом же окне можно узнать кол-во индикаторных буферов. Установите тестер на паузу и по шагам  (клавиша F12) смотрите как меняются значения буферов этого индикатора и следите за сменой цвета. 

...

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

 
lil_lil:

Как узнать, что сейчас цвет изменился, неважно на каком баре?

примерно так должно быть:

static double last_ind[8,100];
//+------------------------------------------------------------------+
void OnTick()
  {
   double ind[8,100];
   for(int j=0;j<100;j++)
     {
      for(int i=0;i<8;i++)
        {
         ind[i,1]=GetIndBuffer(i,j);
        }
     }
   if(ArrayCompare(last_ind,ind)==0) Print("Нет изменений в индикаторе!!!");
   else
     {
      ArrayCopy(last_ind,ind);
      Print("Индикатор перерисовался!!!");
     }
  }
//+------------------------------------------------------------------+
double GetIndBuffer(int nbuff_,int nbar_)
  {
   return(iCustom(NULL,PERIOD_CURRENT,"name",nbuff_,nbar_));
  }  
//+------------------------------------------------------------------+

но нужно проверять, не люблю встроенные функции mql при работе с массивами, всякое может быть (я про ArrayCompare() и  ArrayCopy()) я бы их переписал бы для этого случая

 
Vitalii Ananev:

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

Да, изменить цвет может  на шестом баре, но сигнал получить нужно.

Sergey Savinkin:

Нужно знать, какой буфер у индикатора отвечает за цвет.

Буфер с индексом 1 - красный цвет вот это условие из приведённого кода: если на первом баре красный есть и на втором красного нет

if(sell_1!=0.0 && sell_1_2==0.0)

продаю. Как сказал раньше, бывает цвет меняется сразу на 5 баров.

Чтобы открыть позицию по такому сигналу нужно записать условие: если на пятом баре красный есть на шестом нет, продаю. Но это не правильно, на ближних барах цвет тоже мог меняться

 
Igor Makanu:

примерно так должно быть:

но нужно проверять, не люблю встроенные функции mql при работе с массивами, всякое может быть (я про ArrayCompare() и  ArrayCopy()) я бы их переписал бы для этого случая

Print на каждом тике: "Индикатор перерисовался!!!"

 
lil_lil:

Print на каждом тике: "Индикатор перерисовался!!!"

наверное нужно контроль открытия нового бара сделать - или не копировать нулевой бар

 

Привет!

Тема пахнет троллингом .

"КАК ГАРАНТИРОВАННО .... " и дальше уже можно забить на эту тему , гы гы гы...

типа код поменял и вот вам грааль, который даст "гарантированные" сигналы.... 



а некоторые даже пытаются ему советовать ... гы гы гы ..

 
Vitalii Ananev:смотрите как меняются значения буферов этого индикатора и следите за сменой цвета. 

Линия красная,буфер №1 на каждом баре заполнен. Цена, быстро вверх, на пяти барах стал пустой буфер. Цвет, на пяти барах стал зелёный. Не обязательно 5. Бывает разное количество баров. Как только эти буферы стали пустыми  нужен сигнал. Как его получить?

Igor Makanu:

наверное нужно контроль открытия нового бара сделать - или не копировать нулевой бар

Сделал пересчёт на новом баре, не копирую нулевой бар. Тот же принт на каждом баре, хотя цвет не измиеялся Линия постоянно движется, но значение в первом буфере не изменяется, либо нуль либо цена. Цена в буфере, когда линия красная.

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