Скачать MetaTrader 5

Уважаемые разработчики! Похоже на баг...

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Code Base поможет в усвоении теоретических знаний. Заходи и изучай!
Сергей
534
Сергей 2010.12.01 16:58 

Вот код простого индикатора для пробы:

//indProba7.mq5
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1

#property indicator_type1 DRAW_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
#property indicator_color1 Red
#property indicator_label1 "Proba"

input int _intPeriod=15;
input ENUM_MA_METHOD _enumMA=MODE_LWMA;
input ENUM_APPLIED_PRICE _enumPrice=PRICE_CLOSE;

double _adblArray[];
int _intHandle_iMA;
//-------------------------------------------------------------------------------------------------
int OnInit() {
    SetIndexBuffer(0,_adblArray,INDICATOR_DATA);
    ArraySetAsSeries(_adblArray,true);
    PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
    IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
    ArrayInitialize(_adblArray,0.0);
    
    _intHandle_iMA=iMA(_Symbol,_Period,_intPeriod,0,_enumMA,_enumPrice);
    
    Print("OnInit");    
    
    return(0);
}
//-------------------------------------------------------------------------------------------------
int OnCalculate (const int rates_total,const int prev_calculated,const datetime& time[],
    const double& open[],const double& high[],const double& low[],const double& close[],
    const long& tick_volume[],const long& volume[],const int& spread[]) {

    int intBarsForCalc;

    if(prev_calculated > rates_total || prev_calculated <= 0) {
        intBarsForCalc = rates_total - _intPeriod;
    
        Print("prevCalc= "+prev_calculated);
    }    
    else {
        intBarsForCalc = rates_total - prev_calculated + 1;
    }        

    CopyBuffer(_intHandle_iMA,0,0,intBarsForCalc,_adblArray);
    return(rates_total);
}
//-------------------------------------------------------------------------------------------------


Если вызвать диалог свойств этого индикатора и нажать кнопку ОК не изменяя Входных параметров, то иногда, но часто происходит следующее:


OnInit отрабатывается - печатается "OnInit"

OnCalculate тоже отрабатывается, но prev_calculated не обнуляется, а остается прежним. (Это видно по печати Print("prevCalc= "+prev_calculated))

Поэтому график индикатора исчезает и начинает постепенно отрисовываться с этого момента.

А иногда prev_calculated обнуляется и при следующем тике индикатор считает предыдущие бары, как и положено.


Из пяти раз вызова Свойств индикатора и нажатии ОК без изменения такая ситуация у меня обязательно случается.

Если в окне диалога Свойств индикатора изменить какую-нибудь входную переменную и потом нажать ОК, то вроде все работает нормально - prev_calculated обнуляется и индикатор полностью пересчитывается.


Заметил это не я, но все-таки решил задать вопрос.


Уважаемые разработчики! Вряд ли это можно назвать фичей :)

Прошу Вас рассмотреть данный случай. Спасибо.

Alexey Da
Модератор
6606
Alexey Da 2010.12.01 17:37  

Спасибо.

Проверим. 

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