Bonjour à tous, dans cet article je vais vous présenter la nouvelle fonctionnalité tant attendue par beaucoup et depuis plusieurs années, le support « multi timeframe » pour le trading automatique sous ProBacktest et ProOrder !
Qu’est-ce que le mode multi timeframe ?
Puisque certains d’entre vous n’aurons aucune idée de quoi il s’agit et pourquoi cela est si important et intéressant de part son utilisation, je vais vous expliquer succinctement comment et pourquoi utiliser différentes unités de temps et quel impact cela peut avoir sur vos stratégies de trading.
Unité de temps différentes pour déterminer des stratégies :
Lorsque vous bâtissez une stratégie de trading, il est courant d’utiliser des informations précieuses et distiller sur plusieurs unités de temps. Par exemple : imaginons que pour votre nouvelle stratégie de scalping sur le DAX en unité de temps 1 minute, vous ayez besoin de connaître la tendance du jour du marché, celle établit dans un graphique 5 minutes à l’aide de moyennes mobiles ou de tout autres indicateurs équivalents. Jusqu’à présent (et sans notre nouvel outil !) pour obtenir des données d’unité de temps supérieures, il fallait utiliser sa calculatrice et opérer des règles de 3 pour définir les hypothétiques périodes qui nous auraient donné des données approximatives sur les MA en 5 minutes. Ça n’est plus le cas aujourd’hui, désormais on peut appeler les données de n’importe quelle autre unité de temps et à la volée pour prendre nos décisions de trading.
Créons notre première stratégie en MTF !
Notre stratégie de trading sur le DAX pourrait donc se programmer comme ceci :
defparam cumulateorders=false
//5 minutes TF (get the trend of the 5 minutes chart)
timeframe(5 minutes,updateonclose)
MA20 = average[20]
bulltrend = summation[3](MA20>MA20[1])=3
//"default" timeframe (the timeframe you will launch the strategy on)
timeframe(default)
sto = Stochastic[14,3](close)
avgsto = average[3](sto)
buyc = sto crosses over avgsto and sto<20
if buyc and bulltrend then
buy at market
endif
set target pprofit 3
set stop ploss 15
Nous avons donc dans notre stratégie 2 timeframe différents, celui en 5 minutes (déclaré en tête du code) et celui du timeframe « default ». Celui-ci définit le timeframe qui est utilisé pour lancer la stratégie sous ProBacktest ou ProOrder, dans notre exemple il s’agirait du timeframe 1 minute.
En séparant les unités de temps, on implique que chaque variable sera calculée dans le timeframe dans le bloc où elle se situe. Notre variable « MA20 » est donc calculé dans le TF 5 minutes, mais celle-ci peut être testé dans tout autre unité de temps comme c’est le cas ) à la ligne 13, dans le TF « default » dans la variable « bulltrend ».
Vous remarquerez que l’éditeur de syntaxe colorie d’une couleur différente chaque bloc d’unité de temps différente, déclaré à l’aide de l’instruction TIMEFRAME (la même instruction que pour ProScreener, mais avec une syntaxe différente que nous aborderons plus tard) et autre que la principale (le TF default).

La cadence de calcul et les mises à jour des variables (syntax)
La syntaxe de l’instruction TIMEFRAME est TIMEFRAME (UT,mode) qui permet de passer le code dans un timeframe différent de l’UT principale, ou TIMEFRAME(default) pour retourner dans l’UT principale. “mode” est facultatif (barre courante par défaut)
Exemple:
- TIMEFRAME(weekly, UpdateOnClose)
- TIMEFRAME(30 minutes, default)
- TIMEFRAME(5 minutes)
List des timeframes disponibles : x second (s), x minute (s), x hour (s), hourly, x day (s), daily, x week (s), weekly, x month (s), monthly, yearly
Mode disponible:
- UpdateOnClose: on travaille uniquement en barres clôturées
- Default: Les variables définies dans l’UT sup prennent en compte chaque update de l’UT principale
Attention!
UpdateOnClose permet de ne lire le code et donc de renseigner les variables qu’une seule fois par barre, à sa fermeture. Il faut bien comprendre que sans l’utilisation de ce mode, les données des variables sont mise à jour à chaque nouvelle barre de l’unité de temps « default ».
Donc sans avoir déclaré ce mode dans notre code d’exemple, la variable MA20 du TF 5minutes auraient été renseigné avec le Close de la barre de 1 minute. Cela aura une importance énorme si vous voulez récupérer les bonnes données de vos indicateurs dans les timeframes supérieurs ! Pourquoi ? Tout simplement parce qu’en règle général, on attend toujours la clôture pour considérer une information juste et cela est d’autant plus important lorsque l’on considère prendre des décisions de trading basées sur des calculs d’indicateurs.
Différence entre UpdateOnClose et le mode « default »
On peut utiliser l’instruction GRAPH pour visualiser nos différentes variables se calculant dans les TF différents :
En mode « UpdateOnClose », notre variable MA20 (en rouge), ne se recalcule qu’une seule fois toutes les 5 minutes.

En mode « default », les variables de l’unité de temps 5 minutes se calcule à chaque update du timeframe default, on remarque donc que les ordres sont différents, puisqu’il ne s’agit plus alors de la même stratégie !!

Ce qu’il faut retenir de cette particularité :
- En mode “updateonclose”, les portions de codes du TIMEFRAME sont évaluées au changement d’index du TIMEFRAME, et la variable est donc historisée naturellement dans l’UT supérieure.
- En mode « default », le code entier est évalué à chaque changement d’index de l’UT principale. Cependant, l’index des variables dans les TIMEFRAME supérieurs n’est incrémenté que lors du changement d’index de leur UT, tandis que l’état courant [0] des variables est réinitialisé à sa valeur au close du dernier chandelier aggrégé (soit [1]) avant évaluation du code du TIMEFRAME.
Interaction avec les ordres
Ce que beaucoup d’entre vous attendent de cette nouvelle fonctionnalité, c’est la capacité à interagir avec les ordres, sans attendre que la barre de l’unité de temps de notre stratégie soit terminée et donc que le code soit lu.
En effet, le mode multitimeframe ne change rien au comportement de ProBacktest/ProOrder. Le code n’est toujours lu qu’une seule fois par barre et à sa fermeture. Sauf que désormais on peut utiliser sa stratégie 15 minutes et interagir avec ses ordres toutes les minutes par exemple :
Exemple de stratégie :
- Les ordres sont issus d’un croisement avec le SuperTrend en 15 minutes en données clôturées (ligne bleue)
- Le niveau de stoploss est calculé avec les 20 derniers plus bas en 5 minutes en temps réel car il n’utilise pas le mode UpdateOnClose (ligne rouge)
- Le stoploss est modifié toutes les minutes si nécessaire.
La ligne noire représente le Close de la bougie 1 minute.

Comme vous pouvez le constater, cela ouvre un large champ de nouvelles possibilités et d’exploration pour les stratégies de trading automatique, comme par exemple :
- Utiliser les informations d’autres unités de temps pour vous conforter dans vos prises de décisions de trading
- Modifier vos stoploss et takeprofit à la volée, à l’intérieur de vos stratégies
- Entrée ou sortir avant la fermeture du marché dans une stratégie daily
- Sortir partiellement vos positions à l’intérieur des chandeliers
- Ouvrir de nouvelles positions à l’intérieur des barres si le marché vous donne raison
- etc.
Bref, il vous faudra un peu désapprendre tout ce que vous pensiez auparavant, il n’y a désormais quasiment plus aucune limite, il n’y a que plus que votre imagination qui vous limitera dans vos développements !
Trading manuel avec ProOrder !
Une autre capacité de cette nouvelle fonctionnalité est de pouvoir GRAPHER les indicateurs et ainsi de bénéficier du multi timeframe dans son trading manuel. En effet, l’affichage d’indicateurs d’autres unités de temps n’est toujours pas possible dans le graphique des prix, donc pourquoi ne pas utiliser ce que ProBacktest nous offre ?
Imaginons que dans votre trading quotidien, vous utilisiez les moyennes mobiles 20 et 50 en timeframe 5 minutes. Mais vous ayez besoin des Bandes de Bollinger 15 minutes et de la tendance Daily avec une SMA20. Déclarons ces variables dans une stratégie de trading :
defparam cumulateorders=false
//daily SMA
timeframe(daily)
smad20 = average[20]
timeframe(15 minutes,updateonclose)
bollup = BollingerUp[20](close)
bolldn = BollingerDown[20](close)
//5 minutes SMA
timeframe(default)
sma20 = average[20]
sma50 = average[50]
//dummy order condition
if sma20=-100 then
buy at market
endif
graph close as "price"
graph smad20 coloured(0,0,255)
graph bollup coloured(100,100,100)
graph bolldn coloured(100,100,100)
graph sma20 coloured(0,255,0)
graph sma50 coloured(255,0,0)
Ce qui nous donne sur notre écran :

Après avoir lancé le backtest, le graphique se mettra à jour automatiquement et vous aurez alors un support MTF également pour votre trading manuel !
Bien sûr, ce n’est qu’un détournement de la fonctionnalité pour nous permettre de l’utiliser dans notre trading manuel, vous n’aurez pas de chandeliers, ni toutes les fonctionnalités graphiques que propose le langage ProBuilder, mais je pense que cela intéressera beaucoup de traders!
Multi timeframe, une nouvelle approche pour le trading automatique avec ProRealTime
Je suis très excité par les prochaines semaines et toutes les nouvelles idées qui émergeront de nos membres. Cette nouvelle fonctionnalité pour le trading automatisé nous permettra d’explorer de nouvelles stratégies comme jamais auparavant avec ProRealTime.