0

このコードはエラーなしで動作しています。基本的に、このコードは 5 分ごとに 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 strictMT4 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もう1つ確認する必要があるのは、これらの状況では非常に非効率的な代替手段であっても、コードは単にロジックを失うことです:

{} ブロックを終了すると、ローカル配列が解放されます


于 2015-10-27T22:52:03.797 に答える