MetaTrader 5 / ライブラリ

リングバッファ作成クラス - MetaTrader 5のためのライブラリ

935
(41)

説明

リングバッファは、データを保存するため整理形態の一つです。通常、それは、最も古い要素が最新のデータで置き換えられる長さの限られた配列として表れされます。このように、最後のデータには常に特定の数へのアクセスがあります。これはほとんどの場合ストリームデータの非同期読み出し/書き込みに使用されます。詳細はこちらをご参照ください

エキスパートアドバイザーと指標を書き込むときは、多くの場合、すべてのバーのために計算された値を格納する必要はありません。例えば、最後の100バーのデータを維持するので十分でしょう。リングバッファは、このために好適です。明白な利点:

  • 計算の増加
  • メモリの経済化
  • 使いやすく、配列を超えたエグジットの心配が不必要
宣言

сlass CArrayRing

タイトル

#include <IncOnRingBuffer\CArrayRing.mqh>

CArrayRing.mqhクラスファイルは MQL5\Include\に作成されたIncOnRingBufferフォルダに配置されます。クラスの使用例は下のリンクにあります。

クラスメソッド 

//--- バッファ初期化メソッド: bool Init( // エラーならfalse、成功ならtrueを返す    int    size,             // リングバッファサイズ    double volue=EMPTY_VALUE // 空の位置バッファ    ); //--- 新しい要素をバッファに加えるメソッド void Add(    const double element   // 追加された要素の値    ); //--- このメソッドは指定されたインデックスを持つ要素の値を上書きする bool Update(             // エラーならfalse、成功ならtrueを返す    const double element, // 要素の新しい値    const int index=0     // 要素インデックス    );   //--- このメソッドは指定されたインデックスを持つ要素の値を返す double At(         // 要素の値を返す    const int index // 要素インデックス    ) const; //--- このメソッドはバッファ要素に書き込まれた最後の値を返す double Last() const; //--- このメソッドはバッファ要素に書き込まれた最後の値を上書きする: void Last(    const double element   // 要素の新しい値    );   //--- このメソッドはリングバッファのサイズを返す: int Size(); //--- このメソッドはリングバッファのサイズを変更する: bool Resize(    const int size   // 新しいサイズ    ); 

注意事項:

  • バッファサイズが減少すると、最後ではなく最も古い要素がなくなります。
  • このりングバッファの実装では索引付けは時系列すなわち通常の反対です。 

例示

出版の瞬間にもリングバッファを使用した3つの例があります。

 

MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/1340