記事"セマフォインディケーターを使った簡単なトレーディングシステム"についてのディスカッション

 

新しい記事 セマフォインディケーターを使った簡単なトレーディングシステム はパブリッシュされました:

複雑なトレーディングシステムも、よく見てみると複数の簡単な取引シグナルに基づいていることがわかります。ですから、開発の初心者はすぐに複雑なアルゴリズムを書き始める必要はありません。この記事ではセマフォインディケーターを使って取引を行うトレーディングシステムの例を紹介します。

図 4. Heiken Ashi Smoothed semaphoreトレンドインディケーター

作者: Nikolay Kositsin

 
この記事は非常に分かりやすい。
この記事の内容は非常に明快である。途中、ちょっとした指摘がある。例のコードに機械的なタイプミスがある:
//---- ローカル変数の宣言
   double TrendVelue[2];
 

Candles_SmoothedSignal.mqh」(.MQL5Include\Expert\MySignals\Candles_SmoothedSignal.mqh)のように、いくつかのシグナルをコンパイルしてリスタートしたのですが、MetaEditorがウィザードでExpert Advisorを作成するためにそれを見ることができません。

どうすれば解決できますか?

 

最も素晴らしく、徹底的な説明をありがとう.


デーブM

 

説明書通りにすべてをダウンロードし、解凍しましたが、テスターはすべてのシステムでエラーを出します:

OnInit が失敗したため、テスターが停止しました。

CExpert::ValidationSettings:エラーマネーパラメータ

CMoneyFixedLot::ValidationSettings: ロット金額は1.000000から100000000.000000の範囲でなければなりません

何を調整すべきか教えてください。

 

こんにちは!

ASCtrendインジケーター(indicators.zip)を基に作成されたASCtrendSignalトレーディングシグナルモジュール(圧縮ファイルmysignals.zip)をMQL5ウィザードに追加しようとしているのですが、うまくいきません。ASCtrendSignalトレーディングシグナルモジュールをIncludeExpertSignalに配置し、ASCtrendインディケータをIndicatorsパッケージに配置します。以下はASCtrendSignalトレーディングシグナルモジュールのコードです:

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh
//|著作権 © 2011, ニコライ・コシッツィン 
//|Khabarovsk、farria@mail.redcom.ru|。 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin."
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| 含まれるファイル|
//+------------------------------------------------------------------+
#property tester_indicator "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
//--- ウィザードの説明開始
//+------------------------------------------------------------------+ 
| 定数の宣言|
//+------------------------------------------------------------------+ 
#define  OPEN_LONG     80  // エキスパートアドバイザーに買いコマンドを返す定数。
#define  OPEN_SHORT    80  // 売りコマンドを Expert Advisor に返す定数。
#define  CLOSE_LONG    40  // エキスパートアドバイザーにロングポジションをクローズするコマンドを返す定数。
#define  CLOSE_SHORT   40  // ショートポジションをクローズするコマンドを Expert Advisor に返す定数。
#define  REVERSE_LONG  100 // ロングポジションを反転させるコマンドを Expert Advisor に返す定数。
#define  REVERSE_SHORT 100 // ショートポジションを反転させるコマンドを Expert Advisor に返す定数。
#define  NO_SIGNAL      0  // シグナルがないことをExpert Advisorに返す定数
//+----------------------------------------------------------------------+
//| クラスの説明|
//| タイトル=ASCtrendインディケータに基づくシグナル
//| Type=SignalAdvanced.|
|名前=ASCtrend|
| クラス=CASCtrendSignal|
//| ページ|
//| Parameter=BuyPosOpen,bool,true,買い付け許可
//| Parameter=SellPosOpen,bool,true,売却の許可。
//| パラメータ=BuyPosClose,bool,true,ロング・ポジションの終了を許可する。
//| パラメータ=SellPosClose,bool,true,ショートポジションの終了を許可する。
//| パラメータ=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe||タイムフレーム
//| パラメータ=RISK,int,4,リスクレベル|
//| Parameter=SignalBar,uint,1,エントリーシグナルのバーインデックス
//+----------------------------------------------------------------------+
//--- ウィザードの説明 終了
//+----------------------------------------------------------------------+
//| CASCtrendSignal クラス。|
//| 目的:取引シグナルを生成するクラス。
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| CExpertSignalクラスから派生している。
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {
protected:
   CiCustom          m_indicator;      // ASCtrend 値にアクセスするためのオブジェクト

   //--- パラメータを調整
   bool              m_BuyPosOpen;       // 購入許可
   bool              m_SellPosOpen;      // 販売許可
   bool              m_BuyPosClose;      // ロングポジションからの撤退許可
   bool              m_SellPosClose;     // ショートポジションからの撤退許可
   ENUM_TIMEFRAMES   m_Ind_Timeframe;    // ASCtrend インジケータのタイムフレーム
   uint              m_RISK;             // リスクレベル
   uint              m_SignalBar;        // エントリーシグナルのバーインデックス

public:
                     CASCtrendSignal();

   //--- 調整可能なパラメーターの設定方法
   void               BuyPosOpen(bool value)                  { m_BuyPosOpen=value;       }
   void               SellPosOpen(bool value)                 { m_SellPosOpen=value;      }
   void               BuyPosClose(bool value)                 { m_BuyPosClose=value;      }
   void               SellPosClose(bool value)                { m_SellPosClose=value;     }
   void               Ind_Timeframe(ENUM_TIMEFRAMES value)    { m_Ind_Timeframe=value;    }
   void               RISK(uint value)                        { m_RISK=value;             }
   void               SignalBar(uint value)                   { m_SignalBar=value;        }

   //--- 調整可能なパラメータ検証方法
   virtual bool      ValidationSettings();
   //--- 調整可能なパラメータ検証方法
   virtual bool      InitIndicators(CIndicators *indicators); // インジケータの初期化
   //--- 市場参入シグナルの生成方法
   virtual int       LongCondition();
   virtual int       ShortCondition();

   bool              InitASCtrend(CIndicators *indicators);   // ASCtrendインジケータの初期化メソッド

protected:

  };
//+------------------------------------------------------------------+
//CASCtrendSignal コンストラクタ。|
//| INPUT: いいえ。|
//| OUTPUT:いいえ。|
//|| REMARK: No.|
//+------------------------------------------------------------------+
void CASCtrendSignal::CASCtrendSignal()
  {
//--- デフォルトパラメーターの設定
   m_BuyPosOpen=true;
   m_SellPosOpen=true;
   m_BuyPosClose=true;
   m_SellPosClose=true;
   
//--- インジケータの入力パラメータ
   m_Ind_Timeframe=PERIOD_H4;
   m_RISK=4;
//--- 
   m_SignalBar=1;
   m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE;
  }
//+------------------------------------------------------------------+
//| 調整可能なパラメータをチェックする。|
//| INPUT: いいえ。|
//| OUTPUT: 設定が有効な場合はtrue、有効でない場合はfalse。
//|| REMARK: No.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::ValidationSettings()
  {
//--- パラメータをチェックする
   if(m_RISK<=0)
     {
      printf(__FUNCTION__+": Risk level must be above zero");
      return(false);
     }

//--- 成功裏に終了
   return(true);
  }
//+------------------------------------------------------------------+
//| 指標と時系列の初期化。
//| INPUT: indicators - オブジェクト・コレクションへのポインタ |.
//| 指標と時系列。|
//| OUTPUT:成功した場合はtrue、そうでない場合はfalse。
//|| REMARK: No.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitIndicators(CIndicators *indicators)
  {
//--- ポインタのチェック
   if(indicators==NULL) return(false);

//--- インジケータの初期化 
   if(!InitASCtrend(indicators)) return(false);

//--- 成功裏に終了
   return(true);
  }
//+------------------------------------------------------------------+
//| ASCtrend インジケータの初期化。|
//| INPUT: indicators - オブジェクト・コレクションへのポインタ |.
//| 指標と時系列。|
//| OUTPUT:成功した場合はtrue、そうでない場合はfalse。
//|| REMARK: No.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitASCtrend(CIndicators *indicators)
  {
//--- ポインタのチェック
   if(indicators==NULL) return(false);

//--- コレクションにオブジェクトを追加する
   if(!indicators.Add(GetPointer(m_indicator)))
     {
      printf(__FUNCTION__+": error of adding the object");
      return(false);
     }

//--- インジケーターのパラメーターを設定する
   MqlParam parameters[2];
   
   parameters[0].type=TYPE_STRING;
   parameters[0].string_value="ASCtrend.ex5";
   
   parameters[1].type=TYPE_INT;
   parameters[1].integer_value=m_RISK;

//--- オブジェクトの初期化 
   if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters))
     {
      printf(__FUNCTION__+": object initialization error");
      return(false);
     }
     
//--- バッファ数
   if(!m_indicator.NumBuffers(2)) return(false);
   
//--- ASCtrend インジケーターは正常に初期化されました。
   return(true);
  }
//+------------------------------------------------------------------+
//| ロング・ポジションを建てる条件をチェックする。
|と短いものを閉じる|
//| INPUT:いいえ|
//| OUTPUT:0から100までの投票重み|
//|| REMARK: No.|
//+------------------------------------------------------------------+
int CASCtrendSignal::LongCondition()
  {
//--- 買いシグナルはASCtrendインディケータのバッファ1によって決定される。
   double Signal=m_indicator.GetData(1,m_SignalBar);

//--- 取引シグナルを受け取る 
   if(Signal && Signal!=EMPTY_VALUE)
     {
      if(m_BuyPosOpen)
        {
         if(m_SellPosClose) return(REVERSE_SHORT);
         else return(OPEN_LONG);
        }
      else
        {
         if(m_SellPosClose) return(CLOSE_SHORT);
        }
     }

//--- ショートポジションの決済シグナルを探す
   if(!m_SellPosClose) return(NO_SIGNAL);

   int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe);

   for(int bar=int(m_SignalBar); bar<Bars_; bar++)
     {
      Signal=m_indicator.GetData(0,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL);

      Signal=m_indicator.GetData(1,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_SHORT);
     }

//--- 取引シグナルなし
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+
//| ショートポジションを建てるための条件をチェックする。
|長いものを閉じる|
//| INPUT:いいえ|
//| OUTPUT:0から100までの投票重み|
//|| REMARK: No.|
//+------------------------------------------------------------------+
int CASCtrendSignal::ShortCondition()
  {
//--- 売りシグナルはASCtrendインジケータのバッファ0によって決定される。
   double Signal=m_indicator.GetData(0,m_SignalBar);
   
//--- 取引シグナルを受け取る
   if(Signal && Signal!=EMPTY_VALUE)
     {
      if(m_SellPosOpen)
        {
         if(m_BuyPosClose) return(REVERSE_LONG);
         else return(OPEN_SHORT);
        }
      else
        {
         if(m_BuyPosClose) return(CLOSE_LONG);
        }
     }

//--- ロングポジションの決済シグナルを探す
   if(!m_BuyPosClose) return(NO_SIGNAL);

   int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); // Здесь код исправлен с учетом подсказки от Владимира Карпутова: Symbol() заменен на m_symbol.Name()
   for(int bar=int(m_SignalBar); bar<Bars_; bar++)
     {
      Signal=m_indicator.GetData(1,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL);

      Signal=m_indicator.GetData(0,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_LONG);
     }

//--- 取引シグナルなし 
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+

問題は何でしょうか?

よろしくお願いします。

 
MrBrooklin:

こんにちは!

ASCtrendインジケーター(indicators.zip)を基に作成されたASCtrendSignalトレーディングシグナルモジュール(圧縮ファイルmysignals.zip)をMQL5ウィザードに追加しようとしているのですが、うまくいきません。ASCtrendSignalトレーディングシグナルモジュールをIncludeExpertSignalに配置し、ASCtrendインディケータをIndicatorsパッケージに配置します。以下はASCtrendSignalトレーディングシグナルモジュールのコードです:

何が問題なのでしょうか?

よろしくお願いします。

この同じ問題は、インジケーターに基づいて書かれた他の売買シグナルのモジュールでも発生することを付け加えておきます。どうやら同じ問題があるようです。これらの問題を解決するために助けてください。

よろしくお願いします。

追伸:indicators.zipから 解凍したいくつかのインジケーターは ターミナルにインストールされ、正常に動作しています。

 

大事なのは順番だ

// ウィザードの説明開始
//+----------------------------------------------------------------------+
//| クラスの説明|
//| タイトル=ASCtrendインディケータに基づくシグナル
//| Type=SignalAdvanced.|
|名前=ASCtrend|
| クラス=CASCtrendSignal|
//| ページ|
//| Parameter=BuyPosOpen,bool,true,買い付け許可
//| Parameter=SellPosOpen,bool,true,売却の許可。
//| パラメータ=BuyPosClose,bool,true,ロング・ポジションの終了を許可する。
//| パラメータ=SellPosClose,bool,true,ショートポジションの終了を許可する。
//| パラメータ=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe||タイムフレーム
//| パラメータ=RISK,int,4,リスクレベル|
//| Parameter=SignalBar,uint,1,エントリーシグナルのバーインデックス
//+----------------------------------------------------------------------+
// ウィザードの説明 終了

ではなく

//--- wizard description start
//--- wizard description end

また、開始と終了の間はサービス・ブロックのみで、変数やマクロの代入はありません。


これがモジュールの開始方法です:

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh
//|著作権 © 2011, ニコライ・コシッツィン
//|Khabarovsk、farria@mail.redcom.ru|。
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin."
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| 含まれるファイル|
//+------------------------------------------------------------------+
//#property tester_indicator "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
// ウィザードの説明開始
//+----------------------------------------------------------------------+
//| クラスの説明|
//| タイトル=ASCtrendインディケータに基づくシグナル
//| Type=SignalAdvanced.|
|名前=ASCtrend|
| クラス=CASCtrendSignal|
//| ページ|
//| Parameter=BuyPosOpen,bool,true,買い付け許可
//| Parameter=SellPosOpen,bool,true,売却の許可。
//| パラメータ=BuyPosClose,bool,true,ロング・ポジションの終了を許可する。
//| パラメータ=SellPosClose,bool,true,ショートポジションの終了を許可する。
//| パラメータ=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe||タイムフレーム
//| パラメータ=RISK,int,4,リスクレベル|
//| Parameter=SignalBar,uint,1,エントリーシグナルのバーインデックス
//+----------------------------------------------------------------------+
// ウィザードの説明 終了
//+------------------------------------------------------------------+
| 定数の宣言|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80  // エキスパートアドバイザーに買いコマンドを返す定数。
#define  OPEN_SHORT    80  // 売りコマンドを Expert Advisor に返す定数。
#define  CLOSE_LONG    40  // エキスパートアドバイザーにロングポジションをクローズするコマンドを返す定数。
#define  CLOSE_SHORT   40  // ショートポジションをクローズするコマンドを Expert Advisor に返す定数。
#define  REVERSE_LONG  100 // ロングポジションを反転させるコマンドを Expert Advisor に返す定数。
#define  REVERSE_SHORT 100 // ショートポジションを反転させるコマンドを Expert Advisor に返す定数。
#define  NO_SIGNAL      0  // シグナルがないことをExpert Advisorに返す定数
//+----------------------------------------------------------------------+
//| CASCtrendSignal クラス。|
//| 目的:取引シグナルを生成するクラス。
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| CExpertSignalクラスから派生している。
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

編集後、MetaEditorをリロードする。

 
Vladimir Karputov:

大事なのは順番だ:

ではなく

また、開始と終了の間はサービスブロックのみで、変数やマクロの置換はありません。


これがモジュールの開始方法です:

編集後にMetaEditorをリロードする。

ありがとう、ウラジミール!

すべてうまくいきました。

ありがとう、ウラジミール。

 

取引、自動取引システム、取引戦略のテストに関するフォーラム

記事 "セマフォ指標を使ったシンプルな取引システム "についての議論

ウラジーミル・カルプトフ, 2019.10.30 08:50

順序は重要です:

 // ウィザードの説明開始
//+----------------------------------------------------------------------+
//| クラスの説明|
//| タイトル=ASCtrendインディケータに基づくシグナル
//| タイプ=シグナル・アドバンス|
|名前=ASCtrend|
| クラス=CASCtrendSignal|
//| ページ|
//| Parameter=BuyPosOpen,bool,true,買い付け許可
//| パラメータ=SellPosOpen,bool,true,販売許可|販売許可
//| パラメータ=BuyPosClose,bool,true,ロング・ポジションの終了を許可する。
//| パラメータ=SellPosClose,bool,true,ショートポジションの終了を許可する。
//| パラメータ=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe||タイムフレーム
//| パラメータ=RISK,int,4,リスクレベル|
//| Parameter=SignalBar,uint,1,エントリーシグナルのバーインデックス
//+----------------------------------------------------------------------+
// ウィザードの説明 終了 

しかし

 //--- wizard description start
//--- wizard description end 

そして、開始と終了の間はサービスブロックのみで、変数やマクロの代入はありません。


これはモジュールが持つべき始まりです:

 //+------------------------------------------------------------------+
//|ASCtrendSignal.mqh
//|著作権 © 2011, ニコライ・コシッツィン
//|Khabarovsk、farria@mail.redcom.ru|。
//+------------------------------------------------------------------+
#property  copyright "著作権 © 2011, ニコライ・コシッツィン"
#property  link        "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| 含まれるファイル|
//+------------------------------------------------------------------+
//#property tester_indicator "ASCtrend.ex5"
#include  <Expert\ExpertSignal.mqh>
// ウィザードの説明開始
//+----------------------------------------------------------------------+
//| クラスの説明|
//| タイトル=ASCtrendインディケータに基づくシグナル
//| タイプ=シグナル・アドバンス|
|名前=ASCtrend|
| クラス=CASCtrendSignal|
//| ページ|
//| Parameter=BuyPosOpen,bool,true,買い付け許可
//| パラメータ=SellPosOpen,bool,true,販売許可|販売許可
//| パラメータ=BuyPosClose,bool,true,ロング・ポジションの終了を許可する。
//| パラメータ=SellPosClose,bool,true,ショートポジションの終了を許可する。
//| パラメータ=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe||タイムフレーム
//| パラメータ=RISK,int,4,リスクレベル|
//| Parameter=SignalBar,uint,1,エントリーシグナルのバーインデックス
//+----------------------------------------------------------------------+
// ウィザードの説明 終了
//+------------------------------------------------------------------+
| 定数の宣言|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80    // エキスパートアドバイザーに買いコマンドを返す定数。
#define  OPEN_SHORT     80    // 売りコマンドを Expert Advisor に返す定数。
#define  CLOSE_LONG     40    // エキスパートアドバイザーにロングポジションをクローズするコマンドを返す定数。
#define  CLOSE_SHORT   40    // ショートポジションをクローズするコマンドを Expert Advisor に返す定数。
#define  REVERSE_LONG   100 // ロングポジションを反転させるコマンドを Expert Advisor に返す定数。
#define  REVERSE_SHORT 100 // ショートポジションを反転させるコマンドを Expert Advisor に返す定数。
#define  NO_SIGNAL       0    // シグナルがないことをExpert Advisorに返す定数
//+----------------------------------------------------------------------+
//| CASCtrendSignal クラス。|
//| 目的:取引シグナルを生成するクラス。
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| CExpertSignalクラスから派生。|
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

変更後、MetaEditorを再起動してください。