概要
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( // 処理された要素の数を返す constint rates_total, // 配列のサイズ constint prev_calculated, // 前回の呼び出しで処理された要素 constdouble& high[], // 最大値の配列 constdouble& low[], // 最小値の配列 );
//--- 高値の配列要素に基づくフラクタル計算メソッド:double MainOnHigh( // index-bars_right要素の上フラクタルの値を返す constint rates_total, // 配列のサイズ constint prev_calculated, // 配列の処理された要素 constint begin, // 配列の重要なデータが始まる位置 constdouble high, // 現在のバーの最大値 constint index // 現在の要素(バー)インデックス );
//--- 低値の配列要素に基づくフラクタル計算メソッド:double MainOnLow( // index-bars_right要素の下フラクタルの値を返す constint rates_total, // 配列のサイズ constint prev_calculated, // 配列の処理された要素 constint begin, // 配列の重要なデータが始まる位置 constdouble low, // 現在のバーの最小値、配列の現在の要素の最大値 constint index // 現在の要素(バー)インデックス );
//--- データへのアクセスメソッド:int BarsRequired(); // インジケーター描画に必要なバーの数を返すstring Name(); // インジケーターの名前を返すstring NameUpper() // 上フラクタルの名前を返すstring NameLower() // 下フラクタルの名前を返すint BarsRight() // 極値から右にあるバーの数を返すint BarsLeft() // 極値から左にあるバーの数を返すint Size(); // リングバッファのサイズを返す
リングバッファから計算されたデータは、通常の配列から取得するのと同じように得ることができます。例えば:
//--- フラクタルインジケーター計算のためのクラス:#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh> CFractalsOnRingBuffer fractals; ... //+------------------------------------------------------------------+//| カスタムインジケーターのイテレーション関数 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constdatetime& time[], constdouble& open[], constdouble& high[], constdouble& low[], constdouble& close[], constlong& tick_volume[], constlong& volume[], constint& 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の開発が使用されました。

コメント 0