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

MetaTrader 5でのリングバッファを使用したAMA描画クラス

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

概要

CAMAOnRingBufferクラスは、適応移動平均 (Adaptive Moving Average, AMA)をリングバッファのアルゴリズムを用いて計算するために設計されています。

クラスの宣言

class CAMAOnRingBuffer : public CArrayRing

タイトル

#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>

CAMAOnRingBuffer.mqhクラスのファイルは、MQL5\Include\のIncOnRingBufferフォルダ内に配置する必要があります。このフォルダには、クラスで使用される例が含まれた2つのファイルが添付されています。また、リングバッファのクラスと効率比率のクラスもこのフォルダに配置する必要があります。

クラスメソッド

//--- 初期化メソッド:
bool Init(// エラーの場合はfalse、成功の場合はtrueを返す
    int period = 10, // AMAの期間
    int fast_period = 2, // ファストEMAの期間
    int slow_period = 30, // スロウEMAの期間
    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(// 指定要素のAMA値を返す
    const int rates_total, // 配列のサイズ
    const int prev_calculated, // 処理された配列の要素
    const int begin, // 配列の重要なデータの開始位置
    const double value, // 配列の要素値
    const int index // 要素のインデックス
);
//--- データへのアクセスメソッド:
int BarsRequired(); // インジケータ描画に必要なバーの数を返す
string Name(); // インジケータの名前を返す
string FastPeriod(); // ファストEMAのスムージング期間を返す
int SlowPeriod(); // スロウEMAのスムージング期間を返す
int Period(); // AMAの期間を返す
int Size(); // リングバッファのサイズを返す

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

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

...

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

...

//--- リングバッファ"ama"からのデータを使用:
    for(int i=start; i<rates_total; i++)
        AMA_Buffer[i] = ama[rates_total-1-i]; // インジケータライン

//--- 次回呼び出しのためにprev_calculatedを返す:
    return(rates_total);
}

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

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


Test_AMA_OnArrayRB.mq5によるリングバッファのサイズ256要素の結果



Test_AMA_OnValueRB.mq5によるリングバッファのサイズ256要素の結果

 

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

関連記事

コメント (0)