이 전략은 가격 추세와 추진력 분석을 통해 거래 기회를 식별하기 위해 RSI, MACD 및 이동 평균 (SMA) 을 포함한 여러 기술적 지표를 결합한 정교한 다중 지표 거래 시스템입니다. 전략은 장기 트렌드를 결정하기 위해 200 일 이동 평균, 중장기 기준으로 50 일 이동 평균을 사용하고 거래 기회를 확인하기 위해 스토카스틱 RSI 및 MACD 크로스오버 신호를 사용합니다.
핵심 논리는 세 가지 주요 기둥에 기반을 두고 있습니다.
구매 조건은 동시에 다음을 만족시켜야 합니다.
판매 조건은 동시에 다음을 만족시켜야 합니다.
지표 파라미터 최적화:
신호 필터링:
위험 관리 개선:
시장 적응력:
이 전략은 여러 가지 기술 지표를 결합하여 명확한 위험 통제 메커니즘을 제공하면서 거래 신뢰성을 보장하는 체계적인 트렌드 추적 전략입니다. 이 전략의 주요 장점은 다층 검증 메커니즘에 있지만 여러 가지 지표가 가져올 수있는 지연 위험을 제어하는 데주의를 기울여야합니다. 지속적인 최적화와 개선을 통해이 전략은 다른 시장 환경에서 안정적인 성과를 유지할 수 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("RSI and MACD by Karthik", overlay=true) // Define periods for SMAs sma50Period = 50 sma200Period = 200 // Calculate SMAs sma50 = ta.sma(close, sma50Period) sma200 = ta.sma(close, sma200Period) // Plot SMAs on the main chart plot(sma50, color=color.blue, title="50 Period SMA", linewidth=2) plot(sma200, color=color.red, title="200 Period SMA", linewidth=2) // Define and calculate parameters for Stochastic RSI stochRSIPeriod = 14 rsi = ta.rsi(close, stochRSIPeriod) stochRSIK = ta.stoch(rsi, rsi, stochRSIPeriod, 3) stochRSID = ta.sma(stochRSIK, 3) // Define and calculate parameters for MACD macdShort = 12 macdLong = 26 macdSignal = 9 [macdLine, signalLine, macdHist] = ta.macd(close, macdShort, macdLong, macdSignal) // Plot Stochastic RSI in a separate pane hline(80, "Overbought", color=color.red, linewidth=1) hline(20, "Oversold", color=color.green, linewidth=1) plot(stochRSIK, color=color.blue, title="Stochastic RSI %K") plot(stochRSID, color=color.red, title="Stochastic RSI %D") // Plot MACD in a separate pane hline(0, "Zero Line", color=color.gray, linewidth=1) plot(macdHist, color=color.blue, title="MACD Histogram", style=plot.style_histogram) plot(macdLine, color=color.red, title="MACD Line") plot(signalLine, color=color.green, title="Signal Line") // Conditions for buy and sell signals isAbove200SMA = close > sma200 isStochRSIKAbove = stochRSIK > stochRSID macdLineAbove = macdLine > signalLine buySignal = isAbove200SMA and isStochRSIKAbove and macdLineAbove isBelow200SMA = close < sma200 isStochRSIKBelow = stochRSIK < stochRSID macdLineBelow = macdLine < signalLine sellSignal = isBelow200SMA and isStochRSIKBelow and macdLineBelow // Track the last signal with explicit type declaration var string lastSignal = na // Create series for plotting conditions var bool plotBuySignal = na var bool plotSellSignal = na var bool plotExitBuySignal = na var bool plotExitSellSignal = na // Update plotting conditions based on signal and last signal if buySignal and (lastSignal != "buy") plotBuySignal := true lastSignal := "buy" else plotBuySignal := na if sellSignal and (lastSignal != "sell") plotSellSignal := true lastSignal := "sell" else plotSellSignal := na // Update exit conditions based on SMA50 if lastSignal == "buy" and close < sma50 plotExitBuySignal := true lastSignal := na // Clear lastSignal after exit else plotExitBuySignal := na if lastSignal == "sell" and close > sma50 plotExitSellSignal := true lastSignal := na // Clear lastSignal after exit else plotExitSellSignal := na // Plot buy and sell signals on the main chart plotshape(series=plotBuySignal, location=location.belowbar, color=color.green, style=shape.circle, size=size.small, title="Buy Signal") plotshape(series=plotSellSignal, location=location.abovebar, color=color.red, style=shape.circle, size=size.small, title="Sell Signal") // Plot exit signals for buy and sell plotshape(series=plotExitBuySignal, location=location.belowbar, color=color.yellow, style=shape.xcross, size=size.small, title="Exit Buy Signal") plotshape(series=plotExitSellSignal, location=location.abovebar, color=color.yellow, style=shape.xcross, size=size.small, title="Exit Sell Signal") // Strategy to Backtest long = buySignal short = sellSignal // Exit Conditions exitBuy = close < sma50 exitSell = close > sma50 if (buySignal) strategy.entry("Long", strategy.long, 1.0) if (sellSignal) strategy.entry("Short", strategy.short, 1.0) strategy.close("Long", when=exitBuy) strategy.close("Short", when=exitSell)