記事"マーケットでの公開前にトレードロボットに行うべき検査"についてのディスカッション - ページ 2 123456789...26 新しいコメント Vasiliy Pushkaryov 2016.10.05 12:15 #11 ありがとうございます。サブトピック「1シンボルによるロット数の制限」の 中で、PositionVolume() 関数のコードが2回出てくるのですが、よくわかりません。 すぐ下にNewOrderAllowedVolume() 関数とその呼び出しの説明があります:double orders_volume_on_symbol=PendingsVolume(symbol);PendingsVolume() 関数の記述だけが、この記事のどこにもない。PendingsVolume() 関数の代わりにPositionVolume() 関数が誤って再度記載されている場合は、訂正をお願いします。 Aleksey Semenov 2016.11.29 23:29 #12 100%バリデーションをパスできるシンプルなEAの例を調べて、自分のコードと比較して、何がエラーになり得るかを見つけたい。 Alain Verleyen 2016.12.05 15:09 #13 興味深い記事だが、残念なことに誤字脱字が多すぎる(提案されているコードに誤字脱字や論理的な誤りがある)。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) { //--- 容積を使い果たした場合 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を返す。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) return(true); // 順序は変更可能 //--- オープン、ストップロス、テイクプロフィットのレベルに変更はありません。 else //--- エラーを通知する PrintFormat("Order #%d already has levels of Open=%.5f SL=.5f TP=%.5f", ticket,orderinfo.StopLoss(),orderinfo.TakeProfit()); } //--- 最後まで来たが、オーダーに変更はない。 return(false); // 修正する意味はない }もう一つの論理エラー。SL/TPを1ポイント変更することは可能です。であるべきです。+ タイプミス。"-tp)>=point); "とすべき。 + パラメータが 足りない(PrintFormatには%はあるが、パラメータは3つしかない)。3°bool PositionModifyCheck(ulong ticket,double sl,double tp)上記2°と同様のエラー。また、OrderModifyCheck() mql4バージョンでも同じエラーが発生します。これらのエラーを修正していただきありがとうございました。 Alain Verleyen 2016.12.05 15:25 #14 この記事に関する他のコメントもありますが、今回はエラーとは関係なく、個人的な意見です:Access violation このエラーは、アクセスが拒否されたメモリにアクセスしようとしたときに発生します。このような場合、プロフィールのサービスデスクまたは連絡先 ページから開発者に連絡する必要があります。面白いことに、これはユーザー(コーダー)のエラーに関する記事とは何の関係もありません。アクセス違反とは、Metaquotesコードのエラーを意味します。 この種のエラーは比較的まれで、その多くには原因を見つけるためのコードが用意されて います。 定数 値 説明 err_internal_error 4001 予期しない内部エラー err_wrong_internal_parameter 4002 クライアント・ターミナル関数の内部呼び出しのパラメータが間違っています。エラーコードは助けになるものだが、「予期せぬ内部エラー」はまったく役に立たないし、「クライアント端末関数の内部呼び出しでパラメータが間違っています」は実に不可解だ(少なくとも私には)。初心者の方はエラー処理に関する記事をすべて読むことをお勧めしますし 、フォーラムや記事のコメントで質問することも できます。MQL5.コミュニティの他の経験豊富なメンバーが、不明な点を解決する手助けをしてくれるでしょう。この記事で集めた情報が、より信頼性の高い取引ロボットを短時間で作成するのに役立つことを願っています。 マーケットはMetaquotesによって提案された商業サービスであり、彼らはサポートを引き受けるべきであり、コミュニティに頼るべきではない。私の考えでは、それはプロフェッショナルなアプローチではありません。このような批判があるにもかかわらず、私はMetaquotesのMT4/MT5における素晴らしい仕事に感謝し、彼らがその品質とプロフェッショナリズムのレベルを高め続けることを奨励したいと思います。 Liubomir Gaidarji 2016.12.07 10:39 #15 Andrey Barinov:これが疑問の残る部分だ:なぜ、必要証拠金はエクイティと比較され、フリーマージンとは比較されないのですか?http://prntscr.com/dgd6s4何が問題なのか?証拠金をチェックし、十分な資金がない、取引しないが、フクロウを上げることはできません。 Снимка на екрана prnt.sc Снимано с Lightshot Bogdan Bovykin 2016.12.16 09:46 #16 どうすればよいのか教えてください!私はExpert Advisor Assistantという製品を作りたいと思っています。バインドしないと、テスターにトレードが表示されず、テストに合格しません。 Vladislav Andruschenko 2016.12.16 09:53 #17 試してみたのですか? それとも単なる思いつきですか? Bogdan Bovykin 2016.12.18 11:44 #18 Vladislav Andruschenko: やってみた? やったよ! チェックアウトされなかったってメッセージが出て、フクロウはどのトレードもオープンしなかった! まあ、アシスタントならしないだろうね。 Vladislav Andruschenko 2016.12.18 12:22 #19 Bogdan Bovykin: 試してみましたが、検証されていないとのメッセージが表示され、トレードは1つも開きませんでした!まあ、アシスタントであれば開くことはないでしょう。ユーティリティの場合は、モデレーターが個人的にEAをチェックします。ユーティリティは、テスターが少なくとも2、3のトレードをオープンし、アシスタントとして同行するように設定できます。問題ありません。 Bogdan Bovykin 2016.12.18 12:28 #20 Vladislav Andruschenko:ユーティリティの場合は、モデレーターが個人的にEAをチェックします。ユーティリティの場合、テスターが少なくとも2、3回取引を開始し、アシスタントとして同行するように設定することができます。それは問題ない。つまり、パネルにして、そのようにチェックしたいのですか? それとも?今現在、手動でトレードをオープンし、オープンした注文のチケットにこのEAをチャートに添付するだけです。 123456789...26 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ありがとうございます。
サブトピック「1シンボルによるロット数の制限」の 中で、PositionVolume() 関数のコードが2回出てくるのですが、よくわかりません。
すぐ下にNewOrderAllowedVolume() 関数とその呼び出しの説明があります:
double orders_volume_on_symbol=PendingsVolume(symbol);PendingsVolume() 関数の記述だけが、この記事のどこにもない。
PendingsVolume() 関数の代わりにPositionVolume() 関数が誤って再度記載されている場合は、訂正をお願いします。
興味深い記事だが、残念なことに誤字脱字が多すぎる(提案されているコードに誤字脱字や論理的な誤りがある)。
1°
論理的エラー。まだポジションがない場合、ペンディングボリュームをチェックし、許容ボリュームを計算する必要があります。このコードは、未決済のポジションがない場合、allowed_volume=0を返す。
2°
もう一つの論理エラー。SL/TPを1ポイント変更することは可能です。であるべきです。
+ タイプミス。"-tp)>=point); "とすべき。
+ パラメータが 足りない(PrintFormatには%はあるが、パラメータは3つしかない)。
3°
上記2°と同様のエラー。
また、OrderModifyCheck() mql4バージョンでも同じエラーが発生します。
これらのエラーを修正していただきありがとうございました。
この記事に関する他のコメントもありますが、今回はエラーとは関係なく、個人的な意見です:
Access violation
このエラーは、アクセスが拒否されたメモリにアクセスしようとしたときに発生します。このような場合、プロフィールのサービスデスクまたは連絡先 ページから開発者に連絡する必要があります。この種のエラーは比較的まれで、その多くには原因を見つけるためのコードが用意されて います。
初心者の方はエラー処理に関する記事をすべて読むことをお勧めしますし 、フォーラムや記事のコメントで質問することも できます。MQL5.コミュニティの他の経験豊富なメンバーが、不明な点を解決する手助けをしてくれるでしょう。この記事で集めた情報が、より信頼性の高い取引ロボットを短時間で作成するのに役立つことを願っています。
このような批判があるにもかかわらず、私はMetaquotesのMT4/MT5における素晴らしい仕事に感謝し、彼らがその品質とプロフェッショナリズムのレベルを高め続けることを奨励したいと思います。
これが疑問の残る部分だ:
なぜ、必要証拠金はエクイティと比較され、フリーマージンとは比較されないのですか?
http://prntscr.com/dgd6s4
何が問題なのか?
証拠金をチェックし、十分な資金がない、取引しないが、フクロウを上げることはできません。
やってみた?
試してみましたが、検証されていないとのメッセージが表示され、トレードは1つも開きませんでした!まあ、アシスタントであれば開くことはないでしょう。
ユーティリティの場合は、モデレーターが個人的にEAをチェックします。
ユーティリティは、テスターが少なくとも2、3のトレードをオープンし、アシスタントとして同行するように設定できます。問題ありません。
ユーティリティの場合は、モデレーターが個人的にEAをチェックします。
ユーティリティの場合、テスターが少なくとも2、3回取引を開始し、アシスタントとして同行するように設定することができます。それは問題ない。
つまり、パネルにして、そのようにチェックしたいのですか? それとも?
今現在、手動でトレードをオープンし、オープンした注文のチケットにこのEAをチャートに添付するだけです。