概要
CFractalsOnRingBufferは、フラクタルテクニカル指標をリングバッファアルゴリズムを使用して計算するために設計されています。
クラス宣言
class CFractalsOnRingBufferタイトル
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>CFractalsOnRingBuffer.mqhファイルは、MQL5\Include内に新たに作成する必要があるIncOnRingBufferフォルダに配置してください。このフォルダには、クラスで使用される例のファイルが2つ添付されています。また、リングバッファのクラスファイルもこのフォルダ内に存在する必要があります。
クラスメソッド
//--- 初期化メソッド: bool Init( // エラーがあればfalse、成功すればtrueを返す int bars_right = 2, // 極値から右にあるバーの数 int bars_left = 2, // 極値から左にあるバーの数 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[], // 最小値の配列 );
//--- 高値の配列要素に基づくフラクタル計算メソッド: double MainOnHigh( // index-bars_right要素の上フラクタルの値を返す const int rates_total, // 配列のサイズ const int prev_calculated, // 配列の処理された要素 const int begin, // 配列の重要なデータが始まる位置 const double high, // 現在のバーの最大値 const int index // 現在の要素(バー)インデックス );
//--- 低値の配列要素に基づくフラクタル計算メソッド: double MainOnLow( // index-bars_right要素の下フラクタルの値を返す const int rates_total, // 配列のサイズ const int prev_calculated, // 配列の処理された要素 const int begin, // 配列の重要なデータが始まる位置 const double low, // 現在のバーの最小値、配列の現在の要素の最大値 const int index // 現在の要素(バー)インデックス );
//--- データへのアクセスメソッド: int BarsRequired(); // インジケーター描画に必要なバーの数を返す string Name(); // インジケーターの名前を返す string NameUpper() // 上フラクタルの名前を返す string NameLower() // 下フラクタルの名前を返す int BarsRight() // 極値から右にあるバーの数を返す int BarsLeft() // 極値から左にあるバーの数を返す int Size(); // リングバッファのサイズを返す
リングバッファから計算されたデータは、通常の配列から取得するのと同じように得ることができます。例えば:
//--- フラクタルインジケーター計算のためのクラス: #include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh> CFractalsOnRingBuffer fractals; ... //+------------------------------------------------------------------+ //| カスタムインジケーターのイテレーション関数 | //+------------------------------------------------------------------+ 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[]) { //--- 価格時系列に基づくインジケーターの計算: fractals.MainOnArray(rates_total,prev_calculated,high,low); ... //--- リングバッファ「fractals」からデータを使用する、 // 例えば、インジケーターバッファにデータをコピーする: for(int i=start;i<rates_total-BarsRight && !IsStopped();i++) { UpperBuffer[i] = fractals.upper[rates_total-1-i]; // 上フラクタル LowerBuffer[i] = fractals.lower[rates_total-1-i]; // 下フラクタル } ... //--- 次回呼び出しのためのprev_calculatedの戻り値: return(rates_total); }
リングバッファのインデックスは、時系列と同じですので注意してください。
例
- インジケーターは、価格時系列に基づいてTest_Fractals_OnArrayRB.mq5ファイルを計算します。MainOnArray()メソッドの使用が示されています。
- Test_Fractals_OnValueRB.mq5ファイルは、MainOnValue()メソッドの使用を示しています。最初にフラクタルインジケーターが計算され描画され、その後このインジケーターのリングバッファに基づいてさらにフラクタルが描画されます。

Test_Fractals_OnArrayRB.mq5のリングバッファ256要素の作業結果

Test_Fractals_OnValueRB.mq5のリングバッファ256要素の作業結果
コードを書く際に、MetaQuotes Software Corp.、 Integer および GODZILLAの開発が使用されました。