이중 이동 평균 ADX 타이밍 전략

저자:차오장, 날짜: 2023-12-06 15:48:29
태그:

img

전반적인 설명

이중 이동 평균 ADX 타이밍 전략은 2/20 이동 평균과 ADXR 지표를 결합하여 트렌드의 시작에서 거래 신호를 생성하여 트렌드를 식별합니다. 먼저 2/20 지수 이동 평균을 사용하여 가격 트렌드 방향을 결정하고 ADXR 지표와 결합하여 트렌드 신호를 확인하여 더 신뢰할 수있는 거래 신호를 생성합니다.

전략 논리

이중 이동 평균 ADX 타이밍 전략의 핵심 논리는 다음과 같은 주요 구성 요소에 기반합니다.

  1. 2/20 기하급수적 이동 평균 (EMA)

    • 2일과 20일의 다른 매개 변수를 가진 2개의 EMA를 사용합니다.
    • 2일 EMA를 넘어가는 가격의 상승 경계는 상승 신호로 간주됩니다.
    • 20일 EMA 이하의 하락 경로는 하락 신호로 간주됩니다.
  2. ADXR 표시기

    • ADXR는 ADX 지표의 변형입니다.
    • ADX의 간단한 이동 평균을 계산해서 변동을 평정시킵니다.
    • ADXR가 임계치 이하인 것은 추세가 약해지는 것을 의미한다.
    • ADXR가 임계치 이상인 경우 더 강한 추세를 나타냅니다.
  3. 거래 신호

    • 2일 EMA Golden Cross AND ADXR가 임계치보다 높을 때 상승 신호가 생성됩니다.
    • 하향 신호는 20일 EMA Dead Cross AND ADXR가 임계치보다 낮을 때 생성됩니다.
    • ADXR과 결합하면 가짜 브레이크를 필터링하고 실제 트렌드 신호를 강화합니다.

이 전략의 주요 혁신은 ADXR 지표를 사용하여 초기 단계에서 경향을 파악하고, 품질과 안정성을 향상시키기 위해 전통적인 이동 평균 신호와 결합하는 것입니다.

장점

이중 이동 평균 ADX 타이밍 전략의 주요 장점:

  1. 이중 MAs와 ADXR을 결합하면 신호가 더 정확하고 신뢰할 수 있으며 거짓 신호가 필터링됩니다.
  2. ADXR를 이용하여 초기 트렌드를 식별하는 것
  3. 유연한 ADXR 매개 변수를 조정하여 변화하는 시장 조건에 적응합니다.
  4. 단순하고 명확한 논리, 이해하기 쉽고, 매개 변수를 조정하기 편리합니다.
  5. 다양한 시장 환경에서 적용 가능하며 좋은 역사 성과가 있습니다.

위험성

이 전략에는 몇 가지 주요 위험이 있습니다.

  1. ADXR 매개 변수를 잘못 설정하면 거래가 빠질 수 있습니다.

    • ADXR 매개 변수 범위를 확장하거나 제품별로 조정합니다.
  2. 특별한 시장 조건에서 더 많은 잘못된 신호가 발생할 수 있습니다.

    • 추가 신호 필터링을 위해 다른 지표와 결합하는 것을 고려하십시오.
  3. 고정된 EMA 매개 변수는 시장 변화에 적응하지 못합니다.

    • 적응 EMA 매개 변수와 함께 테스트 최적화 버전.
  4. 거래 범위를 파악할 수 없는 경우, 지나치게 비중이 없는 거래가 발생할 수 있습니다.

    • 시장의 범위를 탐지하기 위해 추가 논리나 지표를 추가합니다.

개선 방향

이 전략은 다음과 같은 측면에서 더 이상 최적화되고 향상될 수 있습니다.

  1. 시장 조건에 자동 적응을 위해 EMA 파라미터 최적화

  2. 더 효과적인 거래 신호를 캡처하기 위해 ADXR 매개 변수 범위를 확장하십시오.

  3. 품질을 향상시키기 위해 조합 신호에 대한 추가 트렌드 판단 지표를 추가합니다.

  4. 스톱 로스 전략을 추가하고 수익 기준을 취하여 거래 리스크를 제어합니다.

  5. 계좌 상태에 따라 역동적인 포지션 크기를 위해 자금 관리를 최적화합니다.

결론

이중 이동 평균 ADX 타이밍 전략은 전통적인 이중 이동 평균과 ADXR 지표를 혁신적으로 결합하여 신호 품질을 향상시키고 안정성을 향상시킵니다. 이 전략은 괜찮은 역사적 성능을 가진 트렌드의 초기 단계를 효과적으로 식별 할 수 있습니다. 이 전략은 더 복잡한 시장에서 견고하고 수익성있게 만들기 위해 최적화 할 수있는 충분한 공간이 있습니다.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 04/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// The Average Directional Movement Index Rating (ADXR) measures the strength 
// of the Average Directional Movement Index (ADX). It's calculated by taking 
// the average of the current ADX and the ADX from one time period before 
// (time periods can vary, but the most typical period used is 14 days).
// Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening 
// and weakening trends. However, because it represents an average of ADX, values 
// don't fluctuate as dramatically and some analysts believe the indicator helps 
// better display trends in volatile markets.
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos

fADX(Len) =>
    up = ta.change(high)
    down = -ta.change(low)
    trur = ta.rma(ta.tr, Len)
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

ADXR(LengthADX,LengthADXR,Signal1,Signal2) =>
    pos = 0.0
    xADX = fADX(LengthADX)
    xADXR = (xADX + xADX[LengthADXR]) / 2
    pos := xADXR < Signal1 ? 1 : xADXR > Signal2 ? -1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & ADXR', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ ADXR  ═════●'
LengthADX = input(title="Length ADX", defval=14)
LengthADXR = input(title="Length ADXR", defval=14)
Signal1 = input.float(13, step=0.01)
Signal2 = input.float(45, step=0.01)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosADXR = ADXR(LengthADX,LengthADXR,Signal1,Signal2)
iff_1 = posEMA20 == -1 and prePosADXR == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosADXR == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

더 많은