ADX, RSI 모멘텀 지표 전략


생성 날짜: 2023-12-11 16:06:30 마지막으로 수정됨: 2023-12-11 16:06:30
복사: 0 클릭수: 886
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

ADX, RSI 모멘텀 지표 전략

개요

이 전략은 동력 지표인 ADX, RSI, 그리고 부린 밴드를 사용하여 시장의 추세와 과매매 과매매 상황을 판단하여 낮은 가격과 높은 가격으로 판매하고 수익으로 빠져 나가는 자동 거래 전략을 수행합니다.

전략 원칙

  1. ADX 지표는 트렌드를 판단한다. ADX가 32보다 크면 시장이 트렌드 상태라고 생각한다.
  2. RSI 지표가 과매매를 판단한다. RSI 지표가 30등급을 넘으면 과매라고 간주하고, RSI 지표가 70등급을 넘으면 과매라고 간주한다.
  3. 부린 띠 판단 상쇄와 돌파 ᆞ 종결 가격이 부린 띠를 뚫고 궤도에 올랐을 때, 상쇄가 끝나는 것으로 간주하고; 종결 가격이 부린 띠의 궤도에 떨어졌을 때, 상쇄가 끝나는 것으로 간주합니다.

위의 지표에 따라 시장 상태를 판단하여 다음과 같이 거래 전략을 수립하십시오.

구매 조건:

  1. ADX>32, 트렌드 상태
  2. RSI가 30위까지 올라갔고, 초과상황입니다.
  3. 부린 반도 아래로 종전하며 하락세를 마감했다.

판매 조건:

  1. ADX>32, 트렌드 상태
  2. RSI가 70을 넘어서서 과매매
  3. 부린의 종전 가격보다 높은 종전 가격으로 종전

우위 분석

이 전략은 복합적으로 여러 지표를 사용하여 시장 상태를 판단하여 단일 지표 판단 오류의 확률을 피합니다. 동시에, 트렌드, 오버 바이, 오버 세 상태의 판단을 통해 시장 전환점을 효과적으로 잠금하여 낮은 구매, 높은 판매를 달성 할 수 있습니다.

트렌드 지표만 사용하는 것보다 이 전략은 더 빠른 시간에 단기 기회를 잡을 수 있다. 충격 지표만 사용하는 것보다 이 전략은 트렌드 방향을 더 잘 파악할 수 있다. 따라서 이 전략은 트렌드 추적의 장점을 유지하면서도 역동적인 동작의 유연성을 지니고 있어 잠재적으로 더 높은 효율성을 가진 양적 전략이다.

위험 분석

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 지표가 잘못된 신호를 보낼 위험이 있다. 시장이 급격한 사건으로 인해 지표 판단이 무효가 될 수 있다.
  2. 스톱로드 포지션은 너무 급진적인 위험을 설정한다. 스톱로드 거리가 너무 작다면, 단기 시장 변동에 의해 스톱로드가 종료될 수 있다.
  3. 매개 변수 데이터 적합 위험. 지표 매개 변수가 단지 역사 데이터에 기반하여 적합하면 매개 변수 안정성이 떨어지고 시장 변화에 적응하지 못할 수 있다.

대응 위험 관리 조치:

  1. “인간의 개입은 비정상적인 시장에 영향을 미치며, 잘못된 신호로 인한 손실을 방지하기 위해 수동적으로 전략을 중단합니다”.
  2. 합리적인 중지 거리를 설정하고, 평행선과 같은 지표와 결합하여 중지 가격을 판단하여, 피당하는 것을 피하십시오.
  3. 파라미터 튜닝 모듈을 추가하고, Walk Forward Analysis 방법을 사용하여 파라미터를 동적으로 최적화하여 파라미터의 안정성을 보장한다.

최적화 방향

이 전략의 최적화 공간은 다음과 같은 부분에서 이루어집니다.

  1. 최적화 지표 파라미터 . 지능형 최적화 알고리즘을 도입하여 다양한 품종의 파라미터를 위해 독립적으로 최적화 할 수 있습니다.

  2. 특징 공학을 추가한다. 가격 기술 지표를 더 많이 도입하고, 훈련하기 위해 벡터 머신과 같은 모델을 지원하는 모델을 구축하고, 신호 정확도를 향상시킨다.

  3. 융합 돌파전략. 다양한 품종의 특성에 따라 통로, 지원 저항 등에 기반한 판단 규칙을 적용하여 돌파점 위치를 파악하고 전략의 안정성을 강화한다.

  4. 스톱 스톱 손실 메커니즘을 최적화한다. 추적 스톱, 이동 스톱 등의 방법을 도입하여 스톱 스톱 손실 동적 조정, 최대 이익 잠금, 효과적으로 위험을 제어한다.

요약하다

이 전략은 ADX, RSI, 브린밴드 등 여러 가지 기술 지표를 사용하여 시장 상태를 판단하는 중·단기 수량 거래 전략으로 시장 구조가 크게 변할 때 매매를 수행한다. 전략 논리는 명확하게 설명할 수 있으며, 단일 기술 지표 판단 오류의 가능성을 크게 줄일 수 있다. 동시에, 전략은 잘못된 신호를 발산하는 경고 지표, 너무 급진적인 정지 및 손실 파라미터 오차 등의 위험을 설정하는 전략의 안정성과 효율성을 높이기 위해 위험 관리 및 모델 최적화 측면에서 시작해야합니다.

전략 소스 코드
/*backtest
start: 2023-11-10 00:00:00
end: 2023-12-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("DAX Shooter 5M Strategy", overlay=true)

//Creo ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", type=input.integer, defval=20)
dirmov(len) =>
    up = change(high)
    down = -change(low)
    plusDM = na(up) ? na : up > down and up > 0 ? up : 0
    minusDM = na(down) ? na : down > up and down > 0 ? down : 0
    truerange = rma(tr, len)

    plus = fixnan(100 * rma(plusDM, len) / truerange)
    minus = fixnan(100 * rma(minusDM, len) / truerange)

    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    adx


[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

//Creo RSI

src = close
len = input(7, minval=1, title="Periodo RSI")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
bandainf = input(30, title="Livello Ipervenduto")
bandasup = input(70, title="Livello Ipercomprato")


//Creo Bande di Bollinger

source = close
length = input(50, minval=1, title="Periodo BB")
mult = input(2.0, minval=0.001, maxval=50, title="Dev BB")

basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

plot(basis, color=color.white)
p1 = plot(upper, color=color.aqua)
p2 = plot(lower, color=color.aqua)
fill(p1, p2)

//Stabilisco regole di ingresso

if crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower
    strategy.entry("COMPRA", strategy.long, limit=upper, oca_name="DaxShooter", comment="COMPRA")
else
    //strategy.exit("exit", "COMPRA", loss = 90) 
    strategy.cancel(id="COMPRA")

if crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper
    strategy.entry("VENDI", strategy.short, limit=lower, oca_name="DaxShooter",comment="VENDI")
else
    //strategy.exit("exit", "VENDI", loss = 90)
    strategy.cancel(id="VENDI")

//Imposto gli alert
buy= crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower
sell= crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper
alertcondition(buy, title='Segnale Acquisto', message='Compra DAX')
alertcondition(sell, title='Segnale Vendita', message='Vendi DAX')

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)