Strategi pantulan purata bergerak eksponensial (EMA) adalah strategi yang mengesan terobosan harga garis purata bergerak. Ia memeriksa sama ada lilin pantulan kembali dari bawah garis purata bergerak. Jika ya, ia adalah isyarat kenaikan; jika lilin pantulan ke bawah dari atas garis purata bergerak, ia adalah isyarat penurunan.
Strategi Bounce Purata Bergerak Eksponensial
Strategi ini adalah berdasarkan pada garis purata bergerak eksponensial (EMA). Ia mengira garis EMA dalam masa nyata. Kemudian ia memeriksa sama ada harga memantul kembali dari garis EMA:
Kemunculan semula seperti itu adalah isyarat masuk untuk strategi.
EMA strategi lompatan hanya memasuki selepas mengesahkan pembalikan harga, yang mengelakkan perdagangan terhadap trend dan terperangkap.
Dengan menggunakan purata bergerak eksponensial, strategi ini dapat secara berkesan meratakan data harga dan menapis bunyi bising pasaran, yang mengakibatkan penarikan kecil dan pulangan sejarah yang baik.
Strategi bounce EMA hanya bergantung kepada purata bergerak, yang mudah difahami oleh pemula. Sementara itu, tempoh EMA boleh disesuaikan dengan fleksibel untuk menyesuaikan diri dengan produk yang berbeza.
Selalunya terdapat pecah palsu padat di sekitar garis EMA, yang boleh menyebabkan isyarat yang salah. Parameter EMA perlu diselaraskan untuk menapis bunyi bising.
Strategi ini pada dasarnya berdagang bersama-sama dengan trend. Ia tidak dapat meramalkan titik perubahan harga dan hanya boleh mengikuti trend. Ini mungkin kehilangan peluang masuk terbaik semasa penyesuaian kitaran.
Stop loss berhampiran garis purata bergerak kadang-kadang dipukul, yang membawa kepada kerugian yang diperbesar.
Penunjuk seperti RSI dan MACD boleh ditambah untuk mengesahkan pembalikan harga dan menapis isyarat palsu.
Kaedah stop loss yang lebih fleksibel seperti berhenti masa dan berhenti turun naik boleh digunakan untuk mengurangkan risiko dikeluarkan.
Mengoptimumkan parameter tempoh EMA untuk mencari kombinasi parameter terbaik. Parameter EMA juga boleh dibuat dinamik untuk mengesan kitaran pasaran.
EMA adalah strategi yang mudah dan praktikal. Ia mempunyai penurunan yang kecil dan mudah difahami. Pada masa yang sama, ia juga mempunyai beberapa risiko isyarat palsu dan dihentikan. Kita boleh mengoptimumkan strategi dengan menggunakan kombinasi penunjuk yang lebih baik, kaedah stop loss dan pemilihan parameter untuk menjadikannya strategi kuantitatif yang stabil dan boleh dipercayai.
/*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)