ホーム テクニカル指標 投稿

メタトレーダー5でモメンタムを計算するリングバッファによるクラス

添付ファイル
1396.zip (6.02 KB, ダウンロード 0回)

概要

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);
  }

リングバッファのインデックスは、時系列と同じです。

  1. Test_Momentum_OnArrayRB.mq5ファイルは、価格時系列に基づいて指標を計算します。MainOnArray()メソッドの使用が示されています。
  2. Test_Momentum_OnValueRB.mq5ファイルは、MainOnValue()メソッドの使用を示しています。最初にモメンタム指標が計算され、描画されます。その後、この指標のリングバッファに基づいてもう1つのモメンタム指標が描画されます。


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



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

 

このコードを書くにあたり、MetaQuotes Software Corp.Integer、およびGODZILLAの開発が使用されました。

関連記事

コメント (0)