이 전략은 이동 평균, RSI 지표 및 트래일링 스톱 로스를 기반으로 한 양적 거래 시스템이다. 트렌드 추적 및 기술 분석의 추진력 지표를 결합하여 엄격한 입출장 조건을 통해 위험 통제 거래를 달성합니다. 핵심 논리는 상승 추세에서 과판 기회를 찾고 트래일링 스톱을 사용하여 이익을 보호하는 것입니다.
이 전략은 트렌드 판단의 기준으로 200일 간 간단한 이동 평균 (SMA) 을 사용하고, 거래 신호를 생성하기 위해 상대 강도 지수 (RSI) 와 결합합니다. 구체적으로: 1. 주요 트렌드를 판단하기 위해 200일 SMA를 사용하며, 가격이 평균보다 높을 때만 긴 포지션을 고려합니다. 2. RSI가 미리 설정된 임계치 (디폴트 40) 아래로 떨어지면 과판 신호를 식별합니다. 3. 두 가지 조건이 충족되고 마지막 출구 (10 일 기본) 이후 대기 기간이 경과했을 때 긴 입구를 유발합니다. 4. 후속 스톱 로스 (디폴트 5%) 를 통해 포지션 보유 중 수익을 보호합니다. 5. 가격이 트레일링 스톱 또는 200일 SMA 이하로 떨어질 때 위치에서 빠져나갑니다.
이것은 완전한 구조와 명확한 논리를 가진 양적 거래 전략입니다. 여러 기술적 지표를 결합함으로써 위험을 제어하면서 안정적인 수익을 추구합니다. 최적화 할 여지가 있지만 기본 프레임워크는 좋은 실용성과 확장성을 가지고 있습니다. 전략은 중장기 투자자에게 적합하며 다른 시장 환경에 잘 적응합니다.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("200 SMA Crossover Strategy", overlay=false) // Define inputs smaLength = input.int(200, title="SMA Length") rsiLength = input.int(14, title="RSI Length") rsiThreshold = input.float(40, title="RSI Threshold") trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)") waitingPeriod = input.int(10, title="Waiting Period (Days)") // Calculate 200 SMA sma200 = ta.sma(close, smaLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Plot the 200 SMA and RSI plot(sma200, color=color.blue, linewidth=2, title="200 SMA") plot(rsi, color=color.purple, title="RSI", display=display.none) // Define buy and sell conditions var isLong = false var float lastExitTime = na var float trailStopPrice = na // Explicitly declare timeSinceExit as float float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000) canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod buyCondition = close > sma200 and rsi < rsiThreshold and canEnter if (buyCondition and not isLong) strategy.entry("Buy", strategy.long) trailStopPrice := na isLong := true // Update trailing stop loss if long if (isLong) trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100)) // Check for trailing stop loss or sell condition if (isLong and (close < trailStopPrice or close < sma200)) strategy.close("Buy") lastExitTime := time isLong := false // Plot buy and sell signals plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")