Не важное ... непонятка с iMA

 

Почему такое считается при любом периоде:

Volatility[i]=(iMA(NULL,0,VolatilityPeriod,0,MODE_LWMA,PRICE_HIGH,i)-iMA(NULL,0,VolatilityPeriod,0,MODE_LWMA,PRICE_LOW,i))/Point; // Волатильность

Если разделить её на 3 составляющие, тоже всё нормально:

AverageHigh=iMA(NULL,0,VolatilityPeriod,0,MODE_LWMA,PRICE_HIGH,i);
AverageLow=iMA(NULL,0,VolatilityPeriod,0,MODE_LWMA,PRICE_LOW,i);
Volatility[i]=(AverageHigh-AverageLow)*Point;

Но если я захочу поделить:

AverageHigh=iMA(NULL,0,ResultPeriod,0,MODE_LWMA,PRICE_HIGH,i);
AverageLow=iMA(NULL,0,ResultPeriod,0,MODE_LWMA,PRICE_LOW,i);
Result[i]=AverageHigh/AverageLow;
- то при ResultPeriod больше 1 происходит полная х... Непонятно.

Файлы:
 

Может так надо 

//+------------------------------------------------------------------+
//|                                                  Бла-бла-бла.mq4 |
//+------------------------------------------------------------------+
#property indicator_separate_window  // Индикатор рисуется в отдельном окне
#property indicator_buffers 1        // Количество буферов линий
#property indicator_color1 Gold      // Цвет линии
//--------------------------------------------------------------------
extern int IndPeriod=5;  // Количество баров для расчёта
//--------------------------------------------------------------------
double Volatility[];  // Индикаторный буфер
//--------------------------------------------------------------------
int init()
  {
//--------------------------------------------------------------------
   SetIndexBuffer(0,Volatility);               // Назначение буфера массиву линии
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);  // Стиль линии
//--------------------------------------------------------------------
   return;
  }
//--------------------------------------------------------------------
int start()
  {
   int Counted_bars,  // Количество неизменённых баров
       i;             // Индекс бара для расчёта линии
   double AverageHigh, AverageLow;
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted();
   i=Bars-Counted_bars-1;  // Индекс первого непосчитанного
   while (i>=0)            // Цикл по непосчитанным барам при запуске
     {
      AverageHigh=iMA(NULL,0,IndPeriod,0,MODE_LWMA,PRICE_HIGH,i);
      AverageLow=iMA(NULL,0,IndPeriod,0,MODE_LWMA,PRICE_LOW,i);
      Volatility[i]=(AverageHigh-AverageLow)/Point;
      i--;                 // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return;
  }
//--------------------------------------------------------------------
 
Или Вы хотите делить именно?
 

Да.

Меня не волатильность интересует, мне просто интересно узнать почему нельзя поделить одну iMA на другую.

Это простое любопытство. Не забивайте голову ;-)

 

Делить на 0 низзя.

if(AverageLow!=0.0) Result[i]=AverageHigh/AverageLow;
else Result[i]=0.0;

как-то так)

 

Да, действительно просто. Как это сам не додумался.

Большое спасибо.