Не могу сделать итерацию с #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.
Вы уверены, что используете его как советник, а не как скрипт или индикатор?