Необходимо в функцию Start вставить счетчик, чтобы индикатор считал назад?

 

Здравствуйте! Может, кто-нибудь сможет мне помочь?

Есть типа индикатор (упрощенный код ниже) - считает только вперед - например, в режиме визуального тестирования можно посмотреть показания, т.е. с нулевого бара. Необходимо в функцию Start вставить счетчик, чтобы индикатор считал назад и выглядел как обычный индикатор на графике. Чего я только не перепробовал. Либо терминал виснет, либо ничего не показывает. Функция ZZBar возвращает в данном случае количество баров от экстремумов зигзага (можно вставить, разумеется, другой зигзаг, некритично). Вот и нужно эту функцию наложить на историю.

Буду очень признателен за содействие. Спасибо!

Кстати, функция, возвращающая экстремум, написана уважаемым KimIV'ом, за что ему отдельное спасибо!

#property indicator_separate_window 
#property indicator_buffers 1
#property indicator_color1 Red
 
 
//---- input parameters
 
//---- buffers
double Buffer1[];
 
//----
//+------------------------------------------------------------------+
//| Init                                                             |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(1);
 
//---- indicators
    string short_name;
    IndicatorShortName(short_name);
    SetIndexStyle(0,DRAW_HISTOGRAM); 
    SetIndexBuffer(0,Buffer1);
 
//----
    return(0);
}
 
//+------------------------------------------------------------------+
//| Start Function                                                   |
//+------------------------------------------------------------------+
int start()
   {
   int i;
   int counted_bars=IndicatorCounted();
 
//---- check for possible errors
   if(counted_bars<0) 
   {
      return(-1);
   }
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
//---- do it
 
 
        int Bar0=ZZBar("",0, 1,6000,12);
        int Bar1=ZZBar("",0, 2,6000,12);   
        Buffer1[1]=Close[Bar1]-Close[Bar0];
 
//----
   return(0);
  }
 
int ZZBar(string sym="", int tf=0, int ne=1, int dp=600, int dv=12) {
  if (sym=="") sym=Symbol();
  double zz;
  int    i, k=iBars(NULL, 0), ke=0;
 
  for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "ZigZag_new_1", dp, dv, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) 
      return(i);
    }
    }
return(0);
}
 
ZigZag_new_1

ZigZag_new_1 Где ?

 

Там любой другой зигзаг можно вставить! :)

ne - номер экстремума влево.

dp и dv - переменные можно отбросить и взять значения зигзага по умолчанию.

либо взять файл в приложении.

Файлы:
 

Функция ZZBar не может работать с прошлым, потому, что она не может определить никакой экстремум.

Она может определить только номер указаного в параметре "ке" бара если он посчитан, а следуюший за ним бар (вправо) не посчитан (те нет значения зиг-зага и "ке" равно 0) или имеет другой параметр "ке".

В такой ситуации такой бар и будет "экстремумом". Так как индикатор не пересчитывается весь, его история не удаляется а остается на графике. С появлением нового зигзага ситуация повторяется. Правда это все будет так пока вы сами не заставите пересчитатся ваш индик, например переключив ТФ.

 
D500_Rised:

Функция ZZBar не может работать с прошлым, потому, что она не может определить никакой экстремум.

Она может определить только номер указаного в параметре "ке" бара если он посчитан, а следуюший за ним бар (вправо) не посчитан (те нет значения зиг-зага и "ке" равно 0) или имеет другой параметр "ке".

В такой ситуации такой бар и будет "экстремумом". Так как индикатор не пересчитывается весь, его история не удаляется а остается на графике. С появлением нового зигзага ситуация повторяется. Правда это все будет так пока вы сами не заставите пересчитатся ваш индик, например переключив ТФ.



Уважаемый D500_Rised, я Вам очень признателен за содействие!

Жаль, что вышеуказанная функция не справляется с поставленной задачей. Но прилагаю индикатор дивергенции, который считает экстремумы OSMa. Насколько реально (и, я думаю, это было бы полезно для всех, если вдуматься) создать доступный для понимания шаблон для подсчета различных экстремумов других индикаторов (зигзага, например)? Т.е. упростить прилагаемый индикатор, универсализировать его для других целей. Моих скромных познаний для этого не хватает, к сожалению.

Как Вы считаете?

Файлы:
 

Создать код который будет определять экстремумы индикатора или цены в принципе возможно.

Но к сожалению, по ряду причин, я за это дело не могу взяться, потому что мне не понятна его ценность, для чего нужен такой индикатор.

Ну и код не самый простой, и результат расчета такого индикатора будет редко однозначным.

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