두 개의 이동 평균 크로스오버와 다중 시간 프레임 DMI 지표에 기초한 트렌드 다음 전략

저자:차오장, 날짜: 2024-03-22 14:23:30
태그:

img

전략 개요

이 문서에서는 키리 크로스오버 @zaytrade라는 양적 거래 전략을 소개합니다. 이 전략은 트레이딩 결정을 위해 시장 트렌드를 포착하기 위해 이중 이동 평균 크로스오버와 멀티 타임프레임 DMI 지표를 결합합니다. 전략의 핵심은 단기 이동 평균 (10 기간 EMA) 및 장기 이동 평균 (323 기간 EMA) 의 크로스오버 신호를 활용하는 동시에 5 분, 15 분, 30 분 및 1 시간과 같은 여러 시간 프레임에서 DMI 지표를 사용하여 트렌드 방향과 강도를 확인하는 것입니다.

전략 원칙

이 전략의 원칙은 다음과 같은 부분으로 나눌 수 있습니다.

  1. 이중 이동 평균 크로스오버:이 전략은 시장 트렌드를 파악하기 위해 단기 EMA (10 기간) 와 장기 EMA (323 기간) 를 사용합니다. 단기 EMA가 장기 EMA를 넘으면 잠재적인 긴 기회를 나타냅니다. 단기 EMA가 장기 EMA를 넘으면 잠재적인 짧은 기회를 나타냅니다. 이 이동 평균 크로스오버 방법은 시장 전환점과 트렌드 방향을 효과적으로 식별 할 수 있습니다.

  2. 멀티 타임프레임 DMI 표시기:트렌드 방향과 강도를 확인하기 위해 전략은 여러 시간 프레임에 걸쳐 DMI 지표를 사용합니다. DMI 지표는 ADX (평균 방향 지표), +DI (긍정 방향 지표) 및 -DI (부정 방향 지표) 로 구성됩니다. +DI 및 -DI의 상대적 강도를 비교함으로써 현재 트렌드가 상승 또는 하락 여부를 결정할 수 있습니다. 전략은 더 포괄적인 트렌드 정보를 얻기 위해 5 분, 15 분, 30 분 및 1 시간 프레임에서 DMI 지표를 계산합니다.

  3. 트렌드 확인:이 전략은 이동 평균 크로스오버 신호와 멀티 타임프레임 DMI 지표를 종합적으로 고려함으로써 트렌드를 확인합니다. 이동 평균 크로스오버 신호가 DMI 지표가 표시하는 트렌드 방향과 일치하면 전략은 대응하는 거래 신호를 생성합니다. 예를 들어, 단기 EMA가 장기 EMA를 넘어서고 DMI 지표의 여러 시간 프레임이 상승 추세를 보이는 경우 전략은 긴 신호를 생성합니다.

  4. 위험 관리:이 전략은 위험 비율에 기반한 포지션 크기를 사용하는 방법이다. 사용자는 각 거래의 위험 노출을riskPercentageEMA또한, 전략은 잠재적인 손실을 제한하기 위해 스톱 로스 명령을 사용합니다.

전략적 장점

  1. 트렌드 캡처:이중 이동 평균 크로스오버 및 다중 시간 프레임 DMI 지표를 결합함으로써 전략은 시장의 주요 추세를 효과적으로 파악 할 수 있습니다.이 접근법은 거래자가 시장의 전반적인 방향에 맞춰서 성공적인 거래의 확률을 높이는 데 도움이됩니다.

  2. 다중 기간 확인:이 전략은 5분, 15분, 30분 및 1시간을 포함한 여러 시간 프레임에서 DMI 지표를 계산합니다. 이 여러 시간 프레임 분석 접근법은 더 포괄적이고 신뢰할 수있는 트렌드 확인 신호를 제공하여 잘못된 신호의 발생을 줄입니다.

  3. 유연한 파라미터 설정:이 전략은 단기 EMA 기간, 장기 EMA 기간, ADX 평형 기간 및 DI 길이와 같은 다양한 조정 가능한 매개 변수를 제공합니다. 사용자는 더 나은 거래 성능을 달성하기 위해 거래 스타일 및 시장 특성에 따라 이러한 매개 변수를 최적화 할 수 있습니다.

  4. 위험 관리:이 전략은 위험 비율에 기반한 포지션 크기의 방법을 포함하고 있으며, 사용자는riskPercentageEMA또한 전략은 잠재적인 손실을 제한하기 위해 스톱 로스 명령을 사용하여 위험 관리 효과를 향상시킵니다.

전략 위험

  1. 매개 변수 최적화전략의 성능은 크게 매개 변수 선택에 달려 있습니다. 잘못된 매개 변수 설정은 최적의 전략 성능 이하 또는 심지어 상당한 마감으로 이어질 수 있습니다. 따라서 실제 응용에서는 현재 시장 조건에 적합한 최적의 매개 변수 조합을 찾기 위해 매개 변수를 최적화하고 테스트해야합니다.

  2. 트렌드 지연전략은 유동 평균 크로스오버와 DMI 지표에 의존하여 트렌드를 확인하기 때문에 빠르게 변화하는 시장 조건에서 신호 생성에 약간의 지연이 발생할 수 있습니다. 이것은 전략이 초기 트렌드 기회를 놓칠 수 있거나 이미 트렌드가 역전된 후에 신호를 생성 할 수 있음을 의미합니다.

  3. 피 마켓:불안정한 시장에서 가격 변동은 이동 평균 교차와 DMI 지표의 변화를 자주 초래할 수 있습니다. 이것은 전략이 더 많은 거래 신호를 생성하고 거래 비용과 마감 위험을 증가시키는 결과를 초래할 수 있습니다. 따라서 불안정한 시장 조건에서 전략의 성능이 영향을받을 수 있습니다.

  4. 블랙 스완 이벤트:이 전략은 역사적 데이터와 통계 모델에 기반합니다. 블랙 스완 이벤트와 같은 극단적인 시장 이벤트의 경우 전략이 적시에 올바르게 반응하지 못할 수 있습니다. 이것은 이러한 특별한 상황에서 전략에 상당한 손실을 초래할 수 있습니다.

최적화 방향

  1. 동적 매개 변수 조정:시장 변동성과 트렌드 강도에 따라 전략 매개 변수를 적응적으로 조정하는 동적 매개 변수 조정 메커니즘을 도입하는 것을 고려하십시오. 이것은 다른 시장 환경에 더 잘 적응하고 안정성을 향상시키는 데 도움이 될 수 있습니다.

  2. 여러 가지 요인 확인:이동 평균 크로스오버 및 DMI 지표 외에도 다른 기술적 지표 또는 근본적인 요인이 트렌드를 추가로 확인하기 위해 도입 될 수 있습니다. 예를 들어 볼륨, 변동성, 시장 정서 및 기타 지표를 결합하면 더 신뢰할 수있는 거래 신호를 제공할 수 있습니다.

  3. 스톱 로스 및 취득 최적화:트레일링 스톱 또는 동적 스톱 손실 방법을 사용하는 것과 같은 스톱 로스 및 트레이프 리프트 레벨의 배치 최적화. 이는 잠재적인 손실을 제한하면서 수익을 더 잘 보호하는 전략에 도움이 될 수 있습니다.

  4. 위치 크기:켈리 기준이나 고정 분자 투자와 같은 더 고급한 위치 크기 방법을 도입하십시오. 이것은 전략이 다른 시장 환경에서 위치를 동적으로 조정하고 자본 활용 효율성과 위험 통제 기능을 향상시키는 데 도움이 될 수 있습니다.

  5. 기계 학습 최적화:전략과 기계 학습 알고리즘을 결합하려고 시도하십시오. 학습 및 역사 데이터의 패턴 인식을 통해 전략의 매개 변수 선택 및 신호 생성 최적화하십시오. 이것은 전략이 시장 변화에 자동적으로 적응하여 적응력과 견고성을 향상시키는 데 도움이 될 수 있습니다.

결론

이 문서에서는 이중 이동 평균 크로스오버 및 멀티 타임프레임 DMI 지표에 기반한 양적 거래 전략을 소개했다. 전략은 잠재적 인 손실을 제어하기 위해 위험 관리 조치를 취하면서 시장 추세를 포착하여 거래 결정을 내린다. 전략의 장점은 시장의 주요 추세를 효과적으로 식별하고 멀티 타임프레임 확인을 통해 신호 신뢰성을 향상시키는 능력에 있다. 그러나 전략에는 매개 변수 최적화, 트렌드 지연, 불변 시장 및 블랙 스완 이벤트와 같은 특정 위험이 있습니다. 전략을 더 이상 최적화하기 위해 동적 매개 변수 조정, 멀티 팩터 확인, 스톱-로스 및 취리 최적화, 포지션 사이징 및 기계 학습과 같은 방법을 고려할 수 있습니다. 전반적으로이 전략은 양적 거래자에게 트렌드 추종 접근 방식을 제공합니다. 최적화 및 개선으로 실질적인 거래에서 좋은 성과를 달성 할 수있는 합리적인 잠재력을 가지고 있습니다.


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

//@version=5
strategy("Kyrie Crossover @zaytrade ", overlay=true, calc_on_every_tick=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 = ta.crossover(emaShort, emaLong)
shortConditionEMA = ta.crossunder(emaShort, emaLong)

// Input parameters for DMI
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, 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 ? up : 0), len) / truerange)
    minus = fixnan(100 * ta.rma((down > up ? 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]

// Function to get trend and strength for a given timeframe
getTrendAndStrength(_source, _dilen, _adxlen) =>
    [adxValue, up, down] = adx(_dilen, _adxlen)
    var string trendIndication = ""
    var string trendStrength = ""
    if (up > down) or ((up > down) and (up > down) and (up > adxValue)) // Bullish condition
        trendIndication := "Bullish"
        trendStrength := "Strengthening" 
    else if (down > up) or ((down > up) and (down > up) and (down > adxValue)) // Bearish condition
        trendIndication := "Bearish"
        trendStrength := "Weakening" 
    else
        trendIndication := "No Clear Trend"
        trendStrength := "Sideways"
    [trendIndication, trendStrength]

// Get trend and strength for selected timeframes
[tf1_trend, tf1_strength] = request.security(syminfo.tickerid, "5", getTrendAndStrength(close, dilen, adxlen))
[tf2_trend, tf2_strength] = request.security(syminfo.tickerid, "15", getTrendAndStrength(close, dilen, adxlen))
[tf3_trend, tf3_strength] = request.security(syminfo.tickerid, "30", getTrendAndStrength(close, dilen, adxlen))
[tf4_trend, tf4_strength] = request.security(syminfo.tickerid, "60", getTrendAndStrength(close, dilen, adxlen))
[current_trend, _] = getTrendAndStrength(close, dilen, adxlen)

// Define colors based on trend indication
tf1_color = tf1_trend == "Bullish" ? color.green : (tf1_trend == "Bearish" ? color.red : color.white)
tf2_color = tf2_trend == "Bullish" ? color.green : (tf2_trend == "Bearish" ? color.red : color.white)
tf3_color = tf3_trend == "Bullish" ? color.green : (tf3_trend == "Bearish" ? color.red : color.white)
tf4_color = tf4_trend == "Bullish" ? color.green : (tf4_trend == "Bearish" ? color.red : color.white)
current_color = current_trend == "Bullish" ? color.green : (current_trend == "Bearish" ? color.red : color.white)

// Create and fill the enhanced table for DMI
var table dmiTable = na
if (barstate.islast)
    dmiTable := table.new(position.top_right, 6, 1)
    table.cell(dmiTable, 0, 0, "DMI Metrics", bgcolor=color.new(color.black, 90), width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 1, 0, "5m Trend: " + tf1_trend, bgcolor=tf1_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 2, 0, "15m Trend: " + tf2_trend, bgcolor=tf2_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 3, 0, "30m Trend: " + tf3_trend, bgcolor=tf3_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 4, 0, "1h Trend: " + tf4_trend, bgcolor=tf4_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 5, 0, "Current Trend: " + current_trend, bgcolor=current_color, width=15, height=4, text_color=color.white)

// Strategy logic
if (longConditionEMA)
    strategy.entry("Long", strategy.long)
if (shortConditionEMA)
    strategy.entry("Short", strategy.short)


더 많은