Aide MetaTrader 5Trading Algorithmique, Robots de TradingFonctionnalités de Test

Fonctionnalités de Test

L'idée du trading automatique est attractive car un robot de trading peut travailler sans arrêt 24 heures par jour et 7 jours par semaine. Le robot permet de s'affranchir de toute fatigue, doute, peur ou autre problème psychologique. Vous n'avez qu'à formaliser clairement les règles de trading et les implémenter sous forme d'algorithme, et le robot sera prêt à travailler sans relâche. Toutefois, vous devez au préalable vous assurer que les deux conditions importantes ci-dessous sont remplies :

  • L'Expert Advisor effectue des opérations de trading selon les règles du système de trading ;
  • La stratégie de trading implémentée dans l'EA génère un profit durant les backtests.

Toutes ces questions trouveront leurs réponses grâce au testeur de stratégie de la plateforme de trading.

Déclenchement et Exécution d'un Ordre

Pour les instruments non boursiers, le déclenchement de tous les types d'ordres en attente et des SL/TP est effectué aux prix Bid et Ask. L'exécution est effectuée aux prix Bid et Ask actuels du marché au moment du déclenchement.

Pour les instruments boursiers, les graphiques sont dessinés et les ordres déclenchés aux prix de la dernière transaction effectuée (Last). Les ordres Limit sont déclenchés aux prix Bid et Ask. Les ordres Limit sont exécutés au prix spécifié dans l'ordre (sans slippage), tandis que les ordres d'autres types sont exécutés aux prix Bid et Ask courants du marché (un slippage est possible).

Utilisons Si-6.16 comme exemple. Aux prix actuels Bid=72570, Ask=72572, et Last=72552, un ordre Buy Stop au prix d'exécution de 72580 est placé. Nous avons reçu les nouveaux prix suivant dans le flux des prix :

  • Bid=72588
  • Ask=72590
  • Last=72580

Pour les instruments boursiers, le prix Last est utilisé comme déclencheur activant les ordres stop. Donc l'occurrence de Last=72580 dans le flux résulte dans l'activation de l'ordre Buy Stop. L'ordre doit être exécuté (opération buy au marché) au prix actuel du marché Ask=72590.

Déclenchement et exécution d'un ordre Buy Stop order pour un instrument boursier

Dans les modes de test "Prix d'ouverture uniquement" et "1 minute OHLC", les ordres en attente, comme le SL et le TP sont exécutés aux prix spécifiés dans les ordres. L'algorithme d'exécution aux prix du marché utilisé dans les modes les plus précis (chaque tick et ticks réels), ne convient pas pour les modes moins précis. Dans certains modes, les ticks intermédiaires ne sont pas générés, la différence entre le prix demandé et le prix (Open ou OHLC) peut donc être significative. L'exécution des ordres aux prix demandés dans les modes "Prix d'ouverture uniquement"et "1 minute OHLC" fournissent des résultats de test plus précis.

Création des Barres

Dans le testeur de stratégie, les barres des symboles boursiers ne sont créés que par les ticks ayant un prix Last différent de 0. Les prix Bid et Ask peuvent arriver, les indicateurs sont en cours de calcul, mais les barres ne sont pas encore formées. Il n'y a aucun prix Last à zéro dans le mode "Chaque tick". La barre est donc modifiée à chaque tick entrant.

Simulation du Spread #

La différence entre les prix Bid (offre) et Ask (demande) est appelée le spread. Durant les tests, le spread n'est pas modélisé mais est pris des données historiques. Si le spread historique est inférieur ou égal à zéro, alors le dernier spread connu (au moment de la génération) est utilisé.

Dans le Testeur de Stratégie, le spread est toujours considéré comme flottant.

Variables Globales de la Plateforme de Trading #

Les variables globales sont également émulées durant les tests, mais elles ne sont pas reliées aux variables globales de la plateforme, qui peuvent être vues en appuyant sur la touche F3. Cela signifie que toutes les opérations avec les variables globales de la plateforme sont effectuées en dehors de la plateforme de trading durant les tests (sur l'agent de test).

Téléchargement de l'Historique durant les Tests #

La plateforme synchronise et télécharge l'historique d'un symbole à tester depuis le serveur de trading avant le démarrage du processus de test. La première fois, la plateforme télécharge toutes les données historiques disponibles pour le symbole afin de ne plus rien télécharger par la suite. Par la suite, seules les nouvelles données sont téléchargées.

Un agent de test reçoit l'historique du symbole à tester depuis la plateforme de trading juste après le démarrage du test. Si des données d'autres instruments sont utilisées pendant le test (par exemple si c'est un Expert Advisor multi-devises), l'agent de test récupère l'historique nécessaire de la plateforme de trading au moment du premier appel à ces données. Si les données historiques sont disponibles dans la plateforme, elles sont immédiatement transférées à l'agent de test. Si les données ne sont pas disponibles, la plateforme les demande et les télécharge depuis le serveur, et les envoie ensuite à l'agent de test.

Les données des instruments supplémentaires sont également nécessaires pour le calcul des taux croisés des opérations de trading. Par exemple, lors du test d'une stratégie sur l'EURCHF avec une devise de dépôt en USD, avant d'effectuer la première opération de trading, l'agent de test demande les données historiques de l'EURUSD et de l'USDCHF à la plateforme de trading, bien que la stratégie ne contienne pas d'appel direct à ces symboles.

Un téléchargement supplémentaire de l'historique de trading peut être lancé lors de l'appel à certaines fonction depuis une application MQL5 :

Téléchargement de l'historique

Aucun téléchargement de l'historique

Lors de l'appel à SymbolInfoDouble avec les paramètres suivants :

  • SYMBOL_BID
  • SYMBOL_BIDHIGH
  • SYMBOL_BIDLOW
  • SYMBOL_ASK
  • SYMBOL_ASKHIGH
  • SYMBOL_ASKLOW
  • SYMBOL_LAST
  • SYMBOL_LASTHIGH
  • SYMBOL_LASTLOW
  • SYMBOL_TRADE_TICK_VALUE
  • SYMBOL_TRADE_TICK_VALUE_PROFIT
  • SYMBOL_TRADE_TICK_VALUE_LOSS

Lors de l'appel à SymbolInfoInteger avec les paramètres suivants :

  • SYMBOL_VOLUME
  • SYMBOL_VOLUMEHIGH
  • SYMBOL_VOLUMELOW
  • SYMBOL_TIME
  • SYMBOL_SPREAD

Lors de l'appel à SymbolInfoTick

Lors de l'appel à :

  • SymbolInfoString
  • SymbolName
  • SymbolSelect
  • SymbolInfoMarginRate
  • SymbolInfoSessionQuote
  • SymbolInfoSessionTrade
  • Autres fonctions non spécifiées ici
  • SymbolInfoDouble et SymbolInfoInteger avec d'autres paramètres non spécifiés dans la colonne de gauche

Avant de tester une stratégie multi-devises, il est recommandé de télécharger toutes les données historiques nécessaires dans la plateforme de trading. Cela aidera à éviter les délais lors des tests/optimisations associés. Vous pouvez télécharger l'historique, par exemple, en ouvrant les graphiques correspondants et en les faisant défiler jusqu'au début de l'historique.

Les agents de test reçoivent les données historiques de la plateforme sous forme compressée. A la deuxième exécution d'un test, le testeur ne télécharge pas les données de la plateforme, car les données ont été conservées de la dernière exécution.

  • La plateforme ne télécharge les données historiques du serveur de trading qu'une seule fois, lorsque les agents accédent à la plateforme la première fois pour télécharger l'historique des symboles testés. L'historique est téléchargé de façon compactée pour réduire le trafic.
  • Les ticks ne sont pas envoyés sur le réseau, ils sont générés sur les agents de test.

Test Multi-Devises #

Le Strategy Tester permet de backtester (tester dans le passé) des stratégies utilisant plusieurs symboles. Par convention, ces EA sont appelés 'Expert Advisors multi-devises', puisqu'à l'origine, sur diverses plateformes, les tests n'étaient effectués que sur un seul symbole. Dans le testeur de la plateforme, nous pouvons modéliser le trading pour tous les instruments disponibles.

Le testeur télécharge automatiquement l'historique des symboles nécessaires depuis la plateforme de trading (et non pas depuis le serveur de trading !) au premier appel aux données du symbole.

L'agent de test ne télécharge que les données historiques manquantes et quelques-unes supplémentaires pour fournir les données nécessaires aux calculs de l'indicateur au début du test. Pour les périodes D1 et inférieures, le volume minimum de l'historique téléchargé est 1 an. Pour un test sur 1 mois sur l'intervalle 01.11.2010 - 01.12.2010 avec une période de M15 (chaque barre équivaut à 15 minutes), l'agent demande à la plateforme l'historique du symbole pour l'année 2010 en entier. Pour la période d'une semaine, l'agent demande un historique de 100 barres, correspondant à environ 2 ans (une année a 52 semaines). Pour tester une période d'un mois, l'agent demande l'historique pour 8 ans (12 mois * 8 ans = 96 mois).

Si les barres demandées ne sont pas disponibles pour n'importe quelle raison, la date de départ du test est automatiquement décalée du passé vers le présent pour fournir la quantité de barres nécessaire.

Le Market Watch est également émulé durant les tests. Par défaut, un seul symbole est disponible dans le Market Watch du testeur au début des tests - le symbole sur lequel le test est en cours d'exécution. Tous les symboles nécessaires auxquels le testeur aura accès seront automatiquement connectés au Market Watch du Testeur de Stratégie (et non pas à toute la plateforme !).

Avant de commencer à tester un Expert Advisor multi-devises, sélectionnez les symboles requis pour le test dans le Market Watch de la plateforme de trading et téléchargez les données nécessaires. Au premier appel d'un symbole "étranger", son historique est automatiquement synchronisé entre l'agent de test et la plateforme de trading. Un symbole "étranger" est celui qui diffère du symbole sur lequel le test est effectué.

Quand un tel symbole est appelé pour la première fois, le processus de test est mis en pause et l'historique pour le symbole et la période est téléchargé depuis la plateforme vers l'agent de test. La génération de la séquence de ticks pour ce symbole est activée au même moment.

Une séquence individuelle de ticks est générée pour chaque symbole selon le mode de génération des ticks sélectionné.

Cela signifie que le test multi-devises dans la plateforme de trading ne nécessite aucun effort supplémentaire. Il suffit uniquement d'ouvrir les graphiques des symboles appropriés dans la plateforme. L'historique de tous les symboles requis est téléchargé automatiquement depuis le serveur de trading, pourvu que les données soient disponibles.

Heure de la Simulation dans le Testeur de Stratégie #

Durant les tests, l'heure locale est toujours égale à l'heure du serveur. L'heure du serveur correspond toujours à l'heure GMT.

L'heure GMT, l'heure locale et l'heure du serveur sont égales dans le Testeur de Stratégie délibérément au cas où aucune connexion avec le serveur n'est disponible. Les résultats des tests devraient toujours être identiques, que la connexion avec le serveur soit établie ou pas. Les informations sur l'heure du serveur ne sont pas stockées localement et sont prises du serveur.

Objets Graphiques durant les Tests #

Durant les tests/les optimisations, les objets graphiques ne sont pas dessinés. Donc lorsqu'un Expert Advisor requiert les propriétés d'un objet créé durant le test/l'optimisation, il reçoit des valeurs à 0.

Cette limitation ne s'applique pas aux tests en mode visuel.

Synchronisation des Barres en mode "Prix d'ouverture uniquement" #

Le Testeur de Stratégie permet de tester les Expert Advisors "multi-devises". Un EA multi-devises est un EA tradant au minimum deux symboles.

Tester des stratégies tradant plusieurs symboles impose quelques contraintes techniques supplémentaires pour le testeur :

  • génération des ticks pour ces symboles ;
  • calcul des valeurs des indicateurs pour ces symboles ;
  • calcul des besoins de marges pour ces symboles ;
  • synchronisation des séquences de ticks générées pour tous les symboles.

Le Testeur de Stratégie génére et rejoue une séquence de ticks pour chaque instrument selon le mode de trading sélectionné Une nouvelle barreest ouverte pour chaque symbole indépendamment de comment la barre s'est ouverte sur un autre symbole. Cela signifie que pendant des tests multi-devises, une situation peut se produire (et arrive souvent) lorsqu'une nouvelle barre est déjà ouverte pour un instrument, et qu'aucune nouvelle barre n'est disponible pour un autre instrument. C'est comme avec des cotations en temps réel.

Cette simulation historique authentique dans le testeur ne pose aucun problème tant que les modes de test "Chaque tick" et "1 minute OHLC" sont utilisés. Pour ces modes, le nombre de ticks générés sur une bougie est suffisant pour permettre d'attendre la synchronisation des barres pour différents symboles. Mais comment sont testées les stratégies multi-devises dans le mode "Prix d'ouverture uniquement", où la synchronisation des barres des instruments est nécéssaire ? Dans ce mode, l'EA n'est appelé que pour un tick, correspondant à l'heure d'ouverture de la barre.

Exemple : Nous testons un Expert Advisor en EURUSD, et une nouvelle bougie 1 heure en EURUSD est ouverte. Il est aisé de reconnaître ceci - dans le mode "Prix d'ouverture uniquement", l'évènement de l'arrivée d'un nouveau tick correspond au moment de l'ouverture de la barre. Mais il n'y a aucune garantie qu'une nouvelle bougie a été ouverte en GBPUSD, qui est utilisé dans l'EA.

Agents de Test #

Les tests sont effectués dans la plateforme grâce à des agents de test. Les agents locaux sont créés et activés automatiquement. Le nombre d'agents locaux équivaut au nombre de coeurs logiques.

Chaque agent de test possède sa propre copie des variables globales, qui ne sont pas liées à la plateforme. La plateforme sert de gestionnaire, distribuant les tâches aux agents locaux et aux agents distants. Lorsque le test d'un Expert Advisor avec des paramètres donnés est terminé, l'agent retourne les résultats à la plateforme. Un seul agent est utilisé par test.

L'agent stocke l'historique reçu de la plateforme dans des répertoires séparés basés sur le nom du symbole, l'historique de EURUSD est donc stocké dans un répertoire nommé EURUSD. De plus, l'historique des instruments est séparé suivant leurs sources. La structure de stockage de l'historique est la suivante :

tester_catalog\Agent-AddresseIP-Port\bases\nom_de_la_source\historique\nom_du_symbole

Par exemple, l'historique de l'EURUSD téléchargé depuis le serveur MetaQuotes-Demo peut être stocké dans le répertoire tester_catalog\Agent-127.0.0.1-3000\bases\MetaQuotes-Demo\EURUSD.

Un agent local passe en attente après avoir fini les tests, et attends la tâche suivante pendant 5 minutes, afin de ne pas perdre de temps à se lancer lors de l'appel suivant. L'agent local ne s'arrête et ne libère sa mémoire CPU qu'après cette période d'attente.

Si le test est interrompu par l'utilisateur (appui sur le bouton "Annuler") ou si la plateforme de trading est fermée, tous les agents locaux stoppent aussitôt leurs opérations en cours et sont supprimés de la mémoire.

Echanges de données entre la Plateforme et l'Agent #

Lorsque vous lancez un test, la plateforme prépare plusieurs blocs de paramètres qui devront être envoyés à l'agent :

  • les paramètres d'entrées pour le test (mode de simulation, intervalle de test, instruments, critère d'optimisation, etc.)
  • la liste des symboles sélectionnés dans le Market Watch
  • les spécifications de l'instrument testé (taille du contrat, niveau minimum requis pour le Stop Loss et pour le Take Profit, etc.)
  • l'Expert Advisor à tester et les valeurs de ses paramètres d'entrée
  • des informations sur les fichiers supplémentaires (bilbiothèques, indicateurs, fichiers de données)

Pour chaque bloc de paramètres, une empreinte numérique sous la forme d'un hash MD5 est créée et envoyée à l'agent. Le hash MD5 est unique pour chaque ensemble, il est bien plus petit que le montant d'information utilisées pour son calcul.

L'agent reçoit les hashs et les compare avec ceux des ensembles qu'il stocke. Si l'empreinte numérique du bloc de paramètres donné n'est pas disponible sur l'agent, ou si le hash diffère de celui existant, l'agent demande le bloc de paramètres. Ceci réduit le trafic entre la plateforme et l'agent.

Après le test, l'agent retourne les résultats de l'exécution à la plateforme qui seront affichés dans l'onglet "Résultats des Tests" ou "Résultats de l'Optimisation" : le profit, le nombre de transactions, le ratio de Sharpe, le résultat de la fonction OnTester(), etc.

Pendant l'optimisation, la plateforme distribue les tâches de test aux agents sous forme de paquets, chaque paquet contenant plusieurs tâches (une tâche signifie un test avec un ensemble donné de paramètres d'entrée). Ceci réduit le temps d'échange de données entre la plateforme et l'agent.

Les agents ne sauvegardent jamais les fichiers EX5 reçus de la plateforme (EA, indicateurs, bibliothèques, etc.) sur le disque dur pour des raisons de sécurité, afin qu'un ordinateur exécutant un agent ne puisse pas utiliser les données reçues. Tous les autres fichiers, incluant les DLL, sont sauvegardés dans une sandbox. Vous ne pouvez pas tester des Expert Advisors utilisant des appels à des DLL sur des agents distants.

Les résultats des tests sont ajoutés par la plateforme dans un cache spécial des résultats pour pouvoir y accéder facilement en cas de besoin. Pour chaque ensemble de paramètres, la plateforme recherche les résultats des exécutions précédentes dans le cache des résultats afin d'éviter de refaire une exécution. Si aucun résultat n'est trouvé pour un ensemble de paramètres, l'agent reçoit une tâche pour exécuter le test.

Le trafic entre la plateforme et les agents est crypté.

Les ticks ne sont pas envoyés sur le réseau, ils sont générés sur les agents de test.

Utilisation du Dossier Partagé des Plateformes de Trading #

Tous les agents de test sont isolés les uns des autres et de la plateforme de trading : chaque agent a son propre dossier dans lequel ses journaux sont sauvegardés. De plus, toutes les opérations sur les fichiers des agents pendant les tests sont effectuées dans le répertoire nom_de_l_agent/MQL5/Files. Cependant, vous pouvez implémenter l'interaction entre les agents locaux et la plateforme de trading en utilisant le dossier partagé des plateformes.

Utilisation de DLL #

Pour accélerer l'optimisation vous pouvez utiliser des agents distants en complément des agents locaux. Dans ce cas, il existe quelques limitations pour les agents distants. Tout d'abord, les résultats de la fonction Print(), ainsi que les messages à propos de l'ouverture et de la clôture de positions, ne sont pas sauvés dans les journaux des agents distants. Un minimum d'information est ajouté au journal pour éviter de stocker des quantités énormes de messages lors de l'utilisation d'Expert Advisors incorrects.

Une deuxième limitation - l'utilisation des DLL pendant le test d'un Expert Advisor est interdit. Les appels de DLL sont absolument interdits sur les agents distants pour des raisons de sécurité. Sur un agent local, les appels de DLL dans les Expert Advisors testés ne sont autorisés que si le paramètre "Permettre l'import de DLL" est activée.

Expert Advisors

Lors de l'utilisation d'Expert Advisors externes (scripts, indicateurs) nécessitant des appels de DLL, vous devez connaître les risques lorsque cette option est activée dans les paramètres de la plateforme. Indépendamment de comment est utilisé l'Expert Advisor - que ce soit pour un test ou pour une exécution sur un graphique.