Stratégie de rebond de moyenne mobile exponentielle

Auteur:ChaoZhang est là., Date: 2023-12-08 16:47:39 Je vous en prie.
Les étiquettes:

img

Vue d'ensemble de la stratégie

La stratégie de rebond de la moyenne mobile exponentielle (EMA) est une stratégie qui suit les percées de prix de la ligne de moyenne mobile. Elle vérifie si les bougies rebondissent en dessous de la ligne de moyenne mobile. Si c'est le cas, c'est un signal haussier; si la bougie rebondit vers le bas au-dessus de la ligne de moyenne mobile, c'est un signal baissier.

Nom de la stratégie

Stratégie de rebond de moyenne mobile exponentielle

La logique de la stratégie

Cette stratégie est basée sur la ligne de la moyenne mobile exponentielle (EMA). Elle calcule une ligne EMA en temps réel. Puis elle vérifie si le prix rebondit de la ligne EMA:

  • Si le prix franchit d'abord la ligne EMA puis rebondit au-dessus de la ligne EMA, c'est un signal haussier
  • Si le prix franchit d'abord la ligne EMA et retombe ensuite en dessous de celle-ci, c'est un signal baissier.

Un tel rebond est le signal d'entrée pour la stratégie.

Analyse des avantages

Trafique avec la tendance, évite d'être piégé

La stratégie de rebond de l'EMA n'entre en vigueur qu'après confirmation de l'inversion des prix, ce qui évite de négocier contre la tendance et d'être piégé.

Petits prélèvements, bons rendements historiques

En utilisant la moyenne mobile exponentielle, la stratégie permet de lisser efficacement les données sur les prix et de filtrer le bruit du marché, ce qui se traduit par de faibles retraits et de bons rendements historiques.

Facile à comprendre, réglage flexible des paramètres

La stratégie de rebond de l'EMA repose simplement sur des moyennes mobiles, ce qui est facile à comprendre pour les débutants.

Analyse des risques

Prédisposé à de faux signaux

Il y a souvent de fausses éruptions denses autour de la ligne EMA, ce qui peut provoquer des signaux erronés.

Travailler avec la tendance, incapable de prédire les points tournants

La stratégie évolue essentiellement en fonction de la tendance. Elle est incapable de prédire les points de basculement des prix et ne peut que suivre la tendance.

Résultats de l'évaluation

Le stop loss près de la ligne de la moyenne mobile est parfois atteint, ce qui conduit à des pertes accrues.

Optimisation

Incorporer d'autres indicateurs pour le filtrage du signal

Des indicateurs tels que le RSI et le MACD peuvent être ajoutés pour confirmer l'inversion des prix et filtrer les faux signaux.

Optimiser les méthodes de stop loss

Les méthodes de stop loss plus souples, telles que les time stops et les volatility stops, peuvent être utilisées pour réduire le risque de retrait.

Optimisation des paramètres

Optimiser les paramètres de la période EMA pour trouver les meilleures combinaisons de paramètres.

Conclusion

La stratégie de rebond de l'EMA est une stratégie de suivi de tendance simple et pratique. Elle présente de petits retards et est facile à comprendre. En même temps, elle comporte également certains risques de faux signaux et d'arrêt. Nous pouvons optimiser la stratégie en utilisant de meilleures combinaisons d'indicateurs, des méthodes de stop loss et des sélections de paramètres pour en faire une stratégie quantitative stable et fiable.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// Simple strategy that checks for price bounces over an Exponential Moving Average. If the CLOSE of the candle bounces
// back from having it's LOW below the EMA, then it's a Bull Bounce. If the CLOSE of the candle bounces down from having it's
// high above the EMA, then it's a Bear Bounce. This logic can be reverted.

//@version=4
strategy("EMA Bounce", overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_EMA=input(20, title="EMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Swing Stop Loss and Take Profit")
i_SPL=input(defval=10, title="Swing Point Loopback")
i_PercIncrement=input(defval=.2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_TPRRR = input(1.2, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR


/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

EMA=ema(close, i_EMA)
LowAboveEMA=low > EMA
LowBelowEMA=low < EMA
HighAboveEMA=high > EMA
HighBelowEMA=high < EMA
BullBounce=LowAboveEMA[1] and LowBelowEMA and close > EMA //and close > open
BearBounce=HighBelowEMA[1] and HighAboveEMA and close < EMA //and close < open
plot(EMA)

BUY=BullBounce
SELL=BearBounce

//Inputs
DPR=input(false, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL=entry_LL_price
SSL=entry_HH_price
TP=tp
STP=stp

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", transp=80, size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", transp=80, size=size.auto)


Plus de