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

メタトレーダー5のリングバッファを使ったER描画クラス

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

こんにちは、トレーダーの皆さん!今日は、メタトレーダー5でのテクニカル指標「エフィシエンシー・レシオ(ER)」を計算するための新しいクラス「CEROnRingBuffer」についてお話ししたいと思います。このクラスは、アダプティブ移動平均(AMA)を使用する際に非常に役立ちます。

クラスの説明

CEROnRingBufferクラスは、リングバッファのアルゴリズムを活用してERを計算するように設計されています。詳細はこちらをチェックしてください。

クラスの宣言

class CEROnRingBuffer : public CArrayRing

ファイルの配置

このクラスの定義は、IncOnRingBufferフォルダ内にあるCEROnRingBuffer.mqhファイルに保存する必要があります。このフォルダは、MQL5\Include\内に作成してください。また、サンプルファイルもこのフォルダ内に配置してください。

クラスのメソッド

//--- 初期化メソッド:
bool Init(// エラーがあればfalse、成功すればtrueを返す
     int period = 34, // ER計算の期間
     int size_buffer = 256, // リングバッファのサイズ
     bool as_series = false // 時系列の場合はtrue
);
//--- 時系列またはインジケータバッファに基づく計算メソッド:
int MainOnArray(// 処理された要素の数を返す
     const int rates_total, // 配列のサイズ
     const int prev_calculated, // 前回の呼び出しで処理された要素数
     const double &array[]);

データへのアクセスメソッド

int BarsRequired(); // インジケータを描画するために必要なバー数を返す
string Name(); // インジケータの名前を返す
int Period(); // ER計算の期間を返す
int Size(); // リングバッファのサイズを返す

リングバッファから計算されたデータは、通常の配列と同様に取得できます。以下はその例です:

//--- ERインジケータの計算メソッドを持つクラス:
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;

...

//+------------------------------------------------------------------+
//| カスタムインジケータの繰り返し関数 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, 
             const int prev_calculated, 
             const int begin, 
             const double &price[]) {
//--- 価格時系列に基づくインジケータの計算:
     er.MainOnArray(rates_total, prev_calculated, price);

...

//--- リングバッファ "er" からデータを使用:
     for(int i=start; i<rates_total; i++) {
       ER_Buffer[i] = er[rates_total - 1 - i]; // インジケータライン
     }
//--- 次回呼び出しのためにprev_calculatedを返す:
     return(rates_total);
}

リングバッファのインデックスは、時系列と同じですので、注意してください。

サンプル

  1. Test_ER_OnArrayRB.mq5ファイルは、価格時系列に基づいてインジケータを計算します。MainOnArray()メソッドの使い方が示されています。
  2. Test_ER_OnValueRB.mq5は、MainOnValue()メソッドの使用を示しています。最初にERインジケータが計算され、描画されます。その後、このインジケータのリングバッファに基づいて、別のERが描画されます。


Test_ER_OnArrayRB.mq5のリングバッファサイズ256の結果



Test_ER_OnValueRB.mq5のリングバッファサイズ256の結果

 

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

関連記事

コメント (0)