Stratégie de négociation de rupture de canal de régression linéaire

Auteur:ChaoZhang est là., Date: 2024-02-18 à 15h53
Les étiquettes:

img

Résumé

Cette stratégie utilise les bandes supérieures et inférieures du canal de régression linéaire, combinées à un double écart-type pour définir des signaux d'achat et de vente de rupture, pour établir des positions lorsque les prix éclatent.

La logique de la stratégie

La logique de base de cette stratégie est basée sur la bande supérieure, la bande inférieure et la ligne médiane du canal de régression linéaire.

  1. Calculer la valeur de régression linéaire linreg des prix, et la valeur de régression linéaire linreg_p de la période suivante

  2. Calculer la pente de la pente et l' intersection de l' intersection de la ligne de régression linéaire basée sur linreg

  3. Calculer l'écart des prix par rapport à la ligne de régression

  4. Définir le multiple de la déviation pour obtenir le décalage des bandes supérieures et inférieures

  5. Lorsque le prix dépasse la bande inférieure, le signal d'achat est mis en place.

  6. Lorsque le prix dépasse la bande supérieure, le signal de vente est défini

  7. Lorsque le prix s'inverse de la ligne du milieu du canal, le signal de sortie de prise de profit est défini

  8. Mettre en place une logique de trading basée sur des signaux d'achat, de vente et de sortie

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle utilise la tendance à moyen et long terme reflétée par le canal de régression linéaire.

  1. Les bandes supérieures et inférieures peuvent refléter efficacement la gamme normale de fluctuations de prix.

  2. Le croisement de la ligne du milieu en tant que signal de prise de profit peut maximiser les bénéfices et éviter les pertes causées par des renversements après avoir réalisé des bénéfices.

  3. Le canal de régression linéaire a un certain décalage, ce qui peut filtrer efficacement le bruit du marché à court terme et rendre les signaux de trading plus fiables.

  4. Cette stratégie a peu de paramètres et est facile à mettre en œuvre, adaptée au trading algorithmique.

Analyse des risques

Cette stratégie présente certains risques:

  1. Le décalage du canal de régression linéaire peut manquer les tendances après des changements drastiques à court terme.

  2. Un mauvais réglage du multiplicateur de déviation peut également entraîner de faux signaux.

  3. Le fait de s'appuyer uniquement sur les signaux de rupture peut entraîner des pertes par piqûre.

  4. Il existe certains risques liés à l'ajustement de la courbe, mais il peut être utile de combiner avec d'autres indicateurs de canal ou de tester différentes sources de données.

Directions d'optimisation

Les principales orientations d'optimisation de cette stratégie:

  1. Optimiser la longueur du canal de régression linéaire pour équilibrer le décalage et la sensibilité.

  2. Optimiser le multiplicateur de déviation pour améliorer la qualité du signal tout en maximisant le contrôle des risques.

  3. Ajouter d'autres indicateurs de filtrage des signaux pour améliorer le taux de réussite, par exemple EMA, KDJ, etc.

  4. Ajouter des mécanismes d'arrêt des pertes tels que l'arrêt des pertes par ATR.

  5. Tester l'impact des différentes sources de données sur la stratégie, par exemple la clôture ajustée, les données d'indice, etc.

  6. Ajustez dynamiquement les paramètres ou les poids du signal en fonction des conditions du marché.

Conclusion

En résumé, il s'agit d'un système de rupture utilisant le canal de régression linéaire comme indicateur de signal. La logique de la stratégie est claire et facile à comprendre, avec peu de paramètres, ce qui rend le trading en direct relativement facile à mettre en œuvre. Cependant, la façon d'optimiser dynamiquement les paramètres en fonction des conditions changeantes du marché et de combiner d'autres indicateurs pour le filtrage du signal est la clé du succès de cette stratégie. Grâce à des tests et à une optimisation continus, cette stratégie peut devenir un système quantitatif stable générant des profits.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Robotrading
//@version=4

strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1)

//Settings
source      = input(close)
length      = input(100, minval=1)
offset      = input(0, minval=0)
dev         = input(2.0, "Deviation")
smoothing   = input(1, minval=1)
mtf_val     = input("", "Resolution", input.resolution)
signals     = input("Recent", "Signals Display", options=["Recent", "All"])
goto        = input(0, "End At Bar Index")

//Lin.reg.
cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white
data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing)
linreg = data(linreg(source, length, offset))
linreg_p = data(linreg(source, length, offset+1))

//Deviation
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
    deviationSum:= deviationSum + pow(source[i]-(slope*(x-i)+intercept), 2)  
deviation = sqrt(deviationSum/(length))
x1 = x-length
x2 = x
y1 = slope*(x-length)+intercept
y2 = linreg

//Cross
dm_current = -deviation*dev + y2
dp_current = deviation*dev + y2
ex_current = (dm_current + dp_current) / 2
buy = crossunder(close, dm_current)
sell = crossover(close, dp_current)
exit = crossover(close, ex_current) or crossunder(close, ex_current)

//Channel
updating = goto <= 0 or x < goto
// if updating
//     line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3)
//     line.delete(b[1])
//     line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3)
//     line.delete(dp[1])
//     line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3)
//     line.delete(dm[1])

//Lines
plot(dm_current, color = color.lime)
plot(dp_current, color = color.red)
plot(ex_current)
    
//Trading
if ex_current > 0
    strategy.entry("Long", strategy.long, na, limit = dm_current)
    strategy.entry("Short", strategy.short, na, limit = dp_current)
    strategy.exit("ExitLong", "Long", limit = ex_current)
    strategy.exit("ExitShort", "Short", limit = ex_current)

Plus de