取引ロボットをマーケットにリリースする際のバリデーションエラー。 - ページ 6

 
Andrey Kaunov:

私がチェックしないと思っているのか。ロットサイズの確認は別機能で行います

ストップロスとテイクプロフィットは取引開始時にゼロに等しいため、ここではリミットは必要ありません。RefreshRates()はロット計算時にデータを更新 します。もちろん、各入力前の接続等のチェックはありませんが、そこは問題ではありません。OrderSend がリクエストを送信した場合、130、131 などの特定のエラーが発生します。しかし、私が持っているのは

オープンに向けて注文を送ろうとしているわけでは全くありません。最後のテストでも、OnInit()関数で チェックポジションを設定すると


可能です。でも、もうすべてダブルチェック済みです。次にどこへ行けばいいのかわからない。

ロット正規化機能では、ロットを最大/最小値で確認した後、切り上げます。
 
Artyom Trishkin:
ロット正規化機能では、ロットを最大/最小値で確認した後、切り上げます。

まあ、そうなんですけどね。

MathRound();
P.S. 通過してしまうことがあるので、入力パラメータから掘る必要があるのだと思います。各パラメーターで「フールプルーフ」チェックを行う。
 
バリデータのテストログのことではありません。しかし、少なくともバリデーションされていないパラメータは送信できるかもしれません。コードの修正に全く引っかかるものがない。テストパラメータを選択する際の変動幅は無限大になる可能性があることを理解しています。int 型の変数には +50000 と -45000 のどちらかを設定することができます。しかし、いくつかの入力パラメータを単純にある範囲の 値に制限することはできません。ツールによって異なるでしょう。
 
Andrey Kaunov:
バリデーターテストログの話でもない。しかし、少なくともバリデーションされていないパラメータは送信できるかもしれません。コードの修正に全く引っかかるところがない。私は、検査項目の選択による変動が無限大になる可能性があることを理解しています。int 型の変数には +50000 と -45000 のどちらかを設定することができます。しかし、楽器によって異なるので、いくつかの入力パラメータを単純にある範囲の 値に限定することはできません。

取引ロットがすべてのケースで有効であることを確認する必要があります。有効なサイズ範囲をチェックした後に、コード内のロットを変更することを指摘したのは、無意味ではありません。

そして、絶対にやらなければならないのは、入力パラメータがバカになっていないかどうかのチェックである。

 

ロットに問題はありません。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が論理的にあるパラメータで取引を行わないことをバリデーターにどのように説明すればよいですか?

 
Andrey Kaunov:

ロットに問題はありません。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のテストが、ある種の重労働になってしまうのです。

 
Andrey Kaunov:
では、例えばEURUSD用のパラメータとGold用のパラメータがある場合、どのように調整することができるのでしょうか。現在、デフォルトの設定は、主要なペアについては多少なりとも許容範囲内ですが、ゴールドについては全く機能しません。そこにはトレードは存在しない。そのために、それぞれの楽器に合わせるためのパラメーターが存在するのだと(私は)理解しています。そんなに簡単なら、すべてのパラメータをExpert Advisorに埋め込んで、外部に何も送信しないはずだ。
OrderSendの 直前に0による除算を入れている--そんなエラーがありました。そのため、OrderSendまで到達するものの、開くことができません。つまり、ロット/マージン/リミット/プライス、それらの何かが計算されていない
 
Maxim Kuznetsov:
OrderSendの直前に0による除算を行ったため、このようなエラーが発生しました。そのため、OrderSendまでは行くのですが、開くことができません。だから、ロット/マージン/リミット/価格、そのうちのいくつかは計算外なのです。

マキシム、これらのいずれかが説明されていない場合、バリデータは非常に明確なエラーを出します:130、131、134、145など。ここでは、そんなことはありません

追伸:信じてください、私は4日間で100以上のバリデーションを送信し、多くのオプションを試したのです。

 

はい、すぐに0による除算に到達します(だからOrderSend)。そして、エラーを発生させる。

しかし、Expert Advisor のコードに 0 で除算していないものをチェックに送ると、なぜか魔法のように指定期間中に全く取引を開始しないパラメータが設定され、エラーが返されるのです。これは私なりの解釈ですが、どうやら真実から遠く離れてはいないようです。