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 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.
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.
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.
Die Strategie beinhaltet folgende Optimierungsmaßnahmen:
Durch das Hinzufügen anderer Indikatorentscheidungen und die Bildung mehrerer Indikatorkombinationen kann die Wahrscheinlichkeit, dass MACD falsche Signale sendet, weiter vermieden werden.
Die EMA-Generelllänge kann mit einer Kombinationsoptimierung optimiert werden, um die besten Parameter für die Trendrichtung zu finden.
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.
Zusätzliche Kapitalmanagement-Module, wie zum Beispiel die Gewinn-Verlust-Rate, können als dynamische Eingaben verwendet werden.
Verschiedene Arten von Verträgen werden getestet, um die am besten geeigneten Handelsarten zu finden.
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)