[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 502

 
editieren | löschen Hilfe, um eine Funktion zur Auftragserteilung zu finden, die Slippage berücksichtigt und ohne 130-134 Fehler ist.
 
nuan:
editieren | löschen Hilfe, um eine Funktion zur Auftragserteilung zu finden, die Slippage berücksichtigt und ohne 130-134 Fehler ist.

Zeigen Sie mir Ihre Variante.
 
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError());

Bei allen SL- und TP-Werten, die er ausgibt, gibt er 134, oft auch gar keine Order auf.

öffnet unter der Bedingung if(NumberOfOrders(NULL)==0)


Im Testprogramm wird statt eines Auftrags immer ein ganzes Bündel erteilt, d.h. ich kann nicht verstehen, warum ein Auftrag erteilt werden soll, wenn es keine anderen offenen Aufträge für dieses Paar gibt.

 
Entschuldigung, warum es mehr als eine Bestellung gibt
 
nuan:
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError());

Bei allen SL- und TP-Werten, die er ausgibt, gibt er 134, oft auch gar keine Order auf.

öffnet unter der Bedingung if(NumberOfOrders(NULL)==0)


Im Testprogramm wird statt eines Auftrags immer ein ganzes Bündel erteilt, d.h. ich kann nicht verstehen, warum ein Auftrag erteilt werden soll, wenn es keine anderen offenen Aufträge für dieses Paar gibt.


ERR_NOT_ENOUGH_MONEY 134 Nicht genug Geld für den Abschluss der Transaktion
 

Guten Tag. Ich mache ein EA, es öffnet 2 Aufträge in einer bestimmten Bedingung (bildlich gesprochen: wenn der Preis geht nach oben und unten). Wenn der Preis steigt, öffnet er 2, wenn der Preis fällt, schließt er diese 2 und öffnet eine neue 2. Ein Auftrag geht ohne Gewinnmitnahme, der zweite Auftrag mit Gewinnmitnahme. Bei der zweiten gibt es ein Problem. Wenn die Zeit ihres Todes gekommen ist, ist sie nicht ausgewählt, hier ist der Code, um Aufträge zu entfernen:

for (int a = 0; a < OrdersTotal()-1; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "MyOrd" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

Dasselbe gilt für OP_BUY. Ich vergleiche die Kommentare, um sicher zu sein, dass es sich um einen Auftrag handelt, der von meinem EA und nicht manuell oder von einem anderen EA eröffnet wurde. Hier ist das Problem mit OrderSelect, es will einfach keine Order mit einem Take Profit auswählen. Wenn die Zahl a erreicht ist, gibt OrderSelect false zurück. Im Protokoll des Testers ist kein Fehler zu finden, und auch GetLastError sagt, dass alles in Ordnung ist (gibt 0 zurück). Warum wird sie nicht ausgewählt? Warum keine Fehlermeldung, wenn sie nicht ausgewählt werden konnte? Ich danke Ihnen allen.

 
Folgefrage. Warum erscheinen im Testprogramm fünf Ziffern in den Ergebnissen, wenn ich den Zeitraum auf Monat+ einstelle? Überall, wo Preise festgelegt werden, setze ich NormalizeDouble(SomeValue, Digits) ein. Und nur bei den Ergebnissen flucht das Protokoll nicht, obwohl es fluchte, als ich die Rundungsfunktion nicht kannte.
 

die Bedingung

a < OrdersTotal()-1

wird bei jeder Iteration überprüft.

Überlegen Sie, was a gleich ist und was OrdersTotal() -1 nach der ersten Iteration gleich ist

 
Solree:

OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

Das Los und der Preis haben unterschiedliche Ziffern.
 

Solree:

NormalizeDouble(OrderLots(), Ziffern)


Außerdem ist es nicht so einfach, das Los zu normalisieren.
Sie müssen den zulässigen Schritt der Losänderung berücksichtigen.
Wenn der Schritt zum Beispiel 0,01 ist, dann normalisieren Sie mit 2
und wenn der Schritt 0,1 ist, dann sollte die Normalisierung 1 sein