이 전략은 트렌드 방향을 결정하고 트렌드를 추적하기 위해 평균 방향 지표 (ADX), 방향 움직임 지표 (DMI) 및 상품 채널 지표 (CCI) 를 포함한 모멘텀 지표를 사용합니다. ADX 및 트렌드 지표가 트렌드를 확인하고 CCI가 과도하게 확장되었을 때 지위를 입력합니다.
ADX, DMI 및 CCI 지표를 계산합니다.
트렌드 방향을 결정하세요
위치로 들어가세요
스톱 로스로 출구 위치
ADX는 약한 트렌드에서 거래를 필터링합니다.
DMI는 트렌드 식별에서 실수를 줄입니다.
CCI의 과잉 연장을 통해 타이밍을 개선하고 위험을 줄일 수 있습니다.
모멘텀 지표를 조합하면 정확도가 높아집니다.
거래당 손해가 제한되는 경우
ADX가 하락할 때 Whipsaws. ADX의 기준을 높여 충분히 강한 트렌드를 보장합니다.
DMI는 트렌드 초기 단계에서 뒤떨어집니다. 기회를 식별하기 위해 다른 분석을 추가하십시오.
높은 CCI 트레이딩 주파수
전체 포지션 리스크를 헤지하기 위해 장기 및 단기 시장 중립 전략을 고려하십시오.
ADX 매개 변수를 최적화하여 잡음 필터링과 잡기 트렌드를 균형 잡습니다.
DMI 매개 변수를 최적화해서 지연과 감수성을 균형 잡습니다.
CCI 매개 변수를 최적화하여 거래 빈도와 회귀를 파악합니다.
더 나은 콤보를 위해 지표를 추가하거나 수정하는 테스트. 예를 들어 MACD, KDJ.
가장 잘 어울리는 제품을 찾기 위해 다른 제품에 테스트합니다.
트렌드 추적을 유지하면서 위험을 제어하기 위해 포지션 크기를 최적화하십시오.
이 전략은 논리적으로 트렌드를 위해 ADX, 방향을 위해 DMI 및 반전을 위해 CCI를 사용합니다. 그러나 매개 변수는 리스크 통제를 위해 최적화 및 위치 사이징이 필요합니다. 올바르게 조정하고 트렌딩 제품에 적용하면 안정적인 수익을 얻을 수 있습니다. 거래자는 변화하는 시장에 동적으로 조정해야합니다.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true) adxlen = input(9, title="ADX Smoothing") dilen = input(14, title="DI Length") ADX_Entry = input(25, title="ADX Entry") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) cci_length = input(20, minval=1, title="CCI Length") cci_ma = sma(close, cci_length) cci = (close - cci_ma) / (0.015 * dev(close, cci_length)) stop_loss = syminfo.mintick * 100 open_longs = strategy.position_size > 0 open_shorts = strategy.position_size < 0 possible_bull = false possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false possible_bear = false possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false bool bull_entry = crossover(up,down) if(bull_entry and up < ADX_Entry and cci < 0) possible_bull := true bull_entry := false if(possible_bull and up > ADX_Entry and cci > -100) bull_entry := true bool bear_entry = crossover(down,up) if(bear_entry and down < ADX_Entry and cci > 0) possible_bear := true bear_entry := false if(possible_bear and down >= ADX_Entry and cci < 100) bear_entry := true strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry) strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry ) strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))