MQL5: Validierung :-( Ich habe mir schon das Hirn zermartert, um herauszufinden, was es ist und wie es gelöst wird. - Seite 2

 
Alexandr Gavrilin:

Weitere Meldungen über die Verknappung der Margen werden folgen.

Ich habe versucht, wie in der Fehlermeldung beschrieben, alle Lots für das Instrument in einer bestimmten Richtung zu summieren und dabei die ausstehenden Aufträge zu berücksichtigen und keinen Eröffnungsbefehl zu erteilen, wenn dieser unter Berücksichtigung des Eröffnungsauftrags überschritten wird, jedoch ohne Erfolg.

Der Fehler ist derselbe, meine Debug-Meldungen werden während der Validierung nicht im Berichtsprotokoll angezeigt. Ich weiß nicht, wie ich diesen Fehler abfangen und beheben kann oder wie ich diesen Fehler in meinem Terminal emulieren kann.

Fehler.

 
Alexandr Gavrilin:

....

Der Fehler ist der gleiche, meine Debug-Meldungen zeigen nicht in den Bericht Protokolle während der Validierung, die ich nicht weiß, wie ich fangen und Debuggen der Umgang mit dieser oder wie man diesen Fehler in meinem Terminal zu simulieren...

Versuchen Sie, eine Position mit einem sehr großen Volumen zu eröffnen. Prüfen Sie, ob Ihr EA diesen Fehler erkennt oder nicht.

 
Alexandr Gavrilin:

Weitere Meldungen zum Thema Margenknappheit werden folgen.

Ich habe versucht, wie in der Fehlermeldung beschrieben, alle Lose für das Instrument in einer bestimmten Richtung unter Berücksichtigung der offenen Aufträge zu summieren und keinen Eröffnungsbefehl zu geben, wenn er unter Berücksichtigung des offenen Auftrags überschritten wird, ist er nutzlos.

Der Fehler ist derselbe, ich weiß nicht, wie ich diesen Fehler verfolgen und beheben kann oder wie ich ihn in meinem Terminal emulieren kann.

Sie können Margin Level überprüfen. Sagen wir, wenn es weniger als 5000% ist, dann werden keine Trades ausgeführt.

 
Vladimir Karputov:

Irrtum.

Gelöst.

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

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;
     }
Das Produkt hat dann die Kontrollen erfolgreich bestanden.
 
Alexandr Gavrilin:

Gelöst.

Das Produkt wurde dann erfolgreich getestet.

:)

 

Übrigens, beachten Sie bei Ihren Berechnungen, dassSYMBOL_VOLUME_LIMIT "0.0" sein kann.

Um nicht bei der Kontrolle erwischt zu werden:

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

Übrigens, beachten Sie bei Ihren Berechnungen, dassSYMBOL_VOLUME_LIMIT "0.0" sein kann.

Um nicht bei der Kontrolle erwischt zu werden:

Mit dieser Meldung stimmt etwas nicht:failed instant sell 3.30 EURUSD at 1.14380 [Volume limit reached].

Ich hatte ein Netting-Konto und keine Limit- oder Pending-Aufträge. Alle Kontrollen wurden durchgeführt.

Jetzt habe ichSYMBOL_VOLUME_LIMIT überprüft, unabhängig davon, ob es eine offene Order gibt oder nicht, sie gibt immer 0 zurück. Ich habe immer eine Position (da ich ein Netting-Typ bin) und diese Meldung erscheint nur, wenn ich das Lot erhöhe und nur, wenn ich einen Auto-Loop mache.

 
Petros Shatakhtsyan:

Mit dieser Meldung stimmt etwas nicht:failed instant sell 3.30 EURUSD at 1.14380 [Volume limit reached].

Ich hatte ein Netting-Konto und keine Limit- oder Pending-Aufträge. Alle Kontrollen wurden durchgeführt.

Jetzt habe ichSYMBOL_VOLUME_LIMIT überprüft, unabhängig davon, ob es eine offene Order gibt oder nicht, sie gibt immer 0 zurück. Ich habe immer eine Position (da ich ein Netting-Typ bin) und diese Meldung erscheint nur, wenn ich mein Lot erhöhe und nur, wenn ich Autotrading mache.

Wenn Sie auf einem Server arbeiten, bedeutet das nicht, dass alle Server in der Umgebung die gleichen Einstellungen haben :) .

 
Vladimir Karputov:

Wenn Sie auf einem bestimmten Server arbeiten, bedeutet das nicht, dass alle Server in der Umgebung die gleichen Einstellungen haben :) .

Und so prüfe ich auf verschiedenen Servern, etwa 5-6, wo es verschiedene Ausführungsarten gibt. Hier auf diesem Posten ist die Ausführungsart Instant.

Aber das ist nicht die Hauptsache. Die automatische Validierung liefert nur wenige Informationen und macht es schwierig, einen Fehler zu finden. Und es gibt immer eine Möglichkeit, sie zu umgehen.

 
Gestern habe ich die Autovalidierung bei der Aktualisierung durchgeführt. Auf MT5 mit einem halben Poke, aber MT4 verbrachte fast den ganzen Abend mit allen Aufträgen nicht genommen. Ich hatte genug davon und ging nach ein paar Stunden zurück auf den Bahnsteig. Ich hatte es satt und habe es in ein paar Stunden ohne Probleme benutzt. Manchmal liegt das Problem nicht beim Expert Advisor, sondern beim Dienst.