ライブラリ: MT4Orders - ページ 72

 
fxsaber #:

もし、OrderSend が失敗した場合、詳細なログが記録されます。もしOrderSendが実行されなかったのであれば、コードの中でその原因を探すべきです。


ACCOUNT_LIMIT_ORDERSが 何に等しいかを見てください。

たくさんあります。)10k

そして、それらは手動でオープンされます。

今までのところ、(mt5で言えば)54のオープンポジションのリミットで(あるいは特にその上で)、OrderSelectは失敗し始めるようです。

   // 指定された価格の上下でロック解除された出来高を数える
   // 
   double volumes[2];
   for(int pos=OrdersTotal()-1;pos>=0;pos--) {
      if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {
         Sleep(50);
         if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {
            PrintFormat("OrderSelect() failed: Pool TRADES not synced");
            continue;
         }
      }

再リピート時の小さなスリープは、価格を "逃走 "させるのに十分です。

このような悪態がログに残っています。この状況は繰り返される。どこに注目し、何に注意すべきかが少し明確になる。

---
それは市場の非常に活発な瞬間に発生し、信号が成功している - そこにティックがアクティブであり、同時にロボットのコピーは、他の金融商品上で開かれています。

 
Maxim Kuznetsov #:

今のところ、(mt5で言えば)未決済のポジションが54に制限されると(あるいは特に制限されると)、OrderSelectは失敗し始める ようです。

PrintFormatでposとOrdersTotal()を印刷する。同時に、スリープの前に同じ状態をログに記録します。


デモ口座で、OrderSelect==falseを達成するために、そのような動作を(人為的な方法で)再現してみてください。

成功したら、再現のためのすべてのデータが必要になります。

 
fxsaber #:

PrintFormatでposとOrdersTotal()を印刷する。同時に、同じ状態をBEFORE Sleepに記録する。


デモ口座で、OrderSelect==falseを達成するために、そのような活動を(人為的な方法で)再現してみてください。

成功したら、再現のためのすべてのデータが必要です。

全く同じことはまだ起こっていない - 結局のところ、多くのポジションはまれです。

しかし、今日、それは再び55を超え、同じエラーが発生しました。


Expert Advisorがどのように動作するかのロジックを知っている、それは次のようなものでした:ロボットはOrderSendに不正確な応答を受信しました - すべてが実行されましたが、関数はエラーを返しました。そのため、ボットは価格が戻るとすぐに繰り返し、同じ価格で2つの取引を獲得した(画面上では、そのうちの1つはすでに手仕舞いされている)
再び55を超える注文を出し、商品は最も人気のあるものではない(画面上ではCADCHF)
----
新しい、最大限の最新のmt4ordersで再構築し、より注意深く観察することにする。

 
Maxim Kuznetsov #:

結局のところ、多くのポジションは稀有なものなのだ。

しかし、今日もまた55を超え、同じエラーが出た。


Expert Advisorの動作ロジックを知ると、それは次のようなものでした:ロボットがOrderSendに不正確な応答を受信した - すべてが実行されたが、関数はエラーを返した。そのため、ボットは価格が戻るとすぐに繰り返し、同じ価格で2つの取引を獲得した(画面上では、そのうちの1つはすでに手仕舞いされている)
またも55以上の注文があり、その商品は最も人気のあるものではない(画面上ではCADCHF)
----
新しい、最新のmt4ordersで再構築し、より注意深く観察することにする。

先週も同じことがありました。

その日は、インターネットがとてもお粗末で、pingが高かった。

このエラーは、サーバー->ターミナル->サーバーの接続が長いために起こるのだと思う。でも間違っているかもしれない。

ログには

 
Vitaly Muzichenko #:

先週も同じようなことがあった。

結果が出るまで最大10秒待つことを許可した。

MT4ORDERS::OrderSend_MaxPause = 10000000; // 同期の最大時間(μs)。
 
fxsaber #:

結果が出るまで最大10秒待つ。

冷やす!

 
fxsaber #:

結果が出るまで最大10秒待つ。

試してみますが、めったに起こらないので、ご報告することはありません。

 
prostotrader #:

クールだ!

クールなのは、ターミナル5がこんな風にサーバーと通信していることだ。

 
Vitaly Muzichenko #:

クールなのは、ターミナル5がこのようにサーバーと通信していることだ。

OnTradeTransactionで応答がない場合の最大待機時間は250MSです。

10秒あれば、預金をすべて流出させることができます。

 
prostotrader #:

OnTradeTransactionで応答がない場合、最大250MCの待ち時間があります。

応答がない場合、その後どうしますか?