Получение данных из Zigzg'a

 

Многоуважаемые мастера помогите на основе этого не стандартного зигзага (неперерисовывающегося зигзага) получить значения цены Price_max1 и Price_min1

Я хочу получить код программы который я допишу, оперируя только этими двумя значениями цен.

Но я не знаю как их получить, а знаний разобраться нехватает.

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

Отчет конечно же выложу. Поэтому помогите кто чем может для создания.

Отчет конечно же выложу.

Надеюсь все подробно объяснил! Помогите пожалуйста с этим. Над стратегией работал очень долго.

PS хорошие дела как энергия, просто так никуда не уходят, а накапливаются.




вот код зигзага


На рисуке 1 - показаны значения цены которые я должен получить.

На рисунке 2 - то чего я хочу получить програмиста.

//+------------------------------------------------------------------+
//|                                         High_Low v2 (ZigZag).mq4 |
//|                                          rewritten by CrazyChart |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "rewritten by CrazyChart"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
//---- input parameters
extern int       barn=300;
extern int       Length=6;
//---- buffers
double ExtMapBuffer1[];
//double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexEmptyValue(0,0.0);
  //SetIndexDrawBegin(0, barn);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int shift,Swing,Swing_n,uzl,i,zu,zd,mv;
   double LL,HH,BH,BL,NH,NL; 
   double Uzel[10000][3]; 
   string text;
// loop from first bar to current bar (with shift=0) 
      Swing_n=0;Swing=0;uzl=0; 
      BH =High[barn];BL=Low[barn];zu=barn;zd=barn; 

for (shift=barn;shift>=0;shift--) { 
      LL=10000000;HH=-100000000; 
   for (i=shift+Length;i>=shift+1;i--) { 
         if (Low[i]< LL) {LL=Low[i];}; 
         if (High[i]>HH) {HH=High[i];}; 
   }; 


   if (Low[shift]<LL && High[shift]>HH){ 
      Swing=2; 
      if (Swing_n==1) {zu=shift+1;}; 
      if (Swing_n==-1) {zd=shift+1;}; 
   } else { 
      if (Low[shift]<LL) {Swing=-1;}; 
      if (High[shift]>HH) {Swing=1;}; 
   }; 

   if (Swing!=Swing_n && Swing_n!=0) { 
   if (Swing==2) {
      Swing=-Swing_n;BH = High[shift];BL = Low[shift]; 
   }; 
      uzl=uzl+1; 
   if (Swing==1) {
      Uzel[uzl][1]=zd;
      Uzel[uzl][2]=BL;
   }; 
   if (Swing==-1) {
      Uzel[uzl][1]=zu;
      Uzel[uzl][2]=BH; 
   }; 
      BH = High[shift];
      BL = Low[shift]; 
   }; 

   if (Swing==1) { 
      if (High[shift]>=BH) {BH=High[shift];zu=shift;};}; 
      if (Swing==-1) {
          if (Low[shift]<=BL) {BL=Low[shift]; zd=shift;};}; 
      Swing_n=Swing; 
   }; 
   for (i=1;i<=uzl;i++) { 
      //text=DoubleToStr(Uzel[i][1],0);
      //text=;
         mv=StrToInteger(DoubleToStr(Uzel[i][1],0));
      ExtMapBuffer1[mv]=Uzel[i][2];
   }; 





   return(0);
  }
//+------------------------------------------------------------------+
а так же прикреплю


Price

Файлы:
 
там вроде то что нужно, а вроде и не то
 

При беглом просмотре/тестировании ZigZag и впрямь не видно, чтобы перересовывался, что очень хорошо. Вот только зачем там столько точек с запятой лишних наставлено??? Непонятно...

 

seifer писал (а):

При беглом просмотре/тестировании ZigZag и впрямь не видно, чтобы перересовывался, что очень хорошо. Вот только зачем там столько точек с запятой лишних наставлено??? Непонятно...

Каких точек с запятой?

В коде программы? Тут я бессилен ответить на этот вопрос.

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

Но если начать анализировать уже отрисованную историю - то иногда могут случиться два минимума или два максимума. Редко но могут! Так же очень редко некоторые линии могут зависнуть в воздухе (обычно бывает с внутренними днями). А во всем остальном индикатор хорош!

seifer:

При беглом просмотре/тестировании ZigZag и впрямь не видно, чтобы перересовывался, что очень хорошо. Вот только зачем там столько точек с запятой лишних наставлено??? Непонятно...

ты про какой Зигзаг ? На котоорый у тебя ссылка, или который я выложил?
 

Во-первых: ссылки здесь на форуме возникают автоматически на некоторые самые "добитые слова" типа грааль, ZigZag, торговые операции и прочее ( и ZigZag я имел ввиду именно твой).

Во-вторых: (из конструктивного), могу поделиться с тобой функцией любезно предоставленной мнеTalex-ом ( у Ким Игоря aka KimIV тоже где-то есть похожая). Вставляешь этот код в эксперт в start().

//-------------------------------------------------------------------+
// Функция Zigzag получает и заносит в массив данные 2-х последних   +
// вершин Зигзага                                                    +
//-------------------------------------------------------------------+
  int i,j;
  double zz;
  
  for(i=0,j=0;i<Bars && j<2;i++)
  {
    zz=iCustom(NULL,0,"High_Lowiv2i_ZigZag_",barn,Length,0,i);
    if(zz!=0)
    {
      zzbar[j]=i;
      zzp[j]=zz;
      j++;
    }
  }

Предварительно в исходные данные вставляеш:

extern int       barn=300;
extern int       Length=6;
 

спасибо!

скоро пойму что это и в какое место советника вставлять)

 
Точнее большое спасибо!
 

На самом деле всё не так уж просто (по крайней мере для непрофессионального программиста). Плохо то, что в этом индюке всего один буфер и в нём и High-переломы и Low-переломы вместе, поэтому возникнут проблемы в дальнейшем в экспрете с определением где High, а где Low. Самое простое - сравнивать эти два значения: что больше - то и High, но на практике это не всегда так. Если вам не нужно заганять значения в буфер, то можете поступить так :

  int i,j,i2,j2;
  double zz,zz2;
  
  for(i=0,j=0;i<Bars && j<1;i++)
  {
    zz=iCustom(NULL,0,"High_Lowiv2i_ZigZag_",barn,Length,0,i);
    if(zz!=0)
    {
      int Y=i;
      double Peak=zz;
      j++;
    }
  }
  
  for(i2=0,j2=0;i2<Bars && j2<2;i2++)
  {
    zz2=iCustom(NULL,0,"High_Lowiv2i_ZigZag_",barn,Length,0,i2);
    if(zz2!=0)
    {
      int Y2=i2;
      double PreviuosPeak=zz2;
      j2++;
    }
  }  
  // Получили Peak - возвращает цену последнего пика,PreviuosPeak - цену предпоследнего

Еще важно чтобы имя индюка было точно таким как задано в iCustom().

P.S. Если не секрет не опишите как вы его планируете использовать? Сам когда-то очень интерисовался зигзагами но, как-то последнее время отошел от этой темы (уж слишком много среди них перерисовывающихся - а в живой торговле это гибель любой ТС).

 
Ах да! Ещё посоветую вам глянуть ZUP (если вы его еще не смотрели).
 
Не могли бы вы подсказать как получить значения цен экстремумов стандартного Zigzag.mq4 2007 за заданный период истории в текстовый файл?