Помогите разобраться с массивами!

 

Уважаемые коллеги!

Извините, я новичок в MQL.

Вот пример скрипта:

#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

double ExtMapBuffer[]; 
double UpFract, DnFract, UpFract_0, DnFract_0;

//------------------------
int start() 
{ 
int i=0;
      while(i<Bars)
        {
         UpFract=iFractals(NULL,0,MODE_UPPER,i);
         DnFract=iFractals(NULL,0,MODE_LOWER,i);
         if(UpFract>0)
            { 
             UpFract_0=UpFract;
             int UpBar=i;
            }
         if(DnFract>0)
            { 
             DnFract_0=DnFract;
             int DnBar=i;
            }
         ExtMapBuffer[i]=(UpFract_0-DnFract_0)/2;
         Print(" ExtMapBuffer[",i,"] =   ",ExtMapBuffer[i]);
         i++;
        }
      
return(0); 
} 
//+------------------------------------------------------------------+ 

При печати выводятся нули. Если вместо ExtMapBuffer[i] в операторе Print подставляю формулу (UpFract_0-DnFract_0)/2, то все работает.

Почему так происходит? Что я не знаю или что делаю не так? Подскажите, если можете.

Заранее благодарен за ответ.

 
Heart >>:

При печати выводятся нули. Если вместо ExtMapBuffer[i] в операторе Print подставляю формулу (UpFract_0-DnFract_0)/2, то все работает.

Почему так происходит? Что я не знаю или что делаю не так? Подскажите, если можете.

Заранее благодарен за ответ.

double ExtMapBuffer[99999];

а где у вас инициилизируется массив?

 
xeon писал(а) >>

а где у вас инициилизируется массив?

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

Как понять, где это нужно делать обязательно, а где нет?

 
Heart >>:

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

Как понять, где это нужно делать обязательно, а где нет?


в индикаторе в случае использования индикаторного буфера не нужно:

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Silver
#property  indicator_color2  Red
#property  indicator_width1  2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,SignalSMA);
   IndicatorDigits(Digits+1);
//---- indicator buffers mapping
   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
//---- initialization done
   return(0);
  }

в других случаях нужно

 
xeon писал(а) >>

в индикаторе в случае использования индикаторного буфера не нужно:

в других случаях нужно

Спасибо!

Причина обращения: