Bibliotheken: MT4Orders - Seite 87

 
fxsaber #:

Im Tester ist es bei der ersten erfolgreichen Ausführung von MT5-OrderSend/OrderSendAsync immer MqlTradeResult.request_id == 0.

Ich halte dieses Verhalten für einen Fehler von MQ, da die request_id mit eins beginnen sollte.


Dies ist einer der Gründe, warum MT4Orders OrderSendAsync für Tester nicht implementiert. Es gibt einen weiteren, weniger guten Grund(aus dem Buch).

Vielen Dank für die zusätzlichen Informationen!
 

Ich entschuldige mich, ich habe nicht den ganzen Thread durchgelesen. Um die Anzahl der offenen Positionen ohne Aufträge zu erhalten, gibt es eine Art Überladung von OrdersTotal() oder muss ich jedes Mal einen solchen Code schreiben:

int GetOpenTradesCount()
{
    int count = 0;
    for (int i = 0; i < OrdersTotal(); i++)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Auftrag nach Position auswählen
        {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) // Nur Marktaufträge zählen
            {
                count++;
            }
        }
    }
    return count;
}
 
mbjen offenen Positionen ohne Aufträge zu erhalten, gibt es eine Art Überladung von OrdersTotal() oder müssen Sie jedes Mal einen ähnlichen Code schreiben:
#include <MT4Orders.mqh>

int GetOpenTradesCount1()
{
  return(PositionsTotal());
}

int GetOpenTradesCount2()
{
  return(OrdersTotal() - OrdersTotal(false));
}

Ihr Original ist insofern besser, als dass es einen MT5-Auftrag zur Eröffnung einer Position als offene Position zählt. Was GetOpenTradesCount1 nicht tut.

Ihre Quellvariante ist insofern besser, als dass sie die MT5-Order zum Schließen einer Position nicht zählt. Dies ist bei GetOpenTradesCount2 nicht der Fall.

 
fxsaber #:

OrdersTotal(false)

OrdersTotal' - falsche Parameteranzahl

 
mbjen #:

OrdersTotal(false)

OrdersTotal' - falsche Parameteranzahl

#include <MT4Orders.mqh>
 
fxsaber #:
aa war unten im Code enthalten. Danke.
 
fxsaber #:

Ihre ursprüngliche Variante ist besser, da sie den MT5-Auftrag zur Eröffnung einer Position als offene Position zählt. Was GetOpenTradesCount1 nicht tut.

Ihre Ausgangsvariante ist insofern besser, als sie den MT5-Auftrag zum Schließen einer Position nicht zählt. Was GetOpenTradesCount2 nicht tun wird.

und wenn die virtuelle Bibliothek auch angeschlossen ist, dann schlägt es bei OrdersTotal(false) fehl

 
// Liste ändern:
// 26.03.2025
// Korrektur: OrderType behandelt Saldo-Transaktionsarten besser.
// Fix: Im ByPass-Modus bei der Arbeit mit der Handelshistorie wird die Anzahl der Aufrufe von HistorySelect reduziert.
// Hinzufügen: Das Makro MT4ORDERS_LIBRARY aktiviert den Bibliotheksmodus: #import "MT4Orders.ex5".
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: MT4Orders

fxsaber, 2025.03.26 10:50 Uhr.

// Liste ändern:
// 26.03.2025
// Korrektur: OrderType behandelt Saldo-Transaktionsarten besser.
// Fix: Im ByPass-Modus bei der Arbeit mit der Handelshistorie wird die Anzahl der Aufrufe von HistorySelect reduziert.
// Hinzufügen: Das Makro MT4ORDERS_LIBRARY aktiviert den Bibliotheksmodus: #import "MT4Orders.ex5".

Es gab berechtigte Kommentare, dass die Bibliothek eine ernsthafte Verlangsamung der Kompilierung verursacht. Aus diesem Grund haben wir einen alternativen vollständigen Bibliotheksmodus in Form einer importierten EX5-Bibliothek hinzugefügt.


Kompiliergeschwindigkeit.

Messungen der Kompilierungsgeschwindigkeit auf MT4/5 (MT5 - maximale X64_Regular Optimierung) des folgenden plattformübergreifenden Skripts.

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

Wie haben Sie MQL4/5 gelernt?

fxsaber, 2024.12.03 14:30

#define  MT4ORDERS_LIBRARY // library-mode: #import "MT4Orders.ex5".
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

bool Buy( const double Lots = 0.1, const string Symb = NULL, const string Comm = NULL )
{
  return(OrderSend(Symb, OP_BUY, Lots, SymbolInfoDouble(Symb, SYMBOL_ASK), 0, 0, 0, Comm) != -1);
}

bool Sell( const double Lots = 0.1, const string Symb = NULL, const string Comm = NULL )
{
  return(OrderSend(Symb, OP_SELL, Lots, SymbolInfoDouble(Symb, SYMBOL_BID), 0, 0, 0, Comm) != -1);
}

void OnStart()
{
  Buy();
  Sell();
}

MT4_b1440 MT5_b4885 + MT4Orders MT5_b4885 + MT4Orders_library
90 msec 5050 msec 255 msec
6.0 KBytes 125,4 KBytes 13,3 KBytes

Der Code im neuen Modus wird in MT5 mit ähnlicher Geschwindigkeit kompiliert wie in MT4. Die Kompilierungsgeschwindigkeit ist schneller als z.B. bei der Verwendung von CTrade. Das liegt daran, dass alle Handelsfunktionen analog importiert werden, wie es in MT4 der Fall ist - der Compiler verschwendet keine Zeit mit ihnen.


Dies wirkt sich entsprechend auf die Größe von EX5 aus.


So aktivieren Sie.

Sie müssen nur eine zweizeilige Datei MQL5\Libraries\MT4Orders.mq5 erstellen und sie einmal kompilieren.

#property library

// #define MT4ORDERS_BYPASS_MAXTIME 1000000 // Maximale Zeit (in µs), die auf die Synchronisierung der Handelsumgebung gewartet wird.
// #define MT4ORDERS_AUTO_VALIDATION // Handelsaufträge werden nur bei erfolgreicher Korrektheitsprüfung gesendet
// #define MT4ORDERS_ORDERS_SORT // Bildung der MT4-Auftragshistorie sortiert nach Schließungs-/Löschungszeit.
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006


Dann schreiben Sie in Ihrem Code vor der Aktivierung von MT4Orders ein Makro.

#define  MT4ORDERS_LIBRARY // library-mode: #import "MT4Orders.ex5".
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006


Und die Bibliothek wird die Dauer der Kompilierung nicht mehr beeinflussen.


Externe Zeichen des Modus.

Wenn Sie Ihr Programm starten, können Sie das Vorhandensein des MT4Orders-Aufrufs auf der Registerkarte Abhängigkeiten sehen.

DLLs werden nicht verwendet, offener Quellcode.

Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
  • www.mql5.com
Для описания библиотеки следует добавить в исходный код главного (компилируемого) модуля директиву #property library (обычно, в начало файла)...
 
fxsaber #:

Es gab berechtigte Kommentare, dass die Bibliothek die Kompilierung stark verlangsamt. Aus diesem Grund wurde ein alternativer vollständiger Bibliotheksmodus in Form einer importierten EX5-Bibliothek hinzugefügt.


Kompilierungsgeschwindigkeit.

Messungen der Kompiliergeschwindigkeit auf MT4/5 (MT5 - maximale X64_Regular-Optimierung) des folgenden plattformübergreifenden Skripts.


MT4_b1440 MT5_b4885 + MT4Bestellungen MT5_b4885 + MT4Orders_library
90 msec 5391 msec 255 msec

Der Code im neuen Modus wird in MT5 mit ähnlicher Geschwindigkeit kompiliert wie in MT4. Die Kompilierungsgeschwindigkeit ist schneller als z.B. bei der Verwendung von CTrade. Da alle Handelsfunktionen analog importiert werden, wie es in MT4 der Fall ist, verschwendet der Compiler keine Zeit mit ihnen.


So aktivieren Sie.

Sie müssen nur einmal eine zweizeilige Datei MQL5\Libraries\MT4Orders.mq5 erstellen und diese kompilieren.


Dann schreiben Sie in Ihrem Code vor der Aktivierung von MT4Orders ein Makro.


Und die Bibliothek wird die Kompilierungszeit nicht mehr beeinflussen.


Äußere Zeichen des Modus.

Wenn Sie Ihr Programm ausführen, können Sie das Vorhandensein des MT4Orders-Aufrufs auf der Registerkarte Abhängigkeiten sehen.

DLLs werden nicht verwendet, offener Quellcode.

Es ist eine lausige Option ... eine Harke auf dem Boden.

Zu oft wird ex5 als "veraltet" deklariert - und auch #import-Direktiven sind davon betroffen.