Une astuce pour réduire les draw downs

 

Jez Liberty est l’auteur du site Automated Trading System. Passionné par le trading et professionnel du développement logiciel depuis 8 ans à Londres, il nous documente son travail, étapes par étapes, pour mettre au point un système de trading automatique de suivi de tendance.

Vous pouvez lire l’article original en anglais ici : A trick to reduce drawdowns

Les drawdowns représentent la partie des statistiques que l’on redoute dans un système de trading. En effet le maximum dradown souligne le niveau de perte que l’on pourrait encaisser en tradant ce système. En résumé il est un indicateur du risque que vous apportez à votre capital.

Avant d’aller plus loin, je vous dois un rapide avertissement : je n’ai pas d’astuce magique permettant de réduire simplement les dradowns… mais avec ce titre accrocheur, je souhaite vous apporter à votre attention comment l’on peut interpréter les draw downs avec plus de nuances. Nous réduirons en effet les drawdowns d’un système, mais sans astuces.

Vous savez bien évidemment que le drawdown est la distance relative entre le niveau actuel de l’equity et le plus haut sommet passé. Lorsqu’un système présente un maximum drawdown de 30%, le mettre en pratique sous entend d’accepter une perte probable de capital de 30% durant la vie du système. Et bien pas tout à fait…

 

Le suivie de tendance induits des drawdowns

 

Par nature, les stratégies de suivi de tendance encouragent généralement les drawdowns par leur tendance à attendre l’inversion de la direction des marchés avant de clôturer les positions. Pour tout trade gagnant, il y a souvent beaucoup d’open equity qui est “rendue” aux marchés.

Voici ci dessous la courbe d’equity d’un trade hypothétique issu d’un système de suivi de tendance :

EquityCurves

 

La closed equity change seulement une fois que le trade est cloturé, tandis que l’equity totale reflète également les mouvements de l’open equity, c’est à dire les ordres ouverts. Ce que l’on apelle “locked-on” equity est le niveau de capital protégé par un stop loss. Au début il matérialise une perte et puis petit à petit son niveau augmente lorsque que l’on bouge le stop loss pour sécuriser des gains. Lorsque le trade est cloturé, les trois equity se rejoignent.

 

Est-il sensé de se baser sur l’open/total equity?

 

Comme mentionné précédement, la total equity est la mesure universelle des performances des systèmes de trading. Vous entendez souvent que vous devriez considérer la valeurs des profits en cours de la même manière que vos profits durement validés et rapatriés sur votre capital. Je ne pense pas cependant que ceci s’applique cependant aux systèmes de suivi de tendance dont on sait qu’ils par laisseront par définition une bonne partie de leurs profits en court aux pieds de la table; mais que globalement sur le long terme, c’est le meilleur moyen de bénéficier des grosses vagues.

L’open equity d’un système de suivi de tendance ne représente que les profits potentiels, et comme le dit la sagesse populaire :

Il ne faut pas vendre la peau de l’ours avant de l’avoir tué…

 

Il pourrait être prudent de faire de même avec votre système de trading et de ne pas prendre en compte les open profit de la même manière que ceux qui ont été réalisés. Si l’on prend en compte le trade de l’exemple ci dessus et de ses equities associées, il peut sembler non logique de regarder les performances de son système via la ligne verte. L’open equity n’influence pas directement la ligne représentant la closed equity.

Ce qui importe au final est la quantité de capital que l’on risque (closed equity) et quels sont les profits réellement réalisés.

Total Equity et statistiques de système

 

Sur le graphique de l’equity représentant seulement un trade gagnant, la relative large variation de l’open equity impacte des statistiques du système.

Malgré le fait que ce trade n’est jamais plus perdant que la moitié du risque initial matérialisé par la “Non Risk equity”, il nous laisse un drawdown 3 fois plus élevé que celui de notre prise de risque initiale.

Un autre indicateur intéressant pour contrôler la prise de risque est le system heat. C’est le montant de l’equity risqué, c’est à dire la différence entre la total equity et la non-risk equity. Chaque fois que l’on ouvre un nouveau trade, le “heat” est égal au risque pris basé sur le stop et la taille de la position. Cependant, à mesure que le trade avance, on se rend compte avec notre exemple que le heat devient beaucoup plus important malgré le fait que le risque réel initial soit inchangé.

Si l’on regarde les données brutes des dradowns et du “heat” du point de vue de la total equity, on obtient une fausse impression de la dynamique du système qui se trouve pénalisé alors que par essence c’est un bon trade de type suivi de tendance.

On pourrait alors suggérer (et c’est mon cas) que regarder des equity alternatives nous donnerait une vue plus claire de notre système.

En terme de drawdowns, nous savons qu’une large portion de ceux ci est en fait du aux inévitables pertes en fin de trades caractéristiques des systèmes de suivi de tendance. Les drawdowns sur la closed equity sont donc une meilleur mesure de la manière dont le système se comporte mal en entrant des trades réellement perdants, et en mettant en valeur le montant réel du capital pouvant être perdu en tradant le système.

Similairement, concernant le risque réellement pris par le système, nous pourrions le mesurer en comparant la closed equity à ma non-risk equity. Le heat étant la différence entre ces deux dernières.

Sur les trades gagnant, ceci diminuerait drastiquement les drawdowns et les chiffres de risk/heat.

 

Réduction de DrawDowns sur les systèmes réels

 

Tout ceci est très bien avec notre seul exemple théorique de trade, mais comment ce que nous venons de voir affecte un réel système de trading? Pour le vérifier, j’ai réalisé un système classique Donchian 50 jours breakout et j’ai calculé le Maximum DrawDown à la fois sur la total et closed equity. Premièrement, voici le graphique des courbes. Comme attendu, elles suivent grossièrement le même chemin, divergeant de temps en temps mais finissant toujours par se rejoindre :

 

TotalvClosedEquity

 

Les courbes paraissent similaires, cependant les statistiques des drawdowns sont sensiblement différentes avec la total equity qui manifeste un dradown maximum de près de 35% plus important que la closed equity :

  • Total Equity Max Drawdown: 38.2%
  • Closed Equity Max Drawdown: 28.5%

 

Si vous aviez commencé à trader cette stratégie dans le passé, vous auriez pu connaitre à un point donné une perte de capitale bien plus importante que les 28% annoncés par le backtest en closed equity  (à noter que je parle bien du passé car le future ne reproduit pas exactement le passé).

En conclusions


Je suis persuadé que ceci est un sujet à controverse parmi les développeurs de systèmes de trading et qu’en terme de reporting pour la comptabilité et les taxes il faut prendre en compte la totale equity.

Le but de ce post n’est pas vraiment de faire l’avocat d’une méthode plutôt que de l’autre, mais plutôt de vous attirer l’attention sur le choix de la bonne statistique en fonction de votre objectif. il y a une grande différence entre le besoin d’étudier son système et celui de le présenter à des investisseurs potentiels.

PS: A la place de la “non-risk equity” utilisée dans ce post, vous pourrez trouver aussi trouver le terme de ”core equity”.

Backtest et optimisation multi-coeurs sous MetaTrader 5

 

D’après une annonce de Metaquotes, MetaTrader 5 permettra de créer des environnements multi-coeurs pour accélérer le backtest et l’optimisation des stratégies. Ces environnements permettent d’optimiser les calculs en permettant de les distribuer sur plusieurs ordinateurs. De même, plusieurs agents de calcul pourront être installé sur un même ordinateur (un pour chaque coeur) afin de permettre une utilisation optimale des ressources.

Par défaut, le nombre d’agent est égal au nombre de processeurs sur la station et ces agents peuvent distribuer des tâches aux agents distants, c’est à dire situés sur des ordinateurs différents. Il est très facile d’installer des agents distants. Tout ce que vous avez à faire est d’utiliser MetaTester.exe (un seul fichier) et d’installer les agents comme des services un par un ou automatiquement selon le nombre de processeurs. Un accès séparé par mot de passe pour chaque agent est mis en place afin de s’assurer que seuls les utilisateurs autorisés pourront s’y connecter.

Voici le backtest d’un EA sur un coeur local. A la fois l’état et la charge du CPU sont montrés.

 

 

Démarrer un backtest sur un agent distant :

 

Outil de modélisation 3D des backtests et optimisation Metatrader

Vous avez pu observer lors de la série d’articles à propos du système de trading IKH de Simon Depiets (allias “Lliane”), l’utilisation d’un outil maison de visualisation 3D pour analyser les backtests et optimisations de Metatrader.

Etant donné que c’est le premier Noël de Trading Automatique et que nous souhaitons tous vous remercier pour la confiance que vous avez témoigné à notre service de programmation, voici un cadeau à destination de tous les membres de notre communauté.

Nous vous offrons gratuitement l’outil permettant de visualiser en 3D les données générées par l’optimisateur de Metatrader 4. Vous pourrez visualiser les Profits, le Profit Factor, le Trade Moyen ou le Nombre de trades en fonction de 2 paramètres que vous souhaitez optimiser. Voici une capture d’écran de ce petit logiciel conçu en Java en utilisant GNU Octave pour le traçage de la surface :


L’installation de l’outil en 5 étapes

1 – L’outil est disponible gratuitement ici (connectez vous avant ou créez vous un compte si ce n’est pas déjà fait) – Utilisation Commerciale Interdite.
2 – Il faut au préalable télécharger et installer Gnu Octave http://sourceforge.net/projects/octave/ … e/download
3 – Installer Java si ce n’est déjà fait http://www.java.com/fr/download/index.jsp
4 – Puis linker mt2oct à Octave avec le bouton Select Octave Path (de base C:\Octave\3.2.3_gcc-4.4.0\bin\octave.exe )
5 – Ensuite coller le “clic-droit copier d’optimisation” des résultats dans le champ texte.
5 Bis – Vous pouvez déjà tester les données utilisées dans les précédents articles. Ouvrir un fichier qui contient ces données, ci-dessous les fichiers ayant servi a faire les graphes de cet article :
UT 1M
UT 5M
UT 15M
UT 1H
UT 4H
UT 1D
6 – Sélectionnez les 2 paramètres à visualiser en appuyant sur le boutton Convert
7 – Sélectionnez la troisième dimension à savoir les “Profits”, “Nombre de Trades”, “Profit Factor”, ou “Trade Moyen” en appuyant sur le boutton correspondant.

Octave sera alors lancé et la fenêtre de visualisation 3D apparaitra.

Comment évaluer les entrées de son système

Jez Liberty est l’auteur du site Automated Trading System. Passionné par le trading et professionnel du développement logiciel depuis 8 ans à Londres, il nous documente son travail, étapes par étapes, pour mettre au point un système de trading automatique.

Lorsque l’on définit un système de trading, nous énonçons des règles d’entrée et de sorties. Nous programmons ensuite notre automate à partir de ces règles et nous le backtestons. Le problème du backtest classique est que nous ne pouvons analyser que le système dans sa globalité. Chaque modification des règles de sortie ou du money management aura un grand impact sur les résultats obtenus et il devient assez difficile de savoir ce que valent vraiment nos règles d’entrées en tant que telles.

C’est pour répondre à ce problème que le e-Ratio nous vient en aide et Jez nous explique comment.

Vous pouvez lire l’article original en anglais ici : e-ratio. How to measure your trading edge in four steps

 

Le e-ratio est un indicateur qui mesure la qualité d’un composant d’un système de trading, c’est à dire sa capacité à identifier un biais du marché. Par exemple, nous pourrions l’utiliser pour évaluer le signal d’entrée d’un système basé sur le break out des canaux de Donchian.

Le concept

 

Le e-ratio donne une mesure de l’alpha (hedge/biais détecté) en calculant la quantité de trades qui vont en votre faveur par rapport à ceux qui font le contraire. Plus la valeur de l’e-ratio est grande, plus une quantité de trades important vont dans la bonne direction, ce qui nous donne une bonne estimation de l’alpha mesuré.

  1. Prenez tous les trades générés par le signal d’entrée.
  2. Fermez chaque trade après une certaine durée n fixée.
  3. Calculez le e-ratio basé sur les données de tous les trades (ce qui va être détaillé dans les 4 étapes de la suite). Ceci vous donne le e-ratio de votre entrée pour la durée choisie.
  4. Répétez l’opération pour diverses valeurs de n et représentez les résultats dans un graphique indiquant le e-ratio en fonction du temps (cf l’illustration ci-dessous).

 

Le e-ratio du critère d’entrée est représenté ci dessous. Plus la valeur est important, le meilleur est le biais que vous exploitez. La graphique ci-dessous représente le e-ratio en fonction du nombre de jours. Celui de 45 jours a une valeur de 1.21 mais chute à 1.07 pour 68 jours.

The e-ratio of the entry criteria is plotted above. The higher the value of the e-ratio, the better the edge. In the instance above the 45-day e-ratio is 1.21 but the edge degrades over time and the e-ratio value drops to 1.07 for day 68.


Etape 1: Enregistrez le MAE et MFE de chaque trade

Pour chaque trade mesurez l’Excurion Favorable Maximale et l’Excursion Adverse Maximale. Ces excursions  correspondent au montant maximum des pertes (Adverse) ou des gains (Favorables) qui surviennent pendant la durée du trade. Il est donc calculé en faisant la différence entre le prix d’entrée et le prix le plus haut et le plus bas survenant durant le trade. Notez que ces valeurs sont positives.


Etape 2: Normalisez le MAE et le MFE

Pour être capable de calculer et comparer le e-ratio sur différents marchés, les excursions devrait être normalisées à un dénominateur commun, comme une unité de volatilité. L’ATR (Average True Range) est une bonne mesure de volatilié. Dans de nombreux systèmes il est aussi utilisé pour calculer la taille des positions, ce qui le rend donc idéal. Divisez toutes les valeurs de MAE et MFE par les valeurs de ATR calculées au début de chaque trade. Dans cet exemple nous utilisons la même période pour l’ATR que pour les canaux de Donchian. Ceci nous donnes des valeurs comparables dans pour tous les marchés conditions.


Etape 3 : Moyenne des MAE et MFE sur tous les trades

Ce sont juste des mathématiques simples ici. Ajoutez tous les MAE et MFE normalisés et divisez par le nombre de trades. Vous obtiendrez alors les MFE et MAE moyens.

 

Etape 4: Division finale = e-ratio

Divisez simplement le MFE moyen par le MAE moyen pour obtenir le e-ratio associé à la durées des trade n. Une valeur positive est nécessaire pour indiquez que votre entrée possède un alpha sur cette longueur de trade.

Analyse

Représenter graphiquement le e-ratio en fonction de diverses périodes de trade vous permet de vérifier et d’analyser l’edge offert par votre système et surtout de choisir la timeframe qui est le plus appropriée à vos signaux.

Vous pouvez aussi calculer les e-ratios pour différentes parties de votre système pour observer comment ils impactent sur le résultat final.

Un autre composant d’un système de trading pourrait être un filtre, par exemple ne trader que dans le sens du trend dominant :

  • acheter seulement lorsque la MA d’un timeframe supérieur monte et est en dessous des prix
  • vendre seulement lorsque la MA d’un timeframe supérieur baisse et est en dessus des prix

 

Le second e-ratio représenté est obtenu par la combinaison du système et du filtre que nous avons défini. Vous pouvez vous rendre compte de l’ammélioration que le filtre apporte ici.

 

The second e-ratio plotted is from a combined entry signal and trade filter. You can see the improvement a filter logic makes!

 

Le e-ratio est un des outils à la disposition des développeurs de systèmes de trading automatique. il peut rapidement vous donner un sentiment général lors de l’introduction d’un composant à votre stratégie de trading.

Credits: le e-ratio a été introduit par Curtis Faithdans son livre Way of the Turtle.

Note: le e-ratio a été calculé en utilisant TradersStudio (et Excel). Le système testé était un Breakout des canaux Donchian (17 jours) avec 7 marchés futurs. La MA utilisée pour le filtrage est de 108 jours.

Vous pouvez accéder aux codes de Jez permettant de calculer le e-ratio, ainsi que le système pour les plateformes TraderStudio et Amibroker :

Backtest et optimisation sous Metatrader

 

Pour obtenir le meilleur de votre stratégie et l’évaluer, vous avez besoin de la backtester et de l’optimiser raisonnablement. Nous allons vous donner dans cet article la marche à suivre avec Metatrader.

Bien que que le test en live sur un compte démo est essentiel pour plusieurs raisons, le backtest à l’avantage de vous permettre de simuler le fonctionnement de votre robot de trading sur de très longues périodes en seulement quelques minutes voir secondes. Et grâce à l’outil d’optimisation intégré au backtest, vous pouvez déterminer quels sont les paramètres qui permettent de maximiser les gains de la stratégie sur une certaine période passée.

Il y a un débat important autours de la précision des backtests réalisés avec Metatrader. Backtester vous offrira il est vrai seulement une approximation proche de la manière dont vos trades seraient exécutées en temps réel. Mais c’est le seul outil existant sous Metatrader qui vous permettra de tester rapidement toute stratégie sur un nombre importants de contextes de trading différents. Il est donc indispensable de savoir correctement s’en servir lorsqu’on se lance dans le trading automatique.

Commencez donc par ouvrir le Strategy Tester dans Metatrader en cliquant sur le bouton appropriée sur la barre de tâche ou en sélectionnant le “Cadre stratégie” via Affichage ou encore juste par le raccourci Ctrl+R.

Données Historiques

Avant de commencer à optimiser ou backtester quoi que ce soit, il faut s’assurer que votre base de données historiques est complète et précise, notamment si vous utilisez le mode “Every Tick”.  Si vous voyez des erreurs “mismatched chart” dans votre journal de log, ou si votre qualité de modélisation est inférieure à 90%, vos données historiques ne sont pas assez complètes pour générer des “ticks” précis.

Pour la procédure à suivre afin de télécharger les données historiques je vous renvoie vers cet article.

 

Optimisation

L’outil d’optimisation de Metatrader vous permets de tester des milliers de combinaisons pour les valeurs des paramètres de votre EA dans le but de trouver ceux qui maximiseront les gains dans l’échelle de temps et timeframe choisis. Cette optimisation est notamment importante pour les EAs basés sur des indicateurs avec des paramètres comme la période par exemple.

Attention cependant, tandis que l’optimiseur vous donnera les paramètres les plus efficaces sur une certaine période de temps, il n’y a pas de garanties que ces paramètres seront profitables dans le future. Les conditions de marché changent et il est donc conseillé de vérifier le résultat de l’optimisation sur des données cachées au moment de l’optimisation et/ou de réoptimiser votre stratégie régulièrement.

 

backtest metatrader

 

Afin d’optimiser votre EA, commencez par le sélectionner dans la liste déroulante. Puis sélectionnez la paire choisie ainsi que la période voulue. Au niveau du modèle de backtest (pour en savoir plus) choisissez “Open Prices Only” (plus rapide à effectuer ce qui est important pour une optimisation)  à moins que vous utilisez chaque ticks dans votre stratégie et dans ce cas utilisez “each tick”. Puis activez la sélection de dates et configurez celle qui vous convient. Enfin assurez vous que l’option optimisation est cochée.

Maintenant passons à la configuration de l’optimisation. Cliquez sur le bouton “propriétés de l’expert” puis allez sur l’onglet “Paramètres d’entrées”. C’est ici que vous allez sélectionner les variables à optimiser ainsi que le pas de l’optimisation et les valeurs minimales et maximales. La colonne “Valeur initiale” donne la valeur la plus basse à tester, la colonne “stop” indique la valeur maximale et le “Pas” donne l’incrément entre deux valeurs testées.

optimiser backtest

 

Cochez les paramètres que vous souhaitez optimiser. Dans l’image ci dessus nous sommes en train d’optimiser les périodes d’un système à croisement de deux moyennes mobiles. Nous pourrions aussi  d’ailleurs optimiser les stop loss, take profite, etc. Prenons l’exemple de la moyenne longue. L’optimiseur va tester toutes les valeurs entre 20 et 100 avec un pas de 2, c’est à dire 22, 24, 26, etc.

Les variables non optimisées utiliseront la valeur présente dans la colonne “valeur” lors des backtests/optimisations. Selon la période, l’ampleur de l’historique testé, la stratégie et le nombre de paramètres testés, l’optimisation peut aller de quelques minutes à plusieurs heures. Si c’est trop long réduisez la durée de l’historique testé et donner un pas plus important aux paramètres testés.

optimisation metatrader

Une fois que l’optimisation est finie, ouvrez l’onglet “optimisation des résultats” et double cliquez sur la colonne “rémunérations” pour trier les résultats. Double cliquez sur n’importe quel résultat pour le charger dans le testeur et appuyez sur Start pour lancer le backtest avec les paramètres sélectionnés.

Backtesting

Désormais vous devriez pouvoir vous débrouiller pour utiliser comme des grands le backtester. Renseignez à nouveau si nécessaire l’EA, la période, la paire, les dates de début et e fin, etc, sans oublier de décocher le paramètre “optimisation”. Vous pouvez sélectionner en outre le mode visuel pour comme son nom l’indique vous souhaitez regarder bougies après bougies comment se comporte sur le graphique votre robot. Pour un backtest, il est recommandé que vous utilisiez le mode “each tick” pour être le plus proche possible de la réalité.

Appuyez sur le bouton “Propriétés de l’expert” pour modifier, charger ou enregistrer les paramètres par défauts. Pour le backtest il est inutile de toucher aux colonnes correspondantes à l’optimisation. Seulement la colonne “Valeurs” nous est ici utile. Les check box et les colonnes “Valeur initiale”, “pas” et “stop” sont ignorées.

Fermez la boîte de dialogue et appuyez sur le bouton Start pour commencer le backtest. Encore une fois cela peut être très rapide ou très long selon la stratégie testée et les paramètres du backtest. Une fois le backtest fini allez voir les résultats sur le graphique et dans la partie “rapport”.

backtest metatrader

Quelques statistiques intéressantes:

  • Profit Total Net – Les profits moins les pertes.
  • Facteur de Profit – Le rapport entre le total des gains et celui des pertes. Plus le chiffre est élevé, mieux c’est.
  • Chute Absolue (Absolute drawdown) – La chute maximale entre un plus haut et un plus bas intermédiaire. Le but est de ramener le drawdown a une valeur la plus faible possible pour limiter les risques de grosses pertes.
  • Profit des Trades – Le pourcentage de trade gagnant.A noter que le terme est une mauvaise traduction…
  • Qualité du modelage – Important seulement si vous testez en mode “every tick”. Dans ce cas, il devrait être ramené à 90%. Si ce n’est pas le cas, suivez les instructions du début de cet article pour télécharger l’historique de données M1.

 

Le tableau “Résultats” vous donne quand à lui le détail de chaque ordre d’ouverture ou de fermeture de trade avec l’heure et la date, le prix, le stop, le take profit, etc. Il est important de mener au préalable des backtests visuels pour vous assurer du bon fonctionnement de votre stratégie.

 

Conseils pour obtenir les meilleurs résultats

Lorsque vous optimisez vos EAs, utilisez le plus petit nombre de paramètres possibles. Trop d’optimisation débouche sur ce que l’on appelle en anglais du “curve-fitting” qui produit des résultats impressionnant sur vos données mais des performances pauvres en temps réel. Pensez donc à tester votre optimisation sur une période que vous n’avez pas utilisez lors de l’optimisation. Backtestez une année plus tard ou plus tôt par exemple.

De manière générale il vaut mieux utilisez des données importantes pour l’optimisation en soit puis des données plus courtes mais significatives (25% de celles de l’optimisation par exemple) pour tester si l’optimisation tient la route. Par exemple on peut prendre 2 ans d’optimisations, puis les six mois précédents ou suivant pour son test.

Pour les EAs basés sur des indicateur, la période aura un grand impact sur les résultats. Attention de ne pas mettre des valeurs non cohérentes avec votre prise de risque pour les stop loss.

Un article suivra pour étudier des exemples précis d’optimisation enfin d’en éviter les pièges.

Extraire les données historiques de Metatrader

 

Voici la traduction d’un article intéressant d’Andrew du site TheGeneticTrader dont vous pouvez trouver la VO en anglais ici : Extracting Data From Metatrader.

Si vous avez regardé le planning de mon projet, vous savez que ma première étape est de créer un EA qui récupère les données historiques de Metatrader pour les placer dans un fichier CSV que j’utiliserai par la suite pour mon algorithme génétique.

Voici donc le code de cet EA nommé DataDumper.mq4 qui réalise cette tâche :

{xtypo_code}//+—————————+

//| Historic Data Dumping EA  |

//+—————————+

#property copyright “Andrew Whaley”

extern int min_year = 2008;
extern int max_year = 2009;

// Global scope

int handle;

int init()

{

int p = Period();

string pd;

if (p == 1) pd = “M1”;

else if (p == 5) pd = “M5”;

else if (p == 15) pd = “M15”;

else if (p == 30) pd = “M30”;

else if (p == 60) pd = “H1”;

else if (p == 240) pd = “H4”;

else pd = “D1”;

string filename = StringConcatenate(Symbol(), “_”, pd, “.csv”);

handle = FileOpen(filename, FILE_CSV|FILE_WRITE, ‘,’);

FileWrite(handle, “Date”, “Time”, “Volume”, “Low”, “Open”, “Close”, “High”, “Bid”, “Ask”);

return(0);

}

int deinit()

{

FileClose(handle);

return(0);

}

int start()

{
string d,m,y,h,mi;
double open,close,high,low;
double vol;

if ((Year() >= min_year) && (Year() <= max_year))
{
if (Day() < 10) d = StringConcatenate(“0”, DoubleToStr(Day(),0));
else d = DoubleToStr(Day(),0);

if (Month() < 10) m = StringConcatenate(“0”, DoubleToStr(Month(),0));
else m = DoubleToStr(Month(),0);

y = DoubleToStr(Year(),0);

if (TimeHour(TimeCurrent()) < 10) h = StringConcatenate(“0”, DoubleToStr(TimeHour(TimeCurrent()),0));
else h = DoubleToStr(TimeHour(TimeCurrent()),0);

if (TimeMinute(TimeCurrent()) < 10) mi = StringConcatenate(“0”, DoubleToStr(TimeMinute(TimeCurrent()),0));
else mi = DoubleToStr(TimeMinute(TimeCurrent()),0);

string ds = StringConcatenate(“\””, d, “-“, m, “-“, y, “\””);

string ts = StringConcatenate(“\””, h, “:”, mi, “\””);

open = iOpen(NULL, 0, 1);
close = iClose(NULL, 0, 1);
high = iHigh(NULL, 0, 1);
low = iLow(NULL, 0, 1);
vol = iVolume(NULL, 0, 1);

FileWrite(handle, ds, ts, vol, low, open, close, high, Bid, Ask);
}

return(0);

}

{/xtypo_code}

Voilà comment on l’utilise :

  1. Ouvrez le graphique que vous voulez utiliser et attachez y l’EA DataDumper,
  2. Pressez F6 pour le Testeur
  3. Sélectionnez le symbole et la pèriode
  4. Sélectionnez le champs ‘Open prices only’
  5. Configurez les propriété de pour l’année de départ et de fin
  6. Lancez le backtest

Quand le test est fini, allez chercher le fichier CSV résultant dans le répertoire <METATRADER>/tester/files.

Comment télécharger des historiques pour backtests sur Metatrader

 

Vous souhaitez réaliser des backtests sous Metatrader mais vous n’avez pas des historiques assez long et votre taux de modélisation est faible? Vous souhaitez augmenter la taille vos historiques et backtester avec un taux de modélisation de 90%? Cet article devrait vous y faire parvenir.

Il y a beaucoup de ressources sur internet qui vous explique qu’il est nécessaire de passer par le site d’Alpari pour y télécharger des données puis faire quelques savantes manipulations. Ceci était vrai auparavant… mais plus maintenant car ce service d’Alpari n’est plus disponible.

Il reste cependant une solution. Utiliser les données des historiques de Metaquotes. C’est moins bien que les données exactes de votre Broker particulier mais c’est mieux que rien. En outre, si votre stratégie n’est pas du scalping, les différences entre les brokers ne devraient pas trop impacte votre backtest.

La marche à suivre pour télécharger les données est toute simple. Rendez vous dans la section Outils -> Archives ou pour aller plus vite appuyez simplement sur “F2”. Puis sélectionnez l’actif que vous souhaitez télécharger ainsi que l’échelle de temps. Téléchargez au moins les données M1 par défaut.

historique metatrader

N’hésitez pas à poster d’autres astuces car la situation évolue toujours très vite dans le domaine..

Le miroir aux alouettes de l’optimisation

 

Voici la traduction d’une série de posts de Tito Ingargiola du blog “Hack the market“. Tito Ingargiola a décidé de quitter en 2005 sa position de spécialiste en technologie a Wall Street pour créer Puppetmaster Trading et poursuivre ainsi à temps plein son intérêt croissant pour le trading algorithmique.

 

Article Original : Fool’s gold

Un des plus grands problème auquel doit faire face le trader algorithmique est de reconnaitre et d’éviter les phénomènes de miroirs aux alouettes provoqués par les backtests et le data-mining (extraction de connaissances à partir de Données)

Le problème est que l’improbable évident devient incroyablement plus plausible lorsque de nombreuses instances sont considérées. Une des premières réaction inévitable qu’un apprenti trader algorithmique a lorsqu’il regarde les résultats de sa stratégie passée au travers d’un optimiseur de paramètres est “Je vais devenir riche“.

Comment pourrait-il l’être autrement? Un tel résultat ne peut indiquer autre chose hormis  que ma stratégie est prédictive. J’ai touché du doigt une de ces inefficiences du marché et donc j’ai créé une de ces petites machin à argent.”

Le système est alors rapidement mis en production. Et c’est là que ça devient sournois parce que vous allez peut être même faire de l’argent. Peut être même beaucoup. Mais à moins que vous êtes vraiment vraiment chanceux, la chance va tourner et cette stratégie qui était une véritable mine d’or pendant les n derniers mois va soudainement commencer à mal se comporter. Votre exaltation va alors se transformer en confusion, puis en déception et enfin pour les plus obstinés en douleur et horreur.

Qu’est ce qu’il se passe alors? Comment nous autres, joyeux mineurs, nous nous retrouvons à extraire de l’or de fou? Ce sera le sujet de notre série de posts initiale.

 

Article Original : Sucker Punch

Pour illustrer ces propos, je vais introduire un exemple simple: la stratégie “morning breakout”. les variations de cette stratégie ont été discutées par une variété de sources de l’ouvrage encyclopédique de Perry Kaufman à un exemplaire récent de  Futures Magazine (ndlr: récent à l’époque de l’écriture de l’article…).

La logique derrière cette stratégie est basée sur le prémisse que les premières n minutes d’une session de trading indiqueront probablement le mouvement entier de celle ci et donc les breakouts à l’intérieure de cet intervalle seront décisifs pour la journée. On peut alors prendre cette idée basique et créer une série de stratégies en ajoutant des filtres et pluisieurs sorties.

Elles ont toute les mêmes caractéristiques basiques: elles sont toutes perdantes.

Sucker punch!

 

Nous garderons les choses simples et nous assumons que notre stratégie positionnera des stops aux max & min observés durant la session des n minutes. A la fin de la journée, nous sortirons de chaque position que la stratégie a engendrée.

Notre stratégie a donc deux paramètres pouvant être optimisés: que trader et quand placer les stops? Le premier est de type contrat tandis que le deuxième est un entier. Nous avons aussi des paramètres fixes (c’est à dire dont il n’y a pas d’intérêt d’essayer à optimiser) traduisant quand la session doit démarrer, combien d’argent risquer, combien de contrats trader, etc.

Si nous faisons une optimisation des paramètres sur cette stratégie en utilisant les composants du  s&p 500 comme valeurs du premier paramètre et en faisant varier la variable n de la taille de la fenêtre d’observation du breakout avec les valeurs { 20, 40, 60, 80 }, nous obtenons 500 X 4 stratégies différentes avec chacune des backtests pour nous produire nos résultats.

Nous allons désormais observer et essayer d’ analyser les résultats.

Article Original: Anatomie of a knockout

Contrairement à ce que j’ai écrit la fois dernière, j’ai réalisé ce test sur un ensemble de 1190 titres produisant une variété de 4760 stratégies différentes. Naturellement, lorsque l’on regarde un nombre aussi important de stratégies, nous allons en trouver de réellement très performantes. Il y a peut être de bonnes raisons qui expliquent pourquoi certaines stratégies ont des retours très supérieurs à la moyenne sur certaines périodes de temps. Je laisse le soin aux lecteurs de répondre à cette question…

Si nous observons un des bons résultats (nommé BID), on peut penser que l’on tient quelque chose :

 

just look at dem curves

 

Peut être. Regardons désormais un perdant (nommé EXEL) :

oh, dear

 

Aussi différent que le jour et la nuit, n’est ce pas? Bon, je préfèrerais certainement voir le  premier dans un bilan mensuel, mais si nous y regardons de plus près, ils se ressemblent réellement. Ici nous avons un aperçu de la distribution des résultats des trades exécutés par chaque stratégie (BID et EXEL). 

 

color me random

 

et celui ci :

 

color me random, part deux

 

 

Maintenant, ceci peut ne pas paraître très concluant et peut être ça ne l’est pas. Mais les deux stratégies si opposées se ressemblent désormais beaucoup plus.

Elles ressemblent pour moi diablement  à une distribution aléatoire.

Et si je regarde, disons, 4760 distributions de ce type, je m’attends à observer quelques une qui semblent très attirantes (décalées légèrement vers la droite) et d’autres qui sont décidément sinistres…

Parce que nous voulons y croire, nous pourrions regarder une énorme série de ce type jusqu’à ce que nous devrions nous écrier “maudit soit Jacob Bernouli et sa loi des grands nombres”. Nous obtenons une belle courbe de Gauss.

clear as mud

La prochaine fois, nous verrons d’autres stratégies (et leur distribution) qui semblent assez différentes et pourraient nous amener à considérer d’autres manière de raisonner à propos de nos résults de backtest.

 

Article Original: Distribution – part 1

Je ferai quelques commentaires supplémentaires sur la dernière stratégie que nous venons de voir. Bien que je l’ai égratignée, c’est en fait une très bonne stratégie à étudier car elle est très simple à implémenter, rapide à s’exécuter, semble prometteuse et peut être permutée de nombreuses manières.Elle a par contre la mauvaise particularité d’être perdante, mais rien n’est parfait. Elle devrait effacer ce défaut en nous faisant visualiser des phénomènes intéressants.Par exemple, de tous les marchés futures que j’ai essayés, ICE, CME et NYX ontbien marché. Il y a peut être quelque chose là. Ou pas. Si l’on regarde la distribution de la meilleur des 4 stratégies que j’ai utilisé par instrument, nous obtenons une image assez claire :

 

gimme an R-...

 

 

C’est chacune des exécutions individuelles que kes stratégies ont faites. En moyenne, en incluant les charges et commissions, elles perdent 7 dollars par trade. pas bon… et c’était les meilleurs du groupe. Assez concluant pour moi.

Le problème d’extraction de données et de backtesting que j’ai essayé d’illustrer ici est bien détaillé dans le chapitre 6 du livre de David Aronson intitulé  “Evidence-Based Technical Analysis.

Traduction: Nicolas Vitale

 

Limitations du module de Backtest de Metatrader

Cet article prend la suite de l’article intitulé “Fonctionnement du backtest avec Metatrader“.

Introduction

Cet article rentre plus en détail dans les caractéristiques et limitations du backtesteur de stratégie MetaTrader4.

Caractéristiques spéciales du testeur de stratégies sur des données historiques :

  • Certaines fonctions sont exécutés sans sorties. Ce sont Sleep(), Alert(), SendMail(), PlaySound(), MessageBox(), WindowFind(), WindowHandle(), WindowIsVisible()
  • Le trading est permis pour la paire sous test seulement. Il n’y a pas de possibilité de backtest pour un portefeuille entier. Les tentatives de trade utilisant d’autres paires retourneront une erreur.
  • La taille des lots incluant la taille initiale, l’incrément, les commissions et les swaps sont ceux des caractéristiques du compte actif. Avant de lancer le backtest, vérifiez qu’il y ait au moins un compte activé dans la liste de la fenêtre “Navigator” du terminal.
  • Tous les swaps, les obligations de marge, les expirations et les ordres GTC sont modélisés. Le backtest est réalisé de manière la plus porche des conditions du serveur de trading. Mais il peut arriver des inexactitudes d’estimation des marges nécessaires sur une paire à cause d’un manque d’informations précises sur les prix à chaque instant.
  • Le début d’une bougie d’une autre échelle de temps pour la même paire sous tests est modélisée approximativement : Open = correct Open, Close = correct Close, Low = min (Open,Close), High = max (Open,Close), Volume = final Volume (false).
  • Le mode d’Exécution Instantannée est considérée comme utilisée durant les trades, réalisé sans slippage.
  • Réalisation des ordres d’ouverture et de fermeture des trades sans slippage.
  • Test des stops après StopOut.
  • Les échelles de temps Hebdomadaires, Mensuelles et d’autres irrégulières ne sont pas testées.
  • La monnaie du dépôt peut être changée, mais les taux de conversion sont établis et le taux de change courant est utilisé.
  • Il n’y a pas de délais dans l’exécution des trades. Un délai de setup est prévu d’être rajouté dans l’exécution des transactions.
  • L’historique du compte est complètement disponible et ne dépends pas de la configuration.
  • Si d’autres paires et pèriodes sont très utilisées, il est préférable de les télécharger toutes les profondeurs possibles. I
  • Au niveau de modélisation “tous les ticks”, le backtesteur utilise toutes les échelles de temps de la paire sous tests de manière indépendante.
  • L’utilisation de la fonction MarketInfo génère des erreurs ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE(4059), cependant, les informations correctes à propos des prix courants de la paire testée, de la dimension des nieveaux de stop, de la taille des points et du spread de chaque paire est fournie.

Caractéristiques spéciales du Processus d’Optimisation

 

  • Rien n’est écrit dans le journal ou par la fonction Print(). Ce choix a été fait pour accélérer le backtest et sauver de l’espace disque. Si les logs complets étaient, ils prendraient des centaines de Mo.
  • Les objets dessinés ne sont pas réellement réalisés. Les objets sont désactivés afin d’accélérer le backtest.
  • La fonction “Sauter les résultats inutiles “est utilisée. Afin de ne pas surcharger le tableau et le graphique avec les résultats des test, la possibilité de laisser tomber les mauvais résultats est utilisée. Cette fonction peut être activée dans le menu contextuel “Résultats d’Optimisation”-> “Skip useless results”.

     

Traduction: Nicolas Vitale
Source: http://articles.mql4.com/72
“MQL4 is a trade mark of MetaQuotes Software Corp. and all related materials are reserved for MetaQuotes”