리소스 로딩... 로딩...

RSI와 이동 평균의 결합된 양적 거래 전략에 따른 경향

저자:차오장, 날짜: 2025-01-06 10:58:42
태그:RSIMASMATPSL

img

전반적인 설명

이 전략은 상대적 강도 지수 (RSI) 와 간단한 이동 평균 (SMA) 를 결합한 트렌드를 따르는 거래 시스템이다. 이 전략은 이동 평균을 사용하여 시장 트렌드 방향을 식별하고, RSI와 동력을 확인하고, 트렌드와 동력이 일치할 때 거래를 실행한다. 이 전략에는 효과적인 위험 통제를 위해 포괄적인 스톱 로스 및 영리 메커니즘이 포함되어 있다.

전략 원칙

핵심 논리는 두 가지 기술적 지표의 조합에 기반합니다.

  1. 이동 평균 (MA): 전반적인 추세를 결정하는 데 사용됩니다. 가격이 MA 이상, 하락하면 하락 추세가 확인됩니다.
  2. 상대적 강도 지수 (RSI): 가격 동력을 확인하는 데 사용됩니다. 상승 동력은 RSI가 한 임계치를 초과할 때 확인됩니다 (예를 들어, 55), 임계치를 넘으면 하락 동력 (예를 들어, 45).

거래 신호 생성 논리:

  • 롱 조건: 매장 마이너스 (MA) 이상 가격과 구매 기준 이상 RSI
  • 단기 조건: 매출 마이너스 이하의 가격과 매출 마이너스 이하의 RSI

리스크 컨트롤은 입시 가격의 고정된 비율로 설정된 비율에 기반한 스톱 로스 및 영업률을 사용합니다.

전략적 장점

  1. 신호 안정성: 트렌드 및 모멘텀의 이중 확인을 통해 잘못된 신호를 감소시킵니다.
  2. 종합적인 리스크 관리: 거래 당 고정 비율의 스톱 로스 (stop loss) 및 리프트 (take profit) 로 리스크를 효과적으로 제어합니다.
  3. 매개 변수 유연성: MA 기간 및 RSI 문턱과 같은 주요 매개 변수는 다른 시장 특성에 최적화 될 수 있습니다.
  4. 명확한 전략 논리: 거래 규칙은 간단하고 직관적으로 이해하고 실행
  5. 높은 적응력: 다양한 거래 시간대에 적용됩니다.

전략 위험

  1. 트렌드 역전 위험: 트렌드 전환점에 연속적인 중단이 발생할 수 있습니다.
  2. 범주형 시장 위험: 부상 시장에서 발생할 수 있는 빈번한 거래 손실
  3. 매개 변수 의존성: 최적 매개 변수는 시장 환경에 따라 크게 다를 수 있습니다.
  4. 변동 위험: 높은 변동 상태에서 상당한 변동이 가능합니다.
  5. 기술 지표 지연: MA와 RSI는 고유 한 지연을 가지고 있으며, 진입 시기를 지연시킬 수 있습니다.

전략 최적화 방향

  1. 동적 매개 변수 최적화: 시장 변동성에 따라 MA 기간 및 RSI 임계치를 조정하는 적응 매개 변수 메커니즘을 도입
  2. 시장 환경 필터링: 높은 변동성에서 포지션 크기를 조정하거나 거래를 일시 중지하기 위해 변동성 필터링 메커니즘을 추가합니다.
  3. 다중 시간 프레임 분석: 방향 정확성을 향상시키기 위해 더 긴 시간 프레임 트렌드 확인을 포함합니다.
  4. 스톱 로스 최적화: 더 나은 이익 보호를 위해 후속 스톱을 구현
  5. 신호 필터링: 신호 신뢰성을 향상시키기 위해 볼륨 및 기타 보조 지표를 추가합니다.

요약

이 전략은 트렌드 및 모멘텀 지표를 결합하여 논리적으로 명확하고 위험 제어 된 거래 시스템을 구축합니다. 본질적인 위험이 존재하지만 전략은 적절한 매개 변수 설정과 위험 통제를 통해 좋은 실용성을 보여줍니다. 미래 최적화는 동적 매개 변수 조정, 시장 환경 인식 및 신호 품질 개선에 초점을 맞추고 전략 안정성과 수익성을 향상시킬 수 있습니다.


/*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")


관련

더 많은