이동 평균 크로스오버 거래 전략

저자:차오장, 날짜: 2024-01-24 14:59:44
태그:

img

전반적인 설명

이동 평균 크로스오버 거래 전략은 비교적 일반적인 양적 거래 전략이다. 이 전략은 서로 다른 기간의 이동 평균을 계산하여 그들의 교차 상황에 따라 거래 신호를 생성한다. 구체적으로, 4 기간, 8 기간 및 20 기간의 기하급수적인 이동 평균 (EMA) 을 계산한다. 단기 EMA가 장기 EMA를 넘을 때, 길게 가; 단기 EMA가 장기 EMA를 넘을 때, 짧게 가.

전략 논리

이 전략의 핵심 논리는 다음과 같습니다.

  1. EMA 라인을 계산합니다. 4개 기간, 8개 기간 및 20개 기간
  2. 4주기 EMA 라인과 8주기 EMA 라인의 관계를 판단합니다.
    1. 4주기 EMA 라인이 8주기 EMA 라인의 위를 넘을 때, 그것은 가격 추세가 강화되고 있음을 의미합니다. 이는 상승 신호입니다.
    2. 4주기 EMA가 8주기 EMA 아래로 넘어가면, 가격 추세가 약화되고 있다는 것을 의미합니다. 이는 하락 신호입니다.
  3. 동시에, 20주기 EMA 라인의 방향을 판단:
    1. 20주기 EMA 라인이 올라간다면,
    2. 20주기 EMA 라인이 하락하면 단축을 입력합니다.
  4. 4주기 EMA 라인과 8주기 EMA 라인 사이의 관계가 역전되면, 출출을 준비합니다.
  5. 20주기 EMA 라인의 방향이 뒤집어지면, 이제 빠져나오세요.

이 방법을 통해 우리는 시장 신호를 판단하기 위해 다른 기간 이동 평균 사이의 교차점을 활용하고 가장 긴 기간 이동 평균의 방향을 사용하여 잘못된 신호를 필터하여 안정적인 거래 전략을 구축합니다.

전략 의 장점

이 전략의 주요 장점은 다음과 같습니다.

  1. 전략 논리는 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다.
  2. 이중 상태 필터링은 잘못된 신호를 줄일 수 있습니다.
  3. 20주기 EMA의 촉진은 주요 동향을 파악하고 안정성을 향상시킬 수 있습니다.
  4. 거래 빈도를 조정할 수 있는 매개 변수
  5. 복잡한 전략을 만들기 위해 다른 지표나 모델과 쉽게 결합할 수 있습니다.

전략 의 위험

이 전략에는 몇 가지 위험도 있습니다.

  1. 이중 이동 평균 전략은 잘못된 신호를 생성하는 경향이 있습니다.
  2. 고정 기간은 시장 변화에 적응할 수 없습니다.
  3. 시장 변동 시 손해를 보는 것은 쉽다.

주요 해결책은 다음과 같습니다.

  1. 적당하게 보유 기간을 단축하고 적시에 손실을 중지합니다.
  2. 동적으로 매개 변수를 최적화하고 이동 평균 기간을 조정합니다.
  3. 다른 지표나 모델과 결합하여 복잡한 전략을 만들 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 기간 최적화: 다양한 품종에 따라 최적의 MA 기간 조합을 결정합니다.

  2. 스톱 손실 최적화: 단일 손실을 제어하기 위해 합리적으로 스톱 손실 지점을 설정하십시오.

  3. 매개 변수 최적화: 유전 알고리즘, 마르코프 체인 등을 사용하여 매개 변수를 동적으로 최적화합니다.

  4. 모델 융합: 더 많은 알파를 추출하기 위해 LSTM, RNN 및 다른 딥 러닝 모델과 통합합니다.

  5. 포트폴리오 최적화: 다른 기술 지표 전략과 결합하여 전략 포트폴리오를 구성합니다.

요약

일반적으로, 이동 평균 크로스오버 전략은 비교적 고전적이고 일반적으로 사용되는 양적 거래 전략이다. 이 전략은 간단한 논리를 가지고 있으며, 특정 안정성을 가지고 이해하기 쉽고 구현할 수 있습니다. 그러나 잘못된 신호를 생성하는 것, 시장 변화에 적응할 수 없는 것 등과 같은 몇 가지 문제도 있습니다. 이러한 문제는 매개 변수 최적화, 스톱 로스 최적화, 모델 융합 및 기타 방법을 통해 개선 될 수 있습니다. 전반적으로, 이동 평균 전략은 강력한 복잡한 전략을 구축하기 위해 더 복잡한 전략과 결합하여 전략 도구 상의 기본 모듈로 사용될 수 있습니다.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub",   overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)


testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() => true

ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)

go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]

go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]

 
if testPeriod()
    strategy.entry("simpleBuy", strategy.long, when=go_long)
    strategy.exit("simpleBuy", "simpleSell",when=exit_long)
    
    strategy.entry("simpleSell", strategy.short,when=go_short)
    strategy.exit("simpleSell", "simpleSell",when=exit_short)
        
    


더 많은