Экспоненциальная скользящая средняя (EMA) стратегия отскока - это стратегия, которая отслеживает прорыв цен на линии скользящей средней. Она проверяет, отскакивают ли свечи от нижней линии скользящей средней. Если это так, это бычий сигнал; если свеча отскакивает вниз от верхней линии скользящей средней, это медвежий сигнал.
Стратегия отскока экспоненциальной скользящей средней
Эта стратегия основана на экспоненциальной скользящей средней (EMA) линии. Она рассчитывает линию EMA в реальном времени. Затем она проверяет, отскакивает ли цена обратно от линии EMA:
Такой отскок является сигналом входа в стратегию.
Стратегия отскока EMA вступает в силу только после подтверждения переворота цен, что позволяет избежать торговли против тренда и попасть в ловушку.
Используя экспоненциальную скользящую среднюю, стратегия может эффективно сглаживать данные о ценах и отфильтровывать рыночный шум, что приводит к небольшим снижениям и хорошим историческим доходам.
Стратегия отскока EMA опирается просто на скользящие средние, что легко понять для новичков.
Часто возникают плотные ложные прорывы вокруг линии EMA, что может вызвать неправильные сигналы.
Стратегия, по сути, торгует вместе с тенденцией. Она не может предсказать переломные моменты цен и может только следовать за тенденцией. Это может упустить лучшую возможность входа во время циклических корректировок.
Стоп-лосс рядом с линией скользящей средней иногда поражается, что приводит к увеличению потерь.
Индикаторы, такие как RSI и MACD, могут быть добавлены, чтобы подтвердить изменение цены и отфильтровать ложные сигналы.
Для снижения риска выбытия можно использовать более гибкие методы стоп-лосса, такие как стоп-время и стоп-волатильность.
Оптимизируйте параметры EMA периода, чтобы найти лучшие комбинации параметров.
Стратегия отскока EMA - это простая и практичная стратегия, следующая за трендом. Она имеет небольшие снижения и легко понятна. В то же время, она также имеет некоторые риски ложных сигналов и остановки. Мы можем оптимизировать стратегию, используя лучшие комбинации индикаторов, методы остановки потерь и выбор параметров, чтобы сделать ее стабильной и надежной количественной стратегией.
/*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)