Backtest plus précis avec la loupe à barres (Bar Magnifier)

May 30, 2022

Les titulaires de comptes Premium peuvent désormais obtenir des exécutions d’ordres plus réalistes dans leurs backtests de stratégies en utilisant l’option Bar Magnifier (loupe à barres). Cet outil utilise l’inspection intra-barre pour obtenir une granularité plus profonde sur le mouvement des prix dans une barre, permettant ainsi des exécutions d’ordres plus précises. Lorsqu’il est sélectionné, le mode Bar Magnifier remplace les hypothèses que l’émulateur du courtier doit faire sur le mouvement des prix par les seules valeurs OHLC des barres historiques.

L’horizon temporel intrabarre utilisé avec la loupe à barres s’ajuste dynamiquement avec l’horizon temporel du graphique. Ce tableau énumère l’horizon intrabarre utilisé pour des horizons graphiques de plus en plus élevés :

Période du graphique, T Période intra-barre utilisée
1S < T < 30S 1S
30S <= T < 5 5S
5 <= T < 30 15S
30 <= T < 60 1
60 <= T < 240 5
240 <= T < D 15
D <= T < W 60
W <= T < 2W 120
T >= 2W D

Tableau 1. Délais intra-barres utilisés

Voici un exemple de stratégie qui utilise un ordre stop sans utiliser l’option Bar Magnifier :

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

L’émulateur du courtier place un ordre stop sur la barre n° 10381 et exécute un ordre au prix de 157,0 sur la barre suivante dès que la condition stop = 157,0 est remplie. L’émulateur du courtier estime qu’à l’intérieur de la barre elle-même, le prix passe de « close » à « low », puis à « high » (déclenchant l’entrée), puis à « close ». Après quelques barres (11 jours pour la fenêtre temporelle actuelle), la condition pour sortir de la position avec stop price = 156.0 est déclenchée:

Lorsque la loupe à barres est activée (paramètre use_bar_magnifier = true), les prix de sortie et d’entrée restent inchangés; cependant, la sortie de la position se produit dans la même barre que celle de l’entrée:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

Si nous vérifions le graphique de l’échelle temporelle inférieure pour le même symbole (un graphique de 60 minutes, selon le tableau de l’échelle temporelle intrabarre) et trouvons la plage de temps correspondant à la barre 10382, nous pouvons voir que sur l’échelle temporelle horaire, après avoir atteint 157,0 et déclenché l’entrée, le prix descend en dessous de 156,0, satisfaisant la condition stop = 156.0:

Avec l’option Bar Magnifier activée, l’émulateur du courtier a accès aux changements de prix des échelles de temps inférieures pendant le backtesting, ce qui rend son comportement plus similaire à celui qui se produirait pendant le test de la stratégie sur la même période.

Voici un exemple d’une stratégie qui utilise des horizons temporels inférieurs pour exécuter avec plus de précision les ordres à cours limité et les ordres stop:

//@version=5
strategy(
 title                  =   "Magnifier On",
 overlay                =   true, 
 calc_on_order_fills    =   true,
 calc_on_every_tick     =   true,
 precision              =   3, 
 default_qty_type       =   strategy.cash, 
 currency               =   currency.USD, 
 default_qty_value      =   1000, 
 initial_capital        =   1000,
 use_bar_magnifier      =   true)

trailPoints = input.int(150, "Trail Points (in ticks)")
trailOffset = input.int(100, "Trail Offset (in ticks)")
stopSize    = input.int(300, "Stop Offset (in ticks)")

longCondition = bar_index % 25 == 0 and not (strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index)

if (longCondition)
    strategy.entry("Long", strategy.long)

strategy.exit("Exit", loss = stopSize, trail_points = trailPoints, trail_offset = trailOffset)

Lorsque l’option d’agrandissement des barres est activée, les résultats de la stratégie sont plus proches de ce qu’ils seraient en temps réel. Les profits de notre stratégie de test sont 50 % moins élevés lorsque l’option est activée, ce qui est décourageant pour la stratégie elle-même, mais montre à quel point il est important d’utiliser des données à plus faible échelle temporelle pour obtenir des données de backtesting plus précises:

L’option d’agrandissement de la barre peut être activée en basculant l’entrée correspondante dans la fenêtre « Paramètres/Propriétés » de la stratégie:

Après avoir désactivé l’option, la stratégie est recalculée avec l’ancienne logique, ce qui nous donne des informations moins précises sur le comportement de la stratégie:

Pour rester informé/e des nouvelles fonctionnalités de Pine, gardez un œil sur les notes de publication du manuel d’utilisation. Le compte PineCoders diffuse également des mises à jour depuis son canal Telegram Squawk Box, son compte Twitter et depuis le chat public « Pine Script™ Q&A » sur TradingView.

Nous espérons que vous trouverez ces améliorations utiles. Veuillez continuer à nous envoyer vos commentaires. Nous construisons TradingView pour nos utilisateurs et nous aimons avoir de vos nouvelles.

Look first Then leap

TradingView est conçu pour vous, assurez-vous donc de profiter au maximum de nos fonctionnalités exceptionnelles
Ouvrir le graphique