Fragen von einem "Dummy" - Seite 13

 
stringo:

Tatsächlich enthält die Nachricht bis zu 8 Bytes an Informationen, die nach Belieben interpretiert werden können. Es kann datetime, double, 4 short, 8 char, oder 64 bits bit by bit sein.

Bei den Vieren reichten 4 Byte Magie aus, um alles zu kodieren, aber jetzt haben wir 8. Alles, was Sie brauchen, ist ein Wunsch.

Ich weiß, ich habe es in 4 ganz gut genutzt, und ich habe den Artikel gelesen (ich fand die Idee sehr gut).

Hier ist nur nicht klar - warum werden verschiedene Typen an verschiedenen Stellen angegeben?

 

Bitte geben Sie an, wie Sie eine Position mit TP und SL schließen können, wenn der Preis nahe am TP liegt und Sie jetzt aussteigen müssen.

Ich sende einen Auftrag zur Eröffnung einer neuen Position mit gleichem Volumen. In den meisten Fällen funktioniert das. Aber manchmal habe ich eine Situation, in der eine Position Zeit hat, um durch TP zu schließen, und anstatt zu schließen, bekomme ich eine neue Position auf dem Markt... :(

Wie gebe ich an, dass sich die eröffnete Position auf die Schließung einer bestehenden Position bezieht, und wenn die Hauptposition bereits geschlossen wurde, nicht auf die Eröffnung einer neuen Position?

Ich kann mir Optionen wie "SL und TP vor dem Schließen entfernen oder warten, bis der TP schließt" vorstellen, aber das sind keine schönen Lösungen. Können wir nicht eine so einfache Operation wie das Schließen einer Position durchführen, wie wir es in MT4 getan haben?

 

Schauen Sie unter PositionClose in der Klasse CTrade nach.
Ich bin sicher, es wird genauso sein wie bei Ihnen. Eine Schlussfolgerung ist unausweichlich - es gibt keinen anderen Weg.

Aber ich unterstütze Ihren Antrag. Ich bitte die Entwickler, diese Variante zu berücksichtigen.

Hinzufügen des Operationstyps TRADE_ACTION_CLOSE - Schließen einer Position für ein bestimmtes Symbol in seinem Volumen zum aktuellen Preis.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
stringo:

Tatsächlich enthält die Nachricht bis zu 8 Bytes an Informationen, die nach Belieben interpretiert werden können. Es kann datetime, double, 4 short, 8 char, oder 64 bits bit by bit sein.

Bei den Vieren reichten 4 Byte Magie aus, um alles zu kodieren, aber jetzt haben wir 8. Das wäre reines Wunschdenken.

Etwa 8 Bytes in long und ulong waren aus der Referenz ersichtlich. Beunruhigend ist die uneinheitliche Verwendung dieser Typen in Bezug auf Magie.

Ein einfaches Beispiel: Es ist akzeptabel, request.magic=ULONG_MAX-1 zuzuweisen, wenn eine Handelsanfrage gesendet wird. Warum steht im Referenzhandbuch, dass die Funktion OrderGetInteger(ORDER_MAGIC) nur den Typ long zurückgibt? Außerdem liefert magic auch Long-Typen für Positionen und Trades.

Wie war sie ursprünglich konzipiert? Vielleicht sollten wir für dieStruktur MqlTradeRequest angeben, dass die Magie vom Typ Long ist, weil die Funktionen HistoryDealGetInteger(), PositionGetInteger(), OrderGetInteger() usw. nicht dazu gedacht sind, Integer-Werte größer als LONG_MAX zurückzugeben ?

 
Yedelkin:

Die 8 Bytes von long und ulong waren aus dem Referenzhandbuch ersichtlich. Die uneinheitliche Verwendung dieser Typen in Bezug auf Magie ist beunruhigend.

Ein einfaches Beispiel: Beim Senden einer Handelsanfrage ist es akzeptabel, request.magic=ULONG_MAX-1 zuzuweisen. Warum steht im Referenzhandbuch, dass die Funktion OrderGetInteger(ORDER_MAGIC) nur den Typ long zurückgibt? Außerdem liefert magic auch Long-Typen für Positionen und Trades.

Wie war sie ursprünglich konzipiert? Vielleicht sollten wir für dieStruktur MqlTradeRequest angeben, dass die Magie vom Typ Long ist, da die Funktionen HistoryDealGetInteger(), PositionGetInteger(), OrderGetInteger() usw. nicht dazu gedacht sind, Integer-Werte größer als LONG_MAX zurückzugeben ?

Tatsächlich ist die Magie vom Typ long (dies lässt sich leicht überprüfen, indem man eine negative Magie und eine Magie mit einem Wert außerhalb des Wertebereichs vonlong bildet ).

Um dies zu überprüfen, können wir den Night Expert Advisor leicht modifizieren (er verwendet keine Klassen der Standardbibliothek).

Um das Experiment sauber zu machen, sollten wir den EA_Magic-Parametertyp in long ändern und den Magier der letzten Order in der Historie abwickeln (wenn die Order erfolgreich gesetzt wurde).


 

Interesting:
В действительности магик имеет тип long (это легко проверяется формированием отрицательного магика и магика со значением выходящим за диапазон значений типа long).

Wenn ja, muss in der Beschreibung des magischen Elements derMqlTradeRequest-Struktur eine Klarstellung vorgenommen werden, indem der Buchstabe "u" aus dem Typnamen entfernt wird.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Yedelkin:
Wenn ja, müssen wir die Beschreibung des magischen Elements derMqlTradeRequest-Struktur klären, indem wir das "u"aus dem Typnamen entfernen.
Es ist eine gute Idee, auch in der Klasse CTrade Änderungen vorzunehmen (wenn die Entwickler den magischen Wert nicht nur auf positive Werte beschränken wollen).
 
stringo:

Tatsächlich enthält die Nachricht bis zu 8 Bytes an Informationen, die nach Belieben interpretiert werden können. Es kann datetime, double, 4 short, 8 char, oder 64 bits bit by bit sein.

Bei den Vieren reichten 4 Byte Magie aus, um alles zu kodieren, aber jetzt haben wir 8. Das wäre reines Wunschdenken.

Eigentlich sind es nicht 64, sondern nur 63 Bits (d.h. 8 Bytes unvollständig). Es wären 8 Bytes, wenn wir den gesamten langen Bereich verwenden würden.

Aber leider...

Zum einen wird ein magischer Ulong in die MqlTradeRequest-Struktur übergeben. Das bedeutet, dass nur positive Werte eingestellt werden können.

Die Funktionen PositionGetInteger/OrderGetInteger hingegen geben den Typ Long zurück . Das bedeutet, dass die Hälfte des Bereichs ulong abgeschnitten ist.

Es handelt sich also um 63 Bits statt der oben beschriebenen 64 Bits. Eigentlich ist es nicht so sehr schlimm, als dass es den Grundsätzen der Auftragskontrolle große Unannehmlichkeiten bereitet .

Es wäre viel bequemer, das gleiche System wie in MT4 zu verwenden - Magier mit einem Zeichen zu erlauben. Da viele Handelssysteme auf einem einfachen Prinzip beruhen, bei dem das Symbol eines Magiers verwendet wird. Da es viel einfacher ist, ein System in zwei zu unterteilen und Ihre Aufträge mit der üblichen Funktion MathAbs( OrderMagicNumber() ) herauszufiltern.


 
sergeev:

Tatsächlich sind es nicht 64, sondern nur 63 Bits (d. h. unvollständige 8 Bytes). 8 Bytes wären, wenn der gesamte Bereich der Longs verwendet würde.

Sie irren sich.

64 Bits werden verwendet, und es liegt an Ihnen, wie Sie sie nutzen. Lang/Lang macht keinen Unterschied, es hängt alles davon ab, wie Sie diese 64 Bits interpretieren. Wenn Sie long als vorzeichenbehafteten long verwenden wollen - verwenden Sie es, wenn Sie es als vorzeichenlosen ulong verwenden wollen - kein Problem. Wenn Sie andere Datentypen in diesen 64 Bit verwenden wollen, tun Sie das.

Das ist genau das, worüber Slava geschrieben hat.

 
sergeev:

Tatsächlich sind es nicht 64, sondern nur 63 Bits (d. h. unvollständige 8 Bytes). 8 Bytes wären es, wenn der gesamte lange Bereich genutzt würde.

Aber leider...

Zum einen wird ein magischer Ulong in die MqlTradeRequest-Struktur übergeben. Das bedeutet, dass nur positive Werte eingestellt werden können.

Die Funktionen PositionGetInteger/OrderGetInteger hingegen geben den Typ long zurück . Das bedeutet, dass die Hälfte des Bereichs ulong abgeschnitten ist.

Insgesamt haben wir 63 Bits anstelle der oben beschriebenen 64 Bits. Eigentlich ist es nicht so sehr schlimm, als dass es den Grundsätzen der Auftragskontrolle große Unannehmlichkeiten bereitet .

Es wäre viel komfortabler, das gleiche System wie in MT4 zu verwenden - Magier mit einem Zeichen zu erlauben. Da viele Handelssysteme auf einem einfachen Prinzip beruhen, bei dem das Symbol eines Magiers verwendet wird. Da es viel einfacher ist, ein System in zwei zu unterteilen und Ihre Aufträge mit der üblichen Funktion MathAbs( OrderMagicNumber() ) herauszufiltern.

Ich bin ehrlich gesagt verwirrt. Ihr übertreibt, wenn es um keine große Sache geht. Ganz und gar nicht. Dieses Problem gibt es nicht, Sie haben es gerade erfunden. Sortieren Sie die Typenumwandlungen bis zum Ende aus.

Ich hoffe, der folgende Beitrag hilft Ihnen. Kopieren Sie es in ein Skript, kompilieren Sie es, führen Sie es im Terminal aus und denken Sie dann sehr sorgfältig nach. Viel Glück!

void OnStart()
  {
    Print("//------ ");

    int i_A = -100;
    uint ui_B = uint(-100);
    
    Print(i_A," ",uint(i_A));
    Print(int(ui_B)," ",ui_B);

    i_A = int(4294967196);
    ui_B = 4294967196;

    Print(i_A," ",uint(i_A));
    Print(int(ui_B)," ",ui_B);
//--
    long l_A = -100;
    ulong ul_B = ulong(-100);
    
    Print(l_A," ",ulong(l_A));
    Print(long(ul_B)," ",ul_B);
   
    l_A = long(18446744073709551516);
    ul_B = 18446744073709551516;
    
    Print(l_A," ",ulong(l_A));
    Print(long(ul_B)," ",ul_B);
  }
Grund der Beschwerde: