Warum propagiert Metaquotes MT5 anstelle von MT4? - Seite 3

 
Stanislav Korotky:

Und welche MT4Orders Funktionen werden verwendet - asynchron (OrderSendAsync, OrderCloseAsync) oder nicht? Das ist wahrscheinlich das Problem.

Ich habe es nicht untersucht, sondern nur angeschlossen, die Geschwindigkeit überprüft, mit dem Originalcode auf mql5 verglichen, das Original gelöscht und nur die Bibliothek mit dem mql4-Code übrig gelassen

 
Vitaly Muzichenko:

Ich verstand es nicht, steckte es einfach ein, überprüfte die Geschwindigkeit, verglich es mit dem ursprünglichen Code auf mql5, löschte das Original und ließ nur die Bibliothek mit mql4-Code

Ich frage nicht nach den Einzelheiten der Bibliothek, sondern danach, wie sie verwendet wurde, um das Problem zu verstehen. Im Allgemeinen habe ich einen Tipp gegeben.

 
Stanislav Korotky:

Ich habe nicht nach dem Innenleben der Bibliothek gefragt, sondern danach, wie sie genutzt wird, um herauszufinden, was das Problem verursacht. Wie auch immer, ich habe Ihnen einen Tipp gegeben.


Das Problem ist nicht, wie man die Bibliothek benutzt.

Das Problem ist, dass wir in MT4 keine komplexe Position haben, sondern Aufträge. Und das Ergebnis des Abschlusses von einem Dutzend Aufträgen ist dasselbe wie oben gezeigt.

Übrigens gibt es diesen Effekt im Testgerät nicht. Und wir haben es nicht auf der Demo. Aber wir haben es auf dem echten Konto.

In diesem Fall ist eine Code-Migration von mql4 zu mql5 und zurück "1 zu 1" unmöglich.

Die Arbeit mit Aufträgen auf mql4 muss entsprechend den Möglichkeiten von mql4 organisiert werden.

Das kann man hier nicht sagen:

Vitaly Muzichenko:

Der einzige große Nachteil von MT4 ...

Es ist nur so, dass mql4 einige Funktionen hat und mql5 andere Funktionen hat. In diesem speziellen Fall ist mql5 im Vorteil. Das Problem kann jedoch normalerweise mit mql4 gelöst werden.

 
Andrey F. Zelinsky:

Das Problem ist nicht, wie man die Bibliothek benutzt.

Das Problem ist, dass es in MT4 keine Gesamtposition gibt, sondern nur Aufträge. Und der Abschluss von einem Dutzend Aufträgen hat die gezeigte Wirkung.

Übrigens gibt es diesen Effekt im Testgerät nicht. Und wir haben es nicht auf der Demo. Aber wir haben es auf dem echten Konto.

In diesem Fall ist eine Code-Migration von mql4 zu mql5 und zurück "1 zu 1" unmöglich.

Die Arbeit mit Aufträgen auf mql4 muss entsprechend den Möglichkeiten von mql4 organisiert werden.

Das kann man hier nicht sagen:

Es ist nur so, dass mql4 einige Funktionen hat und mql5 andere Funktionen hat. In diesem speziellen Fall ist mql5 im Vorteil. Aber dieses Problem kann auf mql4 normal gelöst werden.

Was kann in MT4 beschleunigt werden?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }
 
Andrey F. Zelinsky:

Das Problem ist nicht, wie man die Bibliothek benutzt.

Das Problem ist, dass es in MT4 keine Gesamtposition gibt, sondern nur Aufträge. Und der Abschluss von einem Dutzend Aufträgen hat die gezeigte Wirkung.

Es ist nur sinnvoll, MT4 mit einem Hedging-Konto von MT5 zu vergleichen (in diesem Fall handelt es sich um ein solches Handelssystem). Und was hat das mit der Gesamtposition zu tun? Im MT5 wird es genau den gleichen Stapel von Positionen = Äquivalente von Vierfachaufträgen geben. Wie auch immer, Sie lenken das Gespräch wieder vom Problem ab.

 
Vitaly Muzichenko:

Was kann in MT4 beschleunigt werden?

Ich habe oben vorgeschlagen, durch XXXAsync-Funktionen zu ersetzen. Ich bin mir nicht sicher, ob es hilft, aber warum nicht einen Versuch wagen?

 
Stanislav Korotky:

Ich habe oben vorgeschlagen, durch XXXAsync-Funktionen zu ersetzen. Ich bin mir nicht sicher, ob es hilft, aber warum nicht einen Versuch wagen?

Es ist wahrscheinlich ein bisschen daneben. Ich habe kein Problem in MT5 mit diesem Code, und mit <MT4Orders>, alles schließt sich sofort.

Es gibt ein Problem in MT4, aber dort aus offensichtlichen Gründen und braucht nicht <MT4Orders>, es ist die einfachste vierfache Code. Ich habe mehr als hundert davon, ich habe Screenshots. Manchmal rutscht er zu meinen Gunsten, und ziemlich oft, wenn ein Schlusskurs begonnen hat und der Kurs weitergelaufen ist. Ich weiß nicht, woran es liegt, aber wahrscheinlich an der Reihenfolge, in der die Bestellungen verschickt werden.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Warum verpasst Metaquotes MT5 anstelle von MT4?

Vitaly Muzichenko, 2017.09.23 20:50

Was kann in MT4 beschleunigt werden?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }

Zumindest das:

  • Die Abschaffung der Etiketten wird den Code beschleunigen.
  • Eine Preisnormalisierung ist nicht immer erforderlich. Selbst wenn der Ask- oder Bid-Kurs mehr Nachkommastellen aufweist, bedeutet dies nicht, dass die Normalisierung zu einem positiven Ergebnis führt.

Die Normalisierung des Preiswerts ist nur erforderlich, wenn mathematische Operationen mit ihm durchgeführt werden. Wenn ein Wert zum Preis addiert oder von ihm subtrahiert wird.

 
Vitaly Muzichenko:

Wahrscheinlich handelt es sich um ein kleines Missverständnis. Ich habe kein Problem in MT5 mit diesem Code, und mit <MT4Orders>, alles schließt sich sofort.

Es gibt ein Problem in MT4, aber dort aus offensichtlichen Gründen und braucht nicht <MT4Orders>, es ist die einfachste vierfache Code. Ich habe mehr als hundert davon, ich habe Screenshots. Manchmal rutscht er zu meinen Gunsten, und ziemlich oft, wenn ein Schlusskurs begonnen hat und der Kurs weitergelaufen ist. Ich weiß nicht, was es damit auf sich hat, aber wahrscheinlich liegt es an der Reihenfolge, in der die Aufträge verschickt werden.

Ja, es ist meine Schuld - ich bin dumm.

Die Variante der Lösung ist wie folgt: Statt mehrere Aufträge zu schließen, stelle ich einen Zähler Gesamtvolumen, und rufen Sie dann OrderCloseBy mehrmals bis zur gegenseitigen Zerstörung.

 
Stanislav Korotky:

Die Lösung ist wie folgt: Anstatt mehrere Aufträge zu schließen, setzen Sie einen Zähler Gesamtvolumen, und rufen Sie dann OrderCloseBy mehrmals bis zur gegenseitigen Zerstörung.

Diese Variante funktioniert leider nur für ein Symbol.


Es ist seltsam, dass niemand im Laufe der Jahre asynchrone Order-Funktionen in die MT4-Kodobase aufgenommen hat.