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

듀얼 RSI 지표에 기반한 적응 범위 거래 시스템

저자:차오장, 날짜: 2024-12-13 11:57:17
태그:RSISLTPMMATRRR

img

전반적인 설명

이 전략은 이중 RSI (관계 강도 지수) 지표에 기반한 적응형 거래 시스템이다. 이 전략은 다양한 시간 프레임의 RSI 지표를 결합하여 시장 추세와 거래 기회를 식별하고 통화 관리 및 위험 통제 메커니즘을 통해 거래 성과를 최적화합니다. 전략의 핵심 강점은 거래 안전을 유지하면서 수익성을 향상시키기 위해 다기간의 RSI 사이의 시너지입니다.

전략 원칙

이 전략은 7주기 RSI 지표를 주요 거래 신호로 사용하고, 매일 RSI를 트렌드 필터로 결합합니다. 단기 RSI가 40을 넘고 매일 RSI가 55을 넘으면 긴 포지션이 시작됩니다. 포지션 중에 가격이 초기 엔트리 가격 이하로 떨어지면 시스템은 자동으로 평균 비용을 낮추기 위해 포지션에 추가합니다. RSI가 60을 넘어서서 아래로 넘으면 포지션이 닫습니다. 위험 통제를 위해 5%의 스톱 로스를 구현합니다. 전략에는 또한 총 자본과 미리 설정된 위험 비율을 기반으로 자동으로 포지션 크기를 계산하는 돈 관리 모듈이 포함되어 있습니다.

전략적 장점

  1. 다기간의 RSI 조합은 신호 신뢰성을 향상시킵니다.
  2. 적응적 위치 평균화 메커니즘은 보유 비용을 효과적으로 줄입니다.
  3. 포괄적 인 금전 관리 시스템은 위험 선호도에 따라 포지션을 조정합니다.
  4. 고정 스톱 로스 보호는 거래 당 위험을 엄격히 제어합니다.
  5. 더 현실적인 거래 조건에 대한 거래 비용을 고려합니다.

전략 위험

  1. RSI 지표는 변동성 시장에서 잘못된 신호를 생성 할 수 있습니다.
  2. 포지션 평균화 메커니즘은 지속적인 하락 추세에서 상당한 손실을 초래할 수 있습니다.
  3. 고액의 변동성 기간에 고정 비율의 스톱 로스는 너무 보수적일 수 있습니다.
  4. 거래 비용은 빈번한 거래에서 수익에 크게 영향을 줄 수 있습니다.
  5. 전략 실행은 충분한 유동성을 필요로 합니다

최적화 방향

  1. 동적 스톱 로스 조정을 위해 변동성 지표 (ATR 같은) 를 포함합니다.
  2. 트렌드 강도 필터를 추가하여 다양한 시장에서 잘못된 신호를 줄이십시오.
  3. 시장 변동성에 기초한 동적 조정으로 위치 평균화 논리를 최적화
  4. 추가 시간 프레임에서 RSI 확인을 포함
  5. 적응력 있는 위치 크기 시스템 개발

요약

이 시스템은 기술 분석과 리스크 관리를 결합한 완전한 거래 시스템이다. 이 시스템은 멀티 페리오드 RSI 조율을 통해 거래 신호를 생성하면서 돈 관리 및 스톱-러스 메커니즘을 통해 위험을 제어한다. 이 전략은 트렌딩 시장에 적합하지만 실제 시장 조건에 따라 매개 변수 최적화를 필요로 한다. 이 시스템의 좋은 확장성은 추가 최적화에 대한 공간을 여긴다.


/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Dual RSI with Rebuy Logic + Capital, Commission, and Stop Loss", overlay=true)

// Parameter
rsi_length = input.int(7, title="RSI Length")
daily_rsi_length = input.int(7, title="Daily RSI Length")
capital = input.float(10000, title="Initial Capital", minval=0)  // Kapital
risk_per_trade = input.float(0.01, title="Risk per Trade (%)", minval=0.01, maxval=1.0)  // Risikogröße in Prozent
commission = input.float(0.1, title="Commission (%)", minval=0, maxval=100)  // Kommission in Prozent
stop_loss_pct = input.float(5, title="Stop Loss (%)", minval=0.1, maxval=100)  // Stop-Loss in Prozent

// Ordergröße berechnen
risk_amount = capital * risk_per_trade
order_size = risk_amount / close  // Größe der Order basierend auf Risikogröße und Preis

// Daily RSI
day_rsi = request.security(syminfo.tickerid, "D", ta.rsi(close, daily_rsi_length), lookahead=barmerge.lookahead_on)

// RSI auf aktuellem Timeframe
rsi = ta.rsi(close, rsi_length)

// Kauf- und Verkaufsbedingungen
buy_condition = rsi[1] < 40 and rsi > rsi[1] and day_rsi > 55
sell_condition = rsi[1] > 60 and rsi < rsi[1]

// Variablen, um den Preis des ersten Kaufs zu speichern
var float first_buy_price = na
var bool is_position_open = false

// Kauf-Logik
if buy_condition
    if not is_position_open
        // Initiales Kaufsignal
        strategy.entry("Buy", strategy.long, qty=1)
        first_buy_price := close
        is_position_open := true
    else if close < first_buy_price
        // Rebuy-Signal, nur wenn Preis niedriger als erster Kaufpreis
        strategy.entry("Rebuy", strategy.long, qty=1)

// Verkaufs-Logik
if sell_condition and is_position_open
    strategy.close("Buy")
    strategy.close("Rebuy")
    first_buy_price := na  // Zurücksetzen des Kaufpreises
    is_position_open := false

// Stop-Loss-Bedingung
if is_position_open
    // Stop-Loss-Preis berechnen (5% unter dem Einstiegspreis)
    stop_loss_price = first_buy_price * (1 - stop_loss_pct / 100)
    
    // Stop-Loss für "Buy" und "Rebuy" festlegen
    strategy.exit("Stop Loss Buy", from_entry="Buy", stop=stop_loss_price)
    strategy.exit("Stop Loss Rebuy", from_entry="Rebuy", stop=stop_loss_price)

// Performance-Metriken berechnen (mit Kommission)
gross_profit = strategy.netprofit / capital * 100
commission_cost = commission / 100 * strategy.closedtrades
net_profit = gross_profit - commission_cost

// Debug-Plots
plot(first_buy_price, title="First Buy Price", color=color.blue, linewidth=1)
plotchar(buy_condition, title="Buy Condition", char='B', location=location.abovebar, color=color.green)
plotchar(sell_condition, title="Sell Condition", char='S', location=location.belowbar, color=color.red)

// Debugging für Performance



관련

더 많은