便利ですね! ...色変更の基準が知りたいです。
この素晴らしいインジケーターをありがとう。
旧バージョンも新バージョンと同じくらい、いや、それ以上に興味深く有用なものでした。
旧バージョンもmq5に移植していただけませんか?そうしていただけると非常にありがたいです。
よろしくお願いします!
このインジケーターからシグナルを作成しようとしましたが、できませんでした。
助けてください。
//+------------------------------------------------------------------+ //|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); }
戦闘状態でのアルゴリズムを決定する必要がある。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索


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