この記事の内容は非常に明快である。途中、ちょっとした指摘がある。例のコードに機械的なタイプミスがある:
//---- ローカル変数の宣言 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/. | //| 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); } //+------------------------------------------------------------------+
問題は何でしょうか?
よろしくお願いします。
こんにちは!
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/. | //| CExpertSignalクラスから派生している。 //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
編集後、MetaEditorをリロードする。
大事なのは順番だ:
ではなく
また、開始と終了の間はサービスブロックのみで、変数やマクロの置換はありません。
これがモジュールの開始方法です:
編集後に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/. | //| CExpertSignalクラスから派生。| //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
変更後、MetaEditorを再起動してください。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 セマフォインディケーターを使った簡単なトレーディングシステム はパブリッシュされました:
複雑なトレーディングシステムも、よく見てみると複数の簡単な取引シグナルに基づいていることがわかります。ですから、開発の初心者はすぐに複雑なアルゴリズムを書き始める必要はありません。この記事ではセマフォインディケーターを使って取引を行うトレーディングシステムの例を紹介します。
作者: Nikolay Kositsin