MACD+EMA Mehrzeitrahmen-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-03-22 11:13:12
Tags:

img

Übersicht

Diese Strategie kombiniert den MACD-Indikator und mehrere EMA-Linien, um starke Markttrends aus zwei Zeitrahmen - wöchentlich und intraday - zu erfassen. Sie verwendet den MACD-Indikator auf dem wöchentlichen Chart, um die allgemeine Trendrichtung zu bestimmen, und drei EMA-Linien (5-Tage-, 15-Tage-, 30-Tage-Linien) auf dem Intraday-Chart, um den Trend zu bestätigen und Trades an Ausbruchpunkten zu tätigen. Die Hauptidee besteht darin, starken Trends zu folgen und die großen Wellen zu reiten, Trades einzugeben, wenn die kurzfristige EMA über die langfristige EMA bricht, und zu beenden, wenn die EMAs zurückziehen oder Stop-Loss-Bedingungen ausgelöst werden.

Strategieprinzip

  1. Wöchentlicher MACD bestimmt den Gesamttrend: Berechnen Sie den wöchentlichen MACD-Indikator und vergleichen Sie die Differenz zwischen den MACD-Histogrammwerten der aktuellen und der vorherigen Wochen. Ein positiver Unterschied zeigt einen Aufwärtstrend an, während ein negativer Unterschied einen Abwärtstrend anzeigt. Aktualisieren Sie die Trendrichtung jeden Montag bei Marktöffnung.

  2. Mehrere EMA-Linien bestätigen den Trend: Zeichnen Sie die 5-Tage-, 15-Tage- und 30-Tage-EMA-Linien auf dem Intraday-Chart ab. Wenn die kurzfristige EMA über und weg von der langfristigen EMA läuft, ist der Trend nach oben; umgekehrt ist der Trend nach unten.

  3. Handel an EMA-Übergangsstellen:

    • Long-Entry: Wenn der wöchentliche MACD-Trend nach oben steigt und der Intraday-Schluss über die 15-tägige EMA geht, gehen Sie lang. Setzen Sie den Stop-Loss an einem festen Punkt unterhalb des Einstiegspreises oder verlassen Sie, wenn die 5-tägige EMA unterhalb der 15-tägigen EMA kreuzt.
    • Kurzer Einstieg: Wenn der wöchentliche MACD-Trend rückläufig ist und die 5-tägige EMA unter die 30-tägige EMA geht, gehen Sie kurz. Setzen Sie den Stop-Loss an einem festen Punkt über dem Einstiegspreis oder verlassen Sie, wenn die 5-tägige EMA über die 15-tägige EMA geht.
  4. Zusätzliche Positionen: Für den Augenblick sind keine zusätzlichen Eintrittsbedingungen festgelegt.

Analyse der Vorteile

  1. Durch die Kombination von zwei Zeitrahmen wird die Trendbestimmung zuverlässiger. Der wöchentliche MACD vermeidet, dass er in Bereichsgebundenen Märkten steckt, während die Intraday EMA-Crossovers jede Welle innerhalb des Trends erfassen.

  2. Die Wahl der 5/15/30-Tage-EMAs auf dem Intraday-Chart filtert effektiv Lärm und erfasst klare Trends.

  3. Die Stop-Loss-Einstellungen sind vernünftig und kontrollieren das Risiko bei einzelnen Trades.

  4. Das modulare Code-Design mit Schlüsselkomponenten wie MACD- und EMA-Berechnungen ist sehr wiederverwendbar und erweiterbar.

Risikoanalyse

  1. Eine unsachgemäße Auswahl des MACD-Histogrammdifferenzschwellenwerts kann zu zu lockeren oder strengen Trendkriterien führen, was zu Fehleinschätzungen führt.

  2. Eine falsche Auswahl der Intraday-EMA-Parameter - zu kurz kann zu einem Überhandel führen, während zu lange Chancen verpassen kann.

  3. Unzulässige feste Stop-Loss-Punkte - eine zu enge Einstellung kann zu häufigen Stop-Outs führen, während zu breite zu übermäßigen Verlusten pro Handel führen können.

  4. Die EMAs können bei Trendwendepunkten zurückbleiben und möglicherweise die besten Einstiegs-/Ausgangspunkte verpassen.

Optimierungsrichtlinien

  1. Überlegen Sie, zusätzlich zum wöchentlichen MACD andere Indikatoren wie den RSI hinzuzufügen, um die Trendstärke zu bestätigen und die Genauigkeit zu verbessern.

  2. Es sollte in Erwägung gezogen werden, weitere Indikatoren wie CCI als zusätzliche Filter für die Crossover-Signale der Intraday EMA hinzuzufügen, um die Handelshäufigkeit und das Risiko zu reduzieren.

  3. Setzen Sie maßgeschneiderte Stop-Loss-Punkte, die auf der historischen Volatilität jeder Aktie basieren, um ihren Eigenschaften besser gerecht zu werden.

  4. Es sollte in Erwägung gezogen werden, Strategievorschriften für die Skalierung von Positionen hinzuzufügen - schrittweise stärkere Trends hinzuzufügen und schwächere Trends zu reduzieren, um die Kapitaleffizienz zu verbessern.

Zusammenfassung

Die MACD+EMA Multi-Timeframe Breakout Strategie ist eine Trend-Folgende Strategie mit einer wissenschaftlichen Grundlage für sowohl Trendbestimmung als auch Bestätigung. Sie kann die wichtigsten Markttrends effektiv erfassen und stabile Renditen erzielen. In der Zwischenzeit ist die Strategie in der Risikokontrolle ziemlich vollständig und begrenzt durch angemessene Stop-Loss- und Exit-Regeln effektiv die Rückzüge. Es gibt jedoch auch einige Mängel, wie verzögerte Trendsignale und Mangel an Skalierungsregeln, die weiter optimiert und verbessert werden können. Insgesamt ist dies eine sehr lohnenswerte quantitative Handelsstrategie zu lernen und zu nutzen.


/*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"}]
*/


// 1) 전주와 전전주의 히스토그램의 차이를 계산하여, 매주 월요일에 매매 방향을 표시하고, 
// 2) 5일, 15일, 30일 선을 호출하여 평행하게 그리고, 매매 방향에 따라 
// 3) 분봉기준의 이동평균선 매매전략  
// 4) 수익 실현은 미설정 해둠 


//@version=5
strategy('Last week MACD+ 15day, 30day break through, by Ho.J', overlay=true, initial_capital=30000, commission_value = 7.5, commission_type=strategy.commission.cash_per_order, slippage = 0)

// 백테스팅 기간 설정
start_time = input(timestamp("Jan 19 2024 00:00:01"), confirm = true)
end_time = input(timestamp("MAR 19 2024 23:59:59"), confirm = true)
is_in_time = true
stopLoss = input.int(100, title="손절 수준")


// 지난주 값 불러오기 입력 매개변수, 1은 5일, 3은 15일, 6은 30일 이동평균선을 구하는 변수임
emaLength1 = input(1, title="EMA Length")
emaLength2 = input(3, title="EMA Length")
emaLength3 = input(6, title="EMA Length")
timeframePeriod = "W" // 'D'는 일간 데이터를 의미


// 분봉기준 EMA 계산
shortEMA = ta.ema(close, 50)
mediumEMA = ta.ema(close, 60)
longEMA = ta.ema(close, 150)


// 분봉기준 EMA 그리기
plot(shortEMA, color=color.blue, title="5일 EMA")
plot(mediumEMA, color=color.orange, title="15일 EMA")
plot(longEMA, color=color.red, title="30일 EMA")



// 주간 MACD 계산, 전주와 전전주 히스토그램을 계산하여 상대적인 상승, 하락을 계산 
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
histogram = macdLine - signalLine
histLastWeek = request.security(syminfo.tickerid, timeframePeriod, histogram[1], lookahead=barmerge.lookahead_on)
histWeekBeforeLast = request.security(syminfo.tickerid, timeframePeriod, histogram[2], lookahead=barmerge.lookahead_on)
histDiff = histLastWeek - histWeekBeforeLast


// 현재 주의 월요일 첫 봉인지 확인
isMondayFirstBar = (dayofweek == dayofweek.monday) and (hour == 09) and (minute == 00) // 여기서 시간은 시장 개장 시간에 따라 조정해야 함


// 월요일 첫봉에, 주간 MACD 히스토그램이 상승하면 '매수', 하락하면 '매도' 표시
var label myLabel = na
if (isMondayFirstBar)
    if (histDiff > 0)
        myLabel := label.new(bar_index, high, "이번주는 매수만", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.large)
    else if (histDiff < 0)
        myLabel := label.new(bar_index, low, "이번주는 매도만", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.large)


// 지난주 EMA 값 요청
// 'lookahead'를 사용하여 지난 데이터를 기준으로 계산
lastWeekEMA1 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength1), lookahead=barmerge.lookahead_on)
lastWeekEMA2 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength2), lookahead=barmerge.lookahead_on)
lastWeekEMA3 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength3), lookahead=barmerge.lookahead_on)

// 지난주 EMA 그리기
plot(lastWeekEMA1, color=color.red, title="Last Week EMA1")
plot(lastWeekEMA2, color=color.rgb(157, 126, 126), title="Last Week EMA2")
plot(lastWeekEMA3, color=color.rgb(199, 192, 192), title="Last Week EMA3")


// 매수/매도 조건
buySignal = ta.crossover(close, lastWeekEMA2) and histDiff > 0
// addbuySignal = ta.crossover(close, lastWeekEMA3) and histDiff > 0

sellSignal = ta.crossunder(shortEMA, longEMA) and histDiff < 0
// addSellSignal = ta.crossunder(close, lastWeekEMA3) and histDiff < 0


// 매수 조건
if (buySignal)
    strategy.entry('Buy', strategy.long)
    alert('Buy Signal', alert.freq_once_per_bar_close)
	
// if (addbuySignal)
   // strategy.entry('Buy', strategy.long)
   // alert('add Buy Signal', alert.freq_once_per_bar_close)

if (strategy.position_size > 0 and ((strategy.position_avg_price - close) >= stopLoss) or ta.crossunder(close, mediumEMA))
    strategy.close('Buy')
    alert('Close Buy Signal', alert.freq_once_per_bar_close)

// 매도 조건
if (sellSignal)
    strategy.entry('Sell', strategy.short)
    alert('Sell Signal', alert.freq_once_per_bar_close)
	
//if (addSellSignal)
   // strategy.entry('Sell', strategy.short)
   // alert('add Sell Signal', alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and ((close - strategy.position_avg_price) >= stopLoss) or ta.crossover(shortEMA, mediumEMA))
    strategy.close('Sell')
    alert('Close Sell Signal', alert.freq_once_per_bar_close)

Mehr