Stratégie de grille dynamique adaptative long-short
Aperçu
Il s'agit d'une stratégie de trading en grille adaptative dynamique long/short basée sur Pine Script. L'idée centrale de cette stratégie est de calculer automatiquement une borne supérieure et une borne inférieure de la grille en fonction des points hauts et bas récents du prix ou d'une moyenne mobile simple, puis de diviser cette plage en plusieurs lignes de grille. Lorsque le prix touche une certaine ligne de grille, la stratégie ouvre ou ferme une position longue à ce niveau. Ainsi, la stratégie peut ouvrir et fermer des positions en continu dans un marché en range, réalisant des gains sur les écarts de prix. Grâce à l'ajustement dynamique des limites de la grille, elle peut également s'adapter à différentes tendances du marché.
Principe de la stratégie
-
Calcul des bornes supérieure et inférieure de la grille. Selon le choix de l'utilisateur, les bornes peuvent être basées sur le plus haut et le plus bas des N dernières bougies, avec la possibilité d'appliquer un pourcentage d'expansion ou de réduction ; ou sur la moyenne mobile simple des cours de clôture des N dernières bougies, avec un pourcentage d'écart haut et bas.
-
Génération du tableau des lignes de grille. En fonction du nombre de lignes de grille défini, la plage de la grille est divisée de manière égale pour générer un tableau de prix correspondant aux lignes de grille.
-
Entrée / Ajout de position. On parcourt les lignes de grille de bas en haut : si le cours de clôture actuel est inférieur au prix d'une ligne de grille et qu'aucune position n'est ouverte sur cette ligne, un ordre long est ouvert à ce niveau. Ainsi, lorsque le prix atteint une ligne de grille plus élevée, la position est renforcée.
-
Sortie / Réduction de position. On parcourt les lignes de grille de haut en bas : si le cours de clôture actuel est supérieur au prix d'une ligne de grille et qu'une position est ouverte sur la ligne de grille immédiatement inférieure, cette position est fermée. Ainsi, lorsque le prix recule, la position est progressivement réduite.
-
Ajustement dynamique. Si la fonction de grille dynamique est activée, les bornes et le tableau des lignes de grille sont recalculés sur chaque bougie, ce qui permet à la grille de s'adapter en permanence aux évolutions du marché.
Analyse des avantages
-
Forte adaptabilité. La stratégie en grille s'adapte aussi bien aux marchés en range qu'aux tendances. Dans un marché en range, elle ouvre et ferme des positions en continu pour capter les écarts de prix ; dans un marché en tendance, comme la grille suit le mouvement du prix, elle peut maintenir une certaine exposition pour profiter de la tendance.
-
Risque contrôlé. La taille de chaque position est déterminée par le nombre de lignes de grille défini, ce qui limite et contrôle l'exposition au risque par opération. De plus, comme les positions sont fermées avec profit lorsque le prix touche une ligne de grille supérieure, cela compense partiellement les pertes potentielles.
-
Haut degré d'automatisation. Cette stratégie peut fonctionner de manière quasi entièrement automatique, sans intervention humaine, ce qui convient aux investisseurs recherchant des rendements stables à long terme.
-
Paramètres flexibles. L'utilisateur peut ajuster librement le nombre de lignes de grille, les paramètres de grille dynamique, etc., en fonction des caractéristiques du marché pour optimiser la performance de la stratégie.
Analyse des risques
-
Risque de cygne noir. En cas de krach extrême, si le prix saute directement en dessous de la ligne de grille la plus basse, la stratégie se retrouve en position pleine et subit une forte baisse. Pour atténuer ce risque, on peut définir un stop-loss qui ferme toutes les positions dès que la perte atteint un seuil.
-
Réglage inapproprié des paramètres de la grille. Si la densité de la grille est trop élevée, l'écart de prix entre chaque ouverture et fermeture devient très faible, et les frais de courtage peuvent gruger la majeure partie des gains. Si la largeur de la grille est trop grande, la proportion de la position ouverte en une seule fois est élevée, ce qui augmente l'exposition au risque. Il est nécessaire d'évaluer soigneusement les caractéristiques de l'actif sous-jacent et de choisir les paramètres de grille appropriés.
-
Risque de base. Cette stratégie définit les conditions d'ouverture et de fermeture sur la base du prix actuel. Sur les marchés à terme, si le prix du contrat diffère considérablement du prix de l'actif sous-jacent, le niveau réel d'ouverture/fermeture peut s'écarter de manière significative des prévisions.
Pistes d'optimisation
-
Ajout d'un filtre de tendance. Les stratégies en grille donnent de moins bons résultats dans les tendances unidirectionnelles. On peut ajouter un indicateur de tendance comme filtre, par exemple n'activer la grille que lorsque l'ADX est inférieur à un certain seuil, et la désactiver en cas de tendance marquée pour ne conserver qu'une position directionnelle.
-
Optimisation des signaux. On peut superposer d'autres signaux à la grille, par exemple grille + moyenne mobile : la grille détermine principalement les ouvertures et fermetures, mais une position n'est ouverte que lorsque le prix traverse une certaine moyenne mobile. Cela réduit les coûts liés à une fréquence de trading excessive.
-
Gestion de la position. Actuellement, la taille de la position par ligne est fixe. On pourrait ajuster cette taille à la baisse lorsque le prix est éloigné du prix moyen du marché, et l'augmenter lorsqu'il se rapproche de ce prix moyen, afin d'améliorer l'efficacité d'utilisation des fonds.
-
Densité adaptative de la grille. Ajuster dynamiquement la densité de la grille en fonction de la volatilité du prix : augmenter le nombre de lignes de grille en période de forte volatilité, le réduire en période de faible volatilité. Cela optimise la largeur de la grille et améliore l'utilisation des fonds.
Conclusion
Cette stratégie, grâce à sa grille adaptative dynamique, permet d'ouvrir et fermer fréquemment des positions en range pour capter les écarts de prix, tout en maintenant une certaine exposition directionnelle pour profiter des tendances. Il s'agit d'une stratégie quantitative de moyen-long terme relativement adaptable. En paramétrant correctement la logique de déclenchement de la grille et la gestion des positions, on peut obtenir des rendements stables. Cependant, il faut être attentif aux risques de mouvements extrêmes et de gaps de prix, ce qui nécessite de définir des stops-loss appropriés pour contrôler les pertes. En outre, il existe des marges d'optimisation supplémentaires en termes de réglage des paramètres et de gestion des risques, notamment via l'introduction de filtres de tendance, la superposition de signaux, la gestion de la position et la densité adaptative de la grille, afin d'améliorer la robustesse et la rentabilité de la stratégie. En résumé, cette stratégie, basée sur la logique fondamentale de la grille et enrichie d'un mécanisme d'adaptation dynamique, peut offrir de nouvelles perspectives et références aux investisseurs quantitatifs de moyen-long terme.
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jcloyd
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average
i_boundLookback = input(group="Grid Bounds", title="(Auto) Bound Lookback", defval=250, type=input.integer, maxval=500, minval=0) // when calculating auto grid bounds, how far back should we look for a High & Low, or what should the length be of our sma
i_boundDev = input(group="Grid Bounds", title="(Auto) Bound Deviation", defval=0.10, type=input.float, maxval=1, minval=-1) // if sourcing auto bounds from High & Low, this percentage will (positive) widen or (negative) narrow the bound limits. If sourcing from Average, this is the deviation (up and down) from the sma, and CANNOT be negative.
i_upperBound = input(group="Grid Bounds", title="(Manual) Upper Boundry", defval=0.285, type=input.float) // for manual grid bounds only. The upperbound price of your grid
i_lowerBound = input(group="Grid Bounds", title="(Manual) Lower Boundry", defval=0.225, type=input.float) // for manual grid bounds only. The lowerbound price of your grid.
i_gridQty = input(group="Grid Lines", title="Grid Line Quantity", defval=8, maxval=15, minval=3, type=input.integer) // how many grid lines are in your grid- 1

