取引ロボットをマーケットにリリースする際のバリデーションエラー。 - ページ 6 12345678910 新しいコメント Artyom Trishkin 2020.07.23 18:36 #51 Andrey Kaunov:私がチェックしないと思っているのか。ロットサイズの確認は別機能で行いますストップロスとテイクプロフィットは取引開始時にゼロに等しいため、ここではリミットは必要ありません。RefreshRates()はロット計算時にデータを更新 します。もちろん、各入力前の接続等のチェックはありませんが、そこは問題ではありません。OrderSend がリクエストを送信した場合、130、131 などの特定のエラーが発生します。しかし、私が持っているのは オープンに向けて注文を送ろうとしているわけでは全くありません。最後のテストでも、OnInit()関数で チェックポジションを設定すると可能です。でも、もうすべてダブルチェック済みです。次にどこへ行けばいいのかわからない。 ロット正規化機能では、ロットを最大/最小値で確認した後、切り上げます。 Andrey Kaunov 2020.07.23 18:39 #52 Artyom Trishkin: ロット正規化機能では、ロットを最大/最小値で確認した後、切り上げます。 まあ、そうなんですけどね。MathRound(); P.S. 通過してしまうことがあるので、入力パラメータから掘る必要があるのだと思います。各パラメーターで「フールプルーフ」チェックを行う。 Andrey Kaunov 2020.07.24 07:41 #53 バリデータのテストログのことではありません。しかし、少なくともバリデーションされていないパラメータは送信できるかもしれません。コードの修正に全く引っかかるものがない。テストパラメータを選択する際の変動幅は無限大になる可能性があることを理解しています。int 型の変数には +50000 と -45000 のどちらかを設定することができます。しかし、いくつかの入力パラメータを単純にある範囲の 値に制限することはできません。ツールによって異なるでしょう。 Artyom Trishkin 2020.07.24 08:50 #54 Andrey Kaunov: バリデーターテストログの話でもない。しかし、少なくともバリデーションされていないパラメータは送信できるかもしれません。コードの修正に全く引っかかるところがない。私は、検査項目の選択による変動が無限大になる可能性があることを理解しています。int 型の変数には +50000 と -45000 のどちらかを設定することができます。しかし、楽器によって異なるので、いくつかの入力パラメータを単純にある範囲の 値に限定することはできません。 取引ロットがすべてのケースで有効であることを確認する必要があります。有効なサイズ範囲をチェックした後に、コード内のロットを変更することを指摘したのは、無意味ではありません。 そして、絶対にやらなければならないのは、入力パラメータがバカになっていないかどうかのチェックである。 Andrey Kaunov 2020.07.24 09:09 #55 ロットに問題はありません。max/minでチェックされます。丸める前にステップで割られ、丸められた整数が 再びステップで掛けられる。完全に正しいロットを得ることができます。 //+------------------------------------------------------------------+ //| Функция нормализации лота | //+------------------------------------------------------------------+ double NormalizeLots(string symbol, double lot, bool is_margin=true) { if(lot<=0) return(0.0); RefreshRates(); double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); double free = AccountFreeMargin()*0.95; double margin = MarketInfo(symbol,MODE_MARGINREQUIRED); double _lot=lot<min?min:(lot>max?max:lot); _lot=MathRound(_lot/step)*step; if(is_margin && _lot*margin>free) _lot=0.0; //MathFloor(free/margin/step)*step; return(_lot); } _lot(0.568)/step(0.01)=56.8 MathRound(56.8)=57 57*step(0.01)=0.57 次に、オープンするのに十分な自由なマージンがあるかどうかをチェックします。バリデーターは全く悪口を言わない。入力パラメータが正しくないため、取引機能が表示されないようです。Expert Advisorは、単にある組み合わせでは全くトレードを行わないのですコンディションの悪いマーチンを持っているわけでもなく、ローソク足ごとに開くネットメーカーでもないのですが。 EAが論理的にあるパラメータで取引を行わないことをバリデーターにどのように説明すればよいですか? Artyom Trishkin 2020.07.24 09:45 #56 Andrey Kaunov:ロットに問題はありません。max/minでチェックされます。丸める前にステップで割られ、丸められた整数が 再びステップで掛けられる。完全に正しいロットを得ることができます。_lot(0.568)/step(0.01)=56.8MathRound(56.8)=5757*step(0.01)=0.57次に、オープンするのに十分な自由なマージンがあるかどうかがチェックされます。バリデーターは全く悪口を言わない。入力パラメータが正しくないため、取引機能が表示されないようです。Expert Advisorは、単にある組み合わせでは全くトレードを行わないのですコンディションの悪いマーチンや、ローソク足ごとに開くグリッドロックがあるわけでもない。 EAが論理的にあるパラメータを使用して取引を行わないことをバリデーターに説明するにはどうすればよいですか? 説明ではなく、間違った入力パラメータをEAに修正させる。好ましくは、その無効な値と有効な値への修正に関するメッセージをジャーナルに送信する。 また、何らかの理由で実世界で誤ったパラメータを入力した場合の責任をユーザーに負わせたい場合は、誤ったパラメータを入力したことをユーザーに通知する必要があります。 しかし、テスターにとっては、EAが取引 できるように、それらを修正することも必要です。 Andrey Kaunov 2020.07.24 10:17 #57 では、例えばEURUSD用のパラメータとGold用のパラメータがある場合、どのように調整することができるのでしょうか。現在、デフォルトの設定は、主要なペアについては多少なりとも許容範囲内ですが、ゴールドについては全く機能しません。そこにはトレードは存在しない。そのために、それぞれの楽器に合わせるためのパラメーターが存在するのだと(私は)理解しています。そんなに簡単なら、すべてのパラメータをExpert Advisorに埋め込んで、外部に何も送信しないようにしただろう。 バリデータのもう一つのバグは、他の時間枠を全く見ないことです。迂闊にも、ある程度アルゴリズムを犠牲にしてしまいました。Expert Advisor は、週足、D1、H4 などの他のタイムフレームから M1 までデータを取り込むことができます。しかし、数々の実験でわかったことですが、データはnullになるんです。どうすることもできない、回避することしかできない。なぜExpert Advisorを改造してまでアルゴリズムを変更しなければならないのでしょうか?バリデーターはテストに合わせなければならないのでは?そうしないと、完璧に動作するEAのテストが、ある種の重労働になってしまうのです。 Maxim Kuznetsov 2020.07.24 10:27 #58 Andrey Kaunov: では、例えばEURUSD用のパラメータとGold用のパラメータがある場合、どのように調整することができるのでしょうか。現在、デフォルトの設定は、主要なペアについては多少なりとも許容範囲内ですが、ゴールドについては全く機能しません。そこにはトレードは存在しない。そのために、それぞれの楽器に合わせるためのパラメーターが存在するのだと(私は)理解しています。そんなに簡単なら、すべてのパラメータをExpert Advisorに埋め込んで、外部に何も送信しないはずだ。 OrderSendの 直前に0による除算を入れている--そんなエラーがありました。そのため、OrderSendまで到達するものの、開くことができません。つまり、ロット/マージン/リミット/プライス、それらの何かが計算されていない Andrey Kaunov 2020.07.24 10:31 #59 Maxim Kuznetsov: OrderSendの直前に0による除算を行ったため、このようなエラーが発生しました。そのため、OrderSendまでは行くのですが、開くことができません。だから、ロット/マージン/リミット/価格、そのうちのいくつかは計算外なのです。 マキシム、これらのいずれかが説明されていない場合、バリデータは非常に明確なエラーを出します:130、131、134、145など。ここでは、そんなことはありません 追伸:信じてください、私は4日間で100以上のバリデーションを送信し、多くのオプションを試したのです。 Andrey Kaunov 2020.07.24 10:49 #60 はい、すぐに0による除算に到達します(だからOrderSend)。そして、エラーを発生させる。 しかし、Expert Advisor のコードに 0 で除算していないものをチェックに送ると、なぜか魔法のように指定期間中に全く取引を開始しないパラメータが設定され、エラーが返されるのです。これは私なりの解釈ですが、どうやら真実から遠く離れてはいないようです。 12345678910 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私がチェックしないと思っているのか。ロットサイズの確認は別機能で行います
ストップロスとテイクプロフィットは取引開始時にゼロに等しいため、ここではリミットは必要ありません。RefreshRates()はロット計算時にデータを更新 します。もちろん、各入力前の接続等のチェックはありませんが、そこは問題ではありません。OrderSend がリクエストを送信した場合、130、131 などの特定のエラーが発生します。しかし、私が持っているのは
オープンに向けて注文を送ろうとしているわけでは全くありません。最後のテストでも、OnInit()関数で チェックポジションを設定すると
可能です。でも、もうすべてダブルチェック済みです。次にどこへ行けばいいのかわからない。
ロット正規化機能では、ロットを最大/最小値で確認した後、切り上げます。
まあ、そうなんですけどね。
MathRound();
P.S. 通過してしまうことがあるので、入力パラメータから掘る必要があるのだと思います。各パラメーターで「フールプルーフ」チェックを行う。バリデーターテストログの話でもない。しかし、少なくともバリデーションされていないパラメータは送信できるかもしれません。コードの修正に全く引っかかるところがない。私は、検査項目の選択による変動が無限大になる可能性があることを理解しています。int 型の変数には +50000 と -45000 のどちらかを設定することができます。しかし、楽器によって異なるので、いくつかの入力パラメータを単純にある範囲の 値に限定することはできません。
取引ロットがすべてのケースで有効であることを確認する必要があります。有効なサイズ範囲をチェックした後に、コード内のロットを変更することを指摘したのは、無意味ではありません。
そして、絶対にやらなければならないのは、入力パラメータがバカになっていないかどうかのチェックである。
ロットに問題はありません。max/minでチェックされます。丸める前にステップで割られ、丸められた整数が 再びステップで掛けられる。完全に正しいロットを得ることができます。
_lot(0.568)/step(0.01)=56.8
MathRound(56.8)=57
57*step(0.01)=0.57
次に、オープンするのに十分な自由なマージンがあるかどうかをチェックします。バリデーターは全く悪口を言わない。入力パラメータが正しくないため、取引機能が表示されないようです。Expert Advisorは、単にある組み合わせでは全くトレードを行わないのですコンディションの悪いマーチンを持っているわけでもなく、ローソク足ごとに開くネットメーカーでもないのですが。 EAが論理的にあるパラメータで取引を行わないことをバリデーターにどのように説明すればよいですか?
ロットに問題はありません。max/minでチェックされます。丸める前にステップで割られ、丸められた整数が 再びステップで掛けられる。完全に正しいロットを得ることができます。
_lot(0.568)/step(0.01)=56.8
MathRound(56.8)=57
57*step(0.01)=0.57
次に、オープンするのに十分な自由なマージンがあるかどうかがチェックされます。バリデーターは全く悪口を言わない。入力パラメータが正しくないため、取引機能が表示されないようです。Expert Advisorは、単にある組み合わせでは全くトレードを行わないのですコンディションの悪いマーチンや、ローソク足ごとに開くグリッドロックがあるわけでもない。 EAが論理的にあるパラメータを使用して取引を行わないことをバリデーターに説明するにはどうすればよいですか?
説明ではなく、間違った入力パラメータをEAに修正させる。好ましくは、その無効な値と有効な値への修正に関するメッセージをジャーナルに送信する。
また、何らかの理由で実世界で誤ったパラメータを入力した場合の責任をユーザーに負わせたい場合は、誤ったパラメータを入力したことをユーザーに通知する必要があります。
しかし、テスターにとっては、EAが取引 できるように、それらを修正することも必要です。
では、例えばEURUSD用のパラメータとGold用のパラメータがある場合、どのように調整することができるのでしょうか。現在、デフォルトの設定は、主要なペアについては多少なりとも許容範囲内ですが、ゴールドについては全く機能しません。そこにはトレードは存在しない。そのために、それぞれの楽器に合わせるためのパラメーターが存在するのだと(私は)理解しています。そんなに簡単なら、すべてのパラメータをExpert Advisorに埋め込んで、外部に何も送信しないようにしただろう。
バリデータのもう一つのバグは、他の時間枠を全く見ないことです。迂闊にも、ある程度アルゴリズムを犠牲にしてしまいました。Expert Advisor は、週足、D1、H4 などの他のタイムフレームから M1 までデータを取り込むことができます。しかし、数々の実験でわかったことですが、データはnullになるんです。どうすることもできない、回避することしかできない。なぜExpert Advisorを改造してまでアルゴリズムを変更しなければならないのでしょうか?バリデーターはテストに合わせなければならないのでは?そうしないと、完璧に動作するEAのテストが、ある種の重労働になってしまうのです。
では、例えばEURUSD用のパラメータとGold用のパラメータがある場合、どのように調整することができるのでしょうか。現在、デフォルトの設定は、主要なペアについては多少なりとも許容範囲内ですが、ゴールドについては全く機能しません。そこにはトレードは存在しない。そのために、それぞれの楽器に合わせるためのパラメーターが存在するのだと(私は)理解しています。そんなに簡単なら、すべてのパラメータをExpert Advisorに埋め込んで、外部に何も送信しないはずだ。
OrderSendの直前に0による除算を行ったため、このようなエラーが発生しました。そのため、OrderSendまでは行くのですが、開くことができません。だから、ロット/マージン/リミット/価格、そのうちのいくつかは計算外なのです。
マキシム、これらのいずれかが説明されていない場合、バリデータは非常に明確なエラーを出します:130、131、134、145など。ここでは、そんなことはありません
追伸:信じてください、私は4日間で100以上のバリデーションを送信し、多くのオプションを試したのです。
はい、すぐに0による除算に到達します(だからOrderSend)。そして、エラーを発生させる。
しかし、Expert Advisor のコードに 0 で除算していないものをチェックに送ると、なぜか魔法のように指定期間中に全く取引を開始しないパラメータが設定され、エラーが返されるのです。これは私なりの解釈ですが、どうやら真実から遠く離れてはいないようです。