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

RSI 동적 스톱 로스 지능형 거래 전략

저자:차오장, 날짜: 2024-11-12 11:39:06
태그:RSISMAATR

img

전반적인 설명

이 전략은 RSI 지표에 기반한 동적 스톱 로스 거래 시스템으로, SMA와 ATR 지표를 결합하여 거래 결정을 최적화합니다. 이 전략은 위험 통제를 위해 ATR 동적 스톱 로스를 사용하여 수익을 극대화하기 위해 피라미드 스타일 포지션 폐쇄와 함께 다단계 수익 접근 방식을 사용합니다. 이 전략은 높은 적응력을 갖추고 시장 변동성에 따라 자동으로 거래 매개 변수를 조정합니다.

전략 원칙

이 전략은 주로 RSI 과잉 판매 조건 (RSI<30) 을 입점 신호로 사용하지만 상승 추세를 보장하기 위해 가격이 200 일 이동 평균보다 높아야합니다. ATR 동적 스톱 로스와 결합한 세 가지 영업 목표 (5%, 10%, 15%) 를 구현합니다. 구체적으로:

  1. 입시 조건: RSI가 30 이하이고 가격은 SMA200 이상
  2. 포지션 관리: 거래당 75% 자본
  3. 스톱 로스: 1.5x ATR에 기초한 동적 스톱
  4. 영업이익: 각각 5%, 10%, 15%, 33%, 66% 및 100%로 세 레벨

전략적 장점

  1. 동적 위험 관리: 시장 변동에 대한 ATR 적응
  2. 단계적 인 수익 취업: 감정적 인 간섭 을 줄이고 수익 가능성 을 향상 시키고
  3. 트렌드 확인: 거짓 신호를 필터하기 위해 이동 평균을 사용합니다.
  4. 자금 관리: 각계좌 크기에 대한 비율 기반의 포지션 크기
  5. 위원회 최적화: 실질적인 실행에 대한 거래 비용을 고려합니다.

전략 위험

  1. 이동 평균 지연은 엔트리를 지연시킬 수 있습니다.
  2. RSI 과잉 판매는 반전 보장하지 않습니다
  3. 큰 포지션 크기는 상당한 마감으로 이어질 수 있습니다.
  4. 빈번한 부분 출퇴가 거래 비용을 증가시킬 수 있습니다. 이러한 위험은 매개 변수 조정과 추가 필터를 통해 관리 될 수 있습니다.

최적화 방향

  1. 부피 확인 신호를 추가합니다
  2. 트렌드 강도 지표를 포함
  3. 수익률을 최적화
  4. 시간 프레임 필터를 추가합니다
  5. 변동성 적응형 포지션 크기를 고려합니다.

요약

이 전략은 기술 지표와 역동적 인 리스크 관리를 결합하여 포괄적 인 거래 시스템을 만듭니다. 이 전략의 장점은 적응력과 통제 된 위험, 시장 조건에 기반한 매개 변수 최적화가 여전히 필요함에도 불구하고 있습니다. 이 전략은 중장기 투자자에게 적합하며 체계적인 거래의 견고한 기초로 작용합니다.


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

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef

관련

더 많은