Turnstile Order Gateway
- Bibliothèque
-
Syarief Azman Bin Rosli
Bonjour et bienvenue sur mon profil officiel MQL5 !
Je suis Syarief Azman Bin Rosli, développeur de systèmes de trading algorithmique et ingénieur quantitatif avec plus de dix ans d'expérience spécialisée dans la création de solutions de trading automatisées pour MetaTrader 5 et MetaTrader 4. - Version: 1.0
- Activations: 5
Bibliothèque MQL5 placée entre votre Expert Advisor et OrderSend. Chaque requête passe 9 contrôles (connexion, Algo Trading, mode du symbole, session, types d'ordre, volume, stops, marge, OrderCheck) avant l'envoi. Les clôtures et modifications bloquées par le niveau de gel, une session fermée ou une connexion perdue sont mises en file d'attente puis envoyées plus tard. Elle ne trade jamais seule. Vous recevez le fichier compilé Turnstile_Order_Gateway.ex5 ; cette page est la référence complète de l'API.
Démarrage rapide
- Copiez Turnstile_Order_Gateway.ex5 dans MQL5/Libraries (Fichier > Ouvrir le dossier des données).
- Collez le bloc #import ci-dessous dans votre EA ou script.
- Facultatif : TOG_Configure dans OnInit (défaut 20, 3, 300, true, false).
- Appelez TOG_ProcessQueue dans OnTick ou OnTimer.
- Tradez avec TOG_Open, TOG_Modify, TOG_Close. Sur 0 ou false, affichez TOG_ReasonText(TOG_LastReason()).
- Vérification : lancez l'exemple ci-dessous dans le testeur de stratégie ; le journal affiche le ticket et le motif. En réel, activez Algo Trading sinon les contrôles renvoient -3.
Déclaration d'import (prête à copier)
#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
Codes de motif
TOG_LastReason donne le code, TOG_ReasonText le texte en majuscules.
- 0 OK ; 1 NO CHANGE (mêmes valeurs, rien envoyé) ; 2 DEFERRED (en file).
- -1 BAD PARAMETERS : symbole ou type inconnu, prix en attente 0, volume 0.
- -2 NO CONNECTION : déconnecté ou sans cotations.
- -3 TRADING DISABLED : Algo Trading ou trading du compte désactivé.
- -4 SYMBOL MODE : désactivé, clôture seule, achats seuls ou ventes seules.
- -5 MARKET CLOSED : hors des sessions de trading.
- -6 INVALID VOLUME : hors min/max, hors pas ou au-delà de la limite de volume.
- -7 INVALID STOPS : SL, TP ou prix en attente du mauvais côté ou dans le niveau des stops.
- -8 FREEZE ZONE : prix dans le niveau de gel.
- -9 NO MARGIN : marge de l'ordre au marché supérieure à la marge libre.
- -10 ORDER TYPE BLOCKED : type ou SL/TP non autorisés, ou limite d'ordres en attente atteinte.
- -11 ORDERCHECK FAILED et -12 SERVER REJECTED : voir TOG_LastRetcode.
- -13 TICKET NOT FOUND ; -14 QUEUE FULL (256 en attente).
Référence de l'API
type : ORDER_TYPE_BUY, ORDER_TYPE_SELL, ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP ou ORDER_TYPE_SELL_STOP (stop-limit renvoie -1). Prix absolus ; sl ou tp 0 signifie aucun.
TOG_Configure
deviation : slippage en points, 0 ou plus (invalide : 20). retries : 0-10 (invalide : 3). delay_ms : 0-5000 entre essais (invalide : 300). adjust_stops : true déplace un SL/TP du bon côté mais dans le niveau des stops vers le prix légal le plus proche plus un tick (plus le spread si le serveur refuse encore) ; false renvoie -7. verbose : journalise blocages, essais et reports avec le préfixe [TOG].
TOG_NormalizeVolume
Arrondit vers le bas au pas de volume et plafonne au maximum. 0.0 sous le minimum, pour un volume 0 ou un symbole inconnu.
TOG_NormalizePrice
Arrondit à la taille du tick et aux décimales. 0.0 pour un prix 0, un SL vide reste donc 0.
TOG_RiskVolume
Volume qui perd risk_money (devise du compte) au sl, via OrderCalcProfit (correct pour croisés, métaux, indices, actions), arrondi vers le bas. entry 0 = Ask pour les achats, Bid pour les ventes. 0.0 avec -6 si le volume minimum risque déjà plus, -7 si sl est du mauvais côté, -1 pour des entrées invalides.
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, AccountInfoDouble(ACCOUNT_BALANCE) * 0.01);
TOG_MaxVolume
Plus grand volume valide dont la marge tient dans marge libre x share (0-1, sinon 1), dans le maximum et la limite de volume restante. 0.0 avec -9 si même le minimum ne tient pas.
TOG_FillingMode
Remplissage au marché : FOK si autorisé, sinon IOC, sinon RETURN. TOG_Open change de mode si le serveur le refuse.
TOG_CheckMarket
Contrôles 1-4 à l'ouverture : connexion et cotations, Algo Trading, mode du symbole pour ce sens, session (heure serveur contre la table des sessions ; sans table, considéré ouvert). Renvoie 0 ou -1 à -5.
TOG_CheckStops
Marché : sl et tp du bon côté du Bid (achat) ou de l'Ask (vente), à au moins SYMBOL_TRADE_STOPS_LEVEL. En attente : le prix de même par rapport au marché, sl et tp depuis le prix. Renvoie 0, -7, -1 ou -2.
TOG_CheckFreeze
-8 quand le Bid (achat) ou l'Ask (vente) est à moins de SYMBOL_TRADE_FREEZE_LEVEL du SL ou TP de la position, ou que le marché est aussi proche du prix d'un ordre en attente. 0 si le niveau vaut 0, -13 pour un ticket inconnu.
TOG_Preflight
Les 9 contrôles dans l'ordre, sans envoi : contrôles de marché, types d'ordre et limite des ordres en attente, volume, stops, marge (marché), OrderCheck. Renvoie le premier échec ou 0.
if(TOG_Preflight(_Symbol, ORDER_TYPE_SELL, 0.10, 0, sl, tp) != 0) Print(TOG_ReasonText(TOG_LastReason()));
TOG_Open
Normalise volume et prix, ajuste les stops si activé, exécute TOG_Preflight, envoie. Les ordres au marché (price 0) réessaient sur requotes, changements de prix, délais dépassés et erreurs de connexion avec des prix frais. Les ordres en attente utilisent GTC, ou DAY si GTC est interdit. Renvoie le ticket de position (marché), d'ordre (en attente) ou 0. Jamais mis en file.
TOG_Modify
SL/TP d'une position, ou prix/SL/TP d'un ordre en attente (price 0 garde le prix). Mêmes valeurs : true, motif 1. Bloqué par la zone de gel, une session fermée ou sans connexion : false, motif 2, en file ; un appel plus récent pour le ticket le remplace.
TOG_Close
Clôture une position ou supprime un ordre en attente. volume 0 ou le volume entier clôture tout ; moins clôture une partie (arrondi vers le bas) ; un reste sous le minimum clôture tout. Blocage comme ci-dessus : false, motif 2, en file (remplace une modification en file).
TOG_CloseAll
TOG_Close pour chaque position (et ordre en attente si pending) correspondant à symbol ("" = tous) et magic (-1 = tous). Renvoie le nombre clôturé maintenant.
TOG_ProcessQueue
Envoie les actions en file une fois débloquées ; appelez-la dans OnTick ou OnTimer. Une action quitte la file en cas de succès, si son ticket a disparu ou sur un autre échec ; après un refus serveur elle attend une seconde. Renvoie le nombre terminé.
TOG_QueueCount et TOG_ClearQueue
Actions en attente (maximum 256) ; tout supprimer sans envoyer.
TOG_LastReason, TOG_LastRetcode et TOG_ReasonText
Motif du dernier appel ; dernier retcode serveur (0 si rien n'a été envoyé) ; texte d'un code de motif ("UNKNOWN" sinon).
TOG_RetcodeClass
0 DONE (placé, exécuté, partiel, aucun changement, position clôturée), 1 RETRY (requote, rejet, erreur, délai, prix changé ou invalide, pas de cotations, trop de requêtes, verrouillé, connexion), 2 FIX (requête, volume, stops, expiration, remplissage ou ordre invalides), 3 WAIT (marché fermé, gelé), 4 FATAL (autres, ex. pas d'argent).
TOG_GetStats
Remplit stats[] avec 10 compteurs, renvoie 10 : 0 requêtes, 1 envoyées, 2 réussies, 3 bloquées, 4 réessais, 5 reportées, 6 réussies depuis la file, 7 refusées, 8 stops ajustés, 9 abandonnées.
Exemple d'intégration fonctionnel
#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()));
} Architecture et remarques
- Chaque programme qui importe la bibliothèque a ses propres réglages, statistiques et file en mémoire (perdue si l'EA est retiré ou le terminal redémarré).
- Les contrôles ne font que lire les données du terminal ; seuls TOG_Open, TOG_Modify, TOG_Close, TOG_CloseAll et TOG_ProcessQueue envoient, de façon synchrone.
- Réglages : sécurité validateur = valeurs par défaut plus TOG_ProcessQueue dans OnTick ; stops stricts = adjust_stops false ; développement = verbose true et TOG_GetStats sur votre panneau.
- MetaTrader 5, netting et hedging, tout symbole ; EAs et scripts uniquement. Sûre dans le testeur de stratégie, l'optimisation et le MQL5 Cloud Network (pas de DLL, fichiers ni requêtes web ; pas de pause entre essais dans le testeur).
- Aucun objet graphique, timer, fichier ni variable globale ; peut ajouter un symbole à l'Observation du marché pour lire les cotations.
- Un jour férié absent de la table des sessions est détecté par la réponse du serveur comme -5.
- Non pris en charge : ordres stop-limit, close-by, OrderSendAsync.
Avertissement sur les risques
La bibliothèque contrôle et envoie les requêtes de votre code. Elle ne choisit pas les entrées et ne garantit ni exécutions, ni prix, ni profits. Testez d'abord sur un compte démo.
