Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 548

 
edutak:

Ich würde den Code nur ungern zeigen, denn die erste Version erwies sich als sehr überlebensfähig. Es hat 10 Jahre lang ohne Optimierung überlebt. Jetzt möchte ich es etwas komplexer und rentabler machen.

Der Code ist sehr einfach.

Dennoch kann es vorkommen, dass aufgrund eines Fehlers in der Logik Aufträge bei jedem Tick geöffnet werden.

Prüfen Sie vor der Eröffnung einer Position, ob diese bereits geöffnet ist oder nicht.
 
Vitalii Ananev:
Prüfen Sie, bevor Sie eine Position eröffnen, ob sie bereits offen ist oder nicht.
Oder?
for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
         kolpos++;
     }
 

Vor dem Abschluss ist es so.

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
 
edutak:
Oder?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

Es geht ungefähr so.

Es ist besser, daraus eine Funktion zu machen.

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
 
edutak:

Vor dem Abschluss ist es so.

Sie haben keine Prüfung auf Magie und Symbol vor dem Schließen. Kann Trades eines anderen EA oder manuell geöffnete Trades schließen.
 
Vitalii Ananev:
Es geht ungefähr so.

Nein, das Problem wurde nicht gelöst. Es liegt nicht an diesem Gerät.

Können Sie bitte den Unterschied zwischen meiner und Ihrer Option erklären?

 
edutak:

Nein, das Problem wurde nicht gelöst. Es liegt nicht an diesem Gerät.

Können Sie bitte den Unterschied zwischen meiner und Ihrer Option erklären?

Dann machen Sie etwas falsch, arbeiten Sie Ihren Code aus.

Meine ist besser :)

...

Auf diese Weise verpassen Sie keine Bestellung. Wenn in Ihrer Version zu diesem Zeitpunkt eine Position geschlossen oder ein Auftrag gelöscht wird, können Sie eine der verbleibenden Positionen überspringen.

 
Vitalii Ananev:

Sie machen also etwas falsch, kümmern Sie sich um Ihren Code.

Meine ist besser :)

...

Auf diese Weise verpassen Sie keine Bestellung. Wenn Ihre Version zeigt, dass zu diesem Zeitpunkt eine Position geschlossen oder ein Auftrag gelöscht wird, können Sie einige der verbleibenden Positionen überspringen.

Ich habe sie als globale Variable deklariert, aber ich erhalte eine Fehlermeldung.

int CountOrder;
 
edutak:

Ich habe sie als globale Variable deklariert, aber es wird ein Fehler angezeigt.

Was ich Ihnen geschrieben habe, ist eine Funktion.

Hier ist ein Beispiel für die Verwendung.

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
 
Vitalii Ananev:

Was ich Ihnen geschrieben habe, ist eine Funktion.

Hier ist ein Beispiel für die Verwendung.

Verwirrt
Grund der Beschwerde: