이 전략은 지수 이동 평균 (EMA) 과 상대적 강도 지수 (RSI) 를 결합한 트렌드 다음 전략이다. 이 전략은 시장 트렌드를 효과적으로 파악하기 위해 RSI 과잉 구매 / 과잉 판매 수준과 RSI 분리를 통합하면서 빠르고 느린 EMA의 교차를 모니터링하여 거래 신호를 식별합니다. 1 시간 시간 프레임에서 작동하여 여러 기술적 지표 검증을 통해 거래 정확성을 향상시킵니다.
핵심 논리는 다음의 핵심 요소들을 포함합니다. 1. 트렌드 방향을 결정하기 위해 9주기 및 26주기 EMA를 사용하며, 빠른 라인이 느린 라인 위에 있을 때 상승 추세가 표시됩니다. 2. 긴 신호와 짧은 신호의 임계값으로 65과 35과 함께 14주기 RSI를 사용합니다. 3. 1시간 시간 프레임에서 RSI 오차를 감지합니다. 4. 긴 진입은 느린 EMA 위에 빠른 EMA, RSI 65 이상, 그리고 하향적인 RSI 오차가 필요 5. 단기 진입은: 느린 EMA 이하의 빠른 EMA, 35 이하의 RSI 및 상승 RSI 분리가 없습니다
이 전략은 이동 평균, 모멘텀 지표 및 분산 분석을 결합하여 비교적 완전한 거래 시스템을 구축합니다. 잘못된 판단 위험을 효과적으로 줄이기 위해 여러 신호 검증을 강조합니다. 일부 고유한 지연이 있지만 전략은 매개 변수 최적화 및 위험 관리 개선으로 실용적인 가치를 가지고 있습니다.
/*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!")