記事"マーケットでの公開前にトレードロボットに行うべき検査"についてのディスカッション - ページ 3 12345678910...26 新しいコメント Vladislav Andruschenko 2016.12.18 12:29 #21 Bogdan Bovykin:パネルとして作成し、そのようにチェックするのですか? それともどのようにするのですか?今現在、手動でトレードを開始し、このEAがチャートにオープンオーダーのチケットにアタッチされています。OKもしあなたがユーティリティを自分で書いたのであれば、INITのテスターで取引を開くことができ、アシスタントがそれを管理します。 Evgeniy Tereshchenko 2017.01.16 21:34 #22 ターミナルでExpert Advisorがテストに合格し、取引を開始した 場合、自動チェックでは、取引が開始されていない(ペアとTFが同じ)というエラーが表示され、それぞれ "自動チェック "に合格しません。偶然ですか?私はそうは思いません!どうすればいい? Vladislav Andruschenko 2017.01.17 09:18 #23 私も最近同じエラーに見舞われた。 Winsor Hoang 2017.03.09 19:03 #24 MetaQuotesが開発者用のテンプレートを作成することは可能でしょうか?開発者にとってはより簡単になりますし、MetaQuotesは提出されたEAをチェックする ための膨大な費用とリソースを節約することができます。開発者用のテンプレートはコードベースにあります。https://www.mql5.com/ja/code/mt4/experts/best Rashid Umarov 2017.06.22 11:33 #25 Alain Verleyen:興味深い記事だが、残念なことに誤字脱字が多すぎる(提案されているコードに誤字脱字や論理的な誤りがある)。1°1°//+------------------------------------------------------------------+ //| シンボルに対する注文の最大許容数量を返す。 //+------------------------------------------------------------------+ double NewOrderAllowedVolume(string symbol) { double allowed_volume=0; //--- オーダーの最大量の制限を取得する double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); //--- シンボルによるボリュームの制限を得る double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT); //--- シンボルでオープンポジションの出来高を取得する double opened_volume=PositionVolume(symbol); if(opened_volume>=0) There is no opened positions { //--- 容積を使い果たした場合 if(max_volume-opened_volume<=0) return(0); //--- オープン・ポジションの出来高がmax_volumeを超えないこと。 double orders_volume_on_symbol=PendingsVolume(symbol); allowed_volume=max_volume-opened_volume-orders_volume_on_symbol; if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume; } return(allowed_volume); }論理的エラー。まだポジションがない場合、ペンディングボリュームをチェックし、許容ボリュームを計算する必要があります。このコードは、未決済のポジションがない場合、allowed_volume=0を返します。 なぜかというと、このコードでは未決済注文の 数量もチェックしているからです。 Rashid Umarov 2017.06.22 11:48 #26 Alain Verleyen:2°+パラメータがない(PrintFormatには%はあるが、パラメータは3つしかない)。ありがとうございます!修正bool OrderModifyCheck(ulong ticket,double price,double sl,double tp) { //--- チケット順の選択 if(orderinfo.Select(ticket)) { //--- 未決注文が発注されたシンボルのサイズとシンボル名。 string symbol=orderinfo.Symbol(); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); //--- オープン価格に変化があるかどうかをチェックする。 bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point); //--- ストップロス・レベルに変更があるかどうかをチェックする。 bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point); //--- タケプロフィット・レベルに変更があるかどうかをチェックする。 bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp); //--- レベルに変化があれば if(PriceOpenChanged || StopLossChanged || TakeProfitChanged) return(true); // 順序は変更可能 //--- オープン、ストップロス、テイクプロフィットのレベルに変更はありません。 else //--- エラーを通知する PrintFormat("Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f", ticket,orderinfo.PriceOpen(),orderinfo.StopLoss(),orderinfo.TakeProfit()); } //--- 最後まで来たが、オーダーに変更はない。 return(false); // 修正する意味はない } Rashid Umarov 2017.06.22 12:00 #27 Alain Verleyen:3°上記2°と同様のエラー。また、OrderModifyCheck() mql4バージョンでも同じエラーが発生します。すべて修正しました! Rashid Umarov 2017.06.22 12:08 #28 Alain Verleyen:2°bool OrderModifyCheck(ulong ticket,double price,double sl,double tp) { //--- チケット順の選択 if(orderinfo.Select(ticket)) { //--- 未決注文が発注されたシンボルのサイズとシンボル名。 string symbol=orderinfo.Symbol(); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); //--- オープン価格に変化があるかどうかをチェックする。 bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point); //--- ストップロス・レベルに変更があるかどうかをチェックする。 bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);その他の論理エラー。SL/TPを1ポイント変更することは許される。であるべきです。私が記憶している限りでは、このような方法は、取引要求がサーバーに届くまでの間、価格が変化して、取引サーバーから拒否されないようにするためです。より安全な方法です。 Rashid Umarov 2017.06.22 12:14 #29 Alain Verleyen:2°bool OrderModifyCheck(ulong ticket,double price,double sl,double tp) { //--- チケット順の選択 if(orderinfo.Select(ticket)) { //--- 未決注文が発注されたシンボルのサイズとシンボル名。 string symbol=orderinfo.Symbol(); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); //--- オープン価格に変化があるかどうかをチェックする。 bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point); //--- ストップロス・レベルに変更があるかどうかをチェックする。 bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point); //--- タケプロフィット・レベルに変更があるかどうかをチェックする。 bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp); //--- レベルに変化があれば if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)+ タイプミス です。"-tp)>=point); "とすべきです。 ありがとう Ziheng Zhuang 2017.06.23 05:35 #30 bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);//--bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-tp)>point); 12345678910...26 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
パネルとして作成し、そのようにチェックするのですか? それともどのようにするのですか?
今現在、手動でトレードを開始し、このEAがチャートにオープンオーダーのチケットにアタッチされています。
OK
もしあなたがユーティリティを自分で書いたのであれば、INITのテスターで取引を開くことができ、アシスタントがそれを管理します。
ターミナルでExpert Advisorがテストに合格し、取引を開始した 場合、自動チェックでは、取引が開始されていない(ペアとTFが同じ)というエラーが表示され、それぞれ "自動チェック "に合格しません。
偶然ですか?私はそうは思いません!
どうすればいい?
MetaQuotesが開発者用のテンプレートを作成することは可能でしょうか?開発者にとってはより簡単になりますし、MetaQuotesは提出されたEAをチェックする ための膨大な費用とリソースを節約することができます。
開発者用のテンプレートはコードベースにあります。
https://www.mql5.com/ja/code/mt4/experts/best
興味深い記事だが、残念なことに誤字脱字が多すぎる(提案されているコードに誤字脱字や論理的な誤りがある)。
1°
1°
論理的エラー。まだポジションがない場合、ペンディングボリュームをチェックし、許容ボリュームを計算する必要があります。このコードは、未決済のポジションがない場合、allowed_volume=0を返します。
2°
+パラメータがない(PrintFormatには%はあるが、パラメータは3つしかない)。
ありがとうございます!修正
3°
上記2°と同様のエラー。
また、OrderModifyCheck() mql4バージョンでも同じエラーが発生します。
すべて修正しました!
2°
その他の論理エラー。SL/TPを1ポイント変更することは許される。であるべきです。
私が記憶している限りでは、このような方法は、取引要求がサーバーに届くまでの間、価格が変化して、取引サーバーから拒否されないようにするためです。
より安全な方法です。
2°
+ タイプミス です。"-tp)>=point); "とすべきです。
//--