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.
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