MQL5: バリデーション :-( もう、何がどうなっているのか、どう解決しているのか、頭を悩ませています。 - ページ 2

 
Alexandr Gavrilin:

その他、証拠金不足に関するメッセージが届いています。

私は、エラーに記載されているように、保留中の注文を考慮に入れて、指定された方向の 楽器のすべてのロットを合計し、オープン注文を考慮して超えた場合、開くためのコマンドを与えないようにしようとしましたが、無駄でした。

エラーは同じで、検証中のレポートログにデバッグメッセージが表示されません。このエラーをキャッチしてデバッグする方法、またはターミナルでこのエラーをエミュレートする方法がわかりません。

エラー です。

 
Alexandr Gavrilin:

....

エラーは同じで、私のデバッグメッセージは、検証中のレポートログに表示されません 私はこの処理をキャッチしてデバッグする方法、または私の端末でそのエラーをシミュレートする方法がわからない......

非常に大きなボリュームでポジションを持つようにしてください。EAが このエラーを キャッチするかどうか確認してください。

 
Alexandr Gavrilin:

その他、証拠金不足に関するメッセージも予定しています。

私は、エラーに記載されているように、保留中の注文を考慮して、指定された方向の楽器のすべてのロットを合計し、オープン注文を考慮して超えた場合、開くためのコマンドを与えないようにしようとしましたが、無駄でした。

エラーは同じで、検証中のレポートログにデバッグメッセージが表示されません。このエラーをキャッチしてデバッグする方法、またはターミナルでこのエラーをシミュレートする方法がわかりません。

Margin Levelを確認することができます。5000%以下なら取引は実行されないとしましょう。

 
Vladimir Karputov:

間違い です。

解決済み。

//в функции до открытия ордера.

double max_volume=SymbolInfoDouble(m_name,SYMBOL_VOLUME_LIMIT);

      double current_lots=getAllVolume();

      if(max_volume>0 && max_volume-current_lots-dlot<=0)
        {
         //PrintFormat("%.2f - %.2f",max_volume , dlot);
         return 0;
        }
//...
//функция подсчета объема
double getAllVolume()
     {
      int itotal=PositionsTotal();
      ulong uticket=-1;
      double dVolume=0;

      for(int i=itotal-1;i>=0;i--)
        {
         if(!(uticket=PositionGetTicket(i))) continue;

         if(PositionGetString(POSITION_SYMBOL)==m_symbol.Name())
            dVolume+=PositionGetDouble(POSITION_VOLUME);
        }

      itotal=OrdersTotal();

      for(int i=itotal-1;i>=0;i--)
        {
         if(!(uticket=OrderGetTicket(i))) continue;

         if(OrderGetString(ORDER_SYMBOL)==m_symbol.Name())
            dVolume+=OrderGetDouble(ORDER_VOLUME_CURRENT);
        }

      return dVolume;
     }
その後、製品は無事にチェックを通過しました。
 
Alexandr Gavrilin:

解決済み。

その後、製品のテストに成功した。

:)

 

ちなみに、SYMBOL_VOLUME_LIMITは「0.0」に設定することができますので、ご注意ください。

チェックに引っかからないように。

if(check_volume > SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT))
   return;
 
Vladimir Karputov:

あ、ちなみに、SYMBOL_VOLUME_LIMITは「0.0」でも良いので、計算の際にはご注意ください。

チェックに引っかからないようにするため。

このメッセージについて、何かが間違っている:1.14380で3.30 EURUSDの インスタント売りに失敗 しました [ボリューム 制限に達しました]

ネッティング口座を持っていて、指値や保留の注文はありませんでした。すべてのチェックが揃った。

私は常に1つのポジションを持ち、このメッセージはロットを増やしたときとオートループの ときだけ表示されます。

 
Petros Shatakhtsyan:

このメッセージについて、何かが間違っている:1.14380で3.30 EURUSDの インスタント売りに失敗 しました [ボリューム 制限に達しました]

ネッティング口座を持っていて、指値や保留の注文はありませんでした。すべてのチェックが揃った。

私は常に1つのポジションを持ち、このメッセージはロットを増やしたときとオートトレードの ときだけ表示されます。

あるサーバーで動作していても、周りのすべてのサーバーが同じ設定であるとは限りません :) .

 
Vladimir Karputov:

あるサーバーで動作していても、周りのすべてのサーバーが同じ設定になっているとは限りません :) .

それで、異なる実行タイプのサーバーを5〜6台ほどチェックしています。この投稿では、実行タイプはInstant です。

しかし、それは本筋ではありません。オートバリデーションは情報が少なく、エラーを発見するのが難しくなります。そして、それを回避する方法は必ずある。

 
昨日、アップデートでAutovalidationを行いました。MT5では半ポカですが、MT4はほぼ夕方まで全注文を取らない状態で過ごしました。もういいやと思い、2時間ほどでホームに戻りました。飽きて数時間後に戻ってきた。Expert Advisorの問題ではなく、サービスの問題である場合もあります。