이 전략은 다양한 기간의 5 개의 기하급수적인 이동 평균 (EMA), 상대적 강도 지수 (RSI) 및 다른 기간의 두 개의 돈치안 채널을 통합하는 여러 기술적 지표를 결합한 트렌드 추적 시스템입니다. 이 시스템은 여러 지표의 조율을 통해 시장 추세를 파악하고 동적 스톱 로스 및 수익 목표를 사용하여 위험과 수익을 관리합니다.
이 전략은 신호 확인을 위해 여러 가지 기술적 지표를 사용합니다. 첫째, 5 EMA (9, 21, 55, 89, 144 기간) 를 사용하여 트렌드 프레임워크를 구성하여 빠른 EMA와 느린 EMA 사이의 교차를 통해 초기 트렌드 방향을 결정합니다. 둘째, RSI (14 기간) 를 트렌드 필터로 사용하여, RSI가 긴 포지션에 대한 과반 구매 구역 (60 이상) 과 짧은 포지션에 대한 과반 판매 구역 (40 이하) 에 있어야 하며, 따라서 범위 시장에서 빈번한 거래를 피합니다. 마지막으로, 21 기간 및 74 기간 도
이 전략은 여러 기술적 지표의 조합을 통해 비교적 완전한 거래 시스템을 구축합니다. 약간의 지연이 있지만 엄격한 신호 필터링과 리스크 관리로 트렌딩 시장에서 안정적인 수익을 얻을 수 있습니다. 거래자는 구체적인 시장 특성과 실제 응용 프로그램에서의 위험 용량에 따라 매개 변수를 조정하는 것이 좋습니다. 한편, 시스템 성능의 지속적인 모니터링과 최적화 방향의 정기적인 평가는 전략이 시장 변화에 적응 할 수 있도록해야합니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA RSI Donchian Strategy", overlay=true) // Input parameters fastEmaLength = input(9, title="Fast EMA Length") midEmaLength = input(21, title="Mid EMA Length") slowEmaLength = input(55, title="Slow EMA Length") ema89Length = input(89, title="89 EMA Length") ema144Length = input(144, title="144 EMA Length") rsiPeriod = input(14, title="RSI Period") rsiOverbought = input(60, title="RSI Overbought Level") rsiOversold = input(40, title="RSI Oversold Level") donchianLength1 = input(21, title="Donchian Channel Length 1") donchianLength2 = input(74, title="Donchian Channel Length 2") // EMA calculations fastEma = ta.ema(close, fastEmaLength) midEma = ta.ema(close, midEmaLength) slowEma = ta.ema(close, slowEmaLength) ema89 = ta.ema(close, ema89Length) ema144 = ta.ema(close, ema144Length) // RSI calculation rsi = ta.rsi(close, rsiPeriod) // Donchian Channel calculations donchianUpper1 = ta.highest(high, donchianLength1) donchianLower1 = ta.lowest(low, donchianLength1) donchianUpper2 = ta.highest(high, donchianLength2) donchianLower2 = ta.lowest(low, donchianLength2) donchianMid1 = (donchianUpper1 + donchianLower1) / 2 donchianMid2 = (donchianUpper2 + donchianLower2) / 2 // Plot EMAs plot(fastEma, color=color.green, linewidth=2, title="Fast EMA") plot(midEma, color=color.blue, linewidth=2, title="Mid EMA") plot(slowEma, color=color.orange, linewidth=2, title="Slow EMA") plot(ema89, color=color.red, linewidth=2, title="89 EMA") plot(ema144, color=color.purple, linewidth=2, title="144 EMA") // Plot Donchian Channels plot(donchianUpper1, color=color.new(color.blue, 0), title="Donchian Upper 1") plot(donchianLower1, color=color.new(color.blue, 0), title="Donchian Lower 1") plot(donchianMid1, color=color.new(color.blue, 80), title="Donchian Mid 1") plot(donchianUpper2, color=color.new(color.red, 0), title="Donchian Upper 2") plot(donchianLower2, color=color.new(color.red, 0), title="Donchian Lower 2") plot(donchianMid2, color=color.new(color.red, 80), title="Donchian Mid 2") // Entry Conditions longCondition = ta.crossover(fastEma, slowEma) and rsi > rsiOverbought shortCondition = ta.crossunder(fastEma, slowEma) and rsi < rsiOversold // Stop Loss and Take Profit var float longStopLoss = na var float longTakeProfit1 = na var float longTakeProfit2 = na var float shortStopLoss = na var float shortTakeProfit1 = na var float shortTakeProfit2 = na if longCondition longStopLoss := high * 0.99 longTakeProfit1 := longStopLoss * 1.02618 longTakeProfit2 := longStopLoss * 1.036185 strategy.entry("Long", strategy.long) if shortCondition shortStopLoss := low * 1.01 shortTakeProfit1 := shortStopLoss * 0.97382 shortTakeProfit2 := shortTakeProfit1 * 0.96381 strategy.entry("Short", strategy.short) // Exit Conditions if not na(longStopLoss) strategy.exit("Take Profit 1", "Long", limit=longTakeProfit1) strategy.exit("Take Profit 2", "Long", limit=longTakeProfit2) strategy.exit("Stop Loss", "Long", stop=longStopLoss) if not na(shortStopLoss) strategy.exit("Take Profit 1", "Short", limit= shortTakeProfit1) strategy.exit("Take Profit 2", "Short", limit=shortTakeProfit2) strategy.exit("Stop Loss", "Short", stop=shortStopLoss) // Labels for buy and sell signals if longCondition label.new(bar_index, low, "Buy", color=color.green, style=label.style_label_up, textcolor=color.white) if shortCondition label.new(bar_index, high, "Sell", color=color.red, style=label.style_label_down, textcolor=color.white) // Alerts alertcondition(longCondition, title="Long Entry Alert", message="Long entry signal") alertcondition(shortCondition, title="Short Entry Alert", message="Short entry signal")