이 전략은 모멘텀 지표 RSI와 트렌드 지표 EMA를 결합한 복합 거래 시스템이다. 1분 및 5분 시간 프레임 모두에서 작동하며, RSI 과잉 구매/ 과잉 판매 신호 및 트리플 EMA 트렌드 결정에 기초한 거래 결정을 내린다. 이 전략은 트렌드 다음과 평균 반전 특징을 모두 통합하여 다른 시장 환경에서 거래 기회를 포착할 수 있다.
이 전략은 트렌드 판단 벤치마크로 21/50/200 일 트리플 EMA를 사용하고, 변경된 RSI 지표 (체비셰프 방법을 사용하여 계산) 를 사용하여 시장 과잉 구매 / 과잉 판매 조건을 식별합니다. 1 분 시간 프레임에서, RSI가 94 이상으로 넘어지면 짧은 포지션을 시작하고, 4 이하로 떨어지면 닫습니다. RSI가 50로 돌아 오면 브레이크 이븐 스톱을 설정합니다. 5 분 시간 프레임에서, RSI가 200 일 EMA 이하로 떨어지면 가격이 반등하면 긴 포지션을 시작하고, RSI가 과잉 구매되거나 미디안 이하로 넘어지면 긴 포지션을 닫습니다. 포지션 관리 변수인PositionLong 및 inPositionShort에서는 반복 입력을 방지합니다.
이 전략은 여러 기술적 지표와 다중 시간 프레임 분석의 조합을 통해 거래 안정성과 신뢰성을 향상시킵니다. 특정 위험이 존재하지만 적절한 포지션 관리 및 스톱 로스 메커니즘을 통해 효과적으로 제어 할 수 있습니다. 이 전략은 상당한 최적화 잠재력을 가지고 있으며 추가 기술 지표와 최적화 매개 변수를 도입하여 성능을 더욱 향상시킬 수 있습니다.
/*backtest start: 2023-11-12 00:00:00 end: 2024-07-10 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined RSI Primed and 3 EMA Strategy", overlay=true) // Input for EMA lengths emaLength1 = input(21, title="EMA Length 1") emaLength2 = input(50, title="EMA Length 2") emaLength3 = input(200, title="EMA Length 3") // Input for RSI settings rsiLength = input(14, title="RSI Length") rsiOverbought = input(94, title="RSI Overbought Level") rsiNeutral = input(50, title="RSI Neutral Level") rsiOversold = input(4, title="RSI Oversold Level") // Calculate EMAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) ema3 = ta.ema(close, emaLength3) // Calculate RSI using Chebyshev method from RSI Primed rsi(source) => up = math.max(ta.change(source), 0) down = -math.min(ta.change(source), 0) rs = up / down rsiValue = down == 0 ? 100 : 100 - (100 / (1 + rs)) rsiValue rsiValue = rsi(close) // Plot EMAs plot(ema1, color=color.red, title="EMA 21") plot(ema2, color=color.white, title="EMA 50") plot(ema3, color=color.blue, title="EMA 200") // Plot RSI for visual reference hline(rsiOverbought, "Overbought", color=color.red) hline(rsiNeutral, "Neutral", color=color.gray) hline(rsiOversold, "Oversold", color=color.green) plot(rsiValue, color=color.blue, title="RSI") // Trading logic with position management var bool inPositionShort = false var bool inPositionLong = false // Trading logic for 1-minute timeframe if (rsiValue > rsiOverbought and not inPositionShort) strategy.entry("Sell", strategy.short) inPositionShort := true if (rsiValue < rsiOversold and inPositionShort) strategy.close("Sell") inPositionShort := false if (ta.crossover(rsiValue, rsiNeutral) and inPositionShort) strategy.exit("Break Even", "Sell", stop=close) // Trading logic for 5-minute timeframe var float lastBearishClose = na if (close < ema3 and close[1] >= ema3) // Check if the current close is below EMA200 lastBearishClose := close if (not na(lastBearishClose) and close > lastBearishClose and not inPositionLong) strategy.entry("Buy", strategy.long) inPositionLong := true if (rsiValue > rsiOverbought and inPositionLong) strategy.close("Buy") inPositionLong := false if (ta.crossunder(rsiValue, rsiNeutral) and inPositionLong) strategy.exit("Break Even", "Buy", stop=close) lastBearishClose := na // Reset after trade execution