동력 지표 장기 단기 전략

저자:차오장, 날짜: 2023-11-02 16:34:48
태그:

img

전반적인 설명

이 전략은 트렌드 방향을 결정하고 트렌드를 추적하기 위해 평균 방향 지표 (ADX), 방향 움직임 지표 (DMI) 및 상품 채널 지표 (CCI) 를 포함한 모멘텀 지표를 사용합니다. ADX 및 트렌드 지표가 트렌드를 확인하고 CCI가 과도하게 확장되었을 때 지위를 입력합니다.

전략 논리

  1. ADX, DMI 및 CCI 지표를 계산합니다.

    • ADX는 트렌드 강도를 측정합니다. 높은 ADX는 강한 트렌드를 나타냅니다.
    • DMI는 DI+와 DI-를 포함합니다. DI+는 상승 추세 강도를 나타내고 DI-는 하락 추세 강도를 나타냅니다. DI+가 DI-보다 크면 상승 추세이며 그 반대의 경우입니다.
    • CCI는 과잉 구매/ 과잉 판매 수준을 평가합니다. -100 이하는 과잉 판매이고 100 이상은 과잉 구매입니다.
  2. 트렌드 방향을 결정하세요

    • DI+가 DI-를 넘으면 상승 추세가 나타납니다.
    • DI-가 DI+ 아래로 넘어가면 하향 추세가 나타난다.
  3. 위치로 들어가세요

    • 상승 추세가 형성되면 ADX가 높고 CCI가 -100이면 길어집니다.
    • 하락 추세가 나타나면 ADX가 높고 CCI가 100보다 높으면 하락이 됩니다.
  4. 스톱 로스로 출구 위치

    • 길게 되면, DI-가 DI+ 아래로 넘어가면 나가세요.
    • 단축되면 DI+가 DI-를 넘을 때 종료합니다.

이점 분석

  1. ADX는 약한 트렌드에서 거래를 필터링합니다.

  2. DMI는 트렌드 식별에서 실수를 줄입니다.

  3. CCI의 과잉 연장을 통해 타이밍을 개선하고 위험을 줄일 수 있습니다.

  4. 모멘텀 지표를 조합하면 정확도가 높아집니다.

  5. 거래당 손해가 제한되는 경우

리스크 및 헤지

  1. ADX가 하락할 때 Whipsaws. ADX의 기준을 높여 충분히 강한 트렌드를 보장합니다.

  2. DMI는 트렌드 초기 단계에서 뒤떨어집니다. 기회를 식별하기 위해 다른 분석을 추가하십시오.

  3. 높은 CCI 트레이딩 주파수

  4. 전체 포지션 리스크를 헤지하기 위해 장기 및 단기 시장 중립 전략을 고려하십시오.

최적화 방향

  1. ADX 매개 변수를 최적화하여 잡음 필터링과 잡기 트렌드를 균형 잡습니다.

  2. DMI 매개 변수를 최적화해서 지연과 감수성을 균형 잡습니다.

  3. CCI 매개 변수를 최적화하여 거래 빈도와 회귀를 파악합니다.

  4. 더 나은 콤보를 위해 지표를 추가하거나 수정하는 테스트. 예를 들어 MACD, KDJ.

  5. 가장 잘 어울리는 제품을 찾기 위해 다른 제품에 테스트합니다.

  6. 트렌드 추적을 유지하면서 위험을 제어하기 위해 포지션 크기를 최적화하십시오.

결론

이 전략은 논리적으로 트렌드를 위해 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))))


더 많은