255 EMA dan MACD Reversal Trading Strategy

Penulis:ChaoZhang, Tanggal: 2023-09-20 15:08:14
Tag:

Gambaran umum

Strategi ini menggunakan indikator EMA dan MACD 255 periode untuk mengidentifikasi peluang perdagangan pembalikan.

Logika Strategi

  1. EMA 255 periode digunakan untuk menentukan arah tren jangka menengah hingga panjang.

  2. Band atas dan bawah ditetapkan berdasarkan EMA, dengan lebar band diatur secara dinamis oleh indikator ATR.

  3. Ketika harga berada di atas band atas, itu berada di wilayah overbought. Ketika di bawah band bawah, itu berada di wilayah oversold. Ini adalah situasi untuk mengantisipasi pembalikan.

  4. Indikator MACD menggunakan parameter standar (12, 26, 9).

  5. Dikombinasikan dengan sinyal EMA overbought/oversold dan MACD, posisi terbalik diambil ketika harga jauh dari EMA dan pembalikan MACD terjadi.

Analisis Keuntungan

  1. EMA 255 periode dapat menentukan tren jangka menengah hingga jangka panjang dengan cukup baik.

  2. Crossover MACD dapat menangkap peluang pembalikan jangka pendek secara sensitif.

  3. Band EMA membantu mengidentifikasi wilayah yang terlalu banyak dibeli/terlalu banyak dijual untuk menghindari mengejar tren.

  4. Perdagangan terbalik memungkinkan entri awal sebelum pembalikan harga, dengan beberapa ciri berbasis rencana.

  5. Stop loss ATR dinamis dapat secara efektif mengendalikan risiko.

Analisis Risiko

  1. Sinyal MACD mungkin memiliki pembalikan palsu, yang menyebabkan kerugian yang tidak perlu.

  2. Pembalikan cenderung gagal dalam skenario tren yang kuat, sehingga pembalikan buta harus dihindari.

  3. Stop loss yang diatur terlalu ketat dapat dihentikan terlalu dini, sementara terlalu luas dapat mengakibatkan kontrol risiko yang tidak memadai.

  4. Penyesuaian parameter yang tidak benar juga dapat mempengaruhi kinerja strategi, yang membutuhkan optimasi iteratif.

  5. Biaya perdagangan juga dapat mempengaruhi profitabilitas akhir dan harus dipertimbangkan.

Arahan Optimasi

  1. Uji periode EMA yang berbeda untuk menemukan indikator tren jangka menengah hingga panjang yang lebih baik.

  2. Cobalah menggabungkan indikator lain dengan EMA untuk mengidentifikasi overbought/oversold, misalnya Bollinger Bands, KD, RSI.

  3. Mengoptimalkan parameter MACD untuk sensitivitas atau stabilitas yang lebih baik.

  4. Uji metode stop loss lainnya, seperti trailing stop untuk mengunci keuntungan.

  5. Mengoptimalkan parameter di berbagai produk dan kerangka waktu untuk ketahanan.

  6. Masukkan filter kekuatan tren untuk menghindari pembalikan tren yang kuat.

Kesimpulan

Strategi ini menggabungkan kemunduran EMA trend menengah ke panjang dan MACD jangka pendek, perdagangan terbalik di wilayah overbought / oversold. Ini adalah strategi pembalikan dasar dengan pro dan kontra. Penyesuaian parameter lebih lanjut dan pengendalian risiko dapat mengubahnya menjadi sistem perdagangan yang efisien.


/*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")





Lebih banyak