Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 155

 
Nikolai Semko:

Ich habe eine interessante Studie von vor zwei Jahren gefunden, in der die Wirksamkeit verschiedener Sprachen verglichen wird

https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf



Oje!

Ist Ada wirklich lebendig und wächst! Wenn ich mich nicht irre, das erste OOP. Ich habe es in den frühen 80er Jahren studiert. Ich habe bis jetzt noch nichts davon gehört und dachte, die Sprache sei so tot wie Modula. Beide sind tiefgreifende Upgrades von Pascal. Ich hatte keinen Ada-Compiler, und ich hatte Modula - einen Seven-Pass auf DWK, falls sich jemand erinnert.

 

Um Ausführungsfehler im Tester zu vermeiden, senden Sie entsprechende Marktaufträge, falls ein Pending oder SL/TP zumaktuellen Kurs platziert werden soll:

  • Platzieren Sie eine schwebende Order zum aktuellen Preis - fügen Sie sie nach der OrderSend Market Order hinzu.
  • SL/TP-Position zum aktuellen Preis platzieren - nach OrderClose Position hinzufügen.
 
fxsaber:

Um Ausführungsfehler im Tester zu vermeiden, senden Sie entsprechende Marktaufträge, falls ein schwebender Auftrag oder SL/TP zum aktuellen Preis platziert werden soll:

  • Platzieren Sie eine schwebende Order zum aktuellen Preis - fügen Sie sie nach der OrderSend Market Order hinzu.
  • Platzieren Sie die SL/TP-Position zum aktuellen Preis - fügen Sie sie nach der OrderClose-Position hinzu.

Können wir das im Detail besprechen? Das ist nicht ganz klar:

  • um einen schwebenden Auftrag zum aktuellen Preis zu platzieren, muss etwas hinzugefügt werden, nachdem eine Anfrage zur Eröffnung einer Position gesendet wurde (?????????)
  • um eine Stop-Order (für was?) zum aktuellen Kurs zu platzieren, muss etwas hinzugefügt werden, nachdem eine Aufforderung zum Schließen einer Position gesendet wurde (?????????)
Das sind die Fragen, die sich stellen, wenn man versucht zu entziffern, was Sie geschrieben haben ...
 
Artyom Trishkin:

Könnten Sie etwas genauer sein? Das ist nicht ganz klar:

  • um einen schwebenden Auftrag zum aktuellen Preis zu platzieren, muss etwas hinzugefügt werden, nachdem eine Anfrage zur Eröffnung einer Position gesendet wurde (?????????)
  • um eine Stop-Order (für was?) zum aktuellen Kurs zu platzieren, muss etwas hinzugefügt werden, nachdem eine Aufforderung zum Schließen einer Position gesendet wurde (?????????)
Solche Fragen tauchen auf, wenn man versucht zu entziffern, was Sie geschrieben haben ...

Das Problem ist hier dargestellt. Lösung.

// Делает более точными MT4/5-тестеры.
TICKET_TYPE MyOrderSend( const string Symb, int Type, const double dVolume, const double Price, const int SlipPage, const double SL, const double TP,
                         const string comment = NULL, const MAGIC_TYPE magic = 0, const datetime dExpiration = 0, color arrow_color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  MqlTick Tick = {0};  
  
  bool Res = IsTester && SymbolInfoTick(Symb, Tick);
  
  if (Res && (Type > OP_SELL))
  {
    if ((Type == OP_BUYLIMIT) || (Type == OP_BUYSTOP))
    {
      if (Price == Tick.ask)
        Type = OP_BUY;
    }
    else if (Price == Tick.bid)
      Type = OP_SELL;
  }
  
  const TICKET_TYPE Ticket = OrderSend(Symb, Type, dVolume, Price, SlipPage, SL, TP, comment, magic, dExpiration, arrow_color);
  
  Res = Res && (Type <= OP_SELL) && (Ticket != -1) &&
        (Type ? (SL == Tick.ask) || (TP == Tick.ask) : (SL == Tick.bid) || (TP == Tick.bid)) &&
        OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);
  
  return(Ticket);
}

// Делает более точными MT4/5-тестеры.
bool MyOrderModify( const long Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  
  bool Res = false;
  
  if (IsTester && OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
  {
    if (OrderType() <= OP_SELL)
    {
      Res = (OrderClosePrice() == SL) || (OrderClosePrice() == TP);
      Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color) && (!Res || OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0, Arrow_Color));
    }
    else if (OrderClosePrice())    
      Res = ((OrderClosePrice() == Price) &&
             (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                          OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
            OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
    else
    {
      MqlTick Tick = {0};
      
      if (SymbolInfoTick(OrderSymbol(), Tick))
        Res = (((bool)(OrderType() & 1) ? (Price == Tick.bid) : (Price == Tick.ask)) &&
               (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                            OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
               OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
      else
        Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);                     
    }
  }
  else
    Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color); 
  
  return(Res);
}

#define OrderSend MyOrderSend
#define  OrderModify MyOrderModify
 
fxsaber:

Das Problem ist hier dargestellt. Lösung.

Dadurch wird nicht klarer, wofür sie gedacht ist und was sie tun soll. Schließlich müssen viele Leute verstehen, was über den Grund für das Schreiben einer Lösung geschrieben wurde, bevor sie den Code lesen, um ihre eigene Lösung zu erstellen oder eine vorgefertigte Lösung zu verwenden.

Ich habe um eine genauere Erläuterung dieser Frage gebeten:

Das Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Techniken

fxsaber, 2019.12.18 12:45

Um Ausführungsfehler im Tester zu vermeiden, senden Sie entsprechende Marktaufträge, wenn Sie einen Pending oder SL/TP zum aktuellen Kurs platzieren müssen:

  • Einen schwebenden Auftrag zum aktuellen Preis platzieren - nach OrderSend Market Order hinzufügen.
  • Platzieren Sie die SL/TP-Position zum aktuellen Preis - fügen Sie sie nach der OrderClose-Position hinzu.

Und zeigte ein Beispiel, wie es von mir oder vielleicht von jemand anderem wahrgenommen wird:

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Eigenheiten von mql5, Tipps und Tricks

Artyom Trishkin, 2019.12.18 12:53 Uhr

Ist es möglich, dies näher zu erläutern? Ich kann nichts verstehen:

  • um einen schwebenden Auftrag zum aktuellen Preis zu platzieren, müssen Sie etwas hinzufügen, nachdem Sie eine Anfrage zur Eröffnung einer Position gesendet haben (?????????)
  • um eine Stop-Order (für was?) zum aktuellen Kurs zu platzieren, muss etwas hinzugefügt werden, nachdem eine Aufforderung zum Schließen einer Position gesendet wurde (?????????)
Das sind die Fragen, die auftauchen, wenn man versucht zu entziffern, was man geschrieben hat ...

Wie auch immer...

 
Artyom Trishkin:

Ich habe Sie gebeten, genauer zu sein

Das Platzieren einer Pending Order und SL/TP zum aktuellen Preis akzeptiert keine Ausführung zum aktuellen Tick im MT5-Tester.

 

Hallo zusammen.

Können Sie beraten pls, welche Werkzeuge in MT5 zur Verfügung stehen, um Tick-Charts anzuzeigen?

In MT4 gab es eine Option "offline öffnen". Es war praktisch, mit Zecken zu arbeiten, indem ich meine eigenen hst-Dateien der Geschichte erstellte.

In MT5 gibt es keine Option "Standalone öffnen". Aber die Software-Tools für die Arbeit mit Zecken sind hervorragend.

Es kann nicht ausgeschlossen werden, dass es keine Möglichkeit gibt, sie auf einer Karte darzustellen.

 
fxsaber:

Das Problem wird hier dargestellt. Lösung.

  const TICKET_TYPE Ticket = OrderSend();
  ...
  OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);

Was für ein Schwachsinn! Warum mit SL/TP zum aktuellen Kurs eröffnen?

Nun, die Schließung durch Platzierung von SL/TP auf dem aktuellen Kurs wird, wenn überhaupt, absichtlich vorgenommen. Es ist auch nicht notwendig, einen Auslöser zu emulieren.

 
Andrey Khatimlianskii:

Was für ein Schwachsinn! Warum mit SL/TP zum aktuellen Kurs eröffnen?

Nun, die Schließung durch Platzierung von SL/TP auf dem aktuellen Kurs wird, wenn überhaupt, absichtlich vorgenommen. Es besteht keine Notwendigkeit, die Auslösung zu emulieren.

Auf diese Weise können Sie innerhalb weniger Minuten oder Stunden einen Auslöser finden.

Stellen Sie sich vor, Sie müssen mit einem irgendwie berechneten TP abschließen. Und jetzt ist er gleich dem aktuellen Preis.

 
fxsaber:

müssen am TP schließen, der irgendwie berechnet wird. Und jetzt ist er gleich dem aktuellen Preis geworden.

In diesem Fall prüfe ich immer, ob dieser TP nicht bereits ausgelöst wurde (der Kurs hat ihn überschritten), und schließe je nach Marktlage.

Oder, wenn es notwendig ist, mit einem Limit auszusteigen, ziehe ich es hinter den Preis, bis er sich füllt.