ADX、RSI 동력 지표 전략

저자:차오장, 날짜: 2023-12-11 16:06:30
태그:

img

전반적인 설명

이 전략은 동력 지표 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. 패러미터 튜닝 모듈을 도입하고, 역동적으로 패러미터를 최적화하여

최적화 방향

이 전략을 개선하기 위한 주요 측면은 다음과 같습니다.

  1. 각 시장에 맞춘 기계 학습 알고리즘을 사용하여 지표 매개 변수를 최적화합니다.

  2. 특징 엔지니어링, 더 많은 기술 지표와 훈련 모델의 도입 SVM 신호 정확도를 향상시키기 위해.

  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)


더 많은