
이 전략은 범위 필터 (Range Filter) 와 평균 실제 파도 (Average True Rate, ATR) 를 결합한 낮은 회수량 거래 시스템이다. 그것은 범위 필터를 통해 트렌드 방향을 인식하고, 동시에 ATR을 사용하여 포지션 크기를 동적으로 조정하고, 후속 손실을 설정하여 위험을 효과적으로 제어한다. 이 전략은 가격이 연속적으로 두 번의 사이즈 필터 상에서 트렌드를 확인하기 전에 트렌드를 확인하도록 요구한다. 이 쌍방 확인 메커니즘은 가짜 브레이크를 효과적으로 감소시킨다.
이 전략의 핵심 원칙은 범주 필터 인식 트렌드와 ATR 위험 관리 시스템을 결합하는 것입니다.
범위 필터 계산:
트렌드 확인 조건:
ATR 동적 위치:
ATR 후속 손실:
적응력:
리스크 관리가 훌륭하다:
신호 품질:
낮은 회수 특성:
투명하고 맞춤형:
상자 시장의 부진:
급격한 반전 위험:
매개변수 민감도:
연속적인 손실 위험:
슬라이드 포인트 및 수수료 영향:
시장 환경 필터를 추가합니다.:
범위를 최적화 필터 사이클:
다중 시간 프레임 확인:
동적으로 ATR 배수를 조정:
시간 기반의 탈퇴 메커니즘을 추가:
이중 확정 범위 필터 전략은 ATR 동적 위치와 후속 손실 시스템을 결합하여 위험 제어에 중점을 둔 양적 거래 전략입니다. 범위 필터를 통해 트렌드 방향을 식별하고, 신호를 확인하기 위해 연속적으로 두 번의 브레이크를 요구하며, ATR을 사용하여 포지션 크기를 동적으로 조정하고 후속 손실을 설정하여 각 거래의 위험을 미리 설정된 비율 내에서 효과적으로 제어합니다. 이 전략의 주요 장점은 강력한 적응력과 뛰어난 위험 제어 능력에 있습니다. 특히 변동성이 큰하지만 명백한 추세가있는 시장에 적합합니다.
/*backtest
start: 2025-02-01 00:00:00
end: 2025-05-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Range Filter + ATR Strategy (Low Drawdown)", overlay=true,
pyramiding=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, commission_type=strategy.commission.percent,
commission_value=0.1, initial_capital=10000)
// Input parameters
rangePeriod = input.int(14, title="Range Filter Period")
atrPeriod = input.int(14, title="ATR Period")
riskPercent = input.float(1.0, title="Risk % per Trade", minval=0.1, maxval=5)
useATRSizing = input(true, title="Use ATR Position Sizing")
trailATR = input(1.5, title="Trailing Stop ATR Multiple")
// Calculate Range Filter
src = close
smooth = ta.sma(src, rangePeriod)
filter = ta.sma(math.abs(src - smooth), rangePeriod)
upper = smooth + filter
lower = smooth - filter
// Calculate ATR
atr = ta.atr(atrPeriod)
// Trend direction
upTrend = src > upper and src[1] > upper[1]
downTrend = src < lower and src[1] < lower[1]
// Position sizing based on ATR
atrPositionSize = (strategy.equity * riskPercent/100) / (atr * syminfo.pointvalue)
// Strategy logic
if (upTrend)
strategy.entry("Long", strategy.long, qty=useATRSizing ? atrPositionSize : na)
if (downTrend)
strategy.entry("Short", strategy.short, qty=useATRSizing ? atrPositionSize : na)
// Corrected trailing stop using trail_offset instead of trail_points
if (strategy.position_size > 0)
strategy.exit("Long Exit", "Long", trail_price=na, trail_offset=trailATR * atr)
if (strategy.position_size < 0)
strategy.exit("Short Exit", "Short", trail_price=na, trail_offset=trailATR * atr)
// Plotting
plot(upper, color=color.green, title="Upper Range")
plot(lower, color=color.red, title="Lower Range")
plot(smooth, color=color.blue, title="Smooth Line")