트렌드 브레이크아웃 ADX 필터 트레이딩 전략


생성 날짜: 2024-01-04 17:12:30 마지막으로 수정됨: 2024-01-04 17:12:30
복사: 0 클릭수: 924
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

트렌드 브레이크아웃 ADX 필터 트레이딩 전략

개요

이 전략은 ADX 지표를 사용하여 브레이크 신호를 필터링하는 짧은 라인 거래 전략입니다. 가격이 볼링거 부린을 뚫고 궤도에 올랐을 때, ADX가 내려갈 때, 공백; 가격이 볼링거 부린을 뚫고 궤도에 내려갈 때, ADX가 올라갈 때, 더 많이하십시오. 이 전략은 동시에 중지 손실과 중지, 완전히 자동 거래합니다.

전략 원칙

이 전략은 Bollinger Bollinger Bands를 주요 돌파 신호로 사용한다. 부린 밴드 상향 경로는 가격의 두 배 표준 차이를 나타냅니다. 부린 밴드 상향 경로는 일반적으로 가격의 강력한 트렌드 단계에 들어가는 것을 나타냅니다. 또한, 가짜 돌파를 방지하기 위해 이 전략은 ADX 지표를 필터링 조건으로 추가했습니다. 부린 밴드 상향 경로는 ADX가 하락했을 때만 고려되며, ADX가 상승했을 때만 부린 밴드 하향 경로는 고려됩니다.

구체적으로, 이 전략은 33주기 길이의 종전 가격을 계산하는 부린 띠를 사용합니다. 부린 띠의 중간 궤도는 종전 가격의 33주기 간단한 이동 평균이며, 상하 궤도는 중하 궤도의 아래 두 표준 차입니다. 지표 파라미터는 종전 가격이 궤도를 벗어나면 8주기 ADX가 15주기 ADX보다 작을 때 공백으로 설정되며, 종전 가격이 궤도를 벗어나면 8주기 ADX가 15주기 ADX보다 클 때 공백을 합니다. 평평한 포지션은 800 점의 정지, 400 점의 손실로 설정됩니다.

우위 분석

이것은 트렌드 및 주파수 지표 필터링 신호를 결합한 획기적인 전략으로 다음과 같은 장점이 있습니다.

  1. 브린 띠를 사용하여 트렌드 브레이크 포인트를 판단하는 것은 대부분의 거래자의 습관에 부합한다.
  2. ADX 조건 필터를 추가하여 트렌드 흔들림 동안의 가짜 돌파구로 인한 손실을 줄일 수 있습니다.
  3. 전략은 단순하고 이해하기 쉽고 최적화 가능합니다.
  4. 자동으로 설정된 스톱 로즈 스톱, 인적 개입 없이, 알고리즘 거래에 적합하다.

위험 분석

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

  1. 부린밴드 파라미터를 잘못 설정하면 신호가 너무 자주 발생하여 거래 비용이 증가할 수 있다.
  2. 부적절한 ADX 설정은 일부 유효한 신호를 필터링할 수도 있다.
  3. 단독 손실이 커질 수 있기 때문에 막 손해가 너무 커질 수 있습니다.

이러한 위험을 줄이기 위해, 우리는 브린 대역을 조정하여 브린 대역 범위를 축소할 수 있습니다. ADX 주기 변수를 조정하여 과도한 오버라이드 신호를 방지하고, 단독 손실을 제어하기 위해 스톱 레이스를 적절히 축소합니다. 물론, 이러한 최적화는 재검토 검증이 필요하며, 과도한 적합성을 방지합니다.

최적화 방향

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

  1. 다른 시장의 데이터를 테스트하여 최적의 변수 조합을 찾을 수 있습니다.
  2. 거래량, 이동 평균 등과 같은 다른 지표와 결합하여 신호를 더욱 필터링 할 수 있습니다.
  3. 기계학습을 이용해서 자동으로 최적화할 수 있다.
  4. 동적 중지 및 중지 손실을 고려할 수 있습니다.

요약하다

이 전략은 전체적으로 간단하고 실용적인 돌파구 필터링 전략이다. 브린 띠를 통해 트렌드를 판단하고, ADX 필터링 신호를 통해, 흔들리는 시장의 잡음을 어느 정도 회피하고, 트렌드 기회를 잡을 수 있다. 최적화 공간이 넓고, 추가 테스트 및 개선에 가치가 있다.

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

//@version=4
strategy("Hizbullah XAUUSD Sniper", overlay=true)

Price = close

Length = input(33)
Mult = input(2)
Basis = sma(Price, Length)
StdDev = Mult * stdev(Price, Length)
Upper = Basis + StdDev
Lower = Basis - StdDev

ADX_Length = input(4)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
SmoothedTrueRange = sma(TrueRange, ADX_Length)
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
SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length)
SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100
SmoothedADX1 = ema(DX, input(8))
SmoothedADX2 = ema(DX, input(15))

Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2

Take_Profit = input(800)
Stop_Loss = input(400)

strategy.entry("ShortEntry", true, when = Condition1)
strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)