MQL5
MQL5 en conditions réelles
Le carnet d'atelier d'un développeur d'Expert Advisors qui a déployé en prop-firm : les pièges que la doc MetaQuotes tait (tick_value vs point sur l'or et les indices, retcodes 10014/10016, freeze level) et le money-management qui survit à un compte funded — double clamp risque+marge, drawdown réalisé+flottant, expectancy en R. Du code qui passe l'OrderSend du premier coup, chez n'importe quel broker.
20 snippets phares
- Lot sizing par pourcentage de risqueCalcule le volume exact pour qu'un stop-loss touché coûte un montant précis, via SYMBOL_TRADE_TICK_VALUE et SYMBOL_TRADE_TICK_SIZE — fonctionne sur Forex, indices et métaux.
- Lot maximum autorisé par la marge (OrderCalcMargin)Calcule le volume maximal finançable avec un budget de marge donné. OrderCalcMargin intègre le levier réel, le type de calcul du symbole (Forex, CFD, futures) et la devise de marge.
- Valeur monétaire d'un point pour 1 lotConvertit la plus petite variation de prix en devise du compte. Le détour par tick_value/tick_size est obligatoire : sur l'or et les indices, le tick ne vaut pas toujours 1 point.
- Lot final : double clamp risque + margeCombine le sizing par risque et le plafond de marge en une seule fonction : le volume retenu est le plus contraignant des deux, jamais l'inverse.
- Trailing stop avec pas minimal (anti-spam)Ne déplace le SL que si l'amélioration dépasse un pas minimal — évite de saturer le serveur de modifications d'un point à chaque tick, cause classique de bannissement de requêtes.
- Respecter SYMBOL_TRADE_STOPS_LEVELAjuste un SL/TP trop proche du prix courant à la distance minimale imposée par le broker — sans ce contrôle, OrderSend échoue avec « Invalid stops » (retcode 10016).
- Stop-loss virtuel (invisible pour le broker)Garde le niveau de sortie en mémoire et ferme au marché quand il est franchi — le SL n'apparaît jamais sur le serveur. À réserver aux cas où l'EA tourne 24/7 sur VPS.
- Détecter le mode de remplissage supporté (FOK/IOC)Lit le masque SYMBOL_FILLING_MODE pour choisir un type de remplissage accepté par le serveur — l'envoi d'un mode non supporté est l'une des causes les plus fréquentes d'« Unsupported filling mode ».
- Détection de croisement de moyennes (sans repaint)Compare les deux dernières valeurs CLÔTURÉES des MA rapide et lente : un croisement validé à la clôture ne se « dé-croise » plus, contrairement à un test sur la bougie en cours.
- Détection de nouvelle bougieCompare le timestamp d'ouverture de la bougie courante à celui mémorisé : un seul passage de logique par bougie, quel que soit le flux de ticks. Version multi-symbole compatible.
- Devises concernées par un symbole (base, profit, marge)Extrait les devises d'un symbole pour un filtrage news pertinent : sur les indices et métaux, la devise de profit (souvent USD) est la seule clé exploitable, le « base currency » n'étant pas une devise.
- Corrélation de Pearson entre deux symbolesCalcule la corrélation des rendements (pas des prix bruts, qui sur-estiment toujours la corrélation) sur N bougies alignées par CopyClose.
- Exposition nette par deviseDécompose chaque position Forex en exposition longue/courte par devise (base achetée, cotation vendue) pour révéler une concentration cachée — trois trades « différents » peuvent être un seul pari USD.
- Verrou atomique entre EAs (SetOnCondition)GlobalVariableSetOnCondition est une opération test-and-set atomique : un seul des EAs concurrents obtient le verrou, les autres échouent proprement — le mutex du pauvre en MQL5.
- Régularité de la courbe d'équité (R² comme critère)Mesure la linéarité de la courbe d'équité par le coefficient de détermination R² calculé sur les profits cumulés des deals — une équité en ligne droite vaut mieux qu'un même profit en dents de scie.
- Pips vs points : conversion selon les digitsSur un broker 5 digits, 1 pip = 10 points ; sur 3 digits (JPY), 1 pip = 10 points aussi, mais sur 2/4 digits 1 pip = 1 point. Cette fonction rend les inputs « en pips » portables partout.
- Arrondir un prix au tick size (pas NormalizeDouble)Sur l'or, les indices ou les futures, le pas de cotation (SYMBOL_TRADE_TICK_SIZE) peut valoir 0.25 ou 0.05 : NormalizeDouble ne suffit pas, il faut quantifier le prix au multiple du tick.
- Garde-fou daily drawdown (réalisé + flottant)Compare l'équité courante (qui inclut le flottant) à l'équité de début de journée et coupe tout au franchissement du seuil — la métrique exacte surveillée par les prop firms.
- Espérance mathématique du système (expectancy en R)Calcule sur l'historique le winrate, le gain moyen, la perte moyenne, puis l'espérance par trade en devise ET en multiples de R — le chiffre unique qui dit si le système mérite de tourner.
- Analyse des séries de gains et de pertes (streaks)Parcourt l'historique pour mesurer la plus longue série gagnante, la plus longue série perdante et la série en cours, puis en déduit une recommandation de sizing — la base statistique d'un money management qui survit.