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

저자:차오장, 날짜: 2024-02-22 16:25:13
태그:

img

전반적인 설명

이동 평균 크로스오버 MACD 거래 전략은 단기 및 장기 지수 이동 평균 (EMA) 의 크로스오버 상황을 추적하고 황금 십자 및 죽은 십자 발생 시 구매 및 판매 작업을 수행하는 양적 거래 전략입니다. 이 전략은 거래 신호 판단을 위해 MACD 지표를 결합합니다.

전략 논리

이 전략은 주로 12일 EMA, 26일 EMA 및 MACD 지표에 의존합니다. 구체적인 논리는 다음과 같습니다.

  1. 12일 EMA와 26일 EMA를 계산합니다.
  2. MACD를 계산합니다 (즉, 12일 EMA 빼기 26일 EMA).
  3. MACD의 9일 EMA를 신호선으로 계산합니다.
  4. MACD가 신호선을 넘으면 구매 신호가 생성됩니다.
  5. MACD가 신호선 아래로 떨어지면 판매 신호가 생성됩니다.
  6. 신호가 생성된 후 두 번째 촛불을 닫을 때 해당 구매 또는 판매 작업을 수행합니다.

또한 이 전략은 몇 가지 필터링 조건을 설정합니다.

  1. 거래 시간은 매 거래일의 종료시기가 아닌 시간입니다.
  2. MACD와 신호 라인의 절대적 값은 0.08보다 커야 합니다.
  3. 한 번에 위치 방향만 허용됩니다.

이점 분석

이 전략은 이동 평균 크로스오버와 MACD 지표를 결합하여 시장 단기 및 중장기 트렌드의 전환점을 효과적으로 포착 할 수 있습니다. 주요 장점은 다음과 같습니다.

  1. 전략 규칙은 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다.
  2. 지표 매개 변수는 비교적 안정적인 성능을 위해 최적화되었습니다.
  3. 중장기 및 단기 트렌드를 추적하고 적절한 스톱 로스 출구를 고려합니다.
  4. 거래 논리는 유효하지 않은 거래를 피하기 위해 엄격합니다.

위험 분석

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

  1. 백테스팅 데이터 과도한 적합성 위험. 실제 응용은 매개 변수 및 임계 조정이 필요할 수 있습니다.
  2. 빈번한 거래로 인한 높은 미끄러진 비용 위험.
  3. 트렌드가 역전될 때 적시에 탈퇴하지 못하는 손실 위험
  4. 양적 거래 자체에 내재된 리버리지 리스크 증폭

대응하는 완화 방법:

  1. 동적으로 매개 변수를 최적화하고 임계치를 조정합니다.
  2. 불필요한 거래를 줄이기 위해 거래 규칙을 적절히 완화하십시오.
  3. 반전 신호를 판단하기 위해 더 많은 지표를 조합합니다.
  4. 위치와 레버리지를 엄격히 통제하세요.

최적화 방향

이 전략을 최적화하는 주요 측면은 다음과 같습니다.

  1. 최적의 매개 변수를 찾기 위해 더 긴 사이클 이동 평균 조합을 테스트합니다.
  2. 금융 성과, 중요한 사건 등과 같은 기본 요소를 필터로 추가합니다.
  3. 볼링거 밴드, KDJ 등과 같은 트렌드 역전 시기를 결정하기 위해 더 많은 지표를 포함합니다.
  4. 스톱 로스 메커니즘을 개발합니다. 손실이 미리 설정된 스톱 로스 포인트에 도달했을 때 손실을 적극적으로 절감합니다.
  5. 최대 유출을 제어하기 위해 유출 비율을 추가합니다.

요약

이동 평균 크로스오버 MACD 거래 전략은 간단한 트렌드 추적을 통해 거래 신호를 생성하고 적절한 필터링 조건으로 위험을 효과적으로 제어합니다. 효과적인 양적 거래 전략입니다. 전략은 매개 변수 최적화, 스톱 로스 메커니즘 추가, 더 많은 보조 지표 등을 통합하는 방식으로 개선 될 수 있습니다.


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

//@version=5
strategy("EMMA", max_bars_back = 200)

var up1 = #26A69A
var up2 = #B2DFDB
var down1 = #FF5252
var down2 = #FFCDD2
var confirmationLength = 2

var earliest = timestamp("20 Jan 2024 00:00 +0000")

// Regn u
shortEMA = ta.ema(close, 12)
longEMA = ta.ema(close, 26)
macd = shortEMA - longEMA
signal = ta.ema(macd, 9)
delta = macd - signal
absDelta = math.abs(delta)
previousDelta = delta[1]

signalCrossover = ta.crossover(macd, signal)
signalCrossunder = ta.crossunder(macd, signal)

harskiftetdag = hour(time[confirmationLength]) > hour(time)

enterLongSignal = signalCrossover[confirmationLength] and (macd > signal) and (absDelta >= 0.08)
exitLongSignal = signalCrossunder[confirmationLength] and (macd < signal)

enterShortSignal = signalCrossunder[confirmationLength] and (macd < signal) and (absDelta >= 0.08)
exitShortSignal = signalCrossover[confirmationLength] and (macd > signal)

// Så er det tid til at købe noe
qty = math.floor(strategy.equity / close)

if time >= earliest and not harskiftetdag
    if exitLongSignal 
        strategy.close("long")
    else if enterLongSignal
        strategy.close("short")
        strategy.entry("long", strategy.long, qty = qty)

    if exitShortSignal
        strategy.close("short")
    else if enterShortSignal
        strategy.close("long")
        strategy.entry("short", strategy.short, qty = qty)

// Så er det tid til at vise noe

plot(macd, color=color.blue)
plot(signal, color=color.orange)

// bgcolor(color = delta > 0.1 ? color.new(color.green, 90) : color.new(color.green, 100))
// bgcolor(color = signalCrossover ? color.purple : signalCrossunder ? color.aqua : color.new(color.green, 100))

histogramColor = delta > 0 ? (previousDelta < delta ? up1 : up2) : (previousDelta > delta ? down1 : down2)

plot(
     delta,
     style=plot.style_columns,
     color=histogramColor
     )

더 많은