더블 EMA 크로스오버를 기반으로 한 양적 거래 전략


생성 날짜: 2023-11-21 11:41:40 마지막으로 수정됨: 2023-11-21 11:41:40
복사: 0 클릭수: 620
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

더블 EMA 크로스오버를 기반으로 한 양적 거래 전략

개요

이 전략은 두 개의 다른 기간의 EMA 평균선의 교차점을 계산하여 시장의 경향을 판단하고 그에 따라 거래 신호를 생성한다. 단기 EMA에서 긴 기간 EMA를 통과하면 시장이 상승 추세에 들어갔다고 생각하면 이 전략은 더 많은 포지션을 열고; 단기 EMA에서 긴 기간 EMA를 통과하면 시장이 하향 추세에 들어갔다고 생각하면 이 전략은 평정 포지션을 탈퇴한다.

전략 원칙

이 전략은 주로 이중 EMA 평균선의 황금 사각 이론을 적용한다. 이중 EMA 평균선은 긴 EMA와 짧은 EMA로 나다. 짧은 EMA 파라미터는 10일, 긴 EMA 파라미터는 21일로 설정된다.

짧은 EMA 상에서 긴 EMA를 통과하면 구매 신호가 발생하고, 짧은 EMA 아래에서 긴 EMA를 통과하면 판매 신호가 발생한다. 이 전략은 동시에 성장률 경계를 설정하고, 성장률이 경계를 초과할 때만 더 많은 포지션을 열고, 하락이 경계를 초과할 때만 매각한다.

구체적으로, 구매 조건은 짧은 라인 EMA가 긴 라인 EMA보다 높으며, 주식 가격 성장률이 설정된 긍정적 인 인치보다 높습니다.

전략적 이점

  • 이중 EMA 평선형의 골드포크 사다리 이론을 이용한 비교적 간단한 신뢰성
  • 성장률을 높여서 성장률이 낮을 때 잘못된 거래를 방지하기 위한 값 설정
  • 최대 손실 비율을 엄격하게 제어할 수 있습니다.
  • 유연하게 조정 가능한 EMA 평균선 변수, 다른 주기에 적용

위험 분석

  • EMA 평균이 지연되어 가격 전환점을 놓칠 수 있습니다.
  • 평행선 교차는 지연성이 있어 최적의 개시 시기를 잃게 할 수 있다.
  • 변수 최적화에 의존해야 하며, 변수 설정이 잘못되면 거래 빈도 또는 신호 부족이 발생할 수 있습니다.

최적화 방향

  • 다른 지표와 결합하여 최적화, MACD, KD 등과 같은 신호 정확도를 향상
  • 이윤을 극대화하기 위해 손실을 추적하는 것과 같은 손실을 막는 전략을 추가하십시오.
  • EMA 주기 변수를 최적화하여 다양한 품종에 최적의 변수를 설정합니다.
  • 실시간 데이터와 기계 학습 방법을 결합하여 동적 변수 조정 최적화

요약하다

이 전략은 전체적으로 간단하고 신뢰할 수 있으며, 쌍 EMA 교차를 통해 가격 추세를 판단하고 성장률 하락값을 설정하여 거래 신호를 발산한다. 단일 평균선 교차와 비교하여 일부 가짜 신호를 필터링 할 수 있다. 그러나 EMA 평균선 자체는 지연성이 문제가 있으며, 다른 지표 또는 동적 변수와 결합하면 전략 효과를 더욱 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)