이 전략은 상대적 강도 지수 (RSI) 와 간단한 이동 평균 (SMA) 를 결합한 트렌드를 따르는 거래 시스템이다. 이 전략은 이동 평균을 사용하여 시장 트렌드 방향을 식별하고, RSI와 동력을 확인하고, 트렌드와 동력이 일치할 때 거래를 실행한다. 이 전략에는 효과적인 위험 통제를 위해 포괄적인 스톱 로스 및 영리 메커니즘이 포함되어 있다.
핵심 논리는 두 가지 기술적 지표의 조합에 기반합니다.
거래 신호 생성 논리:
리스크 컨트롤은 입시 가격의 고정된 비율로 설정된 비율에 기반한 스톱 로스 및 영업률을 사용합니다.
이 전략은 트렌드 및 모멘텀 지표를 결합하여 논리적으로 명확하고 위험 제어 된 거래 시스템을 구축합니다. 본질적인 위험이 존재하지만 전략은 적절한 매개 변수 설정과 위험 통제를 통해 좋은 실용성을 보여줍니다. 미래 최적화는 동적 매개 변수 조정, 시장 환경 인식 및 신호 품질 개선에 초점을 맞추고 전략 안정성과 수익성을 향상시킬 수 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © raiford87 //@version=6 strategy("RSI + MA Trend Strategy (v6)", shorttitle="RSI_MA_Trend_v6", overlay=true, initial_capital=50000, default_qty_type=strategy.fixed, default_qty_value=1) // ───────────────────────────────────────────────────────────────────────────────────── // 1. USER INPUTS // ───────────────────────────────────────────────────────────────────────────────────── maLength = input.int(50, "Moving Average Length") rsiLength = input.int(14, "RSI Length") rsiBuyLevel = input.int(55, "RSI > X for Buy", minval=1, maxval=99) rsiSellLevel = input.int(45, "RSI < X for Sell", minval=1, maxval=99) stopLossPerc = input.float(1.0, "Stop Loss %", minval=0.1) takeProfitPerc = input.float(2.0, "Take Profit %", minval=0.1) // ───────────────────────────────────────────────────────────────────────────────────── // 2. INDICATOR CALCULATIONS // ───────────────────────────────────────────────────────────────────────────────────── maValue = ta.sma(close, maLength) rsiVal = ta.rsi(close, rsiLength) // Trend conditions bullTrend = close > maValue bearTrend = close < maValue // RSI conditions rsiBull = rsiVal > rsiBuyLevel rsiBear = rsiVal < rsiSellLevel // ───────────────────────────────────────────────────────────────────────────────────── // 3. ENTRY CONDITIONS // ───────────────────────────────────────────────────────────────────────────────────── longCondition = bullTrend and rsiBull shortCondition = bearTrend and rsiBear if longCondition strategy.entry("RSI MA Long", strategy.long) if shortCondition strategy.entry("RSI MA Short", strategy.short) // ───────────────────────────────────────────────────────────────────────────────────── // 4. STOP LOSS & TAKE PROFIT // ───────────────────────────────────────────────────────────────────────────────────── stopLossLevel = stopLossPerc * 0.01 takeProfitLevel = takeProfitPerc * 0.01 if strategy.position_size > 0 stopPriceLong = strategy.position_avg_price * (1 - stopLossLevel) tpPriceLong = strategy.position_avg_price * (1 + takeProfitLevel) strategy.exit("Exit Long", from_entry="RSI MA Long", stop=stopPriceLong, limit=tpPriceLong) if strategy.position_size < 0 stopPriceShort = strategy.position_avg_price * (1 + stopLossLevel) tpPriceShort = strategy.position_avg_price * (1 - takeProfitLevel) strategy.exit("Exit Short", from_entry="RSI MA Short", stop=stopPriceShort, limit=tpPriceShort) // ───────────────────────────────────────────────────────────────────────────────────── // 5. PLOT SIGNALS & LEVELS // ───────────────────────────────────────────────────────────────────────────────────── plot(maValue, color=color.yellow, linewidth=2, title="Moving Average") plotchar(longCondition, title="Long Signal", char='▲', location=location.belowbar, color=color.green, size=size.tiny) plotchar(shortCondition, title="Short Signal", char='▼', location=location.abovebar, color=color.red, size=size.tiny) // Plot Stop & TP lines posIsLong = strategy.position_size > 0 posIsShort = strategy.position_size < 0 plotStopLong = posIsLong ? strategy.position_avg_price * (1 - stopLossLevel) : na plotTpLong = posIsLong ? strategy.position_avg_price * (1 + takeProfitLevel): na plotStopShort= posIsShort? strategy.position_avg_price * (1 + stopLossLevel) : na plotTpShort = posIsShort? strategy.position_avg_price * (1 - takeProfitLevel): na plot(plotStopLong, color=color.red, linewidth=2, style=plot.style_line, title="Stop Loss Long") plot(plotTpLong, color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Long") plot(plotStopShort, color=color.red, linewidth=2, style=plot.style_line, title="Stop Loss Short") plot(plotTpShort, color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Short")