Переделать Fractals.mq5 - страница 2

 

сделал.

там просто всё переписывалось на EMPTY_VALUE.

спасибо) 

 

помудрил чтоб лишние фракталы не рисовались (2 подряд поз. или нег.) – опять не рисуется. Что не так?

      if(high[i]>=high[i+1] && high[i]>high[i-1] ) // если фрактал
      { if(!pos || pos && high[i]>pos) // был нег. фрактал или поз. но новая вершина
         { ExtUpperBuffer[i]=high[i]; // новая вершина
           pos=high[i];
         } 
        else if(pos && high[i]<pos)  // был поз. фрактал но вершина ниже
             { for(int n=i; ;n++)
                {
                 if(ExtUpperBuffer[n]!=EMPTY_VALUE) // забываем ту вершину 
                  { ExtUpperBuffer[n]=EMPTY_VALUE; break;}
                }
               ExtUpperBuffer[i]=high[i];         // пишем новую
               pos=high[i];                       // запоминаем, что был поз. фрактал
             }
      }
Файлы:
frac.mq5  5 kb
 
100 раз прочёл код но не пойму что не так..
 

что это???

for(int n=i; ;i++)
 
o_O:

что это???

это while(1) {…; n++}
 
Roma:
это while(1) {…; n++}
а именно так и писать не?
 
o_O:
а именно так и писать не?

зачем мне писать

int n;
while(1)
{…; n++;}

 если есть

for(int n=i; ;i++)
 
Roma:

зачем мне писать

 если есть

затем что у вас и так в голове пока с кодингом мало что связано.

а так хотя бы к быдлокодингу не будете привыкать.

---

читайте мануалы с конкретными примерами DRAW_ZIGZAG

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_ZIGZAG
#property indicator_width1  1
#property indicator_color1  Gray
#property indicator_label1  "Fractal Up;Fractal Dn"

double ExtUpperBuffer[],ExtLowerBuffer[];
//------------------------------------------------------------------    
void OnInit()
  {
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
  }
//------------------------------------------------------------------    
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(rates_total<5) return(0);
   int limit;
   if(prev_calculated<7)
     {
      limit=2;
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(int i=limit; i<rates_total-3 && !IsStopped(); i++)
     {
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
   return rates_total;
  }
//+------------------------------------------------------------------+
 
o_O:

а так хотя бы к быдлокодингу не будете привыкать.

Значит написать более короткий но читабельный вариант это быдлокодинг?)

не понял к чему код, там нет фильтрации повторных поз. или нег. фракталов, которую я пытаюсь реализовать.

 
o_O:

затем что у вас и так в голове пока с кодингом мало что связано.

а так хотя бы к быдлокодингу не будете привыкать.

...

Не надо ля-ля. for с нестандартными параметрами - это и есть тру кодинг;)
Причина обращения: