Stratégie de trading Breakout basée sur un canal de régression linéaire


Date de création: 2024-02-18 15:00:53 Dernière modification: 2024-02-18 15:00:53
Copier: 1 Nombre de clics: 1045
1
Suivre
1617
Abonnés

Stratégie de trading Breakout basée sur un canal de régression linéaire

Aperçu

Cette stratégie utilise la trajectoire ascendante et descendante d’un canal de régression linéaire, combinée à des signaux de rupture d’achat et de vente avec des paramètres d’écart double standard, pour permettre l’ouverture d’une position après une rupture de prix et la création d’une position.

Principe de stratégie

La logique de base de la stratégie est basée sur la trajectoire ascendante et descendante de la voie de régression linéaire ainsi que sur la ligne médiane. Le processus de calcul est le suivant:

  1. Calculer la régression linéaire du prix linreg, et la régression linreg_p du prochain cycle

  2. La pente et l’intersection de la ligne de régression linéaire calculées en fonction de la valeur de régression linéaire

  3. Calculer la déviation du prix par rapport à la ligne de régression

  4. Définition du décalage en termes de déviation de l’écart entre la voie ascendante et descendante

  5. Lorsque le prix dépasse la trajectoire descendante, définissez un signal buy

  6. Lorsque le prix se déplace vers le bas de la trajectoire supérieure, le signal de vente s’affiche

  7. Lorsque le prix est inversé par rapport à la ligne médiane du canal, réglez un signal d’arrêt exit

  8. Logique de négociation basée sur les signaux d’achat, de vente et de stop

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans l’utilisation des tendances à moyen et long terme des prix reflétées par les voies de régression linéaire.

  1. La trajectoire ascendante et descendante d’un canal de régression linéaire permet de refléter efficacement la portée normale des fluctuations de prix et de régler les signaux de transaction en utilisant la portée du canal, ce qui réduit les signaux erronés.

  2. Le croisement de la ligne médiane sert de signal d’arrêt, permettant de bloquer au maximum les bénéfices et d’éviter les pertes causées par la reprise après les bénéfices.

  3. L’instrument de régression linéaire a une certaine latence, ce qui permet d’éliminer efficacement le bruit du marché à court terme et de rendre les signaux de négociation plus fiables.

  4. Cette stratégie est moins complexe, plus facile à mettre en œuvre et plus adaptée à l’algorithmisation des transactions quantitatives.

Analyse des risques

Cette stratégie comporte aussi des risques, principalement:

  1. Les canaux de régression linéaire sont retardés et peuvent manquer les tendances après des changements brusques à court terme. Il est possible de raccourcir le cycle des canaux de manière appropriée et d’optimiser les paramètres.

  2. Un mauvais réglage du coefficient de déviation peut également entraîner des signaux erronés. Il peut être combiné avec des paramètres d’optimisation de la rétroanalyse.

  3. Les pertes de secousse peuvent être plus élevées si elles sont basées uniquement sur des signaux de rupture. Un filtrage combiné avec d’autres indicateurs peut être envisagé.

  4. Il existe un certain risque d’adéquation de la courbe. La combinaison avec d’autres indicateurs de canal peut être envisagée, ou des sources de données différentes peuvent être testées.

Direction d’optimisation

Cette stratégie peut être optimisée principalement dans les domaines suivants:

  1. Optimiser la longueur des voies de régression linéaire pour équilibrer la latence et la sensibilité des réactions.

  2. Optimiser le coefficient de déviation et améliorer la qualité du signal tout en contrôlant au maximum les risques.

  3. Ajout d’autres indicateurs pour filtrer les signaux et améliorer le taux de réussite de la stratégie. Par exemple, EMA, KDJ, etc.

  4. Ajout de mécanismes d’arrêt des pertes, tels que l’arrêt ATR, l’arrêt de suivi, etc.

  5. Tester l’impact de différentes sources de données sur la stratégie. Par exemple, utiliser des données de récupération, des données d’indices, etc.

  6. Paramètres d’ajustement dynamique ou poids de signal combinés à l’environnement du marché.

Résumer

L’ensemble de la stratégie est un système révolutionnaire qui utilise le canal de régression linéaire comme indicateur de signal. L’idée de la stratégie est claire et facile à comprendre, les paramètres sont peu nombreux et la mise en œuvre en temps réel n’est pas très difficile.

Code source de la stratégie
/*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)