MACD+EMA Breakout-Strategie mit mehreren Zeitskalen


Erstellungsdatum: 2024-03-22 11:13:12 zuletzt geändert: 2024-03-22 11:13:12
Kopie: 0 Klicks: 685
1
konzentrieren Sie sich auf
1617
Anhänger

MACD+EMA Breakout-Strategie mit mehreren Zeitskalen

Überblick

Die Strategie kombiniert den MACD-Indikator und mehrere EMA-Linien, um starke Trends in den Märkten auf zwei Zeitskalen zu erfassen. Die MACD-Indikator wird auf der Kreislinie verwendet, um die Richtung des großen Trends zu bestimmen, die drei EMA-Linien an den Tagen 5, 15 und 30 auf der Minutenlinie werden verwendet, um den Trend zu bestätigen und an den Bruchpunkten zu handeln. Die Hauptidee der Strategie ist es, den starken Trends zu folgen und auf den großen Wellen zu reiten.

Strategieprinzip

  1. Umlauf-MACD, um einen großen Trend zu bestimmen: Berechnung des Umlauf-MACD-Indikators, der die Differenz zwischen den MACD-Säulen dieser Woche und der vergangenen Woche darstellt, wobei der Abstand größer als 0 den Trend nach oben und kleiner als 0 den Trend nach unten anzeigt. Die Richtung des Trends wird bei der Eröffnung der ersten Woche aktualisiert.

  2. Mehrfache EMA-Linien bestätigen den Trend: Zeichnen Sie drei EMA-Linien mit den Tagen 5, 15 und 30 auf der Minutenlinie. Wenn ein kurzfristiger EMA über einem langfristigen EMA und nach oben läuft, tritt er nach oben; umgekehrt tritt er nach unten.

  3. EMA-Linien-Kreuzungshandel:

    • Überschreiten: Überschreiten Sie, wenn der MACD-Kurs nach oben tritt und der 15-Tage-EMA über der Minutelinie geschlossen wird. Der Stop-Loss-Bereich ist auf eine feste Anzahl von Punkten unter dem Haltungsdurchschnitt festgelegt, oder wenn der 15-Tage-EMA unter der 5-Tage-EMA geschlossen wird.
    • Leerstellen: Leerstellen, wenn die MACD nach unten tendiert und die 30-Tage-EMA unter der 5-Tage-EMA durchschritten wird. Der Stop-Loss-Bereich ist auf der Basis eines festen Punktes über dem Kursdurchschnitt der Position festgelegt, oder wenn der 15-Tage-EMA über der 5-Tage-EMA durchschritten wird.
  4. Aufstockung: keine Aufstockungskonditionen eingestellt.

Analyse der Stärken

  1. Durch die Kombination von zwei Zeitskalen ist die Trendbeurteilung zuverlässiger. Die Kreislinie MACD beurteilt die große Tendenz und vermeidet die Überschneidung in einem schwankenden Markt. Die Minutenlinie EMA bestätigt die Trendüberschneidung und fängt jede Welle im Trend ein.

  2. Die EMA-Parameter für die Minutenlinie sind 5, 15, 30 Tage, und die Kombination der drei Linien filtert gut den Lärm ab und fängt klare Trends ein.

  3. Die Stop-Loss-Lösung ist vernünftig eingestellt, um das Risiko eines einzelnen Handels zu kontrollieren. Die Kombination von Fixed-Point-Stops und EMA-Stops ermöglicht sowohl die Kontrolle von Verlusten als auch die Beobachtung von Trends.

  4. Modulares Design des Codes, Hauptmodule wie MACD-Berechnung, EMA-Berechnung usw. haben eine starke Vielseitigkeit und Erweiterbarkeit.

Risikoanalyse

  1. Die falsche Auswahl der Differenz-Thresholds im MACD-Spaltenbild kann dazu führen, dass die Trend-Beurteilungskriterien zu locker oder zu streng sind, so dass die Beurteilung fehlerhaft ist. Der optimale Threshold kann durch Rückmessung und Parameteroptimierung ausgewählt werden.

  2. Eine falsche Auswahl der EMA-Parameter für die Minutenlinie, zu kurze Perioden führen zu häufigen Transaktionen und zu lange zu verpasste Chancen. Die optimale Kombination von Parametern kann durch Rückmessung und Parameteroptimierung ausgewählt werden.

  3. Die Einstellung der Fixpunkt-Stoppposition ist falsch ausgewählt, eine zu kleine Einstellung führt zu häufigen Stopps, eine zu große Einstellung führt zu einem zu hohen Einmalverlust. Individuelle Stopps können nach den Schwankungen der Sorte eingestellt werden.

  4. Die Trendwende EMA-Linie kann etwas zurückbleiben und die besten Kauf- und Verkaufspunkte verpassen.

Optimierungsrichtung

  1. Es kann in Erwägung gezogen werden, auf der Grundlage von MACD-Trends zu urteilen, und dann Indikatoren wie den RSI zu überlagern, um die Trendstärke zu bestätigen und die Genauigkeit der Trendurteile zu verbessern.

  2. Auf der Grundlage der EMA-Linienüberschreitung können Indikatoren wie CCI als Filterbedingungen für Handelssignale hinzugefügt werden, um die Handelsfrequenz und das Risiko zu verringern.

  3. Die individuellen Stop-Loss-Punkte können anhand der historischen Schwankungen der einzelnen Aktien eingestellt werden, um die Strategie besser an die Merkmale der Sorte anzupassen.

  4. Strategien zur Erhöhung und Verringerung der Positionen können in Betracht gezogen werden, um die Effizienz der Kapitalnutzung zu verbessern.

Zusammenfassen

Die MACD + EMA-Mehrzeitskala-Breakout-Strategie ist eine Trendverfolgungs-Strategie, die in der Beurteilung von Trends und der Bestätigung von Trends eine relativ wissenschaftliche Grundlage hat, die die wichtigsten Trends des Marktes effektiv erfasst und stabile Gewinne erzielt. Gleichzeitig ist die Strategie auch in der Risikokontrolle relativ gut, indem sie durch angemessene Stop-Loss- und Positionsbedingungen die Strategie rückgängig macht.

Strategiequellcode
/*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)