Stratégie de négociation dynamique en réseau

Auteur:ChaoZhang est là., Date: 2023-12-01 14:41:57 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie de négociation dynamique de la grille calcule la ligne moyenne mobile et ses pistes supérieure et inférieure pour définir dynamiquement la plage de négociation de la grille.

Principe de stratégie

La stratégie calcule d'abord la ligne moyenne mobile de la période définie n et les pistes supérieure et inférieure de la ligne moyenne mobile. La piste supérieure est la ligne moyenne mobile * (1 + paramètre d'entrée std), et la piste inférieure est la ligne moyenne mobile * (1 - paramètre d'entrée std). Cela construit une zone de fourchette de négociation dynamiquement ajustée.

Ensuite, à l'intérieur de la zone de gamme, nous définissons m lignes de grille espacées uniformément. Lorsque les prix augmentent et traversent une ligne de grille, un signal long est émis à cette ligne de grille; lorsque les prix baissent et traversent une ligne de grille, un signal de fermeture est émis à la ligne de grille précédente correspondant à cette ligne de grille.

Plus précisément, nous utilisons un tableau de bool order_array pour enregistrer l'état de négociation de chaque ligne de grille. Lorsqu'une ligne de grille déclenche une condition longue, l'état correspondant dans order_array est réglé sur true, indiquant que la ligne de grille a déjà une position. Lorsque les prix chutent et brisent la ligne de grille, l'état de la ligne de grille précédente dans order_array est réglé sur false et un signal de fermeture est émis.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. L'utilisation de moyennes mobiles pour construire une plage de négociation ajustée dynamiquement peut ajuster la plage en fonction de la volatilité du marché afin de rendre la stratégie plus adaptable au marché.

  2. La conception de la grille peut automatiquement prendre des profits et arrêter les pertes pour empêcher l'agrandissement des pertes causé par des conditions de marché extrêmes.

  3. La quantité de réseau et l'allocation des capitaux adoptent un espacement et une allocation égaux, ce qui permet de contrôler la taille des positions uniques et de réduire le risque de positions uniques.

  4. Les réglages de signaux longs et rapprochés sont raisonnables pour négocier le long de la tendance et prendre des profits et arrêter les pertes en temps opportun.

Analyse des risques

La stratégie comporte également certains risques:

  1. Lorsque le marché est faible sur le long terme et ne parvient pas à franchir les lignes de la grille, la stratégie tombera dans un trading oscillant sans but, et les positions longues et courtes alternées peuvent entraîner une érosion du capital sur le compte.

  2. Les paramètres sélectionnés std et le nombre de grilles peuvent ne pas être tout à fait raisonnables et doivent être déterminés en fonction de l'analyse de différentes variétés de négociation.

  3. La stratégie ne tient pas compte de certaines conditions de marché extrêmes, telles que les écarts de prix, les hausses ou les baisses explosives à court terme, etc. Ces conditions peuvent entraîner une rupture de plusieurs réseaux, entraînant des pertes hors de contrôle des risques.

Directions d'optimisation

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

  1. Des algorithmes d'apprentissage automatique peuvent être introduits pour former des modèles pour prédire les pistes supérieures et inférieures des moyennes mobiles, rendant les zones de négociation plus intelligentes et dynamiques.

  2. Des paramètres tels que le nombre de grilles, le ratio d'allocation des capitaux, la taille des positions, etc., peuvent être optimisés en fonction des caractéristiques des différents objectifs de négociation à l'aide de paramètres adaptatifs.

  3. Les ordres conditionnels peuvent être définis pour définir des ordres stop-loss à l'avance à une certaine distance des lignes de réseau afin de jouer le rôle de stop-loss et de contrôle des pertes préalables dans des conditions de marché extrêmes.

  4. Concevoir un mécanisme de traitement des exceptions pour les conditions de marché extrêmes, telles que l'augmentation de la taille de la position initiale, le saut des grilles intermédiaires directement pour le stop loss, etc., qui peut faire face à des situations telles que les écarts de prix.

Résumé

La stratégie de trading dynamique de grille est conçue de manière raisonnable dans son ensemble. Elle peut construire un système automatique de prise de profit et d'arrêt de perte avec des grilles qui convient aux variétés de trading avec des fluctuations de prix fréquentes. Cependant, il existe encore certains risques de marché dans cette stratégie. Les paramètres et les situations exceptionnelles doivent être optimisés avant que la stratégie ne devienne plus robuste.


/*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)

Plus de