Strategi bounce rata-rata bergerak eksponensial (EMA) adalah strategi yang melacak terobosan harga dari garis rata-rata bergerak. Ini memeriksa apakah lilin memantul kembali dari bawah garis rata-rata bergerak. Jika demikian, itu adalah sinyal bullish; jika lilin memantul ke bawah dari di atas garis rata-rata bergerak, itu adalah sinyal bearish.
Strategi Bounce Rata-rata Bergerak Eksponensial
Strategi ini didasarkan pada garis rata-rata bergerak eksponensial (EMA). Ini menghitung garis EMA secara real time. Kemudian memeriksa apakah harga memantul kembali dari garis EMA:
Rebound semacam itu adalah sinyal masuk untuk strategi.
Strategi bounce EMA hanya masuk setelah konfirmasi pembalikan harga, yang menghindari perdagangan melawan tren dan terjebak.
Dengan menggunakan rata-rata bergerak eksponensial, strategi dapat secara efektif meratakan data harga dan menyaring kebisingan pasar, menghasilkan penarikan kecil dan pengembalian historis yang baik.
Strategi bounce EMA hanya mengandalkan rata-rata bergerak, yang mudah dipahami bagi pemula. Sementara itu, periode EMA dapat disesuaikan secara fleksibel untuk menyesuaikan dengan produk yang berbeda.
Seringkali ada penyebaran palsu padat di sekitar garis EMA, yang dapat menyebabkan sinyal yang salah.
Strategi ini pada dasarnya berdagang bersama dengan tren. Tidak dapat memprediksi titik balik harga dan hanya dapat mengikuti tren. Ini dapat kehilangan peluang masuk terbaik selama penyesuaian siklik.
Stop loss di dekat garis rata-rata bergerak kadang-kadang terpukul, menyebabkan kerugian yang diperbesar.
Indikator seperti RSI dan MACD dapat ditambahkan untuk mengkonfirmasi pembalikan harga dan menyaring sinyal palsu.
Metode stop loss yang lebih fleksibel seperti time stop dan volatility stop dapat digunakan untuk mengurangi risiko diambil.
Optimalkan parameter periode EMA untuk menemukan kombinasi parameter terbaik.
Strategi bounce EMA adalah strategi yang sederhana dan praktis mengikuti tren. Strategi ini memiliki penurunan kecil dan mudah dipahami. Pada saat yang sama, strategi ini juga memiliki beberapa risiko sinyal palsu dan dihentikan. Kita dapat mengoptimalkan strategi dengan menggunakan kombinasi indikator yang lebih baik, metode stop loss dan pemilihan parameter untuk menjadikannya strategi kuantitatif yang stabil dan dapat diandalkan.
/*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)