이동 평균 트렌드 추적 전략

저자:차오장, 날짜: 2024-02-20 14:36:11
태그:

img

전반적인 설명

이 전략은 증권 가격의 트렌드 방향을 결정하기 위해 +DI와 -DI의 교차를 모니터링하고, 트렌드 추적을 달성하기 위해 ADX 지표를 사용하여 트렌드의 강도를 식별함으로써 DMI 지표에 기반을두고 있습니다. +DI가 -DI 이상으로 넘으면 긴 거리로 가십시오. 스톱 로스 가격이 활성화되거나 -DI가 +DI 이하로 넘으면 포지션을 닫습니다.

전략 원칙

이 전략은 DMI 지표의 두 가지 구성 요소를 사용합니다: +DI 및 -DI. +DI는 상승 모멘텀을 측정합니다. -DI보다 +DI의 상승 크로스오버는 상승 모멘텀을 강화하는 것을 나타냅니다. -DI는 하락 모멘텀을 측정합니다. +DI 아래의 -DI의 하락 크로스오버는 하락 모멘텀을 강화하는 것을 나타냅니다.

+DI가 -DI를 넘을 때 상승 추세가 나타나고 전략은 길게 진행됩니다. 포지션에 진입한 후, 후속 선형 스톱 손실은 가장 높은 가격의 특정 비율을 추적합니다. 가격이 후퇴함에 따라 스톱 손실 가격은 이에 따라 감소하여 이전 수익 중 일부를 어느 정도 잠금합니다.

-DI가 +DI 아래를 넘을 때 하락 추세가 발생하고 전략은 포지션을 닫습니다. ADX 지표는 트렌드의 강도를 식별하는 데 사용할 수 있습니다. ADX가 높을수록 트렌드가 더 뚜렷합니다. 따라서 전략은 ADX를 입점 보조 지표로 사용하고 ADX가 특정 범위 내에있을 때만 포지션을 입력합니다.

요약하자면, 이 전략은 유동 평균 트렌드 추적을 실현하기 위해 가격 트렌드의 전환점을 포착합니다.

이점 분석

이 전략의 주요 장점은 세 가지 측면에서 나타납니다.

  1. 가격 트렌드의 방향을 결정하기 위해 DMI 지표를 사용하는 것은 정확하고 신뢰할 수 있습니다. DMI는 단순한 이동 평균 및 다른 지표보다 트렌드 반전을 판단하는 데 더 정확합니다.

  2. ADX 지표를 적용하여 트렌드의 강도를 파악하면 불안정한 시장에서 빈번한 거래를 피하고 전략을 더 견고하게합니다.

  3. 선형 트레이일링 스톱 메커니즘은 스톱 로스 포지션을 동적으로 조정하고 트렌드가 역전될 때 일찍 빠져나올 수 있으며, 부분 수익을 차단하여 위험을 효과적으로 제어 할 수 있습니다.

  4. 전략 규칙은 간단하고 명확하고 이해하기 쉽고 구현하기 쉽고 알고리즘 거래에 적합합니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 특정 특수 시장에서 DMI 지표가 실패할 가능성이 있습니다. DMI는 모든 시장에 적용되지 않습니다. 트렌드가 뚜렷하지 않을 때 잘못된 신호를 생성 할 수 있습니다.

  2. 가격 격차가 더 낮아지기 전에 스톱 로스 수준 아래로 떨어질 위험이 있습니다. 약간의 버퍼 공간을 남겨두면 그러한 위험을 완화 할 수 있습니다.

  3. 부적절한 ADX 매개 변수 설정의 위험. ADX 매개 변수는 전략 타이밍 결과에 직접 영향을 미칩니다. 너무 높거나 낮게 설정하면 성능에 영향을 줄 것입니다.

  4. 선형 트레일링 스톱 방식으로 인해 빠르게 진행되는 상승 추세에서 쉽게 중단됩니다. 트레일링 스톱 매개 변수는 특정 상황에 따라 조정 될 수 있습니다.

위험은 매개 변수 조정, 엄격한 스톱 손실, 프로그램 아키텍처 최적화 등을 통해 추가로 줄일 수 있습니다.

최적화 방향

이 전략은 몇 가지 측면에서 최적화 될 수 있습니다.

  1. MACD, KDJ 같은 다른 지표를 사용해서 전략 안정성을 높일 수 있습니다.

  2. 각종 스톱 로스 방법을 테스트합니다. 곡선 트레일링 스톱, 시간 기반 트레일링 스톱 등.

  3. 트렌드 방향이 확정된 후 점유율을 점차적으로 높이기 위해 포지션 사이징 메커니즘을 추가하여 수익성을 향상시킵니다.

  4. 높은 주파수 요인, 기계 학습 등을 통합하여 더 높은 지능에 대한 DMI 및 ADX 매개 변수를 동적으로 최적화합니다.

  5. 최대 마취를 엄격하게 관리하기 위해 위험 예산 등을 사용하는 프로그램 리스크 제어 모듈을 추가합니다.

전략의 효율성, 안정성 및 안전성을 효과적으로 향상시키기 위해 다양한 방법을 결합 할 수 있습니다.

요약

이 전략의 전반적인 논리는 명확하고 이해하기 쉽으며, 가격 트렌드 방향을 결정하기 위해 DMI 지표와 ADX 지표를 트렌드 강도의 보조 지표로 사용하여 선형적인 후속 중지로 위험을 효과적으로 제어합니다. 전략은 상대적으로 안정적이지만 여전히 특정 위험에 대한 주의를 요구합니다. 지속적인 최적화와 테스트를 통해 전략의 견고성과 효율성을 점진적으로 향상시킬 수 있습니다. 이 전략은 유동 평균 트렌드 추적 전략의 훌륭한 대표가 될 가능성이 있다고 믿어집니다.


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
//1.0 - 240202 @caddjax

strategy(title = "+DI Crossover", overlay=false)

//DMI + ADX Chart w/ overlay
// © jrregencia

lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(6, minval=1, title="DI Length")
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adxmax = input.int(50, title="ADX Max Buying Area", minval=1, maxval=100)
adxmin = input.int(0, title="ADX Min Buying Area", minval=0, maxval=99)



//DI cross alert
DIPcross = ta.crossover(plus, minus) ? plus : na
plotshape(DIPcross, style = shape.cross , color=color.white, location=location.absolute)

plot(adx, color=color.rgb(255, 238, 0, 23), title="ADX", linewidth=2)
p1 = plot(plus, color=color.rgb(16, 137, 0, 31), title="+DI", linewidth=1)
p2 = plot(minus, color=color.rgb(143, 82, 255, 25), title="-DI", linewidth=1)
adxmaxl = hline(adxmax, title="ADX MaxLine", color=color.silver, linestyle=hline.style_solid)
adxminl = hline(adxmin, title="ADX MinLine", color=color.silver, linestyle=hline.style_solid)
fill(p1, p2, title="Cloud Fill", color = plus > minus ? color.teal : color.red, transp=50)
fill(adxmaxl, adxminl, title="ADX Fill", color=color.silver, transp=90)

// Configure trail stop level with input options (optional)
longTrailPerc = input.float(3, title="Trail Long Loss (%)",
     minval=0.0, step=0.1) * 0.01
// Determine trail stop loss prices
longStopPrice = 0.0

// Determine entry condition
enterLong = ta.crossover(plus, minus) ? plus : na

longStopPrice := if strategy.position_size > 0
    stopValue = high[1] * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0
// Submit entry orders
if enterLong
    strategy.entry("EL", strategy.long)    
// Submit exit orders for trail stop loss price
if strategy.position_size > 0
    strategy.exit("XL TRL STP", stop=longStopPrice)    

더 많은