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

MetaTrader 5でのATR計算に最適なリングバッファクラスの使い方

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

説明

CATROnRingBufferクラスは、平均真の範囲(ATR)を、リングバッファのアルゴリズムを用いて計算するために設計されています。

宣言

class CATROnRingBuffer

タイトル

#include <IncOnRingBuffer\CATROnRingBuffer.mqh>

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

クラスメソッド

//--- 初期化メソッド:
bool Init(                                // エラー時はfalseを返し、成功時はtrueを返す
   int            ma_period   = 14,      // 移動平均のスムージング期間
   ENUM_MA_METHOD ma_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 &high[]           // 最大値配列
   const double &low[]            // 最小値配列
   const double &close[]           // 終値配列
   );
//--- 配列内の個別系列要素に基づく計算メソッド
double MainOnValue(              // 設定された要素のATR値を返す
   const int     rates_total,     // 配列のサイズ
   const int     prev_calculated, // 配列の処理された要素
   const int     begin,           // 配列の重要な値が開始する位置
   const double high,            // 最大値
   const double low,            // 最小値
   const double close,            // 終値
   const int     index            // 要素インデックス
   );
//--- データへのアクセスメソッド:
int     BarsRequired();   // インジケータを描画するために必要なバーの数を返す
string Name();           // インジケータの名前を返す
string MAMethod();       // スムージング方法をテキストライン形式で返す
int     MAPeriod();       // スムージング期間を返す
int     Size();           // リングバッファのサイズを返す

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

#include <IncOnRingBuffer\CATROnRingBuffer.mqh>
CATROnRingBuffer atr;

...
//+------------------------------------------------------------------+
//| カスタムインジケータの反復関数                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- インジケータの計算:
   atr.MainOnArray(rates_total,prev_calculated,high,low,close);

   ...
//---                         

関連記事

コメント (0)