Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ищешь единомышленников? На форуме их много!
akadex
93
akadex 2012.05.14 21:33 

Добрый вечер!

Решил реализовать одну задумку и возникла проблема следующего характера.
В первом цикле должно пересчитываться несколько последних баров, а вот во втором весь буфер, притом корректно.
Проблема при поступлении новых данных. Буду признателен за помощь.
Ниже прилагаю код с указанной проблемой:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LightSkyBlue

//--- input parameters
extern int       BoxSize=50;

//---- buffers
int indBars; // храним значение Bars
double MainLine[],MainLine1[],MainLine2[];
double BoxSize_Point;
double Signal[];
int count=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(3);
   IndicatorDigits (4);
   
  
//---- indicators

   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MainLine1);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,MainLine);
   SetIndexEmptyValue(1,0.0);
   SetIndexBuffer(2,MainLine2);
   SetIndexEmptyValue(2,0.0);

          
   BoxSize_Point=BoxSize*Point;
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if (count==0) count=Bars;
   double delta;

   int counted_bars=IndicatorCounted();
   int limit,i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(limit==Bars) limit=Bars-2;
   
         
   // Первый цикл
   for(i = limit; i >= 0; i--)
     {

   if(MainLine[i+1]==0.) MainLine[i+1]=Close[i+1];
        delta=Close[i]-MainLine[i+1];
        MainLine[i]=MainLine[i+1];
   if(delta>BoxSize_Point) MainLine[i]=MainLine[i+1]+BoxSize_Point;
        if(delta<-BoxSize_Point) MainLine[i]=MainLine[i+1]-BoxSize_Point;       
   if (MainLine[i]!=MainLine[i+1]) { MainLine2[count]=MainLine[i]; count--;}
}
   // Второй цикл
   for(i = Bars+1; i >= 0; i--)

     {
     MainLine1[i]=MainLine2[i+count];
     }

//----
   return(0);
  }
Uladzimir Izerski
2436
Uladzimir Izerski 2012.05.28 09:49  

for(i = Bars; i >= 0; i--)

Bars+1
Victor Nikolaev
Модератор
14037
Victor Nikolaev 2012.05.28 09:51  
ULAD:

for(i = Bars; i >= 0; i--)

Bars+1

Bars-1
Uladzimir Izerski
2436
Uladzimir Izerski 2012.05.29 04:29  
Vinin:

Bars-1


В самом коде у него так

// Второй цикл
for(i = Bars+1; i >= 0; i--)

+1 это ошибка конечно отметил красным.

"...во втором весь буфер" -1 возможно не нужна.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий