LE PROBLÈME
La plupart des filtres d’actualités consultent le calendrier économique MQL5 (CalendarValueHistory). Ce calendrier n’existe pas dans le Strategy Tester, de sorte que ces filtres ne font rien, sans le signaler, lors des backtests : l’EA négocie directement lors de la publication des chiffres de l’emploi (NFP), de l’IPC ou des décisions de taux, et le backtest ne correspond plus au comportement en conditions réelles. Lors d’un de mes tests, un ordre en attente sur la paire XAUUSD a été exécuté 5 minutes avant la publication de l’IPC américain et le stop loss a été déclenché avec un slippage de 45 USD : une seule transaction a entraîné une perte 6,5 fois supérieure au risque prévu.
Un deuxième problème, moins connu : le terminal convertit les heures historiques du calendrier en fonction du décalage horaire ACTUEL du serveur. En cas d’exportation en été sur un courtier en GMT+2 / GMT+3, chaque événement hivernal apparaît avec une heure de retard (NFP à 16 h 30 au lieu de 15 h 30, heure du serveur). Un filtre basé sur ces horaires bloque l’heure erronée pendant la moitié de l’année.
LA SOLUTION – TROIS FICHIERS
NewsCalendarExport.mq5 (script) – exporte les événements vers Terminal\Common\Files\NewsCalendar.csv et recalcule chaque événement en fonction du décalage horaire du serveur correspondant à sa propre date. À la fin, il effectue une auto-vérification : l’heure la plus fréquente des événements liés au dollar américain doit être identique en hiver comme en été.
NewsFilter.mqh (classe CNewsFilter) – un filtre unique pour le trading en direct et les backtests. En temps réel, il lit le calendrier économique (interrogé au maximum une fois par minute) ; dans le Strategy Tester, il lit le fichier CSV. Seules les devises du symbole sont utilisées (EURUSD : EUR + USD, XAUUSD : USD, CFD sur indices cotés en USD : USD).
NewsFilter_Example.mq5 – un EA minimaliste qui affiche un message lorsque la fenêtre d’actualité commence et se termine, et qui colore les fenêtres bloquées sur le graphique, afin que vous puissiez voir le filtre fonctionner en mode visuel du testeur.
MODE D'EMPLOI
Copiez NewsFilter.mqh dans MQL5\Include, NewsCalendarExport.mq5 dans MQL5\Scripts et NewsFilter_Example.mq5 dans MQL5\Experts. Compilez le script et l’exemple (le fichier .mqh est compilé en même temps).
Lancez NewsCalendarExport une fois, sur n’importe quel graphique d’un terminal connecté. Dans l’onglet Experts, vous devriez voir : « OK : même heure en hiver et en été ».
Dans votre EA, ajoutez le code suivant :
C++
#include <NewsFilter.mqh>
CNewsFilter news;
int OnInit()
{
news.Init(_Symbol, 30, 30); // bloquer 30 minutes avant et après chaque événement
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(news.IsBlocked())
return; // aucune nouvelle entrée pendant les actualités
// ... votre logique d'entrée ...
}
Effectuez un backtest comme d'habitude. Le journal indique le nombre d'événements chargés pour le symbole.
Données d'entrée du script
Exporter les événements à partir de : date de début de l'exportation.
Exporter également les événements programmés dans N jours : inclut les événements à venir.
Devises : liste séparée par des virgules (par défaut : USD, EUR, GBP, JPY, CAD, AUD, NZD, CHF).
Importance : impact élevé uniquement, ou impact moyen + élevé.
Règle d'heure d'été du serveur du courtier : règle américaine (par défaut, serveur = New York + 7 h, la plupart des courtiers GMT+2/+3), règle européenne ou pas d'heure d'été.
Nom du fichier : stocké dans Terminal\Common\Files.
CNewsFilter::Init(symbole, minutesAvant, minutesAprès, mediumToo = false, fichierCSV = "NewsCalendar.csv")
REMARQUES ET LIMITATIONS
Testé sur FTMO (GMT+2 / GMT+3, règle de l'heure d'été américaine) et sur IC Markets UE. Exemple de résultat : 5 645 événements exportés, dont 1 897 décalés d’une heure ; avant la correction, l’heure la plus fréquente pour l’USD était 16 h 30 en hiver et 15 h 30 en été ; après la correction, elle est de 15 h 30 pour les deux saisons.
Si l’autocontrôle indique toujours des horaires différents pour l’hiver et l’été, essayez une autre « règle d’heure d’été du serveur du courtier ».
L'historique du calendrier MQL5 est limité et dépend du terminal ; sur mon terminal, il commence en 2020, les backtests plus anciens ne contiendront donc aucun événement.
Seules les devises du symbole sont utilisées ; pour les indices et les matières premières, c’est donc la devise de cotation qui détermine les événements applicables.
Les agents distants et cloud ne peuvent pas lire le dossier Common\Files : optimisez votre code avec des agents locaux.
Certaines devises ont très peu d’événements à fort impact dans le calendrier MQL5 (l’AUD, par exemple). Utilisez « Impact moyen + fort » pour celles-ci.
Le filtre indique uniquement à votre EA quand NE PAS ouvrir de nouvelles positions. La gestion des positions déjà ouvertes incombe à votre EA.
Relancez le script de temps à autre pour inclure les nouveaux événements.
BESOIN D’AIDE POUR L’INTÉGRER ?
Si vous n’êtes pas programmeur et que vous souhaitez intégrer ce filtre d’actualités à votre EA existant, ou si vous avez besoin de règles de gestion des risques personnalisées adaptées aux évaluations de votre société de trading pour compte propre, contactez-moi directement via mon profil de freelance MQL5. Je me ferai un plaisir de le programmer pour vous !