적응형 RSI 충격 임계값 동적 거래 전략

RSI ATR BAT LR SD
생성 날짜: 2024-11-12 16:07:32 마지막으로 수정됨: 2024-11-12 16:07:32
복사: 2 클릭수: 498
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

적응형 RSI 충격 임계값 동적 거래 전략

개요

이 전략은 RSI (대비적으로 강한 지표) 에 기반한 적응 거래 시스템으로, 동적으로 오버 바이 오버 시드 경계를 조정하여 거래 신호를 최적화합니다. 전략의 핵심 혁신은 Bufi의 적응 경계를 도입한 것입니다. (BAT) 이 RSI의 촉발 경계를 시장 추세와 가격 변동 동력에 따라 조정하는 Bufi의 적응 경계를 도입하여 전통적인 RSI 전략의 효과를 향상시킵니다.

전략 원칙

이 전략의 핵심은 전통적인 고정값 RSI 시스템을 동적값 시스템으로 업그레이드하는 것이다. 구체적으로 구현하는 방법은 다음과 같다:

  1. 단기 RSI를 사용하여 시장의 과매매 상태를 계산합니다.
  2. 선형 회귀를 통해 가격 추세 기울기를 계산합니다.
  3. 표준 차이는 가격 변동의 정도를 측정합니다.
  4. 동적으로 RSI 하락값을 조정하기 위해 트렌드 및 변동 정보를 통합합니다
  5. 상승 추세에서 더 높은 가치, 하락 추세에서 더 낮은 가치
  6. 가격이 평균에서 크게 벗어나면 경미한 감수성을 낮추는 것

이 전략에는 다음과 같은 두 가지의 위험 관리 장치가 포함되어 있습니다.

  • 고정 주기 평점 메커니즘
  • 최대 손실 방지 장치

전략적 이점

  1. 그리고 우리는 이 모든 것을 경험할 수 있습니다.
  • 시장 상황에 따라 거래 값을 자동으로 조정할 수 있습니다.
  • 다른 시장 환경에서 고정된 매개 변수를 사용하는 것의 단점
  1. 리스크 관리가 잘 되어 있습니다.
  • 최대 보유 시간 제한
  • 자금 손실 보호 장치 포함
  • % 포지션 관리
  1. 신호 품질 향상:
  • 시장의 위조 신호를 줄이는 방법
  • 트렌드 시장의 포착력을 높여라
  • 민감성과 안정성을 균형잡고 있습니다.

전략적 위험

  1. 변수 민감성:
  • BAT 계수의 선택은 전략의 성과에 영향을 미칩니다.
  • RSI 주기의 설정은 충분히 테스트해야 합니다.
  • 적응된 길이 변수는 최적화해야 합니다.
  1. 시장 환경의 의존성:
  • 높은 변동성 시장에서 놓친 기회
  • 급격한 변동이 있을 때 스톱로디가 더 많이 미끄러질 수 있다.
  • 다른 시장에 따라 변수를 조정해야 합니다.
  1. 기술적인 한계:
  • 역사적인 데이터에 의존하는 계산 마이너스
  • 지연될 수 있습니다.
  • 거래 비용의 영향을 고려해야 합니다

전략 최적화 방향

  1. 변수 최적화:
  • 적응 변수 선택 메커니즘을 도입
  • 다른 시장 주기의 동적에 따라 조정 변수
  • 자동 최적화 기능을 추가합니다
  1. 신호 최적화:
  • 다른 기술 지표 검증과 함께
  • 시장 주기 인식 기능 추가
  • 입학 시점을 최적화
  1. 위험 관리 최적화:
  • 다이내믹 스피드 메커니즘 도입
  • 포지션 관리 전략을 최적화
  • 추가된 추적 제어 메커니즘

요약하다

이것은 역동적 하락 최적화를 통해 전통적인 RSI 전략의 한계를 해결하는 혁신적인 자기 적응 거래 전략입니다. 전략은 시장의 추세와 변동성을 통합적으로 고려하고 강한 적응력과 위험 제어 능력을 가지고 있습니다. 변수 최적화와 같은 과제가 있지만, 지속적인 개선과 최적화를 통해 전략은 실제 거래에서 안정적인 성능을 얻을 수 있습니다. 거래자는 실장 사용 전에 충분한 피드백과 변수 최적화를 수행하고 특정 시장 특성에 따라 적절하게 조정하는 것이 좋습니다.

전략 소스 코드
/*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 Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PineCodersTASC

//  TASC Issue: October 2024
//     Article: Overbought/Oversold
//              Oscillators: Useless Or Just Misused
//  Article By: Francesco P. Bufi
//    Language: TradingView's Pine Script™ v5
// Provided By: PineCoders, for tradingview.com

//@version=5
title  ='TASC 2024.10 Adaptive Oscillator Threshold'
stitle = 'AdapThrs'
strategy(title, stitle, false, default_qty_type = strategy.percent_of_equity,
         default_qty_value = 10, slippage = 5)

// --- Inputs ---
string sys    = input.string("BAT", "System", options=["Traditional", "BAT"])
int rsiLen    = input.int(2, "RSI Length", 1)
int buyLevel  = input.int(14, "Buy Level", 0)
int adapLen   = input.int(8, "Adaptive Length", 2) 
float adapK   = input.float(6, "Adaptive Coefficient")
int exitBars  = input.int(28, "Fixed-Bar Exit", 1, group = "Strategy Settings")
float DSL     = input.float(1600, "Dollar Stop-Loss", 0, group = "Strategy Settings")

// --- Functions --- 
//  Bufi's Adaptive Threshold
BAT(float price, int length) =>
    float sd = ta.stdev(price, length)
    float lr = ta.linreg(price, length, 0)
    float slope = (lr - price[length]) / (length + 1)
    math.min(0.5, math.max(-0.5, slope / sd))

// --- Calculations ---
float osc = ta.rsi(close, rsiLen)

// Strategy entry rules
// - Traditional system
if sys == "Traditional" and osc < buyLevel
    strategy.entry("long", strategy.long)
// - BAT system 
float thrs = buyLevel * adapK * BAT(close, adapLen)
if sys == "BAT" and osc < thrs
    strategy.entry("long", strategy.long)

// Strategy exit rules
// - Fixed-bar exit
int nBar = bar_index - strategy.opentrades.entry_bar_index(0)
if exitBars > 0 and nBar >= exitBars
    strategy.close("long", "exit")
// - Dollar stop-loss
if DSL > 0 and strategy.opentrades.profit(0) <= - DSL
    strategy.close("long", "Stop-loss", immediately = true)

// Visuals
rsiColor  = #1b9e77
thrsColor = #d95f02
rsiLine   = plot(osc, "RSI", rsiColor, 1)
thrsLine  = plot(sys == "BAT" ? thrs : buyLevel, "Threshold", thrsColor, 1)
zeroLine  = plot(0.0, "Zero", display = display.none)
fill(zeroLine, thrsLine, sys == "BAT" ? thrs : buyLevel, 0.0, color.new(thrsColor, 60), na)