MACD EMA Gold-Kreuz-Trend-Tracking-Strategien

Schriftsteller:ChaoZhang, Datum: 2024-02-18 15:17:36
Tags:

MACD EMA黄金交叉趋势追踪策略

Übersicht

Die Strategie bestimmt die Trendrichtung durch die Berechnung der Kreuzung des MACD-Indikators und seiner gleitenden Mittelungssignallinie und erfolgt durch Trendverfolgung in Kombination mit dem EMA-Indikator, der den aktuellen Trend als stark oder schwach bezeichnet. Wenn der MACD-Indikator die Signallinie von unten nach oben durchbricht, wird mehr von oben nach unten durchbrochen und der EMA kann gleichzeitig den Trend als stark oder schwach beurteilen, wodurch ein falscher Durchbruch gefiltert wird.

Die Strategie

Die Strategie basiert hauptsächlich auf dem MACD-Indikator, um die Trendrichtung und den Zeitpunkt des Eingangs zu bestimmen. Ein Durchbruch der MACD-Linie zeigt, dass der Preistrend umgekehrt ist, daher wird nach der Richtung des Durchbruchs entschieden, ob man mehr kaufen soll. Die konkrete Entscheidungslogik ist, wenn der Schlusskurs über dem EMA-Durchschnitt liegt und die MACD-Linie die Signallinie von unten durchbricht, mehr zu tun; wenn der Schlusskurs unter dem EMA-Durchschnitt liegt und die MACD-Linie die Signallinie von oben durchbricht, mehr zu machen.

Die EMA-Gleichlinie spielt die Rolle eines unterstützenden Trendbeurteilers, bei dem ein Gold-Cross-Signal unterhalb des MACD leicht gebrochen wird, wenn der Preis oberhalb der EMA im Aufwärtstrend ist.

Auf diese Weise kann man rechtzeitig in den Markt eintreten, wenn der Preis beginnt, sich umzudrehen und einen neuen Trend zu bilden, um einen Trend-Tracking-Effekt zu erzielen.

Stärkenanalyse

Die Kombination von doppelten Urteilsbedingungen, die sowohl die Trendrichtung des Preises berücksichtigen, als auch den Indikator nutzen, um einen bestimmten Eintrittszeitpunkt zu bestimmen, um das Risiko eines falschen Durchbruchs zu vermeiden, erhöht die Zuverlässigkeit der Strategie. Die Strategie kann den Beginn eines neuen Trends genauer bestimmen als ein einziger MACD-Indikator.

Die Verwendung der EMA-Gleichlinie ermöglicht es auch, die Auswirkungen von kurzfristigen Schwankungen zu filtern und die mittleren langen Trends zu blockieren. Dies ist hilfreich, um die Auswirkungen der Umkehrung des MACD-Indikators auszuüben.

Darüber hinaus kann die Strategie sowohl auf mehr als auch auf leere Bedingungen ausgerichtet sein, die für ein Marktumfeld geeignet sind, in dem die Lotterien fallen, was die Anpassungsfähigkeit der Strategie erhöht.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass der MACD-Indikator selbst eine hohe Wahrscheinlichkeit für einen Fakeout beurteilt, und dass das Signal möglicherweise falsch identifiziert wird.

Darüber hinaus wird die Strategie mit einem Gewinn-Verlust-Verhältnis ausgestattet, um die Bedingungen für die Stop-Loss-Begrenzung festzulegen, was ein gewisses Maß an Subjektivität aufweist und die Strategiewirkung beeinträchtigt, wenn sie nicht richtig eingestellt wird.

Schließlich wurde die Strategie einfach auf eine Anzahl von Anlagen mit einem Anspruch auf 100 Prozent gesetzt, ohne die Probleme mit der Geldverwaltung zu berücksichtigen, was auch in der Praxis ein gewisses Risiko darstellt.

Optimierung

Die Strategie beinhaltet folgende Optimierungsmaßnahmen:

  1. Durch das Hinzufügen anderer Indikatorentscheidungen und die Bildung mehrerer Indikatorkombinationen kann die Wahrscheinlichkeit, dass MACD falsche Signale sendet, weiter vermieden werden.

  2. Die EMA-Generelllänge kann mit einer Kombinationsoptimierung optimiert werden, um die besten Parameter für die Trendrichtung zu finden.

  3. Die MACD-Parameter können auch weiter optimiert werden, um die Parameter zu finden, die die genaueste Wertung für die Feststellung der Umkehrzeit bestimmen.

  4. Zusätzliche Kapitalmanagement-Module, wie zum Beispiel die Gewinn-Verlust-Rate, können als dynamische Eingaben verwendet werden.

  5. Verschiedene Arten von Verträgen werden getestet, um die am besten geeigneten Handelsarten zu finden.

Zusammenfassung

Die MACD EMA Gold-Cross-Trend-Tracking-Strategie ist insgesamt einfach und praktisch, indem sie die Zuverlässigkeit der Signale durch doppelte Indikatorenurteile sicherstellt und einen vernünftigen Stop-Loss-Stopp-System zur Gewinnverriegelung einrichtet. Es gibt vor allem Optimierungsräume in Bezug auf Parameterwahl, Indikator-Portfolio, Finanzmanagement usw.


/*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=4

strategy(title="MACD EMA Strategy", shorttitle="MACD EMA STRAT", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=5000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// STEP 2:
// See if this bar's time happened on/after start date
afterStartDate = true

//EMA
emasrc = close
res = input(title="EMA Timeframe", type=input.resolution, defval="15")
len1 = input(title="EMA Length", type=input.integer, defval=206)
col1 = color.yellow
// Calculate EMA
ema1 = ema(emasrc, len1)
emaSmooth = security(syminfo.tickerid, res, ema1, barmerge.gaps_on, barmerge.lookahead_off)
// Draw EMA
plot(emaSmooth, title="EMA", linewidth=1, color=col1)

//MACD
fast_length = input(title="Fast Length", type=input.integer, defval=15)
slow_length = input(title="Slow Length", type=input.integer, defval=24)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)
zeroline = 0

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)
//plot(zeroline, title="Zero Line", color=color.black, transp=0)

///////////////////////////LONG////////////////////////////////////////////////////////////////////

enablelong = input(true, title="Enable long?")

//Long Signal
upcondition = close > emaSmooth and close[1] > emaSmooth[1]
macdunderhis = macd < zeroline
macdcrossup = crossover(macd, signal)

longcondition = upcondition and macdunderhis and macdcrossup

//strategy buy long
if (longcondition) and (afterStartDate) and strategy.opentrades < 1 and (enablelong == true)
    strategy.entry("long", strategy.long)

//////////////////////////////////////SHORT//////////////////////////////////////////////////////////////////////////////////

enableshort = input(true, title="Enable short?")

//Short Signal
downcondition = close < emaSmooth and close[1] < emaSmooth[1]
macdoverhis = macd > zeroline
macdcrosunder = crossunder(macd, signal)

shortcondition = downcondition and macdoverhis and macdcrosunder

//strategy buy short
if (shortcondition) and (afterStartDate) and strategy.opentrades < 1 and (enableshort == true)
    strategy.entry("short", strategy.short)


//////////////////////////////////////EXIT CONDITION//////////////////////////////////////////////////////////////////////////////////
bought = strategy.position_size[1] < strategy.position_size
sold = strategy.position_size[1] > strategy.position_size
barsbought = barssince(bought)
barssold = barssince(sold)
//////LOWEST LOW//////
//Lowest Low LONG
profitfactorlong = input(title="ProfitfactorLong", type=input.float, step=0.1, defval=1.9)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=46, minval=2)
stop_level_long = lowest(low, loLen)[1]

if strategy.position_size>0 
    profit_level_long = strategy.position_avg_price + ((strategy.position_avg_price - stop_level_long[barsbought])*profitfactorlong)
    strategy.exit(id="TP/ SL", stop=stop_level_long[barsbought], limit=profit_level_long)

//Lowest Low SHORT
profitfactorshort = input(title="ProfitfactorShort", type=input.float, step=0.1, defval=2.1)
highLen = input(title="highest high lookback", type=input.integer,
  defval=25, minval=2)
stop_level_short = highest(high, highLen)[1]

if strategy.position_size<0 
    profit_level_short = strategy.position_avg_price - ((stop_level_short[barssold] - strategy.position_avg_price)*profitfactorshort)
    strategy.exit(id="TP/ SL", stop=stop_level_short[barssold], limit=profit_level_short)
    
//PLOTT TP SL
plot(stop_level_long, title="SL Long", linewidth=1, color=color.red)
plot(stop_level_short, title="SL Short", linewidth=1, color=color.red)

Weitere Informationen