MultiCharts: Ma première stratégie

Cet article fait suite au MultiCharts : Prise en main, tests et premiers retours.
Pour continuer les echanges sur le forum, c’est par ici : forum MultiCharts

Du Code à Foison


MultiCharts désigne sous le nom de studies les indicateurs et les générateurs de signaux (les stratégies automatisées). On peut créer les siens ou utiliser ceux qui sont fournis par défaut. La liste des indicateurs est assez longue et on y retrouve tous les standards. Cette liste contient notablement des détections de figures de chandeliers japonais (pour les amateurs), des indicateurs adaptés aux options, des indicateurs temporels, des détections de breakouts, etc. La liste des stratégies, bien sûr, ne contient rien de miraculeux, mais au moins son contenu dépasse le simple cadre de l’exemple et peut servir de brique ou d’idée. On peut également installer des indicateurs ou des signaux commercialisés par des tiers (add-ons).

 

Pour appliquer un indicateur ou une stratégie sur un cours, il suffit de sélectionner le cours concerné et de choisir insert study. On peut mettre autant d’indicateurs ou de stratégies que l’on veut. L’apparence du résultat est hautement paramétrable, ce qui est incontestablement un point fort de MultiCharts. Il faut cependant avoir un œil exercé pour repérer qu’une stratégie est active dans une des fenêtres.

On peut modifier chacun des paramètres en quelques clics et le rendu se fait rapidement même sur un historique assez long. J’aurais préféré cependant une interface comme celle d’AmiBroker qui permet de modifier les paramètres avec des petites réglettes et de constater immédiatement le résultat. J’aurais aimé aussi pouvoir revenir rapidement aux valeurs par défaut.

I’ve got the power


Les indicateurs et les stratégies sont écrits dans un langage appelé PowerLanguage, dérivé de l’EasyLanguage de TradeStation. Ce langage est similaire à celui de ProRealTime et a été conçu au départ pour les non-informaticiens. Il dispose d’un grand nombre de fonctions et de procédures déjà écrites qui devraient satisfaire la plupart des besoins. Bien qu’il soit d’un abord simple, ne pensez pas que vous construirez en un tour de main et sans manuel une stratégie faisant appel à plusieurs flux différents et croisant des indicateurs dans différentes unités de temps. Le langage qui comprend tout seul où vous voulez en venir n’existe pas encore.

Voici un exemple de code pour un signal d’achat après un gap (le plus bas de la barre se trouve au-dessus du plus haut de la barre précédente) :

if Low > High of 1 bar ago then

Buy ( “GapUp” ) next bar at market ;

La condition peut aussi s’écrire : if Low > High[1] then

Le code s’écrit à l’aide d’un éditeur de texte qui bénéficie d’une coloration syntaxique, d’une auto-complétion de la saisie et d’une aide contextuelle. Curieusement, cet éditeur ne tolère pas les accents dans les commentaires.

Pour être utilisable, le code doit être compilé, c’est-à-dire traduit dans un langage adapté au processeur de votre machine, ce qui améliore sa vitesse d’exécution. Un clic suffit à compiler le code et à répercuter ses changements partout où il est utilisé.

Il est possible de crypter son code pour le protéger et décourager la décompilation. Vous pouvez donc partager ou vendre vos indicateurs et vos stratégies sans divulguer votre code.

Etude de cas


Pour faire mes premiers pas dans ce langage, j’ai décidé d’écrire une stratégie assez basique dont voici les règles :

–          Entrée : si, à chaque barre, je suis au-dessus de la barre précédente et je suis au-dessus d’une moyenne mobile exponentielle, je rentre à l’achat (je limite mes entrées à 100) ;

–          Sortie : si je suis en dessous de la moyenne mobile, je sors.

Cette stratégie ne cherche pas à prédire l’avenir avec des indicateurs compliqués, mais essaie simplement de s’adapter à la situation en cours en cumulant des achats quand la tendance est à la hausse et en vendant l’ensemble quand la tendance se renverse.

La moyenne mobile sert d’indicateur de tendance. On fixe pour l’instant sa période à 150.

 

// Declaration d’une moyenne mobile exponentielle

var: MM(Close);

inputs: PeriodeMM(150);

MM = XAverage(Close, PeriodeMM);

// On limite le nombre d’entrees a 100

inputs: MaxEntrees(100);

// Si cours au-dessus du precedent et au-dessus de la MM, on achete

if Close > Close[1] and Close > MM and CurrentEntries <= MaxEntrees then

Buy next bar at market;

// Si cours en dessous de la moyenne mobile, on ferme tout

if Close < MM then

Sell next bar at market;

 

Je compile ma stratégie et je l’insère sur les historiques d’une dizaine d’années de l’indice Dow Jones, de l’action Amazon, de la paire EUR-USD et de la paire GBP-USD. J’utilise une heure comme unité de temps pour chaque barre. Pour que ma stratégie puisse fonctionner correctement, je dois augmenter deux limites dans l’écran des propriétés : le nombre de barres à lire dans le passé pour faire les calculs (au moins 500, ce qui permettra d’avoir de la marge pour une optimisation de la période de la moyenne mobile) et le nombre maximum d’ordres qui peuvent être ouverts simultanément. Je ne fixe pour l’instant aucun slippage, aucun frais.

 

 

Après validation, les ordres d’achat s’affichent à l’écran. Le backtest sur l’ensemble des données n’est réellement exécuté que lorsque je demande le rapport (strategy performance report). Les résultats de la stratégie sont tous gagnants. Seule l’action Amazon présente un résultat en dessous du Buy & Hold [1]. C’est peu surprenant ; les cours des actions sont en général bien plus chaotiques que ceux des indices ou du marché des changes en UT 1H.

En parcourant les rapports, j’avoue être impressionné par leur richesse. Les statistiques foisonnent et aucun aspect de la stratégie n’est oublié.

Extraits choisis :

 

L’excursion adverse maximale est très utile pour fixer un niveau de stop. Elle indique jusqu’à quel niveau de perte les trades sont descendus avant de sortir. On peut voir ci-dessus que la plupart des gains ont été faits avec un drawdown inférieur à 300$. En plaçant un stop à 300$ de perte, on élimine peu de trades gagnants. En revanche, on réduit de nombreuses pertes.

Des valeurs sur mesure


Lorsqu’une stratégie a des paramètres, la tentation est toujours forte de vouloir les optimiser. On se dit que les résultats mitigés de la stratégie sont peut-être dus à un simple problème de valeurs de paramètres. MultiCharts a tout ce qu’il faut pour répondre à nos attentes. Son optimiseur fonctionne soit de façon exhaustive (il teste toutes les valeurs), soit par affinage des valeurs en fonction d’un objectif (l’application teste quelques valeurs au hasard et sélectionne les meilleures pour atteindre l’objectif, puis elle recommence en testant des valeurs proches des valeurs retenues, sélectionne à nouveau les meilleures et ainsi de suite ; cela la dispense de tester des valeurs qui ne mènent nulle part et cela lui permet d’optimiser rapidement un grand nombre de paramètres ou des larges plages de valeurs).

Pour tester cet optimiseur, je vais ajouter un paramètre à ma stratégie. Je modifie ainsi la condition principale :

 

// Si cours en dessous du plus haut des 50 dernieres barres et au-dessus de la MM, on achete

inputs: PeriodeHigh(50);

if Close < Highest(Close, PeriodeHigh)[1] and

Close > MM and

CurrentEntries <= MaxEntrees then

 

Je constate en consultant les rapports que cette nouvelle condition a grandement amélioré ma prise de position, sauf sur le titre Amazon où seul le profit net a légèrement augmenté. Concentrons-nous sur cette action et voyons où nous mène l’optimisation.

J’avais choisi jusqu’ici des valeurs un peu arbitraires. Je vais maintenant définir une valeur maximum et une valeur minimum et tester toutes les valeurs intermédiaires.

 

 

Je remarque que mon processeur i7 960 est utilisé au maximum de ses possibilités pendant l’optimisation. Je n’ai que sept minutes à attendre avant de voir le résultat s’afficher. Je note que le drawdown reste important en regard du gain, même avec les meilleures valeurs. Pour savoir si cette stratégie est vraiment utilisable avec l’action Amazon et s’il y a des valeurs à privilégier, je peux analyser visuellement les résultats avec l’outil de représentation en trois dimensions. Je n’ai qu’à cliquer sur un bouton pour obtenir un graphe :

Comme on peut le voir, certaines périodes pour la moyenne mobile (paramètre PeriodeMM) ont de bons résultats, d’autres non, et il n’y a pas de continuité. L’absence d’un plateau de valeurs et la présence de pics signifient que c’est la valeur choisie qui fait le résultat, et non la logique de la stratégie. L’utilité de la moyenne mobile est donc clairement remise en question. Par contre, on peut voir que le paramètre PeriodeHigh a des résultats croissants quand sa valeur augmente, et ceci quelle que soit la période de la moyenne mobile. Ma modification de la stratégie prouve ici sa pertinence.

La Rolls du Backtest


La grande majorité des outils de backtest ont un optimiseur, mais peu ont un outil de visualisation en trois dimensions et, encore moins, le luxe d’options offert par MultiCharts. Vous pouvez par exemple indiquer le slippage à appliquer à vos trades (très utile sur les produits peu liquides), séparer le bid et le ask pour tester avec un spread réel (à condition d’avoir un historique des deux cotations), exécuter vos ordres en intrabarre (c’est-à-dire dès qu’une condition est remplie, et pas seulement à la clôture ou à l’ouverture de chaque barre) et indiquer si vous voulez qu’un prix soit dépassé d’un certain montant pour qu’il soit considéré comme atteint (ce qui permet de simuler les problèmes de liquidité sur les pics).

L’impression générale est d’avoir affaire à une Rolls du backtest. Les outils sont complets et pratiques, les options nombreuses, le langage très riche sans être compliqué. Je déplore juste que les rapports ne soient pas automatiquement archivés et qu’il n’y ait pas un outil permettant de les comparer, comme c’est le cas dans AmiBroker, mais ce n’est qu’un souci bien mineur en regard du reste. Il me sera personnellement bien difficile de revenir à ProRealTime ou MT4 après avoir goûté à MultiCharts.

Pour continuer les echanges sur le forum, c’est par ici : forum MultiCharts

Fred, alias Informatix

[1] Résultat obtenu en achetant au début de l’historique et en vendant à la fin.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>