더블 이동 평균 ADX 타이밍 전략


생성 날짜: 2023-12-06 15:48:29 마지막으로 수정됨: 2023-12-06 15:48:29
복사: 0 클릭수: 783
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

더블 이동 평균 ADX 타이밍 전략

개요

양평선 ADX 선택시 전략은 2/20평선과 ADXR 지표를 결합하여 트렌드를 식별하여 트렌드 초기 단계에서 거래 신호를 생성한다. 이 전략은 먼저 220 지수 이동 평균을 사용하여 가격 트렌드 방향을 판단하고 ADXR 지표와 결합하여 트렌드 신호를 추가로 확인하여 더 신뢰할 수있는 거래 신호를 생성한다.

전략 원칙

쌍평선 ADX 선택시 전략의 핵심 논리는 다음과 같은 부분들에 기초한다:

  1. 220 지수 이동 평균 (EMA)

    • 2일과 20일 두 개의 다른 파라미터를 사용하는 EMA。
    • 2일 EMA를 넘어서면 시세 신호로 간주한다.
    • 20일 EMA를 넘으면 하향 신호로 간주한다.
  2. ADXR 지표

    • ADXR 지표는 ADX 지표의 변형이다.
    • ADX의 간단한 평균을 계산하여 ADX 지표의 변동성을 줄인다.
    • ADXR이 특정 하위값보다 낮으면 추세가 약하다는 것을 나타냅니다.
    • ADXR이 특정 하위값보다 높으면 트렌드가 강하다는 것을 나타냅니다.
  3. 거래 신호

    • 2일 EMA 골든 크로스 AND ADXR이 하락값보다 높을 때 부진 신호가 발생한다.
    • 20일 EMA 데드 크로스 AND ADXR이 하락값보다 낮을 때 하락 신호가 발생한다.
    • ADXR 지표와 결합하여 일부 허위 추측을 필터링하고 실제 트렌드 신호를 강화할 수 있습니다.

이 전략의 주요 혁신은 ADXR 지표를 사용하여 초기 단계의 트렌드를 식별하고 전통적인 일률 전략의 신호와 결합하여 신호 품질을 향상시키고 전략의 안정성을 강화하는 것입니다.

전략적 이점

쌍평선 ADX 선택시 전략은 다음과 같은 주요 장점을 가지고 있다:

  1. 쌍평선과 ADXR 지표가 결합되어 신호는 더욱 정확하고 신뢰할 수 있으며, 가짜 신호를 필터링할 수 있다.
  2. ADXR 지표를 사용하여 트렌드를 식별하는 초기 단계로, 더 일찍 트렌드를 확인 할 수 있습니다.
  3. ADXR 파라미터는 시장에 따라 조정할 수 있는 유연한 설정으로, 실황의 변화에 적응할 수 있다.
  4. 전략 논리는 간단하고 명확하며 이해하기 쉽고, 변수를 조정하는 것이 편리하다.
  5. 다양한 시장 환경에서 사용할 수 있으며, 히스토리 테스트에서 더 좋은 성능을 보여준다.

전략적 위험

이중 평행 ADX 선택 전략에는 다음과 같은 주요 위험도 있습니다.

  1. ADXR 파라미터를 잘못 설정하면 거래 기회를 놓칠 수 있습니다.

    • ADXR의 파라미터 범위를 적절히 확장하거나, 다른 품종에 따라 파라미터를 조정할 수 있다.
  2. 특수한 상황에서는 더 많은 가짜 신호가 발생할 수 있습니다.

    • 다른 지표 조합과 함께 사용할 수 있습니다.
  3. EMA의 매개 변수는 고정되어 있고 시장의 변화에 적응할 수 없습니다.

    • EMA 파라미터를 적용한 최적화된 버전을 사용할 수 있다.
  4. 가격 변동 영역을 식별할 수 없는 경우, 너무 많은 무효 거래가 발생할 수 있습니다.

    • 추가적인 논리 판단이나 지표로 지진 상황을 인식할 수 있다.

전략 최적화 방향

쌍평선 ADX 선택시 전략은 다음과 같은 몇 가지 측면에서 더욱 최적화될 수 있다:

  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)