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

MACDをリングバッファで計算するためのクラス - MetaTrader 5用インジケーター

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

概要

CMACDOnRingBufferクラスは、移動平均収束発散(MACD)インジケーターをリングバッファアルゴリズムを用いて計算するために設計されています。

クラスの宣言

class CMACDOnRingBuffer

ファイルのインクルード

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

CMACDOnRingBuffer.mqhファイルは、MQL5\Include内に作成する必要があるIncOnRingBufferフォルダに配置してください。このフォルダ内で使用されるサンプルファイルが2つ、説明に添付されています。また、リングバッファのクラスや、移動平均のクラスもこのフォルダに配置する必要があります。

クラスメソッド

//--- 初期化メソッド:
bool Init(                                  // エラーの場合はfalse、成功した場合はtrueを返す
   int            fast_period   = 12,       // 高速移動平均の期間
   int            slow_period   = 26,       // 低速移動平均の期間
   int            signal_period = 9,        // シグナル移動平均の期間
   ENUM_MA_METHOD fast_method   = MODE_EMA, // 高速移動平均のメソッド
   ENUM_MA_METHOD slow_method   = MODE_EMA, // 低速移動平均のメソッド
   ENUM_MA_METHOD signal_method = MODE_SMA, // シグナル移動平均のメソッド
   int            size_buffer   = 256,      // リングバッファのサイズ
   bool           as_series     = false     // trueなら時系列、falseなら通常のインデックス
   );
//--- 時系列またはインジケータバッファに基づく計算メソッド:
int MainOnArray(                  // 処理された要素の数を返す
   const int     rates_total,     // 配列のサイズ
   const int     prev_calculated,// 前回の呼び出しで処理された要素
   const double &array[]          // 入力値の配列
   );
//--- 配列の各要素に基づく計算メソッド:
double MainOnValue(              // 指定された要素のMACD値を返す
   const int    rates_total,     // 配列のサイズ
   const int    prev_calculated,// 処理された配列の要素
   const int    begin,           // 配列の重要なデータが始まる位置
   const double value,           // 配列の要素値
   const int    index            // 要素のインデックス
   );
//--- データへのアクセスメソッド:
int    BarsRequired();   // インジケーターを描画するために必要なバーの数を返す
string Name()            // インジケーターの名前を返す
string NameMain()            // インジケーターのメインラインの名前を返す
string NameSignal()          // インジケーターのシグナルラインの名前を返す
string FastMethod()      // 高速ラインのスムージングメソッドを文字列で返す
string SlowMethod()      // 低速ラインのスムージングメソッドを文字列で返す
string SignalMethod()      // シグナルラインのスムージングメソッドを文字列で返す
int    FastPeriod()      // 高速ラインのスムージング期間を返す
int    SlowPeriod()      // 低速ラインのスムージング期間を返す
int    SignalPeriod()      // シグナルラインのスムージング期間を返す
int    Size();           // リングバッファのサイズを返す

リングバッファからインジケーターの計算データを取得する方法は、通常の配列と同様です。例えば:

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

...

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

...

//---                         

関連記事

コメント (0)