동력 평균 방향 움직임 지표 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2024-02-29 11:50:49
태그:

img

전반적인 설명

모멘텀 평균 방향 움직임 지표 이동 평균 크로스오버 전략은 트레이더에게 향상된 기술적 정확성을 제공하기 위해 두 가지 강력한 기술 지표인 이동 평균 (MA) 및 평균 방향 지표 (ADX) 를 결합합니다. 동적 시장 분석을 위해 설계된 이 전략은 명확한 거래 신호를 제공합니다.

전략 논리

이 전략은 가격 동력을 추적하고 트렌드 신호를 생성하기 위해 가격 변동을 부드럽게하기 위해 가중 이동 평균 (WMA) 을 계산합니다. 동시에 트렌드의 존재와 강도를 결정하기 위해 평균 방향 지표 (ADX) 및 긍정적 / 부정적 방향 움직임 지표 (+/- DI) 를 계산합니다. ADX가 지정된 매개 변수 이상의 경우 트렌드가 존재한다고 간주됩니다. 긍정적 방향 움직임 지표가 부정적인 방향 움직임 지표보다 높으면 상승 신호입니다.

이 전략은 MA와 ADX 지표의 교차를 거래 결정의 기초로 사용합니다. ADX가 임계치 이상이고 DIdiff (DI+ - DI-) 이 0보다 크면, 긴 지점에 진출합니다. ADX가 임계치 이상이고 DIdiff이 0보다 작을 때, 지점에서 빠져 나갑니다.

이점 분석

이동 평균과 ADX 지수의 장점을 결합하여 이 전략은 트렌드의 존재와 방향을 효과적으로 파악하고 잘못된 신호를 줄일 수 있습니다. 단일 지표와 비교하면이 결합된 지표는 더 신뢰할 수있는 거래 신호를 제공할 수 있습니다.

또한 이 전략은 매개 변수 계산에 기반한 완전히 양적 전략이며, 좋은 백테스팅 결과와 안정적인 라이브 성능으로 알고리즘 거래에 적합합니다.

위험 분석

이 전략은 상당한 시장 변동 중에 거래 위험에 노출되어 있습니다. 가격이 격렬하게 움직이고 지표가 반응하지 않을 때 계정에 손실을 가져올 수 있습니다. 또한 부적절한 매개 변수 설정은 전략 성능에도 영향을 줄 수 있습니다.

손실은 중지 손실을 통해 제어 할 수 있습니다. 동시에 매개 변수를 최적화하고 잘못된 신호를 줄이기 위해 필터링을위한 다른 지표와 결합 할 수 있습니다.

최적화 방향

이 전략의 다음 측면은 최적화 될 수 있습니다.

  1. 신호 품질을 향상시키기 위해 볼린거 밴드, RSI 등 필터링을 위한 다른 지표와 결합

  2. 최적의 매개 변수 조합을 찾기 위해 이동 평균과 ADX의 길이 매개 변수를 최적화

  3. 단일 손실을 제어하기 위해 스톱 손실 메커니즘을 추가

  4. 최적의 유지 주기를 찾기 위해 다른 유지 기간을 테스트합니다.

결론

모멘텀 평균 방향 움직임 지표 모멘텀 평균 크로스오버 전략은 가격 모멘텀과 트렌드 강도를 계산함으로써 시장 트렌드 방향을 효과적으로 식별 할 수 있습니다. 신뢰할 수있는 트렌드 추적 전략입니다. 이 전략은 높은 알고리즘 수준, 안정적인 백테스팅 및 좋은 라이브 성능을 가지고 있습니다. 추가 최적화는 더 나은 전략 효율성을 초래할 수 있습니다.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche

//@version=5
strategy("MA ADX Strategy", overlay=true, default_qty_type=strategy.percent_of_equity)

start_date = input(timestamp("1975-01-01T00:00:00"), title="Start Date")
end_date = input(timestamp("2099-01-01T00:00:00"), title="End Date")

// Indicator Inputs
group1 = "MA Parameters"
lengthMA = input.int(50, title="MA Length", minval=1, group=group1)
sourceMA = input(close, title="MA Source", group=group1)

group2 = "ADX Parameters"
diLength = input.int(14, title="DI Length", minval=1, group=group2)
adxSmoothing = input.int(14, title="ADX Smoothing", minval=1, maxval=50, group=group2)
adxMAActive = input.int(15, title="ADX MA Active", minval=1, group=group2)

// Directional Movement calculations
upwardMovement = ta.change(high)
downwardMovement = -ta.change(low)
trueRangeSmoothed = ta.rma(ta.atr(diLength), diLength)
positiveDM = fixnan(100 * ta.rma(upwardMovement > downwardMovement and upwardMovement > 0 ? upwardMovement : 0, diLength) / trueRangeSmoothed)
negativeDM = fixnan(100 * ta.rma(downwardMovement > upwardMovement and downwardMovement > 0 ? downwardMovement : 0, diLength) / trueRangeSmoothed)
dmSum = positiveDM + negativeDM 

// Average Directional Index (ADX) calculation
averageDX = 100 * ta.rma(math.abs(positiveDM - negativeDM) / math.max(dmSum, 1), adxSmoothing)

// Line color determination
lineColor = averageDX > adxMAActive and positiveDM > negativeDM ? color.teal : averageDX > adxMAActive and positiveDM < negativeDM ? color.red : color.gray

// Moving Average (MA) calculation
maResult = ta.wma(sourceMA, lengthMA)

// Plotting the Moving Average with color
plot(maResult, color=lineColor, title="MA", linewidth=3)

// Strategy logic
if (averageDX > adxMAActive and positiveDM > negativeDM)
    strategy.entry("Buy", strategy.long)

if (averageDX > adxMAActive and positiveDM < negativeDM)
    strategy.close("Buy")


더 많은