Der große und schreckliche MT4 für immer (oder wie man einen Übergang strategisch plant) - Seite 27

 

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

OrderModify() in MQL5?

Edward Munroe, 2021.05.27 00:51

Stelle eine einfache Frage und erhalte eine einfache Antwort!? Warum muss fast alles in mql5 so chaotisch sein?

Gute Frage.

 

Traditionell eine einfache Aufgabe vor dem Wochenende.

Eine offene Position ist 1 Lot. Nach der Ausführung des Skripts müssen wir die Position auf 0,9 Lots setzen.

Es ist klar, dass das Skript jeden Moment gestartet werden kann. Deshalb gibt es viele Situationen, die auftreten können.


Wie üblich habe ich versucht, das Problem auf die klassische Weise zu lösen.

// Частичное закрытие позиции.

#include <Trade\Trade.mqh>

void OnStart()
{
  CTrade Trade;
  
  if (Trade.Buy(1)) // Пытаемся открыть позицию на 1 лот.
  {
    const ulong Ticket = Trade.ResultOrder();
    
    // Ждем, пока не появится.
    while (!IsStopped() && !PositionSelectByTicket(Ticket))
      Sleep(0);
      
    // А теперь просто закрываем 0.1 лота в случае, если объем позиции равен 1.
    // Цикл - для эмуляции запуска скрипта в любой момент.
    while (!IsStopped() && PositionSelectByTicket(Ticket) && (PositionGetDouble(POSITION_VOLUME) == 1))
      Trade.PositionClosePartial(Ticket, 0.1);
  }
}


Dieses Skript zeigt eine Position von 0,8 Lots an. Wir brauchen 0,9.

 
fxsaber:

Die Ausführung dieses Skripts ergibt eine Position von 0,8 Lots. Ich brauche 0,9.

Ich habe ein paar Mal auf 2 Servern getestet und nur 0,9 erreicht.


Die Logik der Tests ist klar - wir versuchen, die asynchrone Ausführung auf einen Tick loszuwerden, das allgemeine Schema dieses Prozesses (wie man auf einen Tick synchronisiert) ist wichtig zu wissen

 
fxsaber:

Traditionell eine einfache Aufgabe vor dem Wochenende.


Heiliger Strohsack! Und ich habe 0.8 (auf MQDemo -0.9). Wie viele dieser Harken wird es noch geben?

 
 
fxsaber:
Gelöst.

Dies ist wahrscheinlich die schwierigste Aufgabe von allen leicht zu formulierenden Aufgaben in diesem Thread im Moment.

Ein sehr starker Test der Beherrschung des MQL5-Handelsteils.

 

Eröffnen Sie einen Kaufauftrag mit einem SL und TP von Null und setzen Sie dann einen SL und TP von 30 Pips (wenn ich mich recht erinnere, wird dies als Kontotyp "Market Execution" bezeichnet - SL und TP können nicht auf einmal gesetzt werden)

Für MT4 funktioniert dieser Code:

void OnStart()
{
   int ticket;
   if((ticket = OrderSend(_Symbol, OP_BUY, 0.1, Ask, 30, 0.0, 0.0)) < 0 ||
         !OrderSelect(ticket, SELECT_BY_TICKET) ||
         !OrderModify(ticket, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - 300 * _Point, _Digits), NormalizeDouble(OrderOpenPrice() + 300 * _Point, _Digits), OrderExpiration()))
   {
      Print("Error Open order # ", GetLastError());
   }
}
 
Igor Makanu:

Eröffnen Sie einen Kaufauftrag mit einem SL und TP von Null und setzen Sie dann einen SL und TP von 30 Pips (wenn ich mich recht erinnere, wird dies als Kontotyp "Market Execution" bezeichnet - SL und TP können nicht auf einmal gesetzt werden)

Für MT4 funktioniert dieser Code:

Vor etwa zwei oder drei Jahren wurde die Erkennung der Ausführungsart auf Terminalebene eingeführt. Jetzt können Sie auch bei Market Execution SL und TP setzen, und das Terminal selbst teilt den Auftrag in zwei Handelsaufträge auf.

 
Igor Makanu:

Eröffnen Sie einen Kaufauftrag ohne SL und TP, und setzen Sie dann einen SL und TP von 30 Pips (wenn ich mich recht erinnere, heißt das Market Execution Account Type - SL und TP können nicht gleichzeitig gesetzt werden)

Eine gemeinsame Aufgabe.