모멘텀 지표 롱 앤 숏 전략


생성 날짜: 2023-11-02 16:34:48 마지막으로 수정됨: 2023-11-02 16:34:48
복사: 0 클릭수: 644
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 지표 롱 앤 숏 전략

개요

이 전략은 평균 가이더 ((ADX), 진행 지표 ((DMI) 와 상품 경로 지표 ((CCI) 와 같은 동력 지표를 사용하여 트렌드 방향을 판단하고 트렌드 추적을 한다. ADX와 트렌드 지표가 트렌드가 형성되는 것을 확인 할 때, CCI 오버오프 시점에 포지션을 구축한다.

전략 원칙

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

    • ADX는 트렌드 강도를 판단하는 데 사용되며, ADX가 설정된 마이너스보다 높을 때, 트렌드가 충분히 강하다고 여겨진다.
    • DMI는 DI+와 DI-, 각각 상승 추세와 하락 추세의 강도를 나타냅니다. DI+가 DI-,보다 높을 때 상승 추세에 있다고 생각하며, 반대로 하락 추세입니다.
    • CCI는 과매매를 판단하는 데 사용됩니다. CCI가 100보다 낮으면 과매매, 100보다 높으면 과매매입니다.
  2. 트렌드 방향에 대한 판단

    • DI+가 DI-를 덮으면 상승세를 나타냅니다.
    • 디-이 디+를 통과하면 하향 추세로 판단된다.
    • 상승 추세가 형성될 때, ADX가 하위값보다 높고, CCI가 100보다 낮으면 더 많은 입장을 한다.
    • 하향 추세가 형성될 때, ADX가 하위값보다 높고, CCI가 100보다 높을 때, 코스닥 상장.
  3. 출전 손해

    • 더 많은 것을 할 때, DI- 아래 DI+를 착용 할 때 재고 청산하십시오.
    • 공백할 때, DI+에 DI-를 입었을 때 청산한다.

전략적 강점 분석

  1. ADX를 사용하여 트렌드를 판단하고, 트렌드가 보이지 않을 때 거래하는 것을 피하십시오.

  2. DMI를 사용하여 트렌드 방향을 결정하여 잘못된 판단의 가능성을 줄입니다.

  3. CCI 오버오프 시 입장은 트렌드 전환점을 적시에 포착하여 입점 위험을 줄일 수 있다.

  4. 동력 지표의 조합을 사용하면 판단의 정확도를 높일 수 있다.

  5. 단 하나의 손실을 제한할 수 있는 손해 방지 장치가 있습니다.

위험과 보호

  1. ADX가 하락할 때, 여러 번 불안 거래로 인해 손실이 발생할 수 있다. ADX 입시 하락값을 적절히 높여서, 트렌드가 충분히 분명하도록 할 수 있다.

  2. DMI 지표가 뒤쳐져 있고, 트렌드 초기 기회를 놓칠 수 있다. 진입 시기를 결정하기 위해 다른 지표 또는 그래픽 기술 분석과 함께 사용할 수 있다.

  3. CCI는 빈번한 거래를 유발할 수 있다. CCI 경계가 적절히 완화되어 일부 잡음이 필터링될 수 있다.

  4. 포지션을 보유하면서 포지션을 많이 하락시키는 경우 주식 시장 중립 전략을 채택하고, 종합 포지션 위험을 줄이기 위해 시점 보호 규칙을 수립하는 것을 고려할 수 있습니다.

전략 최적화 방향

  1. ADX 변수를 최적화하여 filtering noise와 catching trend in time 사이의 최적의 균형을 찾습니다.

  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))))