리소스 로딩... 로딩...

다중 EMA 동적 트렌드 포착 양적 거래 전략

저자:차오장, 날짜: 2024-12-27 14:59:35
태그:EMASMAMACDMARSI

img

전반적인 설명

이 전략은 다수의 기하급수적 이동 평균 (EMA) 크로스오버를 기반으로 한 양적 거래 시스템이다. 9일, 21일, 200일 EMA를 사용하여 완전한 트렌드 다음 거래 프레임워크를 구축한다. 이 전략은 시장 트렌드를 식별하고 빠른 EMA와 느린 EMA 사이의 크로스오버와 장기 EMA에 대한 지위를 분석하여 거래를 실행한다.

전략 원칙

핵심 논리는 시장 트렌드를 파악하기 위해 삼중 EMA 크로스오버를 중심으로 이루어집니다.

  1. 9일 EMA를 단기 가격 움직임을 반영하는 빠른 라인으로 사용합니다.
  2. 단기 소음을 필터링하기 위해 21일 EMA를 중장기 라인으로 사용합니다.
  3. 주요 트렌드 방향을 결정하기 위해 200일 EMA를 장기선으로 사용합니다. 이 시스템은 빠른 EMA가 느린 EMA를 넘을 때 긴 신호를 생성하고, 두 가지 모두 200일 EMA를 넘을 때 빠른 EMA가 느린 EMA를 넘을 때 짧은 신호를 생성합니다. 이 디자인은 트렌드 역전 지점을 포착하면서 다양한 시장에서 빈번한 거래를 피합니다.

전략적 장점

  1. 높은 트렌드 확인: 여러 EMA 조합은 더 정확한 트렌드 확인을 제공합니다.
  2. 강력한 리스크 제어: 장기 EMA는 잘못된 파업 위험을 줄이기 위한 트렌드 필터 역할을 합니다.
  3. 명확한 운영 규칙: 입국 및 출국 조건이 명확하고 실행이 쉽고 백테스트가 가능합니다.
  4. 높은 적응력: 다른 시장 특성에 따라 매개 변수를 조정할 수 있습니다.
  5. 간단한 계산: 일반적인 기술 지표를 사용, 실시간 거래에 효율적인

전략 위험

  1. 지연 위험: EMA 지표는 지연된 지연을 가지고 있으며, 지연된 입출을 유발할 수 있습니다.
  2. 연장 위험: 다양한 시장에서 빈번한 잘못된 신호를 생성할 수 있습니다.
  3. 트렌드 역전 위험: 급격한 트렌드 역전 시 상당한 마감률을 경험할 수 있습니다.
  4. 매개 변수 민감도: 다른 매개 변수 조합으로 인해 성능이 달라질 수 있습니다. 이러한 위험을 스톱 로스 투입과 포지션 사이즈링을 통해 관리하는 것이 좋습니다.

최적화 방향

  1. 부피 지표를 포함: 부피 변화로 트렌드 강도를 확인
  2. 변동성 필터 추가: 높은 변동성 환경에서 거래 주파수를 조정
  3. 매개 변수 선택 최적화: 다른 시장 주기에 대한 EMA 매개 변수를 동적으로 조정
  4. 트렌드 강도 지표를 포함: 트렌드 신뢰성을 평가하기 위해 ADX를 사용
  5. 리스크 관리 강화: 더 유연한 스톱 로스 및 영업 취득 규칙을 설계

요약

이 전략은 명확한 논리를 가진 잘 설계된 트렌드 추적 전략이다. 여러 EMA의 조화를 통해 좋은 리스크 통제를 유지하면서 시장 트렌드를 효과적으로 포착한다. 전략은 상당한 최적화 잠재력을 가지고 있으며 지속적인 개선으로 안정성과 수익성이 더욱 향상될 수 있다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("EMA Cross with both MinhTuan", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Tham số EMA
fastLength = input.int(9, title="Fast EMA Length", minval=1)
slowLength = input.int(21, title="Slow EMA Length", minval=1)
filterLength = input.int(200, title="EMA Filter Length", minval=1)

// Tùy chọn chế độ giao dịch
tradeMode = input.string("Both", options=["Long", "Short", "Both"], title="Trade Mode")

// Tính toán EMA
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
filterEMA = ta.ema(close, filterLength)

// Điều kiện vào lệnh Long: EMA nhanh cắt lên EMA chậm và cả hai nằm trên EMA 200
longCondition = ta.crossover(fastEMA, slowEMA) and fastEMA > filterEMA and slowEMA > filterEMA

// Điều kiện vào lệnh Short: EMA nhanh cắt xuống EMA chậm và cả hai nằm dưới EMA 200
shortCondition = ta.crossunder(fastEMA, slowEMA) and fastEMA < filterEMA and slowEMA < filterEMA

// Điều kiện thoát lệnh: EMA nhanh cắt ngược lại EMA chậm
closeLongCondition = ta.crossunder(fastEMA, slowEMA) // Thoát lệnh Long
closeShortCondition = ta.crossover(fastEMA, slowEMA) // Thoát lệnh Short

// Thực hiện lệnh Long
if (longCondition and (tradeMode == "Long" or tradeMode == "Both"))
    strategy.entry("EMA_Cross_Long", strategy.long)
    label.new(x=bar_index, y=low, text="Long", color=color.green, textcolor=color.white, size=size.small)

// Thực hiện lệnh Short
if (shortCondition and (tradeMode == "Short" or tradeMode == "Both"))
    strategy.entry("EMA_Cross_Short", strategy.short)
    label.new(x=bar_index, y=high, text="Short", color=color.red, textcolor=color.white, size=size.small)

// Thoát lệnh Long
if (closeLongCondition)
    strategy.close("EMA_Cross_Long")
    label.new(x=bar_index, y=high, text="Close Long", color=color.orange, textcolor=color.white, size=size.small)

// Thoát lệnh Short
if (closeShortCondition)
    strategy.close("EMA_Cross_Short")
    label.new(x=bar_index, y=low, text="Close Short", color=color.blue, textcolor=color.white, size=size.small)

// Vẽ đường EMA nhanh, EMA chậm, và EMA 200
plot(fastEMA, title="Fast EMA", color=color.blue, linewidth=2)
plot(slowEMA, title="Slow EMA", color=color.orange, linewidth=2)
plot(filterEMA, title="Filter EMA (200)", color=color.red, linewidth=2)

// Hiển thị nền khi đang giữ lệnh
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : strategy.position_size < 0 ? color.new(color.red, 90) : na)


관련

더 많은