Stratégie de trading de grille dynamique


Date de création: 2023-12-01 14:41:57 Dernière modification: 2023-12-01 14:41:57
Copier: 0 Nombre de clics: 1253
1
Suivre
1619
Abonnés

Stratégie de trading de grille dynamique

Aperçu

La stratégie de trading à grille dynamique consiste à calculer les moyennes mobiles et leurs hauts et bas et à définir dynamiquement la zone de négociation de la grille. Lorsque le prix franchit la zone de la grille, un signal de négociation est émis en fonction de la ligne de la grille définie à intervalles fixes et un profit est réalisé.

Principe de stratégie

La stratégie commence par calculer la moyenne mobile de la période définie n, ainsi que la moyenne mobile en descente.(1 + le paramètre d’entrée std), dont la trajectoire inférieure est la moyenne mobile(1 - paramètre d’entrée std) ❚ Ainsi, il est possible de construire une zone de zone de transaction dynamiquement ajustée ❚

Ensuite, dans la bande intermédiaire, nous définissons une grille d’une distance égale à m lignes. Lorsque le prix augmente et franchit une ligne de grille, un signal de multiplication est émis sur cette ligne de grille; lorsque le prix baisse et franchit une ligne de grille, un signal d’équilibre est émis sur la ligne de grille supérieure correspondante de cette ligne de grille.

Plus précisément, nous utilisons un tableau de type bool order_array pour enregistrer l’état de chaque ligne de grille. Lorsque l’une des lignes de grille est déclenchée sous plusieurs conditions, l’état correspondant de l’ordre_array est mis en place comme étant vrai, indiquant que la ligne de grille est déjà en position.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Les zones de négociation construites en utilisant des moyennes mobiles peuvent être ajustées en fonction de la volatilité du marché, ce qui rend la stratégie plus adaptée au marché.

  2. La conception de la grille permet d’arrêter automatiquement les pertes et d’empêcher l’expansion des pertes causées par des situations extrêmes.

  3. Le nombre de grilles et la répartition des fonds utilisent une répartition à intervalles égaux et équivalente, ce qui permet de bien contrôler la taille des positions individuelles et de réduire le risque des positions individuelles.

  4. Il est possible d’effectuer des transactions en cours et de mettre en place des stop-loss en temps opportun.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Lorsque les marchés sont trop faibles et ne peuvent pas franchir la grille, la stratégie est de s’engager dans des opérations de choc sans direction, et les échanges sur place peuvent entraîner la perte de fonds sur le compte.

  2. Les paramètres std et le nombre de grilles choisis peuvent ne pas être tout à fait raisonnables et doivent être déterminés en fonction de l’analyse des différentes variétés de transactions. Si les paramètres sont mal définis, cela entraînera une zone de transaction et une grille trop grandes ou trop petites, ce qui affectera l’efficacité de la stratégie.

  3. La stratégie ne prend pas en compte certains cas extrêmes, tels que des sauts de prix, des hausses ou des baisses de courte durée. Ces situations peuvent entraîner la rupture de plusieurs grilles de la stratégie, entraînant des pertes au-delà de la maîtrise du risque.

Direction d’optimisation

La stratégie peut également être optimisée dans les domaines suivants:

  1. Des algorithmes d’apprentissage automatique peuvent être introduits pour former des modèles qui prédisent les hauts et les bas des moyennes mobiles, ce qui rend les zones de négociation plus intelligentes et plus dynamiques.

  2. Il est possible d’optimiser le nombre de grilles en fonction des caractéristiques des différents indices de négociation, du ratio d’allocation des fonds, de la taille de la position, etc., en utilisant des paramètres d’adaptation.

  3. Il est possible de définir des ordres conditionnels, de définir des ordres de stop-loss de secours sur des lignes de grille à une certaine distance, de jouer le rôle de stop-loss anticipé et de contrôler les pertes dans des situations extrêmes.

  4. La conception d’un mécanisme de traitement des anomalies pour les situations extrêmes, telles que l’augmentation de la position d’ouverture initiale, le saut de la grille intermédiaire, etc., peut répondre à des situations anormales telles que le saut du prix.

Résumer

La stratégie de négociation de la grille dynamique est conçue de manière rationnelle et peut être utilisée pour construire un système de stop-loss automatique adapté aux types de transactions où les fluctuations de prix sont plus fréquentes. Cependant, la stratégie présente également un certain risque de marché.

Code source de la stratégie
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)