Propriétés des stratégies

Chaque stratégie Pine possède un certain nombre de propriétés qui déterminent son comportement : 

 Ils sont disponibles dans les paramètres de la stratégie, dans l'onglet Propriétés :


Chacun des paramètres spécifiés dans les propriétés de la stratégie peut être modifié en éditant les arguments de l'appel de fonction strategy() dans le script Pine correspondant :

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)

Examinons chaque paramètre d'entrée dans le menu Propriétés et son paramètre correspondant dans le langage Pine :

1 - Capital initial (paramètre : initial_capital) représente le montant des fonds initialement disponibles pour que la stratégie puisse trader, dans la devise définie dans la devise de base. Par défaut, cette valeur est égale à 100 000. Il se peut que vous deviez augmenter cette valeur pour que les trades puissent avoir lieu sur certains symboles.

2 - Devise de base ( paramètre: currency ) spécifie la devise utilisée pour les calculs. Les résultats apparaissant dans l'onglet Strategy Tester (profit, perte, drawdown, etc.) sont exprimés dans cette devise. Les choix disponibles sont :

Default, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR. Si le choix Default est sélectionné, la stratégie utilisera la devise par défaut pour ce symbole et il n'y a pas de conversion de devise.

3 - Taille de l'ordre (paramètres : default_qty_value, default_qty_type). Ceci requiert une valeur et un mode de calcul. Notez que les valeurs calculées peuvent être soumises à des contraintes dues aux quantités minimales négociables pour le symbole :

  • Contrats (argument : strategy.fixed) - la stratégie entrera avec le nombre spécifié de contrats/actions/lots.
  • Montant en devise (argument : strategy.cash) - la stratégie entrera le montant spécifié en devise de base.
  • Pourcentage des fonds propres (argument : strategy.percent_of_equity) - la taille des positions sera calculée en pourcentage des fonds propres disponibles à l'ouverture du trade.

4 - Pyramidage (paramètre : pyramiding) spécifie le nombre maximum d'entrées successives autorisées dans la même direction. Lorsque le pyramidage est désactivé, la stratégie ne peut ouvrir qu'une seule position longue ou courte, même si les conditions d'entrée sont remplies. Le pyramidage n'affecte que les entrées effectuées à l'aide de la fonction strategy.entry(). Il n'a aucun effet sur les ordres créés à l'aide de strategy.order().

5 - Commission (paramètres : commission_type, commission_value). Il s'agit du montant payé en frais de trading pour chaque trad. Une valeur et un mode de calcul doivent être fournis. Notez que la commission est appliquée à la fois sur les entrées et les sorties, et que lorsqu'un pourcentage est utilisé, la commission calculée varie en fonction de la valeur de la transaction :

  • Pourcentage de la valeur de la transaction (argument : strategy.commission.percent) - impose une commission sur chaque ordre égale au pourcentage spécifié.
  • Devise par contrat (argument : strategy.commission.cash_per_contract) - impose une commission sur chaque contrat.
  • Devise par ordre (argument : strategy.commission.cash_per_order) - impose une commission sur chaque ordre.

6 - Vérification du prix pour les ordres limite

(paramètre : backtest_fill_limits_assumption) rend plus strictes les conditions d'entrée en position à l'aide d'ordres à cours limité. Par défaut, cette valeur est de 0, c'est-à-dire que les ordres limités sont exécutés sur les données historiques dès que le prix indiqué dans l'ordre est atteint. Si le paramètre n'est pas égal à zéro, alors les ordres limites ne peuvent entrer en position dans la barre que si le prix du marché a dépassé le niveau de l'ordre limite du nombre de ticks spécifié.

7 - Slippage (paramètre : slippage) spécifie la valeur en ticks à ajouter au prix d'exécution des ordres au marché ou stop. Il peut être utilisé pour tenir compte du spread.

8 - Remplir les ordres en utilisant l'OHLC standard (paramètre : fill_orders_on_standard_ohlc) force une stratégie à remplir les ordres en utilisant les valeurs OHLC réelles sur les graphiques Heikin Ashi. Par défaut, les scripts de stratégie simulent les ordres en utilisant les données disponibles sur le graphique, quel que soit le type de graphique, ce qui signifie qu'ils utilisent les prix synthétiques Heikin Ashi pendant la simulation, ce qui peut ne pas correspondre à la réalité.

Par exemple, cette stratégie que nous avons appliquée au graphique quotidien NASDAQ:AAPL Heikin Ashi a exécuté un ordre le 2023-03-21 à un prix synthétique de 155,12 USD. Cependant, après avoir activé l'option "Exécuter les ordres en utilisant l'OHLC standard", le même ordre a été exécuté au prix standard du graphique, soit 157,32 USD.

9 - Marge pour les positions longues et courtes (paramètres : margin_long, margin_short)

spécifie la marge pour chaque transaction, c'est-à-dire le pourcentage de la position que le trader doit financer. Par exemple, si la marge pour les positions longues est fixée à 25%, le trader doit disposer de suffisamment de fonds pour couvrir 25% de la transaction ouverte et peut potentiellement dépenser jusqu'à 400% de ses fonds propres sur chaque transaction.

Si une transaction a été ouverte et qu'elle commence à perdre de l'argent au point que les fonds du trader ne suffisent pas à couvrir sa part de la transaction, un appel de marge se produit et liquide de force une partie de la position initiale. Le nombre précis d'unités qui seront liquidées est égal à 4 fois le montant nécessaire pour couvrir simplement la perte. Il est calculé via l'algorithme suivant :

1. Calculer l'argent dépensé, le montant d'argent que le trader a dépensé pour ouvrir la position.

Taille de la position * Prix d'entrée

2. Calculez la valeur de marché du titre (MVS).

Taille de la position * Prix actuel

3. Calculez le Profit Ouvert. Si la direction de la transaction est courte et que le profit ouvert est un nombre positif, le résultat devrait toujours être négatif, nous multiplions donc la valeur absolue de notre calcul par -1.

ABS(MVS - Argent dépensé) * -1

4. Calculez les fonds propres, c'est-à-dire l'argent dont dispose le trader au moment présent.

Capital initial + Profit net + Profit ouvert

5. Convertissez le pourcentage de marge en ratio de marge.

Pourcentage de marge / 100

6. Calculez la marge, c'est-à-dire le montant exact d'argent nécessaire pour couvrir leur part de la position ouverte.

MVS * Ratio de marge

7. Calculez les fonds disponibles, c'est-à-dire le montant de l'argent perdu que le trader ne peut pas couvrir avec ses fonds propres actuels.

Fonds propres - Marge

8. Calculez le montant total d'argent que le trader a perdu.

Fonds disponibles / Ratio de marge

9. Calculez le nombre d'unités que le trader devrait vendre pour couvrir la perte. La valeur est tronquée à la même décimale que la taille minimale du contrat pour le symbole actuel.

TRUNCATE(Step #8 / Prix actuel)

10. Calculez le nombre d'unités que le courtier vendra pour couvrir la perte. Notre courtier émulé vend 4 fois plus d'unités que nécessaire pour s'assurer que l'appel de marge n'est pas constamment déclenché si les pertes continuent. Cette valeur sera positive pour les transactions courtes car le courtier achète des unités pour couvrir la perte au lieu de les vendre.

Étape n° 9 * 4

Pour examiner ce calcul en détail, ajoutons la stratégie Supertrend intégrée au graphique NASDAQ:TSLA sur l'échelle de temps 1D. Définissez la taille de l'ordre à 300% des capitaux propres et la marge pour les positions longues à 25%.

Notre première entrée a lieu à l'ouverture de la barre du 16 septembre 2010. Nous achetons 682438 unités (taille de la position) pour 4.43 USD (prix d'entrée). Puis, le 23 septembre 2010, lorsque le prix était à 3,9 (prix actuel), 111052 unités ont été liquidées de force via un appel de marge.

1. Argent dépensé : 682438 * 4.43 = 3023200.34

2. MVS : 682438 * 3.9 = 2661508.2

3. Profit ouvert : -361692.14

4. Capitaux propres : 1000000 + 0 - 361692.14 = 638307.86

5. Ratio de marge : 25 / 100 = 0,25

6. Marge : 2661508.2 * 0.25 = 665377.05

7. Fonds disponibles : 638307.86 - 665377.05 = -27069.19

8. Argent perdu : -27069.19 / 0.25 = -108276.76

9. Actions pour couvrir la perte : TRONCATURE(-108276.76 / 3.9) = TRONCATURE(-27763.27) = -27763

10. Taille de l'appel de marge : -27763 * 4 = - 111052

10 - Les options Recalculer indiquent la fréquence à laquelle la stratégie doit être recalculée. Par défaut, la stratégie est recalculée à la clôture de chaque barre, mais en utilisant les options ci-dessous, elle peut également être recalculée :

  • Après le remplissage de l'ordre (paramètre : calc_on_order_fills) - permet à la stratégie d'effectuer un calcul supplémentaire intra-bar immédiatement après le remplissage d'un ordre. Ce calcul supplémentaire est effectué sur les barres historiques et en temps réel.
  • Sur chaque tick (paramètre : calc_on_every_tick). Par défaut, les stratégies ne calculent qu'à la clôture des barres en temps réel. Ce paramètre permet à la stratégie de calculer à chaque mise à jour des barres en temps réel, comme le ferait une étude. Notez que les données tick sont perdues lorsque le graphique est rafraîchi, donc les stratégies utilisant cette option se repeindront. Ce paramètre n'affecte pas le comportement des stratégies sur les barres historiques. Notez également que les stratégies utilisant cette fonction n'afficheront pas de résultats réalistes sur les barres historiques, car elles ne contiennent pas de données tick.
  • A la clôture de la barre (paramètre : process_orders_on_close). Si cette option est activée, la stratégie génère une tentative supplémentaire d'exécution des ordres après la fermeture d'une barre et la fin des calculs de la stratégie. Si les ordres sont des ordres de marché, l'émulateur de courtier les exécute avant l'ouverture de la barre suivante. Si les ordres sont dépendants du prix, ils ne seront exécutés que si les conditions de prix sont remplies. Cette option est utile si vous souhaitez exécuter les ordres en même temps qu'ils sont créés : par défaut, les ordres sont créés à la clôture de la barre actuelle et exécutés à l'ouverture de la barre suivante ; si cette option est activée, ils seront exécutés à la même clôture que celle à laquelle l'ordre a été créé. Il est à noter que le fait d'entrer en position au même moment que l'ordre est créé peut être trompeur, car cela ne serait pas possible dans le cadre du trading réel.


11 - Précision du backtesting :

Utiliser la loupe de barres (paramètre : use_bar_magnifier) permet à Broker Emulator d'utiliser des données à plus petite échelle de temps pendant le backtesting de l'historique afin d'obtenir des résultats plus réalistes. Vous pouvez en savoir plus sur le mode de backtesting "Bar Magnifier" dans son Centre d'aide respectif.