ADX 크로스오버 트레이딩 전략


생성 날짜: 2023-12-08 15:49:12 마지막으로 수정됨: 2023-12-08 15:49:12
복사: 0 클릭수: 961
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

ADX 크로스오버 트레이딩 전략

개요

이 전략은 이동 지수 평균 ((ADX) 지표와 상향 운동 지수 ((DI+) 를 사용하여 시장 방향과 트렌드를 판단하는 근거를 제공하며, 거래 방향과 보유 시간을 결정하기 위해 빠르고 느린 이동 평균을 사용하며, 트렌드 추적 유형의 거래 전략에 속한다. 이 전략은 중간 줄의 반전점을 효과적으로 포착할 수 있으며, 낮은 변동률과 트렌드가 뚜렷한 시장에서 잘 작동한다.

원칙

이 전략의 핵심 논리는, +DI 라인이 하향에서 ADX를 돌파할 때 구매 신호를 생성하고, +DI 라인이 상향에서 하향으로 ADX를 돌파할 때 판매 신호를 생성한다는 것이다. 따라서, 이 전략은 DI와 ADX 지표 사이의 교차로에 의존하여 시장의 추세와 역점을 판단한다. 한편, 빠른/평균 선의 관계는 전체 시장의 추세를 판단하는데, 빠른 EMA가 느린 EMA보다 높을 때만 거래 신호를 생성하는 것을 고려한다.

특히, 다음 조건이 충족되면 구매 신호가 발송됩니다: 1. 빠른 EMA가 느린 EMA보다 높습니다. 2 , + DI 라인은 아래쪽에서 ADX 라인을 뚫고 3 ADX가 30보다 낮은 절벽 수준

다음 조건이 충족되면 판매 신호가 발송됩니다. 1, ADX 값이 30보다 높은 임계 수준 2+DI 라인은 ADX 라인을 상단에서 아래로 떨어뜨립니다.

이 전략은 또한 스톱로스 논리를 추가하여, 가격이 스톱로스 가격보다 낮으면 모든 포지션을 종료한다.

장점

이 전략은 DI, ADX 및 평균선 지표와 결합하여 시장 추세 전환점을 효과적으로 판단할 수 있다. 다음과 같은 장점이 있다:

  1. DI와 ADX 지표를 사용하여 트렌드 반전 신호를 판단하고, 진입 및 출구 지점을 정확하게 위치시킨다
  2. 빠른 EMA 필터링 시스템은 큰 트렌드를 판단하여 잘못된 거래를 방지합니다.
  3. 동향이 강하거나 약할 때만 거래하고, 가짜 브레이크 위험을 피하기 위해 ADX 값을 사용합니다.
  4. 하향 위험을 제어하기 위한 손해배상 장치에 가입
  5. 입시 조건이 엄격하여, 높은 가격으로 구매하고 agiri를 판매하는 위험을 피합니다.
  6. 출구 조건이 명확하고, 적시에 정지 및 정지

위험

이 전략에는 몇 가지 위험도 있습니다.

  1. ADX 지표는 지연되어 가격 반전의 최적 시점을 놓칠 수 있습니다.
  2. 시장의 흔들림이 커지면 ADX와 DI 지표가 더 많은 잘못된 신호를 냅니다.
  3. 느린 중간선 설정이 잘못되면 놓친 거래 기회 또는 잘못된 필터링 신호가 발생할 수 있습니다.
  4. 스톱 손실 가격은 너무 느리고, 위험을 효과적으로 통제할 수 없습니다.

이러한 위험에는 ADX 및 평균 변수를 최적화하고, 중지 수준을 조정하고, 다른 지표 확인 신호와 결합하여 개선 할 수 있습니다.

최적화 방향

이 전략에는 더 많은 최적화 가능성이 있습니다:

  1. 다양한 길이의 주기 ADX를 테스트하여 최적의 변수 조합을 찾을 수 있습니다.
  2. RSI, 브린지 등과 같은 다른 지표를 추가하여 거래 신호를 확인 할 수 있습니다.
  3. 기계 학습 알고리즘에 기반한 우수 변수 조합 및 거래 규칙을 자동으로 찾아낼 수 있습니다.
  4. 동적으로 스톱 레벨을 조정하여 마이너스 리스크를 조정할 수 있습니다
  5. 다중 인자 점수 모델을 구축하여 진출 및 퇴출 규칙을 더욱 견고하게 만들 수 있습니다.

요약하다

이 ADX 교차 트렌드 전략은 전체적으로 안정적이며, 변동기 전에 반전 공간을 효과적으로 포착할 수 있지만, 위험을 통제하는 데 주의를 기울여야 한다. 추가로 최적화 된 파라미터 설정, 엄격한 입점 및 중지 규칙 등의 방법으로, 더 나은 위험 조정 후 수익을 얻을 수 있다. 이 전략은 긴 라인 보유 중 짧은 라인 거래 계좌에 적용된다.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00


strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)

len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1)   //


TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0


SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange

SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)

fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)




//long condition
longCondition=  ADX < threshold  and crossover(DIPlus,ADX)  and fastEmaVal > slowEmaVal


barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ADXLE", long=true,  when= longCondition  and strategy.position_size<1) 

barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)



//Add
strategy.entry(id="ADXLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) ) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ADXLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss


//exit condition
exitCondition=  ADX > threshold  and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll",    qty=strategy.position_size ,   when= exitCondition)   //close all