모멘텀 지표 교차 동적 손절매 전략


생성 날짜: 2024-02-29 13:55:16 마지막으로 수정됨: 2024-02-29 13:55:16
복사: 0 클릭수: 671
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 지표 교차 동적 손절매 전략

개요

이 전략은 이동 평균 지표와 동향 지표를 결합하여 양 지표의 교차 신호를 구현하여 구매 및 판매 신호를 발송합니다. 또한, 전략은 위험을 제어하기 위해 동적 추적 스톱을 추가합니다.

전략 원칙

  1. 단기 9일 EMA와 장기 21일 EMA를 사용하여 이동 평균 지표를 구성한다. 단기 EMA 위에 장기 EMA를 밟았을 때 구매 신호를 생성한다. 단기 EMA 아래 장기 EMA를 밟았을 때 판매 신호를 생성한다.
  2. ADX, +DI 및 -DI를 사용하여 DMI 지표를 구축한다. +DI 위에 DI를 끼면 구매 신호; -DI 위에 +DI를 끼면 판매 신호이다.
  3. EMA 지표와 DMI 지표의 신호를 결합하여, 두 지표가 조건을 충족할 때만 실제 구매/판매 신호를 발산한다.
  4. 동적 스톱로드를 사용하여 최고/최저 가격을 추적하여 스톱로드를 설정합니다.

우위 분석

  1. 이중 지표는 가짜 신호를 필터링하여 신호 정확도를 향상시킵니다. 단기 지표는 트렌드 변화를 포착합니다. 장기 지표는 큰 트렌드 방향을 결정합니다.
  2. 동력 지표는 가격의 흐름을 미리 파악할 수 있고, 특정 리딩 특성을 가지고 있다.
  3. 동적 중지 메커니즘은 수익을 최대한 고정시키고 위험을 통제합니다.

위험 분석

  1. 이 두 지표가 결합되면 구매와 판매 신호가 줄어들며, 일부 기회를 놓칠 수 있다.
  2. 지표 파라미터를 잘못 설정하면 거래 빈도가 너무 높거나 신호 품질이 좋지 않을 수 있습니다.
  3. 너무 느슨하게 설정하면 손실 위험이 증가하고, 너무 엄격하게 설정하면 추세에 부합하지 않는 위험이 증가합니다.

최적화 방향

  1. 다양한 길이의 EMA 긴 단기 변수 조합을 테스트하여 최적의 변수를 찾습니다.
  2. 다양한 ADX 파라미터 선택을 테스트하여 DMI 신호 품질을 향상시킵니다.
  3. 스톱로스 파라미터를 최적화하여 수익을 최대화하고 위험을 통제할 수 있게 한다.
  4. 더 많은 파 지표를 추가하여 신호 품질을 향상시킬 수 있습니다.

요약하다

이 전략은 이동 평균과 동력 지표의 장점을 통합하고, 이중 확인 신호를 사용하여 지표 간의 상호 보완을 사용하여 전략 수익성을 향상시킵니다. 동시에, 동적 추적 중지 메커니즘은 전략의 위험을 효과적으로 제어 할 수 있습니다. 매개 변수 최적화 및 규칙 개선을 통해 이 전략의 수익성 및 안정성이 향상 될 것으로 기대됩니다.

전략 소스 코드
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)