Узнать бар стрелки индикатора

 

Как узнать бар или время стрелки индикатора в советнике?

//+------------------------------------------------------------------+
//|  Индикатор                                                       |
//-------------------------------------------------------------------+
double Ind(int buff, int bar) { 
   double ind=iCustom(Symbol(),0,"Indicator", Period1,Period2,Period3, buff,bar);
return(ind);}


//ПРИМЕР
   for(j=limit; j>=0; j--)
    { 
      Buy[j]=Ind(0,j);
      if(Buy[j+1]!=EMPTY_VALUE) t=Time[j+1];
         BarBuy=iBarShift(Symbol(),0,t,true); 
    }
//Это я вижу предыдущий бар а требуется N-баров назад найти
 
forex2030:

Как узнать бар или время стрелки индикатора в советнике?

На баре нет стрелки = EMPTY_VALUE


А почему бы не перебирать бары справа налево? Если я правильно понял, то требуется найти наиболее позднюю стрелку.

Также непонятно, почему результат записывается в элемент массива j, а значение проверяется в предыдущей ячейке массива?

Ну и самое главное - зачем нужен вызов iBarShift, если изначально уже имеется индекс бара?

 
Ihor Herasko:

А почему бы не перебирать бары справа налево? Если я правильно понял, то требуется найти наиболее позднюю стрелку.

Пробовал и так for(j=0; j<limit; j++)
Да, требуется найти самую последнюю стрелку

Ihor Herasko:

Также непонятно, почему результат записывается в элемент массива j, а значение проверяется в предыдущей ячейке массива?

Сложно с массивами, плохо понимаю их))

Ihor Herasko:

Ну и самое главное - зачем нужен вызов iBarShift, если изначально уже имеется индекс бара?

Ну вообще требуется кол-во баров знать от текущего до стрелки

 

Если долго мучиться что-нибудь получится))

Нашёл время последнего сигнала стрелки!!

   datetime t=0;
   double arrow=EMPTY_VALUE;
   int i=1;
   while(arrow==EMPTY_VALUE)
     {
      arrow=Ind(0,i);
      i++;
     }
     i--;
   
   t=Time[i];
 
forex2030:

Если долго мучиться что-нибудь получится))

Нашёл время последнего сигнала стрелки!!

Посмотрите это:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}
 
Alekseu Fedotov:

Посмотрите это:

Зачем мне поиск фрактала?

Есть теперь компактное и эффективное решение, верный поиск ближайшего сигнала пользовательского индикатора.

//+------------------------------------------------------------------+
//|  Индикатор                                                       |
//-------------------------------------------------------------------+
double Ind(int buff, int bar) { 
   double ind=iCustom(Symbol(),0,"Indicator", Period1,Period2,Period3, buff,bar);
return(ind);}
//+------------------------------------------------------------------+
//| Поиск ближайшего бара сигнала стрелки индикатора                 |
//+------------------------------------------------------------------+
int BarSignalIndicator(int buff) {
   double arrow=EMPTY_VALUE;
   int bar=1;

   while(arrow==EMPTY_VALUE)
     {
      arrow=Ind(buff,bar);
      bar++;
     }
   bar--;
return(bar);}
 
forex2030:

Зачем мне поиск фрактала?

Есть теперь компактное и эффективное решение, верный поиск ближайшего сигнала пользовательского индикатора.

Только его нужно допилить. Например, что будет, если дошли до конца истории, а стрелка так и не найдена? В примере с фракталами это учтено.

 
forex2030:

Как узнать бар или время стрелки индикатора в советнике?


forex2030:

Как узнать бар или время стрелки индикатора в советнике?


BarBuy+N

 
Ihor Herasko:

Только его нужно допилить. Например, что будет, если дошли до конца истории, а стрелка так и не найдена? В примере с фракталами это учтено.

Что имеется ввиду?
Можно пальцем тыкнуть?))

 
forex2030:

Что имеется ввиду?
Можно пальцем тыкнуть?))

 for (i=2; i<k; i++)

А в Вашем подходе:

while(arrow==EMPTY_VALUE)

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