Кто шарит MQL нужен совет!!!

 

Как получить значение скользящей средней для предыдущих 50 свечей.

Таким способом

ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE);

double   ma[1];

CopyBuffer(ExtHandle,0,0,1,ma)

в ma[0] я получаю только текущую. Если поменять 1 на 50, говорит что там нет данных.

 
Nykyta Yevdokymenko:

Как получить значение скользящей средней для предыдущих 50 свечей.

Таким способом

в ma[0] я получаю только текущую. Если поменять 1 на 50, говорит что там нет данных.

double ma[];

CopyBuffer(ExtHandle,0,0,50,ma);
ma[0] - 50я свеча
ma[49] - текущая свеча

 
CopyBuffer(ExtHandle,0,0,50,ma)
 
Nykyta Yevdokymenko:

Как получить значение скользящей средней для предыдущих 50 свечей.

Таким способом

в ma[0] я получаю только текущую. Если поменять 1 на 50, говорит что там нет данных.

1. Хендл индикатора нужно получать и проверять в OnInit(), у Вас же похоже на каждом тике пытаетесь получить хендл. 

2. Пример универсальной функции в коде Trend Separate signals

//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
double iGetArray(const int handle,const int buffer,const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code 
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
   return(result);
  }

Объявили массивы (динамические), заказали по 6 элементов, развернули массивы (теперь в массивах элемент [0] соответствует правому бару на графике)

//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   double ma_buy[],ma_sell[],fractals_up[],fractals_down[];
   ArraySetAsSeries(ma_buy,true);
   ArraySetAsSeries(ma_sell,true);
   ArraySetAsSeries(fractals_up,true);
   ArraySetAsSeries(fractals_down,true);
   int start_pos=0,count=6;
   if(!iGetArray(handle_iMA_Buy,0,start_pos,count,ma_buy) || 
      !iGetArray(handle_iMA_Sell,0,start_pos,count,ma_sell) || 
      !iGetArray(handle_iFractals,UPPER_LINE,start_pos,count,fractals_up) || 
      !iGetArray(handle_iFractals,LOWER_LINE,start_pos,count,fractals_down))
     {
      return(false);
     }
Причина обращения: