Chaîne de négociation en pourcentage de l'EMA avec stratégie de négociation de gamme de bandes de Bollinger

Auteur:ChaoZhang est là., Date: le 13 novembre 2023 à 17h38
Les étiquettes:

img

Résumé

Cette stratégie est basée sur la sélection par l'utilisateur d'une EMA et d'un canal en pourcentage défini. Elle va long lorsque le prix est en dessous de la bande supérieure et court lorsque le prix est au-dessus de la bande inférieure. Si le prix commence à évoluer et se déplace en dehors du canal, toutes les positions sont fermées pour éviter les pertes.

Pour les marchés en tendance, il convient d'utiliser à la place la chaîne sœur EMA Percentage Channel with Bollinger Band Trend Trading Strategy.

Principaux

  1. Le calcul de l'EMP à 200 périodes est effectué à titre d'EMP de référence.

  2. Calculer les bandes supérieure et inférieure sur la base du pourcentage défini par l'utilisateur: La bande supérieure = EMA * (1 + pourcentage) La bande inférieure = EMA * (1 - Pourcentage)

  3. Calculer les bandes de Bollinger à 20 périodes pour représenter la fourchette de canaux.

  4. Passez long lorsque le prix de clôture dépasse la bande de Bollinger inférieure depuis le bas. Passez court lorsque le prix de clôture dépasse la bande de Bollinger supérieure depuis le haut.

  5. Utilisez l'ATR pour calculer le stop loss afin d'éviter des pertes excessives.

  6. Si le prix dépasse la fourchette de canaux en pourcentage définie, fermer toutes les positions pour éviter de nouvelles pertes.

Les avantages

  1. La ligne de base de l'EMA permet de mieux saisir les points d'inversion de tendance.

  2. Le canal en pourcentage fixe une fourchette de négociation raisonnable pour éviter les sur-trades.

  3. Les bandes de Bollinger fournissent des niveaux de support et de résistance pour faciliter le timing de l'entrée.

  4. L'arrêt de trail ATR définit dynamiquement le stop loss pour contrôler efficacement le risque par transaction.

  5. Fermer toutes les positions lorsque le prix dépasse le canal permet de contrôler rapidement les pertes.

  6. Les paramètres personnalisables sont flexibles pour différentes conditions du marché.

Les risques

  1. Une fourchette de canaux trop large peut manquer les tendances ou retarder l'arrêt des pertes.

  2. Une fourchette de canaux trop étroite peut entraîner une survente et augmenter les coûts de transaction.

  3. Un mauvais réglage des paramètres de Bollinger Bands peut entraîner des opportunités de trading manquées.

  4. Un seuil de stop loss trop faible peut entraîner des pertes excessives par transaction.

  5. Les paramètres doivent être optimisés pour trouver la fourchette de négociation optimale.

Directions d'optimisation

  1. Testez différentes périodes EMA pour trouver la moyenne mobile la plus appropriée.

  2. Optimiser les paramètres de pourcentage des canaux pour déterminer la plage optimale de canaux.

  3. Ajuster la période des bandes de Bollinger pour mieux tenir compte de la volatilité.

  4. La stratégie de stop-loss doit être ajustée selon les paramètres suivants:

  5. Testez le long-only au-dessus de l'EMA ou le short-only en dessous des conditions de l'EMA et voyez si cela améliore le taux de victoire.

  6. Incorporer des indicateurs de tendance pour déterminer si une sortie anticipée est nécessaire.

Conclusion

Cette stratégie combine les forces des moyennes mobiles, des canaux, de la volatilité et plus encore pour créer un système de trading de gamme relativement stable. La clé est de trouver les paramètres les plus appropriés pour chaque marché spécifique afin d'équilibrer le risque et la récompense.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="[mdeacey] EMA% Channel + BB Range Strategy", shorttitle="[mdeacey] EMA% Channel + BB Range Strategy", overlay=true)

//EMA 200

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

ema1= ema(srce,len)

percent = input(title="Channel Percentage (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee


plot(ema1, title='EMA200', color=color.gray, linewidth=1, style=plot.style_line )
plot(upperbande, title='EMA Upper Band', color=color.gray, linewidth=1, style=plot.style_line )
plot(lowerbande, title='EMA Lower Band', color=color.gray, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, 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)


upperBand = plot(upper, color=color.gray, linewidth=1)
lowerBand = plot(lower, color=color.gray, linewidth=1)
fill(upperBand, lowerBand,color=color.gray)
strategy.entry("Long",true,when = crossover(close,lower)  and close <upperbande and close>lowerbande)
strategy.close("Long",when = crossunder(close,lowerbande))
strategy.entry("Short",false,when = crossunder(close,upper)  and close <upperbande and close>lowerbande)
strategy.close("Short",when = crossover(close,upperbande))

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Settings', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier Period",group='ATR Settings',  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","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("eExit Short","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )


Plus de