VSTOP 및 RSI 거래 전략

저자:차오장, 날짜: 2023-10-09 15:48:46
태그:

전반적인 설명

이 전략은 VSTOP와 RSI 지표를 결합하여 RSI가 과잉 매입되었을 때 길게 가고 RSI가 과잉 판매되었을 때 짧게 이동하며, 트렌드 방향을 결정하고 트렌드가 역전될 때 적시에 손실을 줄이기 위해 VSTOP를 사용합니다.

전략 논리

  1. RSI 지표 값을 계산하고 과잉 구매 및 과잉 판매 라인을 설정합니다. RSI가 과잉 구매 라인 위에있을 때 길고 RSI가 과잉 판매 라인 아래에있을 때 짧습니다.

  2. VSTOP를 계산합니다. 가격 변동 범위에 기반한 스톱 로스 라인입니다. 계산 단계는 다음과 같습니다.

    • ATR 지표를 계산하고 ATR 계수 곱을 설정

    • 최대 가격과 최소 가격을 기록

    • 상승 트렌드 상태 is_uptrend에 따라 현재 스톱 로스 라인을 계산합니다: 스톱 = is_uptrend? 최대 - mult * ATR: min + mult * ATR

    • 스톱 로스 라인을 업데이트 합니다: vstop1 = is_uptrend? max ((vstop_prev, stop) : min ((vstop_prev, stop)

    • 트렌드 반전이 발생하면, 중지 손실 라인을 다시 설정 vstup

  3. RSI가 과잉 판매되면, 가격이 VSTOP를 넘으면, 짧게 가세요. RSI가 과잉 구매되면, 길게 가세요.

이점 분석

  • 트렌드 지표와 과잉 구매/ 과잉 판매 지표를 결합하면 트렌드 시장에서 역전 기회를 잡을 수 있습니다.

  • 스톱 손실을 설정하기 위해 VSTOP를 사용하는 것은 위험을 효과적으로 제어합니다.

  • 유연한 RSI 매개 변수 설정은 다양한 제품에 최적화 될 수 있습니다.

  • VSTOP는 수동 개입 없이 정지 손실을 체계적으로 추적합니다.

위험 과 해결책

  • ATR 매개 변수가 너무 크거나 너무 작게 설정되면 스톱 손실 라인은 의미가 없습니다. 다른 ATR 매개 변수를 테스트하거나 ATR 평균과 결합 할 수 있습니다.

  • 범위에 묶인 시장에서 RSI는 빈번한 거래 신호를 유발하여 거래 빈도 및 미끄러짐 비용을 증가시킬 수 있습니다. RSI 매개 변수를 조정하거나 유효하지 않은 신호를 줄이기 위해 추가 필터를 추가 할 수 있습니다.

  • 이 전략의 주요 위험은 실패한 반전이다. 트레이더는 역 트렌드 거래를 피하기 위해 더 큰 시간 프레임 트렌드 방향을 지켜야합니다. 트렌드를 결정하기 위해 장기 이동 평균을 사용할 수 있습니다.

최적화 방향

  • 유효하지 않은 신호를 필터링하기 위해 다른 지표를 결합하는 것을 고려하십시오. 예를 들어 볼륨, 돈치안 채널 등.

  • 최적의 매개 변수 조합을 찾기 위해 백테스트 결과를 기반으로 매개 변수를 최적화합니다.

  • 다른 시장 환경에 적응하기 위해 ATR 계수를 동적으로 조정하는 방법을 연구하십시오.

  • 고위험 기간 동안 전략을 중단하는 것을 검토하십시오.

결론

이 전략은 트렌드 판단과 과잉 구매 / 과잉 판매 수준을 통합하여 트렌딩 시장에서 반전 기회를 포착합니다. VSTOP는 위험 통제를 위해 체계적인 스톱 로스 관리를 제공합니다. 전략은 매개 변수 최적화 및 다른 지표를 결합하여 더욱 향상 될 수 있습니다. 거래자는 주요 위험인 실패한 반전을 조심해야합니다.


/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Vstop and RSI", overlay=true)

//RSI Section
length = input(2, "RSI Period") 
overSold = input(30, "Oversold Level") 
overBought = input(70, "Overbought Level") 
price = close 
vrsi = rsi (price, length) 

//VSTOP Section
vlength = input(2, "Vstop Length") 
mult = input(2, "Vstop Mult") 
atr_ = atr(vlength) 

max1=0.0 
min1=0.0 
is_uptrend_prev = false 
stop=0.0 
vstop_prev=0.0 
vstop1=0.0 
is_uptrend=false 
is_trend_changed=false 
max_ = 0.0 
min_ = 0.0 
vstop=0.0 

max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)


is_uptrend_prev := nz(is_uptrend[1], true)

stop := is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? green : red, style=cross, linewidth=2)

if vrsi > overBought
    strategy.entry("Buy", strategy.long, comment="Buy")
     
if vrsi < overSold and vstop > price
    strategy.entry("Sell", strategy.short, comment="Sell")

더 많은