Как рисовать экспертом ZigZag

 

Есть пользовательский индикатор ZigZag.mql4
Как отрисовывать советником его линии имея только буфер 0 ?

#resource "\\Indicators\\ZigZag.ex4" 
//---------------------------------+
extern int ZZperiod = 15;
//----------------------+
int i,SignalZZ=-1;
//---------------+
void start() 
{
    double fZZ=0;
    double lZZ=iCustom(Symbol(),0,"::Indicators\\ZigZag.ex4",ZZperiod,5,3,0,1);
    if(lZZ>0){ i=2; while(iCustom(Symbol(),0,"::Indicators\\ZigZag.ex4",ZZperiod,5,3,0,i)==0) i++;
    fZZ=iCustom(Symbol(),0,"::Indicators\\ZigZag.ex4",ZZperiod,5,3,0,i);}
        if(lZZ>fZZ) {SignalZZ=0;}  else if(lZZ<fZZ) SignalZZ=1;
}
 
Natalya Dzerzhinskaya:

Есть пользовательский индикатор ZigZag.mql4
Как отрисовывать советником его линии имея только буфер 0 ?


Вот, попробуйте.

#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int n=1;  //n - номер экстремума( 0 - последний) 
   int i,k=iBars(NULL,0), ke=0;
   double zz=0;

   for(i=0; i<k; i++) 
     {
      zz=iCustom(NULL, 0, "ZigZag",12, 5,3, 0, i);
      if(zz!=0) 
        {
         ke++;
         if(ke>n) break;
        }
     }
     Alert(" Бар№ ",i,"    Значение = ",zz);

  }
//+------------------------------------------------------------------+
 
Alekseu Fedotov:


Вот, попробуйте.


Спасибо, буду по экстремумам строить.
 
Natalya Dzerzhinskaya:

Есть пользовательский индикатор ZigZag.mql4
Как отрисовывать советником его линии имея только буфер 0 ?


Перебираем буфер и рисуем трендовые линии.

пс. у меня есть индикатор, который рисует ЗигЗаг линиями-объектами.

 
Taras Slobodyanik:


Перебираем буфер и рисуем трендовые линии.

пс. у меня есть индикатор, который рисует ЗигЗаг линиями-объектами.


Не совсем понятно как это организовать с перебором буферов. Можно пример?

ЗигЗаг этот как заполучить? :) 

 
Natalya Dzerzhinskaya:


Не совсем понятно как это организовать с перебором буферов. Можно пример?

ЗигЗаг этот как заполучить? :) 


Прежде всего, где вы видели ЗЗ с одним буфером? Классический - с тремя, многие другие - минимум тоже с тремя. 

В классическом, из поставки терминала - вершина в 2-м буфере, впадина в 3-м.

 
Vitalie Postolache:


Прежде всего, где вы видели ЗЗ с одним буфером? Классический - с тремя, многие другие - минимум тоже с тремя. 

В классическом, из поставки терминала - вершина в 2-м буфере, впадина в 3-м.

У меня с одним буфером, который можно вызвать из вне

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Gold
#property indicator_width1 2

//----------------------------+
int init() {
     IndicatorBuffers(6);
     SetIndexStyle (0,DRAW_SECTION,DRAW_LINE,EMPTY);
     SetIndexBuffer(0,zz);
     SetIndexEmptyValue(0,0.0); 
     SetIndexBuffer(1,ha);
     SetIndexBuffer(2,la);
     SetIndexStyle (3,DRAW_SECTION,2);  
     SetIndexBuffer(3,sa);
     SetIndexBuffer(4,fxH);
     SetIndexBuffer(5,fxL);
   
   if (chHL==false){
     SetIndexDrawBegin(1,2*Bars); 
     SetIndexDrawBegin(2,2*Bars); 
     SetIndexDrawBegin(3,2*Bars);
     } else {
     SetIndexDrawBegin(1,1); 
     SetIndexDrawBegin(2,1); 
     SetIndexDrawBegin(3,1);
     }  
   return(0); 
 }

int start()
{
// и т.д. //
}
 
Natalya Dzerzhinskaya:

У меня с одним буфером, который можно вызвать из вне

Ну так сделайте ещё два доступными. 
 
Vitalie Postolache:
Ну так сделайте ещё два доступными. 

Рисует то буфер 0 вроде, а их ещё 5 и как определить кого делать доступным

1 и 2 наверно?

 
Natalya Dzerzhinskaya:

Рисует то буфер 0 вроде, а их ещё 5 и как определить кого делать доступным


Есть ещё два промежуточных буфера, которые в классическом варианте назывались ExtHighBuffer[] и  ExtLowBuffer[], вот их надо на второе и третье места объявить, если они не там.

Подозреваю, что в вашем случае они уже там, под названиями ha[], la[]. Но раз уж код не показываете, то разбирайтесь самостоятельно, они ли это или нет. 

 
Vitalie Postolache:


Есть ещё два промежуточных буфера, которые в классическом варианте назывались ExtHighBuffer[] и  ExtLowBuffer[], вот их надо на второе и третье места в ините передвинуть, если они не там.

Подозреваю, что в вашем случае они уже там, под названиями ha[], la[]. Но раз уж код не показываете, то разбирайтесь самостоятельно, они ли это или нет. 


Возможно они. Я их сделаю доступными для вызова. А как в советнике с ними поступить чтобы рисовали?

Допустим:

double Ha=iCustom(Symbol(),0,"::Indicators\\ZigZag.ex4",ZZperiod,5,3, 1,1);
double La=iCustom(Symbol(),0,"::Indicators\\ZigZag.ex4",ZZperiod,5,3, 2,1);
Там же надо знать время 1 цена 1 и время 2 цена 2