無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
インディケータ

リングバッファを使用してTEMAを描画するクラス - MetaTrader 5のためのインディケータ

ビュー:
851
評価:
(28)
パブリッシュ済み:
2016.09.20 10:32
アップデート済み:
2016.11.22 07:34
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\OnRingBuffer\
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

説明

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指標ライン
     }

リングバッファでの索引付けは時系列と同じであることにご注意ください。

  1. Test_TEMA_OnArrayRB.mq5ファイルは価格の時系列に基づいて指標を計算します。MainOnArray()メソッドの適用が実証されます。
  2. Test_TEMA_OnValueRB.mq5ファイルはMainOnValue()メソッドの使用法を実証します。初めにTEMA指標が計算されて描画されます。次に、この指標のリングバッファに基づいて、もう1つのTEMAが描画されます。 


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



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

 

コードを書く上でMetaQuotes Software Corp.Integer 及びGODZILLAの開発が使われました。

MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/1417

リングバッファを使用してDEMAを描画するクラス リングバッファを使用してDEMAを描画するクラス

このクラスはリングバッファアルゴリズムを使用した二重指数移動平均(Double Exponential Moving Average、DEMA)の計算のために設計されています。

Exp_StepSto_v1 Exp_StepSto_v1

StepSto_v1 ストキャスティックのシグナルに基づいて描画されたエキスパートアドバイザー。

ytg_MA_TF ytg_MA_TF

TFの選択肢を持った移動平均

Predict Predict

シグナルの3つの変形を持つセマフォシグナル指標