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

MetaTrader 5でのリングバッファを使用したストキャスティクスの描画方法

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

概要

CStochasticOnRingBufferクラスは、ストキャスティクスオシレーターの計算を行うために設計されています。このクラスは、リングバッファのアルゴリズムを使用しており、MetaTrader 5で活用できます。

クラスの宣言

class CStochasticOnRingBuffer

タイトル

#include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh>

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

クラスメソッド

//--- 初期化メソッド:
bool Init(// エラーの場合はfalse、成功した場合はtrueを返す
int period_k = 5, // %Kの期間
int period_d = 3, // %Dの期間
int period_s = 3, // %Kのスローイング期間
ENUM_MA_METHOD method = MODE_SMA, // %Dのメソッド
int size_buffer = 256, // リングバッファのサイズ
bool as_series = false
);
//--- 時系列またはインジケータバッファに基づく計算メソッド:
int MainOnArray(// 処理された要素の数を返す
const int rates_total, // 配列のサイズ
const int prev_calculated, // 前回の呼び出しで処理された要素
const double &high[], // 最大値配列
const double &low[], // 最小値配列
const double &close[]);
//--- 配列の個別要素に基づく計算メソッド:
double MainOnValue(// 指定された要素のストキャスティクス値を返す
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 NameSignal(); // 信号ラインインジケータの名前を返す
string Method(); // 平滑化方法をテキストラインで返す
int PeriodK(); // %Kの期間を返す
int PeriodS(); // %Kのスローイング期間を返す
int PeriodD(); // %Dの期間を返す
int Size(); // リングバッファのサイズを返す

リングバッファからインジケータの計算データを通常の配列と同様に取得可能です。例えば、以下のように使用します:

//--- ストキャスティクスインジケータの計算メソッドを持つクラス:
#include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh>
CStochasticOnRingBuffer st;
...
//+------------------------------------------------------------------+
//| カスタムインジケータのイテレーション関数 |
//+------------------------------------------------------------------+
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[])
{
//--- 価格時系列に基づくインジケータの計算:
st.MainOnArray(rates_total,prev_calculated,high,low,close);
...
//--- リングバッファ「st」からデータを使用する例:
// 例えば、インジケータバッファにデータをコピーする:
for(int i=start;i<rates_total && !IsStopped();i++)
{
MainBuffer[i] = st[rates_total-1-i]; // インジケータのメインライン
SignalBuffer[i] = st.signal[rates_total-1-i]; // インジケータの信号ライン
}
...
//--- 次回の呼び出しのためにprev_calculatedを返す:
return(rates_total);
}

リングバッファのインデックスは、通常の時系列と同様であることに注意してください。

  1. Test_Stochastic_OnArrayRB.mq5ファイルは、価格時系列に基づいてインジケータを計算します。MainOnArray()メソッドの使用例を示しています。
  2. Test_Stochastic_OnValueRB.mq5ファイルでは、MainOnValue()メソッドの使用が示されています。最初にストキャスティクスオシレーターインジケータが計算され、描画されます。その後、リングバッファに基づいてさらに2つのストキャスティクスオシレーターラインが描画されます。


Test_Stochastic_OnArrayRB.mq5のリングバッファ256要素の結果



Test_Stochastic_OnValueRB.mq5のリングバッファ256要素の結果

 

コード作成には、MetaQuotes Software Corp.Integer、およびGODZILLAの開発が使用されました。

関連記事

コメント (0)