EMA RSI Trend-Following dan Momentum Strategy

Penulis:ChaoZhang, Tarikh: 2024-03-29 16:30:42
Tag:

img

Ringkasan

Strategi EMA RSI Trend-Following and Momentum adalah strategi perdagangan kuantitatif yang menggabungkan Exponential Moving Averages (EMA) dan Indeks Kekuatan Relatif (RSI). Strategi ini menggunakan dua EMA dengan tempoh yang berbeza untuk menentukan trend pasaran dan penunjuk RSI untuk mengesahkan kesahihan trend. Apabila EMA cepat melintasi di atas EMA perlahan dan RSI di bawah ambang bawah tertentu, strategi menghasilkan isyarat panjang. Sebaliknya, apabila EMA cepat melintasi di bawah EMA perlahan dan RSI di atas ambang atas tertentu, strategi menghasilkan isyarat pendek. Strategi ini juga termasuk peratusan komisen yang berbeza berdasarkan tahap akaun Bybit dan fungsi keuntungan dan kehilangan terbina dalam untuk menguruskan risiko dengan berkesan.

Prinsip Strategi

  1. Mengira EMA pantas dan EMA perlahan dengan tempoh masing-masing 90 dan 300.
  2. Mengira penunjuk RSI dengan tempoh 5.
  3. Menghasilkan isyarat panjang apabila EMA pantas melintasi EMA perlahan dan RSI di bawah 45; Menghasilkan isyarat pendek apabila EMA pantas melintasi EMA perlahan dan RSI di atas 85.
  4. Tetapkan peratusan komisen yang berbeza berdasarkan tahap akaun Bybit, dari 0.075% untuk VIP 0 hingga 0.035% untuk VIP 4.
  5. Mengira harga kemasukan termasuk komisen.
  6. Mengira harga mengambil keuntungan dan harga berhenti kerugian berdasarkan peratusan yang ditetapkan (5% dan 3%).
  7. Gambarkan harga masuk, ambil garisan keuntungan, dan hentikan garis kerugian pada carta.
  8. Melakukan pesanan masuk berdasarkan isyarat perdagangan.

Kelebihan Strategi

  1. Menggabungkan trend-mengikuti dan petunjuk momentum untuk menangkap trend pasaran dengan berkesan.
  2. Termasuk fungsi mengambil keuntungan dan berhenti kerugian yang terbina dalam untuk menguruskan risiko dengan berkesan.
  3. Menetapkan peratusan komisen yang berbeza berdasarkan tahap akaun Bybit, menyesuaikan diri dengan keadaan perdagangan pengguna yang berbeza.
  4. Merangka harga masuk, mengambil garis keuntungan, dan garis stop loss pada carta, memberikan pengesahan visual isyarat perdagangan.

Risiko Strategi

  1. Pilihan parameter EMA dan RSI mungkin tidak sesuai untuk semua keadaan pasaran dan mungkin memerlukan pengoptimuman berdasarkan situasi sebenar.
  2. Dalam pasaran yang bergelombang, strategi ini boleh menghasilkan isyarat perdagangan yang kerap, yang membawa kepada kos perdagangan yang tinggi.
  3. Tetapan mengambil keuntungan dan menghentikan kerugian mungkin terlalu konservatif atau agresif dan mungkin memerlukan penyesuaian berdasarkan keutamaan risiko peribadi.

Arahan Pengoptimuman Strategi

  1. Mengoptimumkan parameter EMA dan RSI untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
  2. Memperkenalkan penunjuk teknikal lain, seperti Bollinger Bands, MACD, dan lain-lain, untuk meningkatkan ketepatan isyarat perdagangan.
  3. Mengoptimumkan tetapan mengambil keuntungan dan menghentikan kerugian, sebagai contoh, dengan menggunakan hentian penghantaran atau kaedah hentian kerugian dinamik untuk melindungi keuntungan dan menguruskan risiko dengan lebih baik.
  4. Pertimbangkan faktor-faktor seperti turun naik pasaran dan jumlah dagangan untuk menapis isyarat dagangan dan mengurangkan kos yang berkaitan dengan perdagangan yang kerap.

Ringkasan

Strategi EMA RSI Trend-Following and Momentum adalah strategi perdagangan kuantitatif yang menggabungkan indikator trend dan momentum. Dengan menggunakan EMA dan RSI bersama-sama, ia dapat menangkap trend pasaran dengan berkesan. Strategi ini termasuk fungsi mengambil keuntungan dan menghentikan kerugian terbina dalam dan menetapkan peratusan komisen berdasarkan tahap akaun Bybit, menguruskan risiko dengan berkesan dan menyesuaikan diri dengan keadaan perdagangan pengguna yang berbeza. Walau bagaimanapun, masih ada ruang untuk pengoptimuman dalam strategi, seperti pengoptimuman parameter, memperkenalkan penunjuk teknikal lain, dan mengoptimumkan tetapan mengambil keuntungan dan menghentikan kerugian. Dengan pengoptimuman dan peningkatan berterusan, strategi ini dijangka mencapai hasil yang lebih baik dalam perdagangan sebenar.


/*backtest
start: 2024-03-21 00:00:00
end: 2024-03-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @BryanAaron

//@version=5
strategy("Bybit EMA RSI Strategy", overlay=true)

// Input parameters
fastLength = input(90, title="Fast EMA Length")
slowLength = input(300, title="Slow EMA Length")
rsiLength = input(5, title="RSI Length")
rsiUpperThreshold = input(85, title="RSI Upper Threshold")
rsiLowerThreshold = input(45, title="RSI Lower Threshold")
takeProfitPerc = input(5, title="Take Profit %")
stopLossPerc = input(3, title="Stop Loss %")
bybitAccountLevel = input.string("VIP 0", title="Bybit Account Level", options=["VIP 0", "VIP 1", "VIP 2", "VIP 3", "VIP 4"])

// Calculate moving averages
fastMA = ta.ema(close, fastLength)
slowMA = ta.ema(close, slowLength)

// Calculate RSI
rsi = ta.rsi(close, rsiLength)

// Trading conditions
longCondition = (fastMA > slowMA) and (rsi < rsiLowerThreshold)
shortCondition = (fastMA < slowMA) and (rsi > rsiUpperThreshold)

// Set commission based on Bybit account level
commissionPerc = switch bybitAccountLevel
    "VIP 0" => 0.075
    "VIP 1" => 0.065
    "VIP 2" => 0.055
    "VIP 3" => 0.045
    "VIP 4" => 0.035
    => 0.075

// Calculate entry prices with commission
var float longEntryPrice = na
var float shortEntryPrice = na

longEntryPriceWithCommission = close * (1 + commissionPerc / 100)
shortEntryPriceWithCommission = close * (1 - commissionPerc / 100)

// Calculate take profit and stop loss prices
takeProfitPrice(entryPrice) => entryPrice * (1 + takeProfitPerc / 100)
stopLossPrice(entryPrice) => entryPrice * (1 - stopLossPerc / 100)

// Plot entry prices
plotchar(longCondition, title="Long Entry Price", char="LE", location=location.belowbar, color=color.green)
plotchar(shortCondition, title="Short Entry Price", char="SE", location=location.abovebar, color=color.red)

// Draw position on the chart
longColor = color.green
shortColor = color.red
profitColor = color.new(color.green, 80)
lossColor = color.new(color.red, 80)

plotshape(longCondition and strategy.position_size > 0, title="Long Position", text="Long", location=location.belowbar, style=shape.labelup, size=size.small, color=longColor, textcolor=color.white)
plotshape(shortCondition and strategy.position_size < 0, title="Short Position", text="Short", location=location.abovebar, style=shape.labeldown, size=size.small, color=shortColor, textcolor=color.white)

if (strategy.position_size > 0)
    line.new(bar_index, longEntryPrice, bar_index + 1, longEntryPrice, color=longColor, width=2)
    
    longProfitLine = line.new(bar_index, takeProfitPrice(longEntryPrice), bar_index + 1, takeProfitPrice(longEntryPrice), color=profitColor, width=1)
    longLossLine = line.new(bar_index, stopLossPrice(longEntryPrice), bar_index + 1, stopLossPrice(longEntryPrice), color=lossColor, width=1)
    

else if (strategy.position_size < 0)
    line.new(bar_index, shortEntryPrice, bar_index + 1, shortEntryPrice, color=shortColor, width=2)
    
    shortProfitLine = line.new(bar_index, stopLossPrice(shortEntryPrice), bar_index + 1, stopLossPrice(shortEntryPrice), color=profitColor, width=1)
    shortLossLine = line.new(bar_index, takeProfitPrice(shortEntryPrice), bar_index + 1, takeProfitPrice(shortEntryPrice), color=lossColor, width=1)
    


// Entry
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryPrice := longEntryPriceWithCommission
else if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryPrice := shortEntryPriceWithCommission

Lebih lanjut