ADX 필터와 함께 모멘텀 브레이크업 전략

저자:차오장, 날짜: 2024-01-04 17:12:30
태그:

img

전반적인 설명

이 전략은 ADX 지표를 사용하여 브레이크아웃 신호를 필터링하는 단기 거래 전략입니다. 가격이 상부 볼링거 밴드 이상으로 떨어지고 ADX가 떨어지면 짧고 가격이 하부 볼링거 밴드 이하로 떨어지고 ADX가 상승할 때 길게됩니다. 이 전략은 또한 완전히 자동화 된 거래를 위해 자동으로 스톱 로스를 설정하고 이익을 취합니다.

전략 논리

이 전략의 핵심은 브레이크아웃 신호를 위해 볼링거 밴드를 사용하는 것입니다. 볼링거 밴드의 상단과 하단 밴드는 가격의 두 가지 표준 편차를 나타냅니다. 따라서 브레이크아웃은 일반적으로 가격이 강한 추세로 진입한다는 것을 의미합니다. 또한 ADX 지표는 가짜 브레이크아웃을 피하기 위해 필터로 소개됩니다. 짧은 신호는 ADX가 떨어질 때만 고려되며 긴 신호는 ADX가 상승할 때만 고려됩니다. 이것은 범위 제한 기간 동안 일부 위프사우를 필터링하는 데 도움이됩니다.

특히, 이 전략은 33 기간의 폐쇄 가격을 사용하여 볼링거 밴드를 계산합니다. 중간 밴드는 33 기간의 간단한 이동 평균이며, 상부/하부 밴드는 중간 밴드 위의/하위의 두 표준 편차에 배치됩니다. 이 전략은 가격이 상부 밴드 아래에 닫히고 8 기간 ADX가 15 기간 ADX 아래에있을 때 짧은 신호를 제공합니다. 가격이 하부 밴드 위에 닫히고 8 기간 ADX가 15 기간 ADX 위에있을 때 긴 신호를 제공합니다. 출구는 800 지점 이익과 400 지점 스톱 손실로 설정됩니다.

이점 분석

트렌드 및 모멘텀 필터를 통합하는 브레이크아웃 전략으로서 여러 장점이 있습니다.

  1. 브레이크오웃을 감지하기 위해 볼링거 밴드를 사용하는 것은 대부분의 트레이더들의 습관과 일치합니다.
  2. 추가 ADX 필터는 윙사에서 손실을 방지하는 데 도움이됩니다.
  3. 논리는 간단하고 이해하기 쉽고 최적화 할 수 있습니다.
  4. 자동화된 스톱 로스 및 취득이 알고리즘 거래를 용이하게 합니다.

위험 분석

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

  1. 부적절한 BB 매개 변수는 초 빈번한 신호를 생성하고 비용을 증가시킬 수 있습니다.
  2. 잘못된 ADX 매개 변수는 유효한 신호를 필터링할 수 있습니다.
  3. 스톱 로스 거리는 너무 넓어 큰 손실로 이어질 수 있습니다.

이러한 위험을 완화하기 위해 BB 매개 변수를 얇게 조정하여 대역을 좁히고 ADX 기간을 조정하여 과잉 필터링을 피하고 단일 거래 손실을 제어하기 위해 스톱 손실을 줄일 수 있습니다. 물론 이러한 최적화는 과잉 적합성을 방지하기 위해 앞으로 테스트해야합니다.

최적화 방향

더 많은 최적화를 할 수 있습니다.

  1. 최적의 매개 변수 집합을 찾기 위해 다른 시장 데이터를 테스트합니다.
  2. 신호 필터링을 위해 볼륨과 이동 평균과 같은 다른 지표를 포함합니다.
  3. 매개 변수를 자동으로 최적화하기 위해 기계 학습 방법을 활용합니다.
  4. 동적 스톱 로스를 고려하고 이윤을 취하십시오.

결론

결론적으로, 이것은 필터와 함께 간단하고 실용적인 브레이크아웃 전략이다. BB와 트렌드를 식별하고 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)


더 많은