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

리스크-어워드 최적화 시스템으로 듀얼 이동 평균 크로스 RSI 모멘텀 전략

저자:차오장, 날짜: 2024-11-12 16:00:58
태그:SMARSIATRRR

img

전반적인 설명

이 전략은 양적 거래 전략으로, 이중 이동 평균 크로스오버, RSI 과잉 구매/ 과잉 판매 조건, 리스크-어워드 비율 관리 등을 결합한다. 이 전략은 더 정확한 거래 신호 필터링을 위해 과잉 구매/ 과잉 판매 영역을 식별하기 위해 RSI 지표를 사용하여 단기 및 장기 이동 평균 크로스오버를 통해 시장 트렌드 방향을 결정한다. 또한 ATR 기반의 동적 스톱 로스 설정과 고정된 리스크-어워드 비율 수익 목표 관리 시스템을 통합한다.

전략 원칙

이 전략은 트렌드 결정의 기초로 9일 및 21일 이동평균을 사용하며, 신호 확인을 위해 RSI 지표의 과잉 구매/ 과잉 판매 구역 (35/65) 을 사용한다. 긴 입시 조건은 과잉 판매 지역에서 장기 MA와 RSI보다 짧은 기간 MA를 필요로 한다. 짧은 입시에는 과잉 구매 지역에서 장기 MA와 RSI보다 짧은 기간 MA를 필요로 한다. 전략은 스톱-로스 거리 값의 1.5배의 ATR 값을 사용하며 2:1 리스크-어워드 비율을 기반으로 수익 목표를 자동으로 계산한다. 과잉 거래를 방지하기 위해 최소 3시간의 보유 기간이 구현된다.

전략적 장점

  1. 다중 신호 확인 메커니즘은 거래 신뢰성을 크게 향상시킵니다.
  2. 동적 스톱 로스 설정은 시장 변동성에 적응합니다.
  3. 장기적으로 안정적인 수익성을 위한 고정된 위험/이익률 지원
  4. 최소 보유 기간은 과잉 거래를 효과적으로 방지합니다.
  5. 시각적 표시 시스템은 전략 모니터링과 백테스트 분석을 촉진합니다.
  6. 배경 색상 변경으로 직관적으로 현재 위치 상태를 표시

전략 위험

  1. 이중 MA 시스템은 다양한 시장에서 잘못된 신호를 생성할 수 있습니다.
  2. RSI 지표는 강한 추세에서 거래 기회를 놓칠 수 있습니다.
  3. 고정된 위험/이익 비율은 특정 시장 조건에서 유연성이 부족할 수 있습니다.
  4. ATR 정지는 변동성 스파이크에 충분히 빠르게 반응하지 않을 수 있습니다.
  5. 최소 보유 기간은 손실 중지 기회를 놓칠 수 있습니다.

전략 최적화 방향

  1. 시장 조건에 기반한 적응적인 이동 평균 기간 선택
  2. 신호 품질을 향상시키기 위해 트렌드 강도 필터를 추가
  3. 다른 시장 환경에 대한 역동적 인 위험/이익 비율 조정 시스템을 개발
  4. 신호 신뢰성을 높이기 위해 볼륨 표시기를 통합합니다.
  5. 거래 시기를 최적화하기 위해 시장 변동성 분석 모듈을 추가합니다.
  6. 매개 변수 최적화를 위한 기계 학습 알고리즘을 통합

요약

이 전략은 여러 기술적 지표의 조화를 통해 비교적 완전한 거래 시스템을 구축합니다. 그것은 입시 신호 품질뿐만 아니라 위험 관리 및 수익 목표 설정에도 중점을 둡니다. 최적화 할 수있는 영역이 있지만 전반적인 프레임워크 디자인은 좋은 실용적 가치와 확장 가능성에 합리적입니다. 모듈형 디자인은 후속 최적화에 대한 편의성을 제공합니다.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("JakeJohn", overlay=true)

// Input parameters
smaShortLength = input(9, title="Short SMA Length")
smaLongLength = input(21, title="Long SMA Length")
lengthRSI = input(14, title="RSI Length")
rsiOverbought = input(65, title="RSI Overbought Level")
rsiOversold = input(35, title="RSI Oversold Level")
riskRewardRatio = input(2, title="Risk/Reward Ratio") // 2:1
atrMultiplier = input(1.5, title="ATR Multiplier") // Multiplier for ATR to set stop loss

// Calculate indicators
smaShort = ta.sma(close, smaShortLength)
smaLong = ta.sma(close, smaLongLength)
rsi = ta.rsi(close, lengthRSI)
atr = ta.atr(14)

// Entry conditions
longCondition = (smaShort > smaLong) and (rsi < rsiOversold) // Buy when short SMA is above long SMA and RSI is oversold
shortCondition = (smaShort < smaLong) and (rsi > rsiOverbought) // Sell when short SMA is below long SMA and RSI is overbought

// Variables for trade management
var float entryPrice = na
var float takeProfit = na
var int entryBarIndex = na

// Entry logic for long trades
if (longCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice + (entryPrice - (entryPrice - (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Buy", strategy.long)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, high, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

// Entry logic for short trades
if (shortCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice - (entryPrice - (entryPrice + (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Sell", strategy.short)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, low, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)

// Manage trade duration and exit after a minimum of 3 hours
if (strategy.position_size != 0)
    // Check if the trade has been open for at least 3 hours (180 minutes)
    if (bar_index - entryBarIndex >= 180) // 3 hours in 1-minute bars
        if (strategy.position_size > 0)
            strategy.exit("Take Profit Long", from_entry="Buy", limit=takeProfit)
        else
            strategy.exit("Take Profit Short", from_entry="Sell", limit=takeProfit)

// Background colors for active trades
var color tradeColor = na
if (strategy.position_size > 0)
    tradeColor := color.new(color.green, 90) // Light green for long trades
else if (strategy.position_size < 0)
    tradeColor := color.new(color.red, 90) // Light red for short trades
else
    tradeColor := na // No color when no trade is active

bgcolor(tradeColor, title="Trade Background")

// Plotting position tools
if (strategy.position_size > 0)
    // Plot long position tool
    strategy.exit("TP Long", limit=takeProfit)
    
if (strategy.position_size < 0)
    // Plot short position tool
    strategy.exit("TP Short", limit=takeProfit)

// Plotting indicators
plot(smaShort, color=color.green, title="Short SMA", linewidth=2)
plot(smaLong, color=color.red, title="Long SMA", linewidth=2)

// Visual enhancements for RSI
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi, color=color.blue, title="RSI", linewidth=2)

// Ensure there's at least one plot function
plot(close, color=color.black, title="Close Price", display=display.none) // Hidden plot for compliance


관련

더 많은