Stratégie de tendance basée sur la rupture du canal


Date de création: 2023-09-15 12:02:10 Dernière modification: 2023-09-15 12:02:10
Copier: 0 Nombre de clics: 739
1
Suivre
1617
Abonnés

Cet article présente en détail une stratégie quantitative qui utilise une rupture de canal pour effectuer des transactions de tendance. Cette stratégie permet d’identifier la direction de la tendance via le canal EMA et de faire des opérations inverses avec le jugement de la courbe de Bryn.

Premièrement, les principes stratégiques

La stratégie comprend principalement les éléments suivants:

  1. la mise en place d’un EMA de ligne médiane et l’extension d’un canal ascendant et descendant en fonction de la proportion;

  2. Lorsque le prix atteint la ligne supérieure du canal, on fait un suivi plus long; lorsque le prix atteint la ligne inférieure du canal, on fait un suivi à vide;

  3. Il est important de noter que la courbe de Bryn se rétrécit et que la courbe de Bryn est inversée.

  4. Réglez l’arrêt ATR pour limiter le risque de perte.

  5. Vous pouvez personnaliser les paramètres du canal pour trouver la meilleure combinaison de paramètres.

La stratégie utilise les canaux EMA pour déterminer la direction des tendances dominantes et les opportunités de renversement de la bande de Bryn pour constituer un système de tendances complet.

Deux, les avantages stratégiques

Le plus grand avantage de cette stratégie est que l’indicateur est utilisé de manière rationnelle, l’EMA juge la tendance dominante, la bande de Brin capture l’inversion.

L’autre avantage est que les paramètres de stop loss sont directement efficaces et permettent de contrôler les risques.

Enfin, les paramètres peuvent être personnalisés et optimisés pour différentes variétés.

Troisièmement, les risques potentiels

Mais cette stratégie présente aussi les problèmes suivants:

Tout d’abord, l’EMA et les indices de la ceinture de Brin sont en retard.

Deuxièmement, il faut tenir compte du risque d’échec de l’opération inverse.

Enfin, l’optimisation des paramètres nécessite beaucoup de travail pour éviter une sur-optimisation.

Quatrième partie, résumé

Cet article détaille une stratégie de trading de tendance utilisant une rupture de la chaîne EMA. Elle permet d’identifier les tendances dominantes et de faire des opérations inverses aux points de basculement. La stratégie permet d’obtenir des gains stables grâce à l’optimisation des paramètres, mais nécessite également de contrôler la difficulté d’optimisation et le retard des indicateurs.

Code source de la stratégie
/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="[mdeacey] EMA Percentage Channel + Bollinger Band Trending Strategy", shorttitle="[mdeacey] EMA% Channel + BB Trend Strategy", overlay=true)

//EMA 200

len = input(title="EMA Length", type=input.integer, defval=100)
srce = input(title="EMA Source", type=input.source, defval=close)

ema1= ema(srce,len)

percent = input(title="Inside Channel (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee
///2
percent2 = input(title="Outside Channel (%)", type=input.float, defval= 2) 
valuee2 = (percent2*ema1)/100
upperbande2 = ema1 + valuee2
lowerbande2 = ema1 - valuee2

plot(upperbande, title='Inside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande, title='Inside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )
plot(upperbande2, title='Outside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande2, title='Outside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, title="Multiplier", minval=0.001, maxval=50)

MA2 = sma(src, length)
dev = mult * stdev(src, length)
upper = MA2 + dev
lower = MA2 - dev

signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white

barcolor(color=signalColor)
nopo= strategy.position_size==0

upperBand = plot(upper, title='Upper Bollinger Band', color=color.gray, linewidth=1)
lowerBand = plot(lower, title='Lower Bollinger Band', color=color.gray, linewidth=1)
fill(upperBand, lowerBand, title='Bollinger Band', color=color.black)
strategy.entry("Long",true,when = crossover(close,lower)  and close <lowerbande and close>lowerbande2)
strategy.close("Long",when = crossunder(close,lowerbande2))//crossunder(close,lowerbande) or crossunder(close,lowerbande2))

strategy.entry("Short",false,when = crossunder(close,upper)  and close >upperbande and close<upperbande2)
strategy.close("Short",when = crossover(close,upperbande2) )//crossover(close,upperbande) or crossover(close,upperbande2) )

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Stoploss', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier",group='ATR Stoploss',  type=input.float)// Adjust this to change the distance between your candles and the line

//ATR Calculation
pine_rma(x, y) =>
    alpha = y
    sum = 0.0
    sum := (x + (alpha - 1) * nz(sum[1])) / alpha

true_range() =>
    max(high - low, max(abs(high - close[1]), abs(low - close[1])))

//Long SL
plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1)
// Short SL
plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1)
strategy.exit("Exit","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )

/////////////////////new strategy
strategy.entry("Long",true,stop =upperbande  ,when = close <upperbande and  close[1] <upperbande and nopo )
strategy.close("Long",when = crossunder(close,upper) )//  and close <upperbande and close>lowerbande)

strategy.entry("Short",false,stop =lowerbande  ,when = close >lowerbande and close[1] >lowerbande and nopo )
strategy.close("Short",when = crossover(close, lower) )

strategy.exit("Exit","Long",stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )