1

Metatrader 4 のカスタム指標の一部として単純な DLL を作成しました。これは次のように呼び出されます。

int start( ) {
    double Rates[][6];
    int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 ); 

    for( int zz = MaximumRecords; zz >= 0; zz-- ) { 
        OutPut[zz] = EMPTY; 
    }

    GetSMAArray( Rates, MaximumRecords, Periods, OutPut );

    return(0); 
}

これは、チャートに期待どおりにプロットされるという点でうまく機能しますが、残念ながら、新しい着信ティックで更新されません。最初の呼び出しでプロットされるだけです。着信ティックで DLL を更新するには、さらにどのようなコードを追加できますか? ほとんどすべての検索で、

ExtCountedBars = IndicatorCounted();

強制的にwhileループを計算させますが、これらはすべて .mq4 ファイル自体に含まれる計算に適用されます。DLL に再計算を強制したい。第二に、すべてのティックの到着時ではなく、バーの完了時にのみこの再計算が行われるようにしたいと考えています。

4

1 に答える 1

1

新しいバーのみについては、最後のバー (Bars[0]) の日時情報を変数に保持する方法があり、それが変更された場合、これは新しいバーが来たことを意味します。

datetime lastBarDateTime;

int start(){
    if(Time[0]==lastBarDateTime)
    return(0);

    lastBarDateTime = Time[0];

    // codes to run on a new bar ...
}

DLL部分については、そのコードのどこでDLLを使用しているかを実際に理解できませんでした。

于 2011-09-21T14:27:36.297 に答える