概要
CMomentumOnRingBufferクラスは、モメンタムというテクニカル指標をリングバッファのアルゴリズムを使用して計算するために設計されています。
定義
class CMomentumOnRingBuffer : public CArrayRing
ファイルのインクルード
#include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh>CMomentumOnRingBuffer.mqhファイルは、MQL5\Include\内にあるIncOnRingBufferフォルダに配置する必要があります。このフォルダ内のクラスを使用した例を示す2つのファイルが説明の部分に添付されています。リングバッファのクラスファイルもこのフォルダに置く必要があります。
クラスメソッド
//--- 初期化メソッド: bool Init( // エラーがあればfalseを返し、成功すればtrue int period = 14, // モメンタムの期間 int size_buffer = 256, // リングバッファのサイズ bool as_series = false // 時系列の場合はtrue、そうでなければfalse );
//--- 時系列または指標バッファに基づく計算メソッド: int MainOnArray( // 処理された要素の数を返す const int rates_total, // array[]のサイズ const int prev_calculated, // 前回の呼び出しで処理された要素 const double& array[], // 入力データの配列 );
//--- 配列の要素に基づく計算メソッド: double MainOnValue( // 指定された要素のモメンタムの値を返す const int rates_total, // 配列のサイズ const int prev_calculated, // 配列の処理された要素 const int begin, // 配列の重要なデータが始まる位置 const long value, // 配列の要素の値 const int index // 要素のインデックス );
//--- データへのアクセスメソッド: int BarsRequired(); // 指標を描画するために必要なバーの数を返す string Name(); // 指標の名前を返す int Period(); // 期間を返す int Size(); // リングバッファのサイズを返す
リングバッファから計算されたデータは、通常の配列と同じように取得できます。例えば:
//--- モメンタム指標の計算メソッドを持つクラス: #include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh> CMomentumOnRingBuffer momentum; ... //+------------------------------------------------------------------+ //| カスタム指標の反復関数 | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // 配列price[]のサイズ const int prev_calculated, // 前回の呼び出しで処理されたバー const int begin, // 重要なデータの始まり const double& price[]) // 計算用の配列 { //--- 時系列に基づいて指標を計算する: momentum.MainOnArray(rates_total,prev_calculated,price); ... //--- モメンタムリングバッファのデータを使用する、 // 例えば、指標バッファにデータをコピー: for(int i=start;i<rates_total && !IsStopped();i++) Momentum_Buffer[i] = momentum[rates_total-1-i]; // 指標ライン ... //--- 次回呼び出しのためにprev_calculatedを返す: return(rates_total); }
リングバッファのインデックスは、時系列と同じです。
例
- Test_Momentum_OnArrayRB.mq5ファイルは、価格時系列に基づいて指標を計算します。MainOnArray()メソッドの使用が示されています。
- Test_Momentum_OnValueRB.mq5ファイルは、MainOnValue()メソッドの使用を示しています。最初にモメンタム指標が計算され、描画されます。その後、この指標のリングバッファに基づいてもう1つのモメンタム指標が描画されます。

Test_Momentum_OnArrayRB.mq5のリングバッファ256要素の結果

Test_Momentum_OnValueRB.mq5のリングバッファ256要素の結果
このコードを書くにあたり、MetaQuotes Software Corp.、Integer、およびGODZILLAの開発が使用されました。