0

我有这个代码工作没有错误。基本上,此代码是显示每 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

4

2 回答 2

0

#property strict与MT4 Build 950 中的 EA完美配合。

您确定您将其作为 EA 而不是作为脚本或指标运行吗?

于 2016-03-17T20:02:26.120 回答
0

欢迎来到另一个New- MQL4.56789Catch-22

我的候选人 是 这个(专栏)Help > MQL4 Reference > Updated MQL4

[New MQL4 with #property strict]

任何类型的函数都应该返回一个值

还有一个需要审查,代码只是失去了逻辑,即使是static double替代方案,在这些情况下效率也会非常低:

退出 {} 块时释放本地数组


于 2015-10-27T22:52:03.797 回答