이 전략은 ADX 지표를 사용하여 브레이크아웃 신호를 필터링하는 단기 거래 전략입니다. 가격이 상부 볼링거 밴드 이상으로 떨어지고 ADX가 떨어지면 짧고 가격이 하부 볼링거 밴드 이하로 떨어지고 ADX가 상승할 때 길게됩니다. 이 전략은 또한 완전히 자동화 된 거래를 위해 자동으로 스톱 로스를 설정하고 이익을 취합니다.
이 전략의 핵심은 브레이크아웃 신호를 위해 볼링거 밴드를 사용하는 것입니다. 볼링거 밴드의 상단과 하단 밴드는 가격의 두 가지 표준 편차를 나타냅니다. 따라서 브레이크아웃은 일반적으로 가격이 강한 추세로 진입한다는 것을 의미합니다. 또한 ADX 지표는 가짜 브레이크아웃을 피하기 위해 필터로 소개됩니다. 짧은 신호는 ADX가 떨어질 때만 고려되며 긴 신호는 ADX가 상승할 때만 고려됩니다. 이것은 범위 제한 기간 동안 일부 위프사우를 필터링하는 데 도움이됩니다.
특히, 이 전략은 33 기간의 폐쇄 가격을 사용하여 볼링거 밴드를 계산합니다. 중간 밴드는 33 기간의 간단한 이동 평균이며, 상부/하부 밴드는 중간 밴드 위의/하위의 두 표준 편차에 배치됩니다. 이 전략은 가격이 상부 밴드 아래에 닫히고 8 기간 ADX가 15 기간 ADX 아래에있을 때 짧은 신호를 제공합니다. 가격이 하부 밴드 위에 닫히고 8 기간 ADX가 15 기간 ADX 위에있을 때 긴 신호를 제공합니다. 출구는 800 지점 이익과 400 지점 스톱 손실로 설정됩니다.
트렌드 및 모멘텀 필터를 통합하는 브레이크아웃 전략으로서 여러 장점이 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
이러한 위험을 완화하기 위해 BB 매개 변수를 얇게 조정하여 대역을 좁히고 ADX 기간을 조정하여 과잉 필터링을 피하고 단일 거래 손실을 제어하기 위해 스톱 손실을 줄일 수 있습니다. 물론 이러한 최적화는 과잉 적합성을 방지하기 위해 앞으로 테스트해야합니다.
더 많은 최적화를 할 수 있습니다.
결론적으로, 이것은 필터와 함께 간단하고 실용적인 브레이크아웃 전략이다. 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)