Как вывести в файл цены критичных точек?

 

Здравствуйте!

Хочу, но не могу вывести в файл цены критичных точек, / где ломается кривая / в ZIGZAGe,

что бы просмотреть их в EXCEL . Код я взял из Code Base.

Eсли кто может помогите, совсем закопался Заранее благодарен

//+------------------------------------------------------------------+
//|                                                   Zigzag2_R_.mq4 |
//|                 Copyright © 2005-2007, MetaQuotes Software Corp. |
//|                                       https://www.metaquotes.net// |
//+------------------------------------------------------------------
int start()
  {
   int i, counted_bars = IndicatorCounted();
   int limit, counterZ, whatlookfor;
   int shift, back, lasthighpos, lastlowpos;
   double val, res;
   double curlow, curhigh, lasthigh, lastlow;
// history was downloaded
   if(counted_bars == 0 && downloadhistory) 
     {
       ArrayInitialize(ZigzagPeakBuffer, 0.0);
       ArrayInitialize(ZigzagLawnBuffer, 0.0);
       ArrayInitialize(HighMapBuffer, 0.0);
       ArrayInitialize(LowMapBuffer, 0.0);
     }
//----
   if(counted_bars == 0) 
     {
       limit = Bars - ExtDepth;
       downloadhistory = true;
     }
//----
   if(counted_bars > 0) 
     {
       //----
       while(counterZ < 3 && i < 100)
         {
           res = (ZigzagPeakBuffer[i] + ZigzagLawnBuffer[i]);
           //----
           if(res != 0) 
               counterZ++;
           i++;
         }
       i--;
       limit = i;
       //----
       if(LowMapBuffer[i] != 0) 
         {
           curlow = LowMapBuffer[i];
           whatlookfor = 1;
         }
       else
         {
           curhigh = HighMapBuffer[i];
           whatlookfor = -1;
         }
       //----
       for(i = limit - 1; i >= 0; i--)  
         {
           ZigzagPeakBuffer[i] = 0.0;  
           ZigzagLawnBuffer[i] = 0.0;  
           LowMapBuffer[i] = 0.0;
           HighMapBuffer[i] = 0.0;
         }
     } 
//---
  
       //----
       if(Low[shift] == val) 
           LowMapBuffer[shift] = val; 
       else 
           LowMapBuffer[shift] = 0.0;
       //--- high
       val = High[iHighest(NULL, 0, MODE_HIGH, ExtDepth, shift)];
       //----
       if(val == lasthigh) 
           val = 0.0;
       else 
         {
           lasthigh = val;
           //----
           if((val - High[shift]) > (ExtDeviation*Point)) 
               val = 0.0;
           else
             {
               //----
               for(back = 1; back <= ExtBackstep; back++)
                 {
                   res = HighMapBuffer[shift+back];
                   //----
                   if((res != 0) && (res < val)) 
                       HighMapBuffer[shift+back] = 0.0; 
                 } 
             }
         }
       //----
       if(High[shift] == val) 
           HighMapBuffer[shift] = val; 
       else 
           HighMapBuffer[shift] = 0.0;
     }
// final cutting 
   if(whatlookfor == 0)
     {
       lastlow = 0;
       lasthigh = 0;  
     }
   else
     {
       lastlow = curlow;
       lasthigh = curhigh;
     }
//----
   for(shift = limit; shift >= 0; shift--)
     {
       res = 0.0;
       switch(whatlookfor)
         {
           // look for peak or lawn 
           case 0: if(lastlow == 0 && lasthigh == 0)
                     {
                       if(HighMapBuffer[shift] != 0)
                         {
                           lasthigh = High[shift];
                           lasthighpos = shift;
                           whatlookfor = -1;
                           ZigzagPeakBuffer[shift] = lasthigh;
                           res = 1;
                         }
                       if(LowMapBuffer[shift] != 0)
                         {
                           lastlow = Low[shift];
                           lastlowpos = shift;
                           whatlookfor = 1;
                           ZigzagLawnBuffer[shift] = lastlow;
                           res = 1;
                         }
                     }
                   break;  
           // look for peak
           case 1: if(LowMapBuffer[shift] != 0.0 && LowMapBuffer[shift] < lastlow &&
                      HighMapBuffer[shift] == 0.0)
                     {
                       ZigzagLawnBuffer[lastlowpos] = 0.0;
                       lastlowpos = shift;
                       lastlow = LowMapBuffer[shift];
                       ZigzagLawnBuffer[shift] = lastlow;
                       res = 1;
                     }
                   if(HighMapBuffer[shift] != 0.0 && LowMapBuffer[shift] == 0.0)
                     {
                       lasthigh = HighMapBuffer[shift];
                       lasthighpos = shift;
                       ZigzagPeakBuffer[shift] = lasthigh;
                       whatlookfor = -1;
                       res = 1;
                     }   
                   break;               
           // look for lawn
           case -1:  if(HighMapBuffer[shift] != 0.0 && 
                        HighMapBuffer[shift] > lasthigh && 
                        LowMapBuffer[shift] == 0.0)
                       {
                         ZigzagPeakBuffer[lasthighpos] = 0.0;
                         lasthighpos = shift;
                         lasthigh = HighMapBuffer[shift];
                         ZigzagPeakBuffer[shift] = lasthigh;
                       }
                     if(LowMapBuffer[shift] != 0.0 && HighMapBuffer[shift] == 0.0)
                       {
                         lastlow = LowMapBuffer[shift];
                         lastlowpos = shift;
                         ZigzagLawnBuffer[shift] = lastlow;
                         whatlookfor = 1;
                       }   
                     break;               
           default: return; 
         }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Да, хороший вопрос, как найти два последних сформивавшихся экстремума в зигзаге.
Т.е. найти где были эти экстремумы и  цены на них
 

распечатайте массивы

double ZigzagPeakBuffer[];
double ZigzagLawnBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];


и посмотрите, что там лежит.

 
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - пички |
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - донышки

index чему равно?
 
Надо перебирать от 1 до Bars-1.
Поиск по ключевым словам "как найти 2 последних фрактала" должен помочь.
 
komposter писал (а):
Надо перебирать от 1 до Bars-1.
Поиск по ключевым словам "как найти 2 последних фрактала" должен помочь.

     Это понятно, какое условие прекращения выполнения цыкла
 
ram25:

Это понятно, какое условие прекращения выполнения цыкла
Поиском, значит, брезгуем....
Условие - найдены 2 значения ;)
 
ram25:
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - пички |
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - донышки

index чему равно?


Оказывается, там была опечатка, правильно так:

iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - пички           |
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 1, index) - донышки         |

index - это номер бара, на котором проверяем наличие перелома (пичок или донышко).
 
Народ, помогите начмнающему, плз. Нужно чтобы после открытия позиции советник следил за значением индикатора, допустим МА. Если значение с каждым баром не увеличивается, то ждём роста, пережидаем рост и закрываемся. Заранее благодарен.
 
И ещё одна проблемка. Советник тестируется нормально, но к графику не прикрепляется. Может чего забыл дописать?
 
Rosh писал (а):
ram25 писал (а):
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - пички |
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - донышки

index чему равно?


Оказывается, там была опечатка, правильно так:

iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 0, index) - пички           |
iCustom(NULL, 0, "Zigzag2_R_", 12, 5, 3, 1, index) - донышки         |

index - это номер бара, на котором проверяем наличие перелома (пичок или донышко).

Это понятно, буфера то два.
  У себя это исправил сразу,
Причина обращения: