私たちのファンページに参加してください
リングバッファを使用してTEMAを描画するクラス - MetaTrader 5のためのインディケータ
- ビュー:
- 872
- 評価:
- パブリッシュ済み:
- 2016.09.20 10:32
- アップデート済み:
- 2016.11.22 07:34
- このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
説明
CTEMAOnRingBufferクラスはリングバッファアルゴリズムを使用した三重指数移動平均(Triple Exponential Moving Average、TEMA)の計算のために設計されています。
宣言
class CTEMAOnRingBuffer : public CArrayRing
タイトル
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>
CTEMAOnRingBuffer.mqhクラスファイルはMQL5\Include\に作成されたIncOnRingBufferフォルダに配置されます。クラスによって使用されるこのフォルダからの2つのファイルの例は説明に添付されています。リングバッファ、DEMA及び移動平均クラスファイルもこのフォルダになければなりません。
クラスメソッド
//--- 初期化メソッド: bool Init( // エラーならfalse、成功ならtrueを返す int period = 12, // TEMA期間 ENUM_MA_METHOD method = MODE_EMA, // 平滑化手法 int size_buffer = 256, // リングバッファのサイズ bool as_series = false // 時系列の場合は true、入力データの索引付けが通常の場合はfalse ); //--- 時系列または指標バッファーに基づいた計算法: int MainOnArray( // 処理された要素の数を返す const int rates_total, // 配列サイズ const int prev_calculated, // 前の呼び出しで処理された配列要素 const double& price[], // 計算対象の配列 ); //--- 配列の別個の一連の要素に基づいた計算法 double MainOnValue( // 設定された要素のTEMA値を返す(バー) const int rates_total, // 配列サイズ const int prev_calculated, // 処理された配列要素 const int begin, // 配列の重要なデータの初め const double value, // 要素(バー)値 const int index // 要素(バー)インデックス ); //--- データアクセスメソッド: int BarsRequired(); // 指標描画に必要なバー数を返す string Name(); // 指標名を返す int Period(); // 期間を返す int Size(); // リングバッファのサイズを返す double MA(int index); // 移動平均値を返す。索引付けは時系列式 double DEMA(int index); // DEMA値を返す。索引付けは時系列式
リングバッファからの指標の計算されたデータを取得するは、通常の配列から同様に可能です。例を示します。
//--- TEMA指標計算メソッドを持つクラス: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| カスタム指標反復関数 | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // price[]配列のサイズ const int prev_calculated, // 前の呼び出しで処理されたバー const int begin, // 重要データの開始点 const double& price[]) // 計算法 { //--- 時系列に基づいた指標計算: tema.MainOnArray(rates_total,prev_calculated,price); ... //--- 「tema」リングバッファのデータを使う: // 例えば、データを指標バッファにコピーする: for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // TEMA指標ライン ... //--- 次の呼び出しのためのprev_calculatedの返し値 return(rates_total); }
TEMAが算出される際には、同じパラメータを持つ移動平均と DEMA も計算されます。MAリングバッファとDEMAのデータはそれぞれMAメソッド(int index) とDEMA(int index)で取得できます。
//--- 移動平均及びDEMAリングバッファのデータを使用 // 例えば、データを指標バッファにコピーする: for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // 移動平均指標ライン DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // DEMA指標ライン }
リングバッファでの索引付けは時系列と同じであることにご注意ください。
例
- Test_TEMA_OnArrayRB.mq5ファイルは価格の時系列に基づいて指標を計算します。MainOnArray()メソッドの適用が実証されます。
- Test_TEMA_OnValueRB.mq5ファイルはMainOnValue()メソッドの使用法を実証します。初めにTEMA指標が計算されて描画されます。次に、この指標のリングバッファに基づいて、もう1つのTEMAが描画されます。
256要素のリングバッファでのTest_TEMA_OnArrayRB.mq5の作業の結果 コードを書く上でMetaQuotes Software Corp.、Integer 及びGODZILLAの開発が使われました。
256要素のリングバッファでのTest_TEMA_OnArrayRB.mq5の作業の結果
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/1417
このクラスはリングバッファアルゴリズムを使用した二重指数移動平均(Double Exponential Moving Average、DEMA)の計算のために設計されています。
Exp_StepSto_v1StepSto_v1 ストキャスティックのシグナルに基づいて描画されたエキスパートアドバイザー。