インディケータ: 重心 J. F. Ehlers

 

重心 J. F. Ehlers:

重心はジョン・エラーズによって開発され「株式&コモディティ」誌(2002年5月)で発表されたオシレータです。

図1。重心インディケータ

作者: Nikolay Kositsin

 
便利ですね! ...色変更の基準が知りたいです。
 

こんにちは、

このオシレーターは素晴らしいものですが、問題があります。

最後のローソク足で計算されるシグナルラインの 終値が表示されず、常に現在が赤で表示されます。オシレーターをリセットすると、シグナルラインの終端が表示され、一瞬は良い値が表示されるのですが、その後、赤色に戻ってしまいます(緑色を表示しなければならない場合でも)。

この問題を解決するにはどうしたらいいでしょうか?

再デバッグを試みましたが、役に立ちませんでした。

よろしく、

インフィニットデザイン

 
彼の意見では 、この インジケーターは メーホーと シンボルとタイムフレームで 機能する�
この インジケータの パラメータに 最適な値は
 

この素晴らしいインジケーターをありがとう。

旧バージョンも新バージョンと同じくらい、いや、それ以上に興味深く有用なものでした。

旧バージョンもmq5に移植していただけませんか?そうしていただけると非常にありがたいです。


よろしくお願いします!

 
この指標は非決定論的である。同じデータポイントを異なる時刻に2回求めれば、異なる答えが返ってくる。ドリフトは現在時刻に 近いほど大きくなる。不一致は3.7 x 10^-04にもなります。
 
InfiniteDesign:

こんにちは、

このオシレーターは素晴らしいものですが、問題があります。

最後のローソク足で計算されるシグナルラインの 終値が表示されず、常に現在が赤で表示されます。オシレーターをリセットすると、シグナルラインの終端が表示され、一瞬は良い値が表示されるのですが、その後、赤色に戻ってしまいます(緑色を表示しなければならない場合でも)。

この問題を解決するにはどうしたらいいでしょうか?

再デバッグを試みましたが、役に立ちませんでした。

よろしく、

インフィニットデザイン

私も同じ問題を抱えています。
 

このインジケーターからシグナルを作成しようとしましたが、できませんでした。

助けてください。


//+------------------------------------------------------------------+
//|COG.mqh
//|ブルーノ・ピオ
//|http://mql5.commql5.com
//+------------------------------------------------------------------+
#property copyright "Bruno Pio"
#property link      "http://www.mql5.com"
#property version   "1.00"
#include "..\ExpertSignal.mqh"   // CExpertSignalはExpertSignalファイルにある。
#property tester_indicator "CenterOfGravity.ex5"
// ウィザードの説明開始
//+------------------------------------------------------------------+
//| クラスの説明|
| タイトル=重心信号|
//| タイプ=シグナル・アドバンス|
| Name=My_COG|
| ShortName=CG|
| クラス=COG|
//| ページ=不要|
//| Parameter=Period_,int,10,インジケータの平均化期間。
//| Parameter=SmoothPeriod,int,3,信号線の平滑化周期。
//| パラメータ=MA_METHOD_,ENUM_MA_METHOD,MODE_EMA,信号方式|</p
//| パラメータ=AppliedPrice,int,1,価格定数
//+------------------------------------------------------------------+
// ウィザードの説明 終了
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class COG : public CExpertSignal
  {
private:
CiCustom             m_COG;               // オブジェクトとしてのインジケータ
//--- 設定可能なモジュール・パラメーター
   int               m_Period_;           // インジケータの平均化期間
   int               m_SmoothPeriod;      // 信号線の平滑化期間 
   ENUM_MA_METHOD    m_MA_Method_;        // 信号線平均法
   int               m_AppliedPrice;      // 価格定数
public:
                     COG(void);
                    ~COG(void);
//--- 入力データの正しさをチェックする
   bool              ValidationSettings();
//--- シグナル・モジュール用のインジケータとタイムスリリーの作成
   bool              InitIndicators(CIndicators *indicators);
//--- 指標データへのアクセス
   double            CG(const int index)                 const { return(m_COG.GetData(0,index)); }
   double            Signal(const int index)             const { return(m_COG.GetData(1,index)); }   
//--- 売買条件のチェック
   virtual int       LongCondition();
   virtual int       ShortCondition();
//--- 設定方法
   void              Period_(int value)               { m_Period_=value;        }
   void              SmoothPeriod(int value)          { m_SmoothPeriod=value;   }
   void              MA_Method_(ENUM_MA_METHOD value) { m_MA_Method_=value;     }
   void              AppliedPrice(int value)          { m_AppliedPrice=value;   }
protected:
   //--- インジケーターの作成
   bool              CreateCOG(CIndicators *indicators);



  };
//+------------------------------------------------------------------+
//| コンストラクタ|
//+------------------------------------------------------------------+
COG::COG(void) :           m_Period_(10),                // インジケータの平均化期間
                           m_SmoothPeriod(3),            // 信号線の平滑化期間 
                           m_MA_Method_(MODE_EMA),       // 信号線平均法
                           m_AppliedPrice(1)             // 価格定数
  {
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
COG::~COG()
  {
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| 入力パラメータをチェックし、問題がなければtrueを返す。
//+------------------------------------------------------------------+
bool COG:: ValidationSettings()
  {
   //--- ベースクラスのメソッドを呼び出す
   if(!CExpertSignal::ValidationSettings())  return(false);
   //--- チェック期間、MA計算のためのバー数 >=1
   if(m_Period_<1)
     {
      PrintFormat("Incorrect value set for one of the period! Period_=%d",
                  m_Period_);
      return false;
     }
//--- チェック期間、MA計算のためのバー数 >=1
   if(m_SmoothPeriod<1)
     {
      PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d",
                  m_SmoothPeriod);
      return false;
     }
//--- 高速MAスムージングタイプは、列挙の4つの値のうちの1つでなければならない。
   if(m_MA_Method_!=MODE_SMA && m_MA_Method_!=MODE_EMA && m_MA_Method_!=MODE_SMMA && m_MA_Method_!=MODE_LWMA)
     {
      PrintFormat("Invalid type of smoothing of the fast MA!");
      return false;
     }
//--- m_AppliedPrice は有効でなければならない。
   if(m_AppliedPrice<1 || m_AppliedPrice>11) 
     {
      PrintFormat("Invalid type of Price!");
      return false;
     }
//--- すべてのチェックが完了し、問題なし
   return true;
  }
//+------------------------------------------------------------------+
//| インジケータの作成|
//| 入力: インジケータのコレクションへのポインタ。
//| 出力:成功すれば真、そうでなければ偽
//+------------------------------------------------------------------+
bool COG::InitIndicators(CIndicators *indicators)
  {
//--- インジケータのコレクションがNULLかどうかの標準チェック
   if(indicators==NULL) return(false);
//--- 追加フィルターでインジケーターとタイムスリリーを初期化する
   if(!CExpertSignal::InitIndicators(indicators)) return(false);
//--- インジケーターの作成
   if(!CreateCOG(indicators))                  return(false);   
//--- この部分に到達したので、関数は成功した。
   return(true);
  }
//+------------------------------------------------------------------+
//| COG "インジケーターを作成する。|
//+------------------------------------------------------------------+
bool COG::CreateCOG(CIndicators *indicators)
  {
//--- ポインタのチェック
   if(indicators==NULL) return(false);
//--- コレクションにオブジェクトを追加する
   if(!indicators.Add(GetPointer(m_COG)))
     {
      printf(__FUNCTION__+": Error adding an object of the COG");
      return(false);
     }
//--- COGのパラメータ設定
   MqlParam parameters[5];
//---
   parameters[0].type=TYPE_STRING;
   parameters[0].string_value="CenterOfGravity.ex5";
   parameters[1].type=TYPE_INT;
   parameters[1].integer_value=m_Period_;                 // 期間
   parameters[2].type=TYPE_INT;
   parameters[2].integer_value=m_SmoothPeriod;            // 信号線の平滑化期間
   parameters[3].type=TYPE_INT;
   parameters[3].integer_value=m_MA_Method_;              // 信号線平均法
   parameters[4].type=TYPE_INT;
   parameters[4].integer_value=m_AppliedPrice;            // 価格定数
//--- オブジェクトの初期化 
   if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters))
     {
      printf(__FUNCTION__+": Error initializing the object of the COG");
      return(false);
     }
//--- バッファ数
   if(!m_COG.NumBuffers(2)) return(false);
//--- この部分に到達したので、関数は成功した。
   return(true);
  }
//+------------------------------------------------------------------+
//| 買いシグナルの強さを返す。|
//+------------------------------------------------------------------+
int COG::LongCondition()
  {
   int signal=0;
//--- ティックによる操作の場合 idx=0、形成されたバーによる操作の場合 idx=1
   int idx=StartIndex();
//--- 最後に形成されたバーでのCOGの値
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- 最後に形成された1本以外のバーのCOGの値
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//--CG > Signal && CG-1 < Signal-1の場合
   if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=100; // 買いのシグナルあり
     }
//--- シグナル値を返す
   return(signal);
  }
//+------------------------------------------------------------------+
//| 売りシグナルの強さを返す。|
//+------------------------------------------------------------------+
int COG::ShortCondition()
  {
   int signal=0;
//--- ティックによる操作の場合 idx=0、形成されたバーによる操作の場合 idx=1
   int idx=StartIndex();
//--- 最後に形成されたバーでのCOGの値
   double last_fast_value=CG(idx);
   double last_slow_value=Signal(idx);
//--- 最後に形成された1本以外のバーのCOGの値
   double prev_fast_value=CG(idx+1);
   double prev_slow_value=Signal(idx+1);   
//--CG < シグナル && CG-1 > シグナル-1の場合
   if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value))
     {
      signal=100; // 売りシグナルあり
     }
//--- シグナル値を返す
   return(signal);
  }
 
戦闘状態でのアルゴリズムを決定する必要がある。
 

インジケーターはエラーなしでコンパイルされています:

そして動作します。

------------------

固定されたsmoothalgorithms.mqhファイルを使用する必要があります


Indicators: T3Taotra_HTF
Indicators: T3Taotra_HTF
  • 2016.06.30
  • www.mql5.com
T3Taotra_HTF: Author: Nikolay Kositsin...