Rejoignez notre page de fans
CExecutionSafety - Ping + Execution Latency Guard for MQL5 EAs - bibliothèque pour MetaTrader 5
- Vues:
- 74
- Note:
- Publié:
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
Vue d'ensemble
CExecutionSafety est une classe d'inclusion MQL5 légère conçue pour protéger les Expert Advisors contre l'exécution de transactions dans de mauvaises conditions de réseau ou d'exécution.
Elle mesure deux composants de latence : le ping du terminal en direct et le délai d'exécution de l'horloge murale réelle. Elle bloque les tentatives de transactions lorsque leur valeur combinée dépasse un seuil configurable.
Le problème résolu
La plupart des EA s'exécutent à l'aveugle, sans tenir compte des conditions du réseau. Un pic de ping ou un retard d'exécution côté courtier lors d'un ordre critique peut entraîner des dérapages, des requêtes ou des remplissages ratés.
CExecutionSafety introduit une barrière de sécurité pré-négociation qui empêche l'exécution lorsque les conditions sont dégradées.
Fonctionnement
La classe utilise deux sources de données :
- TERMINAL_PING_LAST : lit le ping le plus récent enregistré par MetaTerminal (en millisecondes)
- RecordExecDelay() : accepte une mesure de l'horloge murale que vous intégrez à toute opération CTrade.
Ces deux valeurs sont additionnées et comparées au seuil configuré. Si la latence combinée dépasse le seuil, CheckExecutionSafety() renvoie faux et imprime une entrée de journal de diagnostic.

Protection contre la déconnexion
Lorsque le terminal n'a pas de contact avec le serveur, TERMINAL_PING_LAST renvoie -1. La classe le détecte et renvoie automatiquement false, empêchant ainsi les tentatives d'échanges sur un terminal déconnecté.
Exemple d'intégration
Incluez le fichier et instanciez la classe dans votre EA :
#include <DeeFX/CExecutionSafety.mqh> CExecutionSafety safety ; int OnInit() { safety.Init(150) ; // seuil combiné de 150ms return INIT_SUCCEEDED ; } void OnTick() { if( !safety.CheckExecutionSafety()) return ; ulong t0 = GetTickCount64() ; trade.PositionClose(ticket) ; safety.RecordExecDelay(GetTickCount64() - t0) ; }
Accesseurs
Les accesseurs en lecture seule suivants sont disponibles pour l'affichage du tableau de bord ou la logique externe :
- GetPingMs() : ping actuel du terminal en ms
- GetExecDelayMs() : dernier délai d'exécution enregistré en ms
- GetCombinedMs() : ping + délai d'exécution combinés (renvoie 9999 en cas de déconnexion)
- HasExecSample(): vrai si au moins une mesure a été enregistrée
- GetThresholdMs() : seuil de sécurité configuré
Changelog
- v1.0 - Version initiale
- v1.1 - La macro Guard a été renommée. Les spécificateurs de format %I64u sont remplacés par des casts (string)
- v1.2 - Le type de retour de Init() a été modifié void → bool. Réinitialisation de l'état lors de la réinitialisation pour éviter les échantillons périmés.
Traduit de l’anglais par MetaQuotes Ltd.
Code original : https://www.mql5.com/en/code/70033
Institutional Z-Score Statistical Reversion
A professional quantitative oscillator that replaces traditional retail momentum indicators like the RSI, it calculates the statistical standard deviation of price action to identify mathematically exhausted reversals.
Institutional Unmitigated Order Block Matrix
A dynamic Smart Money utility that identifies institutional Order Blocks backed by volume anomalies and automatically tracks their mitigation state to keep your charts clean and focused on fresh liquidity.
Institutional Cumulative Volume Delta (CVD)
An advanced order flow engine that approximates tick-by-tick aggressor data to calculate the true Cumulative Volume Delta, it exposes institutional absorption and divergence hidden within standard price candles.
ASQ Divergence Detector
ASQ Divergence Detector scans your chart for regular and hidden RSI divergences and marks them with color-coded, non-repaint arrows.