Strategi ini menggunakan penunjuk EMA dan MACD 255 tempoh untuk mengenal pasti peluang perdagangan pembalikan. Ia memasuki kedudukan pembalikan apabila harga jauh dari penyambungan 255 EMA dan MACD berlaku.
EMA tempoh 255 digunakan untuk menentukan arah trend jangka menengah hingga panjang.
Band atas dan bawah ditetapkan berdasarkan EMA, dengan lebar band disesuaikan secara dinamik oleh penunjuk ATR.
Apabila harga berada di atas band atas, ia berada di rantau overbought. Apabila di bawah band bawah, ia berada di rantau oversold. Ini adalah situasi untuk menjangkakan pembalikan.
Indikator MACD menggunakan parameter standard (12, 26, 9).
Digabungkan dengan isyarat EMA overbought/oversold dan MACD, kedudukan terbalik diambil apabila harga jauh dari EMA dan pembalikan MACD berlaku.
EMA tempoh 255 boleh menentukan trend jangka menengah hingga panjang dengan cukup baik.
Pertukaran MACD dapat menangkap peluang pembalikan jangka pendek dengan sensitif.
Band EMA membantu mengenal pasti kawasan yang terlalu banyak dibeli/terlalu banyak dijual untuk mengelakkan trend mengejar.
Perdagangan terbalik membolehkan kemasukan awal sebelum pembalikan harga, dengan beberapa ciri berasaskan rancangan.
Hentikan kehilangan ATR dinamik dapat mengawal risiko dengan berkesan.
Isyarat MACD mungkin mempunyai pembalikan palsu, yang membawa kepada kerugian yang tidak perlu.
Pembalikan cenderung gagal dalam senario trend yang kuat, jadi pembalikan buta harus dielakkan.
Stop loss yang ditetapkan terlalu ketat boleh dihentikan lebih awal, sementara terlalu luas boleh menyebabkan kawalan risiko yang tidak mencukupi.
Penyesuaian parameter yang tidak betul juga boleh memberi kesan kepada prestasi strategi, yang memerlukan pengoptimuman berulang.
Kos perdagangan juga boleh mempengaruhi keuntungan akhir dan harus dipertimbangkan.
Uji tempoh EMA yang berbeza untuk mencari penanda trend jangka sederhana hingga panjang yang lebih baik.
Cuba menggabungkan penunjuk lain dengan EMA untuk mengenal pasti overbought/oversold, contohnya Bollinger Bands, KD, RSI.
Mengoptimumkan parameter MACD untuk kepekaan atau kestabilan yang lebih baik.
Uji kaedah stop loss yang lain, seperti trailing stop untuk mengunci keuntungan.
Mengoptimumkan parameter di pelbagai produk dan jangka masa untuk ketahanan.
Masukkan penapis kekuatan trend untuk mengelakkan pembalikan dalam trend yang kuat.
Strategi ini menggabungkan EMA trend pertengahan hingga panjang dan pembalikan jangka pendek MACD, perdagangan terbalik di kawasan overbought / oversold. Ini adalah strategi pembalikan asas dengan kebaikan dan keburukan. Penyesuaian parameter dan kawalan risiko yang lebih lanjut dapat menjadikannya menjadi sistem perdagangan yang cekap. Tetapi mana-mana strategi memerlukan penyesuaian adaptif mengikut persekitaran pasaran, bukan isyarat mekanikal.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-19 00:00:00 period: 15m basePeriod: 5m 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/ // © bufirolas //--- From 15 Trading Examples by Trader Alyx --- // Seems like this strategy works better if we reverse the EMA filter logic. // "Description: This basic scalping strategy allows you to enter the market based upon sentiment // provided by the EMA, set at 255 periods. When price is trading below the 255 EMA, you would // look to enter a LONG BUY positions, and when price is trading above the 255 EMA, you would // look to enter a SELL SHORT position. The MACD lagging indicator will show you clear signals for // when to do this. When the MACD lines cross in a bullish manner and price is below the 255 // EMA, buy. When the MACD lines cross in a bearish manner and price is above the 255 EMA, // sell. // NOTE: Make sure that price is trading away from the 255EMA before entering a LONG or SHORT // position. As you can see in the chart below, the clearest signs for trade entry were presented // when price was trading AWAY from the 255EMA" //@version=4 // strategy("255 EMA Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=100, commission_value = 0.04, initial_capital=100) //Inputs i_reverse=input(false, title="Trade Reverse") i_EMAreverse=input(true, title="EMA Reverse Entry") i_EMAlength=input(defval=255, title="EMA Length") i_EMAexpander=input(defval=5, title="EMA Expander") i_MACDmult=input(defval=1, minval=1, title="MACD Mult") //SL & TP Calculations i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit") i_SwingLookback=input(20, title="Swing Lo/Hi Lookback") i_SLExpander=input(defval=0, step=.2, title="SL Expander")*.01 i_TPExpander=input(defval=0, step=.2, title="TP Expander")*.01 //Strategy Variables EMA=ema(close,i_EMAlength) [macdLine, signalLine, histLine]=macd(close, 12*i_MACDmult, 26*i_MACDmult, 9*i_MACDmult) EMAupper=EMA+((atr(100))*i_EMAexpander) EMAlower=EMA-((atr(100))*i_EMAexpander) //SL & TP Variables SwingLow=lowest(i_SwingLookback) SwingHigh=highest(i_SwingLookback) //Calculations EMAbuy=i_EMAreverse ? close > EMAupper : close < EMAlower EMAsell=i_EMAreverse ? close < EMAlower : close > EMAupper MACDbuy=crossover(macdLine, signalLine) MACDsell=crossunder(macdLine, signalLine) //SL & TP Calculations bought=strategy.position_size != strategy.position_size[1] lSL=valuewhen(bought, SwingLow, 0)*(1-i_SLExpander) sSL=valuewhen(bought, SwingHigh, 0)*(1+i_SLExpander) lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))*(1-i_TPExpander)) sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price)*(1+i_TPExpander*100) islong=strategy.position_size > 0 isshort=strategy.position_size < 0 SL= islong ? lSL : isshort ? sSL : na TP= islong ? lTP : isshort ? sTP : na //Entries strategy.entry("long", long=not i_reverse?true:false, when=EMAbuy and MACDbuy) strategy.entry("short", long=not i_reverse?false:true, when=EMAsell and MACDsell) //Exits if i_SL strategy.exit("longexit", "long", stop=SL, limit=TP) strategy.exit("shortexit", "short", stop=SL, limit=TP) //Plots plot(EMA, "EMA", color=color.white, linewidth=2) plot(EMAupper, "EMA Upper Band") plot(EMAlower, "EMA Lower Band") plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL") plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")