ADX, MA 및 EMA 단장 트렌드 추적 전략

저자:차오장, 날짜: 2024-01-29 11:30:15
태그:

img

전반적인 설명

이 전략은 주로 ADX 지표를 사용하여 트렌드를 판단하고, MA와 EMA 이동 평균을 다른 매개 변수 설정과 결합하여 단장 트렌드 추적 전략을 구축합니다. ADX가 상승하면 긴 방향을 나타냅니다. 가격이 상승 MA와 EMA를 넘을 때 긴 포지션을 개척합니다. ADX가 떨어지거나 가격이 MA 또는 EMA 이하로 떨어지면 포지션을 닫습니다.

전략 원칙

이 전략은 주로 ADX를 사용하여 시장 추세와 강도를 판단합니다. ADX는 추세의 존재와 강도를 결정하기 위해 가격 변화의 정도와 방향을 계산합니다. ADX가 상승하면 현재 상승 추세에 있음을 의미합니다. ADX가 떨어지면 추세가 약화되고 있음을 의미합니다.

이 전략은 또한 보조 판단으로 다른 매개 변수 설정을 가진 두 개의 이동 평균, MA와 EMA를 사용합니다. 그들은 가격의 무작위성을 효과적으로 필터링하고 가격의 주요 트렌드 방향을 보여줄 수 있습니다. 가격이 상승하고 MA와 EMA를 통과하면 긴 신호입니다. 가격이 떨어지고 통과하면 폐쇄 신호입니다.

ADX와 이동 평균의 특성을 결합하여 전략은 트렌드 방향을 판단하기 위해 거래 신호를 구축합니다. ADX가 상승하고 가격이 상승 MA와 EMA를 통과 할 때 긴 지점을 가지며 ADX가 떨어지거나 가격이 MA/EMA를 통과 할 때 포지션을 닫습니다. 그것은 단지 긴 트렌드 추적 전략을 구현합니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. ADX를 사용하여 트렌드 강도를 판단하고 유효하지 않은 트레이드를 줄이고 트렌드를 추적합니다.
  2. 서로 다른 매개 변수 설정을 가진 두 이동 평균을 결합하면 트렌드를 효과적으로 식별 할 수 있습니다.
  3. 오직 긴 포지션만이 빈번한 역전과 미끄러짐 손실을 피합니다.
  4. 엄격한 입국 조건은 위험을 효과적으로 통제할 수 있습니다.
  5. 길게만 트렌드를 추적하는 전략을 실행하세요.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. ADX 지표가 지연해서 가장 좋은 입구점을 놓쳤을 수도 있어요
  2. 저하 시장에서 이득을 얻을 수 있는 것은 긴 포지션들뿐입니다.
  3. 트렌드가 변할 때 약간의 손실 위험이 있습니다.
  4. 잘못된 매개 변수 설정도 전략 성능에 영향을 미칩니다.

해결책:

  1. ADX 매개 변수를 조정하여 지연을 합리적으로 줄이십시오.
  2. 한 번의 손실을 제어하기 위해 손실을 멈추도록 설정합니다.
  3. 가장 좋은 것을 선택하기 위해 매개 변수를 테스트하고 최적화합니다.

최적화

전략은 다음 측면에서 최적화 될 수 있습니다:

  1. 스톱 로스 전략을 추가하면 위험을 더 잘 제어할 수 있습니다.
  2. 포지션 관리를 추가하여 시장 조건에 따라 포지션을 동적으로 조정합니다.
  3. 가장 좋은 조합을 찾기 위해 매개 변수를 테스트하고 최적화합니다.
  4. 매개 변수를 동적으로 최적화하기 위해 기계 학습 알고리즘을 추가합니다.
  5. 이윤 비율의 영향을 줄이기 위해 마틴게일 전략을 세워야 합니다.

결론

일반적으로 ADX를 사용하여 트렌드 강도를 판단하고 보조 필터로 두 개의 이동 평균을 사용합니다. 유효하지 않은 거래의 발생을 효과적으로 제어하고 트렌드를 추적하는 효과를 달성합니다. 비교적 안정적인 장기 단위 전략입니다. 일부 최적화로 전략의 안정성과 수익률을 더욱 향상시킬 수 있습니다.


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

//@version=4
strategy("ADX, MA, and EMA Long Strategy - ADX Trending Up", shorttitle="ADX_MA_EMA_Long_UpTrend", overlay=true)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
maPeriod = input(50, title="MA Period")
emaPeriod = input(50, title="EMA Period")
dirmov(len) =>
    up = change(high)
    down = -change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truerange = rma(tr, len)
    plus = fixnan(100 * rma(plusDM, len) / truerange)
    minus = fixnan(100 * rma(minusDM, len) / truerange)
    [plus, minus]
adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
maValue = sma(close, maPeriod)
emaValue = ema(close, emaPeriod)
longCondition = sig > sig[1] and close > maValue and close > emaValue
if (longCondition)
    strategy.entry("Long", strategy.long)
exitCondition = sig < sig[1] or  close < maValue or close < emaValue
if (exitCondition)
    strategy.close("Long")
plot(maValue, color=color.blue, title="MA")
plot(emaValue, color=color.orange, title="EMA")
plot(sig, color=color.red, title="ADX")


더 많은