Bei einer großen Anzahl von MT5-Trades/Orders im ByPass-Modus (ich verwende sie z.B. im CustomReport) kann der erste Zugriff auf die Historie sehr lange dauern.
#define MT4ORDERS_BYPASS_MAXTIME 1000000// Maximale Wartezeit (in µs) für die Synchronisierung der Handelsumgebung #include <MT4Orders.mqh>
#define PRINT(A) Print(#A + " = " + (string)(A))
voidOnStart()
{
for (int i = 0; i < 3; i++)
{
constulong StartTime = GetMicrosecondCount();
PRINT(OrdersHistoryTotal());
PRINT(GetMicrosecondCount() - StartTime);
}
PRINT(HistoryDealsTotal());
PRINT(HistoryOrdersTotal());
}
Ein klares Beispiel dafür, dass häufiges Arbeiten mit Arrays mit Bedacht geschehen sollte. In diesem Fall erlaubt static, dass man nicht jedes Mal Speicher für ein Array in ArrayCopy zuweisen muss. Und wir erhalten eine mehrfache Leistungssteigerung in einer realen Aufgabe, die mit dem bloßen Auge zu spüren ist.
На просторах интернета можно видеть довольно частые сценарии торговли. Управляющий ПАММ-счетом набрал инвесторов. Хорошо торговал, но с какого-то момента прибыльность сильно уменьшилась, вплоть до
Bei einer großen Anzahl von MT5-Trades/Orders im ByPass-Modus (die ich z.B. im CustomReport verwende), kann der erste Zugriff auf die Historie sehr lange dauern.
Mit der aktualisierten ByPass.mqh konnte dieser Vorgang bei Tests um das 15-fache beschleunigt werden.
Hallo Autor, bei der Verwendung der Funktion OrderSendAsync habe ich festgestellt, dass MT4ORDERS::LastTradeResult.retcode gleich TRADE_RETCODE_DONE ist. In Ihrem Code wird jedoch geprüft, ob MT4ORDERS::LastTradeResult.retcode == TRADE_RETCODE_PLACED. Könnte dies ein Fehler sein, oder habe ich es falsch verstanden?
hini #: Ich habe vergessen zu erwähnen, dass ich den MT5-Tester verwende. Es sollte nichts mit dem Server zu tun haben, richtig?
Im Live-Handel ist MT4ORDERS::LastTradeResult.retcode == TRADE_RETCODE_PLACED tatsächlich korrekt, während es im MT5-Tester TRADE_RETCODE_DONE ist. Das war mein Fehler.
Ich halte dieses Verhalten für ein Versehen von MQ, da die request_id mit 1 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).
Warnung. Im Tester funktioniert die FunktionOrderSendAsyncwieOrderSend. Dies erschwert die Fehlersuche bei der verzögerten Verarbeitung von asynchronen Aufträgen.
Prüfen.
Ergebnis.
1.62 mcs/unit.Bei einer großen Anzahl von MT5-Trades/Orders im ByPass-Modus (ich verwende sie z.B. im CustomReport) kann der erste Zugriff auf die Historie sehr lange dauern.
14 Sekunden!
Es stellte sich heraus, dass die Bremsen von der ArrayCopy Funktion kommen.
Eine solche Bearbeitung in Include\fxsaber\TradesID\ByPass.mqh
erhöht die Leistung um das 4,5-fache - ~3 Sekunden.
Ein klares Beispiel dafür, dass häufiges Arbeiten mit Arrays mit Bedacht geschehen sollte. In diesem Fall erlaubt static, dass man nicht jedes Mal Speicher für ein Array in ArrayCopy zuweisen muss. Und wir erhalten eine mehrfache Leistungssteigerung in einer realen Aufgabe, die mit dem bloßen Auge zu spüren ist.
Bei einer großen Anzahl von MT5-Trades/Orders im ByPass-Modus (die ich z.B. im CustomReport verwende), kann der erste Zugriff auf die Historie sehr lange dauern.
Hallo Autor, bei der Verwendung der Funktion OrderSendAsync habe ich festgestellt, dass MT4ORDERS::LastTradeResult.retcode gleich TRADE_RETCODE_DONE ist. In Ihrem Code wird jedoch geprüft, ob MT4ORDERS::LastTradeResult.retcode == TRADE_RETCODE_PLACED. Könnte dies ein Fehler sein, oder habe ich es falsch verstanden?
bei der Verwendung der Funktion OrderSendAsync habe ich festgestellt, dass MT4ORDERS::LastTradeResult.retcode gleich TRADE_RETCODE_DONE ist
Server-Name?
Ich habe vergessen zu erwähnen, dass ich den MT5-Tester verwende. Es sollte nichts mit dem Server zu tun haben, richtig?
Ich habe vergessen zu erwähnen, dass ich den MT5-Tester verwende. Es sollte nichts mit dem Server zu tun haben, richtig?
Im Tester ist bei der ersten erfolgreichen Ausführung von MT5-OrderSend/OrderSendAsync, MqlTradeResult.request_id == 0.
Ich halte dieses Verhalten für ein Versehen von MQ, da die request_id mit 1 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).