Turnstile Order Gateway
- Bibliotheken
-
Syarief Azman Bin Rosli
Hallo und herzlich willkommen auf meinem offiziellen MQL5-Profil!
Ich bin Syarief Azman Bin Rosli, Entwickler algorithmischer Handelssysteme und Software-Ingenieur mit über zehn Jahren Erfahrung in der Entwicklung robuster automatisierter Handelslösungen für MetaTrader 5 und MetaTrader 4. - Version: 1.0
- Aktivierungen: 5
Eine MQL5-Bibliothek zwischen Ihrem Expert Advisor und OrderSend. Jede Anfrage durchläuft vor dem Senden 9 Prüfungen (Verbindung, Algo Trading, Symbolmodus, Sitzung, Ordertypen, Volumen, Stops, Marge, OrderCheck). Schließungen und Änderungen, die durch das Freeze-Level, eine geschlossene Sitzung oder eine unterbrochene Verbindung blockiert sind, kommen in eine Warteschlange und werden später gesendet. Sie handelt nie selbst. Sie erhalten die kompilierte Turnstile_Order_Gateway.ex5; diese Seite ist die vollständige API-Referenz.
Schnellstart
- Kopieren Sie Turnstile_Order_Gateway.ex5 nach MQL5/Libraries (Datei > Dateiordner öffnen).
- Fügen Sie den #import-Block unten in Ihren EA oder Ihr Skript ein.
- Optional: TOG_Configure in OnInit (Standard 20, 3, 300, true, false).
- Rufen Sie TOG_ProcessQueue in OnTick oder OnTimer auf.
- Handeln Sie mit TOG_Open, TOG_Modify, TOG_Close. Bei 0 oder false geben Sie TOG_ReasonText(TOG_LastReason()) aus.
- Prüfung: Starten Sie das Beispiel unten im Strategietester; das Journal zeigt Ticket und Grund. Live Algo Trading aktivieren, sonst liefern die Prüfungen -3.
Import-Deklaration (zum Kopieren)
#import "Turnstile_Order_Gateway.ex5" void TOG_Configure(int deviation, int retries, int delay_ms, bool adjust_stops, bool verbose); double TOG_NormalizeVolume(string symbol, double volume); double TOG_NormalizePrice(string symbol, double price); double TOG_RiskVolume(string symbol, ENUM_ORDER_TYPE type, double entry, double sl, double risk_money); double TOG_MaxVolume(string symbol, ENUM_ORDER_TYPE type, double share); ENUM_ORDER_TYPE_FILLING TOG_FillingMode(string symbol); int TOG_CheckMarket(string symbol, ENUM_ORDER_TYPE type); int TOG_CheckStops(string symbol, ENUM_ORDER_TYPE type, double price, double sl, double tp); int TOG_CheckFreeze(ulong ticket); int TOG_Preflight(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp); ulong TOG_Open(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, ulong magic, string comment); bool TOG_Modify(ulong ticket, double price, double sl, double tp); bool TOG_Close(ulong ticket, double volume); int TOG_CloseAll(string symbol, long magic, bool pending); int TOG_ProcessQueue(); int TOG_QueueCount(); void TOG_ClearQueue(); int TOG_LastReason(); uint TOG_LastRetcode(); string TOG_ReasonText(int reason); int TOG_RetcodeClass(uint retcode); int TOG_GetStats(long &stats[]); #import
Grundcodes
TOG_LastReason liefert den Code, TOG_ReasonText den Text in Großbuchstaben.
- 0 OK; 1 NO CHANGE (gleiche Werte, nichts gesendet); 2 DEFERRED (in der Warteschlange).
- -1 BAD PARAMETERS: unbekanntes Symbol oder Typ, Pending-Preis 0, Volumen 0.
- -2 NO CONNECTION: keine Verbindung oder keine Kurse.
- -3 TRADING DISABLED: Algo Trading oder Kontohandel aus.
- -4 SYMBOL MODE: deaktiviert, nur Schließen, nur Kauf oder nur Verkauf.
- -5 MARKET CLOSED: außerhalb der Handelssitzungen.
- -6 INVALID VOLUME: außerhalb min/max, nicht im Raster oder über dem Volumenlimit.
- -7 INVALID STOPS: SL, TP oder Pending-Preis auf der falschen Seite oder innerhalb des Stop-Levels.
- -8 FREEZE ZONE: Preis innerhalb des Freeze-Levels.
- -9 NO MARGIN: Marge der Marktorder größer als freie Marge.
- -10 ORDER TYPE BLOCKED: Typ oder SL/TP nicht erlaubt oder Limit für Pending-Orders erreicht.
- -11 ORDERCHECK FAILED und -12 SERVER REJECTED: siehe TOG_LastRetcode.
- -13 TICKET NOT FOUND; -14 QUEUE FULL (256 wartend).
API-Referenz
type: ORDER_TYPE_BUY, ORDER_TYPE_SELL, ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP oder ORDER_TYPE_SELL_STOP (Stop-Limit liefert -1). Preise sind absolut; sl oder tp 0 bedeutet keiner.
TOG_Configure
deviation: Slippage in Punkten, ab 0 (ungültig: 20). retries: 0-10 (ungültig: 3). delay_ms: 0-5000 zwischen Versuchen (ungültig: 300). adjust_stops: true verschiebt einen SL/TP auf der richtigen Seite, aber innerhalb des Stop-Levels, auf den nächsten zulässigen Preis plus einen Tick (plus Spread, wenn der Server erneut ablehnt); false liefert -7. verbose: protokolliert Sperren, Wiederholungen und Aufschübe mit dem Präfix [TOG].
TOG_NormalizeVolume
Rundet auf das Volumenraster ab und begrenzt auf das Maximum. 0.0 unter dem Minimum, bei Volumen 0 oder unbekanntem Symbol.
TOG_NormalizePrice
Rundet auf Tickgröße und Stellen. 0.0 für Preis 0, ein leerer SL bleibt also 0.
TOG_RiskVolume
Volumen, das bei sl risk_money (Kontowährung) verliert, über OrderCalcProfit (korrekt für Kreuzpaare, Metalle, Indizes, Aktien), abgerundet. entry 0 = Ask für Käufe, Bid für Verkäufe. 0.0 mit -6, wenn schon das Mindestvolumen mehr riskiert, -7 bei sl auf der falschen Seite, -1 bei ungültigen Eingaben.
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, AccountInfoDouble(ACCOUNT_BALANCE) * 0.01);
TOG_MaxVolume
Größtes gültiges Volumen, dessen Marge in freie Marge x share passt (0-1, sonst 1), innerhalb des Maximums und des restlichen Volumenlimits. 0.0 mit -9, wenn nicht einmal das Minimum passt.
TOG_FillingMode
Ausführungsart für Marktorders: FOK falls erlaubt, sonst IOC, sonst RETURN. TOG_Open wechselt, wenn der Server sie ablehnt.
TOG_CheckMarket
Prüfungen 1-4 zum Eröffnen: Verbindung und Kurse, Algo Trading, Symbolmodus für diese Richtung, Sitzung (Serverzeit gegen die Sitzungstabelle; ohne Tabelle gilt geöffnet). Liefert 0 oder -1 bis -5.
TOG_CheckStops
Markt: sl und tp auf der richtigen Seite von Bid (Kauf) oder Ask (Verkauf), mindestens SYMBOL_TRADE_STOPS_LEVEL entfernt. Pending: der Preis ebenso zum Markt, sl und tp ab dem Preis. Liefert 0, -7, -1 oder -2.
TOG_CheckFreeze
-8, wenn Bid (Kauf) oder Ask (Verkauf) innerhalb von SYMBOL_TRADE_FREEZE_LEVEL am SL oder TP der Position liegt oder der Markt so nah am Preis einer Pending-Order ist. 0 bei Level 0, -13 bei unbekanntem Ticket.
TOG_Preflight
Alle 9 Prüfungen der Reihe nach, ohne zu senden: Marktprüfungen, Ordertypen und Pending-Limit, Volumen, Stops, Marge (Marktorders), OrderCheck. Liefert den ersten Fehler oder 0.
if(TOG_Preflight(_Symbol, ORDER_TYPE_SELL, 0.10, 0, sl, tp) != 0) Print(TOG_ReasonText(TOG_LastReason()));
TOG_Open
Normalisiert Volumen und Preise, passt Stops an (falls aktiv), führt TOG_Preflight aus und sendet. Marktorders (price 0) wiederholen bei Requotes, Preisänderungen, Timeouts und Verbindungsfehlern mit frischen Preisen. Pending-Orders nutzen GTC oder DAY, wenn GTC nicht erlaubt ist. Liefert das Positionsticket (Markt), das Orderticket (Pending) oder 0. Wird nie eingereiht.
TOG_Modify
SL/TP einer Position oder Preis/SL/TP einer Pending-Order (price 0 behält den Preis). Gleiche Werte: true, Grund 1. Blockiert durch Freeze-Zone, geschlossene Sitzung oder fehlende Verbindung: false, Grund 2, eingereiht; ein neuerer Aufruf für das Ticket ersetzt ihn.
TOG_Close
Schließt eine Position oder löscht eine Pending-Order. volume 0 oder das volle Volumen schließt alles; weniger schließt teilweise (abgerundet); ein Rest unter dem Minimum schließt alles. Blockiert wie oben: false, Grund 2, eingereiht (ersetzt eine eingereihte Änderung).
TOG_CloseAll
TOG_Close für jede Position (und Pending-Order, wenn pending) mit passendem symbol ("" = alle) und magic (-1 = beliebig). Liefert die Zahl der jetzt geschlossenen.
TOG_ProcessQueue
Sendet eingereihte Aktionen, sobald sie frei sind; in OnTick oder OnTimer aufrufen. Eine Aktion verlässt die Warteschlange bei Erfolg, wenn ihr Ticket fehlt oder bei anderem Fehler; nach einer Serverablehnung wartet sie eine Sekunde. Liefert die Zahl der erledigten.
TOG_QueueCount und TOG_ClearQueue
Wartende Aktionen (maximal 256); alle ohne Senden verwerfen.
TOG_LastReason, TOG_LastRetcode und TOG_ReasonText
Grund des letzten Aufrufs; letzter Server-Retcode (0, wenn nichts gesendet wurde); Text eines Grundcodes (sonst "UNKNOWN").
TOG_RetcodeClass
0 DONE (platziert, ausgeführt, teilweise, keine Änderung, Position geschlossen), 1 RETRY (Requote, Ablehnung, Fehler, Timeout, Preis geändert oder ungültig, keine Kurse, zu viele Anfragen, gesperrt, Verbindung), 2 FIX (ungültige Anfrage, Volumen, Stops, Ablauf, Ausführung, Order), 3 WAIT (Markt geschlossen, eingefroren), 4 FATAL (übrige, z. B. kein Geld).
TOG_GetStats
Füllt stats[] mit 10 Zählern, liefert 10: 0 Anfragen, 1 gesendet, 2 erledigt, 3 blockiert, 4 Wiederholungen, 5 aufgeschoben, 6 aus Warteschlange erledigt, 7 abgelehnt, 8 Stops angepasst, 9 verworfen.
Funktionierendes Integrationsbeispiel
#import "Turnstile_Order_Gateway.ex5"
double TOG_RiskVolume(string symbol, ENUM_ORDER_TYPE type, double entry, double sl, double risk_money);
ulong TOG_Open(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, ulong magic, string comment);
bool TOG_Close(ulong ticket, double volume);
int TOG_ProcessQueue();
int TOG_LastReason();
string TOG_ReasonText(int reason);
#import
ulong ticket = 0;
bool tried = false;
void OnTick()
{
TOG_ProcessQueue();
if(!tried)
{
tried = true;
double sl = SymbolInfoDouble(_Symbol, SYMBOL_BID) - 300 * _Point;
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, 10.0);
ticket = TOG_Open(_Symbol, ORDER_TYPE_BUY, lots, 0, sl, 0, 7001, "turnstile");
Print("open ", ticket, ": ", TOG_ReasonText(TOG_LastReason()));
}
if(ticket > 0 && PositionSelectByTicket(ticket) && PositionGetDouble(POSITION_PROFIT) > 5.0)
Print("close: ", TOG_Close(ticket, 0), " ", TOG_ReasonText(TOG_LastReason()));
} Architektur und Hinweise
- Jedes importierende Programm hat eigene Einstellungen, Statistiken und eine Warteschlange im Speicher (geht beim Entfernen des EA oder Neustart des Terminals verloren).
- Prüfungen lesen nur Terminaldaten; nur TOG_Open, TOG_Modify, TOG_Close, TOG_CloseAll und TOG_ProcessQueue senden, synchron.
- Varianten: Validator-Sicherheit = Standardwerte plus TOG_ProcessQueue in OnTick; strikte Stops = adjust_stops false; Entwicklung = verbose true und TOG_GetStats im Panel.
- MetaTrader 5, Netting und Hedging, jedes Symbol; nur EAs und Skripte. Sicher im Strategietester, bei der Optimierung und im MQL5 Cloud Network (keine DLL, Dateien, Webanfragen; keine Pause zwischen Versuchen im Tester).
- Keine Chartobjekte, Timer, Dateien oder globalen Variablen; kann ein Symbol zur Marktübersicht hinzufügen, um Kurse zu lesen.
- Ein Feiertag, der in der Sitzungstabelle fehlt, wird an der Serverantwort als -5 erkannt.
- Nicht unterstützt: Stop-Limit-Orders, Close-By, OrderSendAsync.
Risikohinweis
Die Bibliothek prüft und sendet die Anfragen Ihres Codes. Sie wählt keine Einstiege und garantiert weder Ausführungen noch Preise oder Gewinne. Testen Sie zuerst auf einem Demokonto.
