Не могу сделать итерацию с #property строгой

У меня этот код работает без ошибок. По сути, этот код отображает значение скользящих средних на пяти предыдущих барах за 5 минут. Текущее значение MA опущено.

int     TrendMinDurationBar = 5,
        SlowPeriod          = 14,
        FastPeriod          = 7;

void OnTick()
{
    if ( NewBar( PERIOD_M5 ) == true ) MA( PERIOD_M5 );
}

void MA( int TF )
{
    double Slow[], Fast[];
    ArrayResize( Slow, TrendMinDurationBar + 1 );
    ArrayResize( Fast, TrendMinDurationBar + 1 );

    for (  int i = 1; i <= TrendMinDurationBar; i++ )
    {      Slow[i] = NormalizeDouble( iMA( Symbol(), TF, SlowPeriod, 0, MODE_EMA, PRICE_OPEN, i ), Digits );
           Fast[i] = NormalizeDouble( iMA( Symbol(), TF, FastPeriod, 0, MODE_EMA, PRICE_OPEN, i ), Digits );
           Alert( "DataSlow" + ( string )i + ": " + DoubleToStr( Slow[i], Digits ) );
    }
}

bool NewBar( int TF )
{
    static datetime lastbar = 0;
           datetime curbar  = iTime( Symbol(), TF, 0 );

    if (  lastbar != curbar )
    {     lastbar  = curbar; return( true );
    }
    else                     return( false );
}

когда #property strict включен, код работает только один раз после компиляции. После нового бара на M5 Диаграмма существует, она не делает итераций.

Какое решение, если я настаиваю на использовании #property strict?

2 ответа

Добро пожаловать в другой New - MQL4.56789 Словить 22

Мой кандидат от Help > MQL4 Reference > Updated MQL4
является
этот (столбец [New MQL4 with #property strict])

Функции любого типа должны возвращать значение

и еще один для рассмотрения, код просто теряет логику даже для static double Альтернативно это было бы крайне неэффективно при следующих обстоятельствах:

Локальные массивы освобождаются при выходе из блока {}


Отлично работает с #property strict в качестве советника в MT4 Build 950.

Вы уверены, что используете его как советник, а не как скрипт или индикатор?

Другие вопросы по тегам