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 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.
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
Calculer la pente de la pente et l' intersection de l' intersection de la ligne de régression linéaire basée sur linreg
Calculer l'écart des prix par rapport à la ligne de régression
Définir le multiple de la déviation pour obtenir le décalage des bandes supérieures et inférieures
Lorsque le prix dépasse la bande inférieure, le signal d'achat est mis en place.
Lorsque le prix dépasse la bande supérieure, le signal de vente est défini
Lorsque le prix s'inverse de la ligne du milieu du canal, le signal de sortie de prise de profit est défini
Mettre en place une logique de trading basée sur des signaux d'achat, de vente et de sortie
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.
Les bandes supérieures et inférieures peuvent refléter efficacement la gamme normale de fluctuations de prix.
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.
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.
Cette stratégie a peu de paramètres et est facile à mettre en œuvre, adaptée au trading algorithmique.
Cette stratégie présente certains risques:
Le décalage du canal de régression linéaire peut manquer les tendances après des changements drastiques à court terme.
Un mauvais réglage du multiplicateur de déviation peut également entraîner de faux signaux.
Le fait de s'appuyer uniquement sur les signaux de rupture peut entraîner des pertes par piqûre.
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.
Les principales orientations d'optimisation de cette stratégie:
Optimiser la longueur du canal de régression linéaire pour équilibrer le décalage et la sensibilité.
Optimiser le multiplicateur de déviation pour améliorer la qualité du signal tout en maximisant le contrôle des risques.
Ajouter d'autres indicateurs de filtrage des signaux pour améliorer le taux de réussite, par exemple EMA, KDJ, etc.
Ajouter des mécanismes d'arrêt des pertes tels que l'arrêt des pertes par ATR.
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.
Ajustez dynamiquement les paramètres ou les poids du signal en fonction des conditions du marché.
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)