
이는 지수 이동 평균(EMA)과 상대 강도 지수(RSI)를 결합한 추세 추종 전략입니다. 이 전략은 빠른 EMA와 느린 EMA의 교차를 모니터링하고, RSI 지표의 매수 과다 수준과 매도 과다 수준, 그리고 RSI 발산점을 결합하여 거래 신호를 확인하고, 이를 통해 시장 동향을 효과적으로 파악합니다. 이 전략은 1시간 단위로 실행되며, 여러 기술 지표를 검증하여 거래의 정확도를 높입니다.
전략의 핵심 논리에는 다음과 같은 핵심 요소가 포함됩니다.
이 전략은 이동평균선 시스템, 모멘텀 지표, 발산 분석을 결합하여 비교적 완전한 거래 시스템을 구축합니다. 이 전략은 신호에 대한 다중 검증에 중점을 두고, 잘못된 판단의 위험을 효과적으로 줄입니다. 어느 정도 지연은 있지만, 이 전략은 매개변수 최적화와 위험 관리 개선을 통해 실제적으로 적용 가치가 좋습니다.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA9_RSI_Strategy_LongShort", overlay=true)
// Parameters
fastLength = input.int(9, minval=1, title="Fast EMA Length")
slowLength = input.int(26, minval=1, title="Slow EMA Length")
rsiPeriod = input.int(14, minval=1, title="RSI Period")
rsiLevelLong = input.int(65, minval=1, title="RSI Level (Long)")
rsiLevelShort = input.int(35, minval=1, title="RSI Level (Short)")
// Define 1-hour timeframe
timeframe_1h = "60"
// Fetch 1-hour data
high_1h = request.security(syminfo.tickerid, timeframe_1h, high)
low_1h = request.security(syminfo.tickerid, timeframe_1h, low)
rsi_1h = request.security(syminfo.tickerid, timeframe_1h, ta.rsi(close, rsiPeriod))
// Current RSI
rsi = ta.rsi(close, rsiPeriod)
// Find highest/lowest price and corresponding RSI in the 1-hour timeframe
highestPrice_1h = ta.highest(high_1h, 1) // ราคาสูงสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง
lowestPrice_1h = ta.lowest(low_1h, 1) // ราคาต่ำสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง
highestRsi_1h = ta.valuewhen(high_1h == highestPrice_1h, rsi_1h, 0)
lowestRsi_1h = ta.valuewhen(low_1h == lowestPrice_1h, rsi_1h, 0)
// Detect RSI Divergence for Long
bearishDivLong = high > highestPrice_1h and rsi < highestRsi_1h
bullishDivLong = low < lowestPrice_1h and rsi > lowestRsi_1h
divergenceLong = bearishDivLong or bullishDivLong
// Detect RSI Divergence for Short (switch to low price for divergence check)
bearishDivShort = low > lowestPrice_1h and rsi < lowestRsi_1h
bullishDivShort = high < highestPrice_1h and rsi > highestRsi_1h
divergenceShort = bearishDivShort or bullishDivShort
// Calculate EMA
emaFast = ta.ema(close, fastLength)
emaSlow = ta.ema(close, slowLength)
// Long Conditions
longCondition = emaFast > emaSlow and rsi > rsiLevelLong and not divergenceLong
// Short Conditions
shortCondition = emaFast < emaSlow and rsi < rsiLevelShort and not divergenceShort
// Plot conditions
plotshape(longCondition, title="Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(shortCondition, title="Sell", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")
// Execute the strategy
if (longCondition)
strategy.entry("Long", strategy.long, comment="entry long")
if (shortCondition)
strategy.entry("Short", strategy.short, comment="entry short")
// Alert
alertcondition(longCondition, title="Buy Signal", message="Buy signal triggered!")
alertcondition(shortCondition, title="Sell Signal", message="Sell signal triggered!")