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.
Stratégie de rebond de moyenne mobile exponentielle
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:
Un tel rebond est le signal d'entrée pour la stratégie.
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é.
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.
La stratégie de rebond de l'EMA repose simplement sur des moyennes mobiles, ce qui est facile à comprendre pour les débutants.
Il y a souvent de fausses éruptions denses autour de la ligne EMA, ce qui peut provoquer des signaux erronés.
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.
Le stop loss près de la ligne de la moyenne mobile est parfois atteint, ce qui conduit à des pertes accrues.
Des indicateurs tels que le RSI et le MACD peuvent être ajoutés pour confirmer l'inversion des prix et filtrer les faux signaux.
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.
Optimiser les paramètres de la période EMA pour trouver les meilleures combinaisons de paramètres.
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)