Посмотрите, пожалуйста, индикатор

 

Наткнулся на интересное поведение индикатора... (МТ 225)

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Yellow
#property indicator_color2 Yellow
#property indicator_color3 White
#property indicator_color4 Yellow
#property indicator_color5 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,ExtMapBuffer5);
//----
return(0);
}
//+------------------------------------------------------------------+
extern int PERIOD = 14;

extern string _m0 = "0 sma 1 ema 2 smma 3 lwma";
extern int METHOD = MODE_SMA;

extern string _p0 = "0 close 1 open 2 high 3 low";
extern string _p1 = "4 median 5 typical 6 weighted";
extern int PRICE = PRICE_HIGH;

int start()
{
    int counted_bars = IndicatorCounted();

    for(int i = 0; i < Bars; i++)
    {
        double dev = iStdDev(NULL, 0, PERIOD, 0, METHOD, PRICE, i);
        double sma = iMA(NULL, 0, PERIOD, 0, METHOD, PRICE, i);
        ExtMapBuffer3[i] = ((Close[i] - sma) / dev) * 100;
    }
    
    i = 0;
    for(i = 0; i < Bars; i++)
    {
        ExtMapBuffer3[i] = 0; // <-- обнуление не отрабатывает
    }

    return(0);
}
//+------------------------------------------------------------------+

Но достаточно заменить строку 

ExtMapBuffer3[i] = ((Close[i] - sma) / dev) * 100;

На что-нибудь попроще, например,

ExtMapBuffer3[i] = Close[i];
Как в буфере индикатора появляются нули...

.

Врядли чтобы это могло бы быть ошибкой :-), скорее похоже, что Метатрейдер умеет понимать,

что когда вычисления очень сложные, то полученная информация слишком важна, чтобы быть потерянной...

 
jartmailru >>:

Наткнулся на интересное поведение индикатора... (МТ 225)

Но достаточно заменить строку

На что-нибудь попроще, например,

Как в буфере индикатора появляются нули...

.

Врядли чтобы это могло бы быть ошибкой :-), скорее похоже, что Метатрейдер умеет понимать,

что когда вычисления очень сложные, то полученная информация слишком важна, чтобы быть потерянной...

Компилятор с ИИ?)

Код выполняется до первого zero divide.

        if(dev!=0.0) ExtMapBuffer3[i] = ((Close[i] - sma) / dev) * 100;      
 

Угу. Стандартная ситуация. Всегда в таких случаях использую "если не равно 0", то делить.

Посмотрите, как это сделано в Стохастике, RSI и пр. в поставке МТ. Именно так.

 
Ваша правда. Спасибо за ответы!
Причина обращения: