
Bybit EMA RSI 트렌드 추적과 동력 전략은 지수 이동 평균 ((EMA) 과 상대적으로 강한 지수 ((RSI) 를 결합한 양적 거래 전략이다. 이 전략은 두 개의 다른 주기의 EMA를 사용하여 시장의 흐름을 판단하고 RSI 지수를 사용하여 트렌드의 유효성을 확인한다. 빠른 EMA 상에서 느린 EMA를 통과하고 RSI가 특정 하위 한계보다 낮으면 전략은 여러 신호를 발생시킨다. 반대로, 빠른 EMA 아래에서 느린 EMA를 통과하고 RSI가 특정 상위 한계보다 높으면 전략은 빈 신호를 발생시킨다. 이 전략은 또한 Bybit 계정 계층에 따라 다양한 연금 비율을 설정하고 내장된 중지 손실 기능을 사용하여 위험을 효과적으로 제어 할 수 있습니다.
Bybit EMA RSI 트렌드 추적과 동력 전략은 트렌드 추적과 동력 지표를 결합한 정량 거래 전략으로, EMA와 RSI의 조화를 통해 시장의 흐름을 더 잘 포착할 수 있다. 이 전략은 내장된 스톱 손실 기능과 Bybit 계정 수준에 따라 수수료를 설정하는 기능을 통해 위험을 효과적으로 제어하고 사용자의 다른 거래 조건에 적응할 수 있다. 그러나 이 전략에는 여전히 최적화 할 여지가 있습니다.
/*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