MACD EMA Golden Cross Trendfolgestrategie


Erstellungsdatum: 2024-02-18 15:17:36 zuletzt geändert: 2024-02-18 15:17:36
Kopie: 0 Klicks: 368
1
konzentrieren Sie sich auf
1166
Anhänger

MACD EMA Golden Cross Trendfolgestrategie

Überblick

Die Strategie ermittelt die Trendrichtung durch die Berechnung der Kreuzung der MACD-Indikator und seine beweglichen Durchschnittssignal-Linien, und in Kombination mit der EMA-Indikator zu beurteilen, die aktuelle Trendstärke schwach, um Trend-Tracking. Wenn die MACD-Linie von unten nach oben brechen Sie die Signal-Linie zu tun mehr, von oben nach unten brechen Sie frei, und die EMA-Linie kann auch zu beurteilen, die Trendstärke schwach, so dass die Filterung der falschen brechen.

Strategieprinzip

Die Strategie basiert hauptsächlich auf MACD-Indikatoren, um die Richtung und den Zeitpunkt des Eintritts zu bestimmen. Eine MACD-Linienbruchsignallinie zeigt an, dass der Preistrend umgekehrt ist, daher wird nach der Breakout-Richtung entschieden, ob mehr gebrochen wird. Die spezifische Beurteilungslogik ist, wenn der Schlusskurs über dem EMA-Durchschnitt liegt und die MACD-Line die Signallinie von unten durchbricht, zu tun.

Die Rolle der EMA-Gehaltslinie ist die Unterstützung der Trendentscheidung, wenn der Preis höher als der EMA-Gehaltslinie ist, der in einem Aufwärtstrend ist, dann kann der MACD-Unterbruch ein laufendes Gold-Kreuzsignal bilden. Wenn der Preis unter der EMA-Gehaltslinie ist, der in einem Abwärtstrend ist, dann kann der MACD-Oberbruch ein Todes-Kreuzsignal bilden. Die Länge der EMA bestimmt auch die mittlere und langfristige Ausdehnung der Trendentscheidung.

Auf diese Weise kann der Trend-Tracking-Effekt erzielt werden, wenn die Preise beginnen, einen neuen Trend zu bilden, der sich umkehrt.

Analyse der Stärken

Die Strategie kombiniert die Doppelbeurteilungskonditionen, wobei sowohl die Richtung der Preistrends berücksichtigt wird als auch die Indikatoren verwendet werden, um die spezifischen Einstiegsmomente zu beurteilen und die Gefahr von False Breakouts zu vermeiden. Die Strategie erhöht die Zuverlässigkeit der Strategie.

Die Verwendung der EMA-Gehaltslinie ermöglicht es der Strategie, die Auswirkungen von kurzfristigen Schwankungen zu filtern und die mittleren und langen Trends zu verriegeln. Dies ist hilfreich, um die Wirkung der MACD-Indikator-Rückkehr zu beeinflussen.

Darüber hinaus kann die Strategie sowohl Über- als auch Unterlaufbedingungen für den Fall von Lotus-Marktbedingungen einstellen, was die Anpassungsfähigkeit der Strategie erhöht.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass die MACD-Indikatoren selbst eine hohe Wahrscheinlichkeit für einen Fakeout haben und die Signale möglicherweise falsch identifiziert werden. In diesem Fall ist eine zusätzliche Funktion der EMA-Gewinnlinie erforderlich, die jedoch in besonderen Fällen ausfallen kann.

Darüber hinaus verwendet die Strategie die Gewinn- und Verlustquote, um die Stop-Loss-Block-Bedingungen einzustellen, was zu einer gewissen Subjektivität führt, die die Effektivität der Strategie beeinträchtigt, wenn sie nicht richtig eingestellt wird.

Letztendlich wurde die Strategie einfach so eingerichtet, dass die Anzahl der geöffneten Positionen auf 100% der Konto-Anteile liegt, ohne Rücksicht auf die Geldverwaltung, die auch in der Realität ein gewisses Risiko birgt.

Optimierungsrichtung

Die Strategie beinhaltet folgende Optimierungsmöglichkeiten:

  1. Durch die Hinzufügung anderer Indikatoren kann die Wahrscheinlichkeit, dass ein falsches MACD-Signal ausgegeben wird, weiter vermieden werden. Zum Beispiel können KDJ, BOLL usw. berücksichtigt werden.

  2. Die Länge der EMA-Durchschnittslinie kann für eine Kombinationsoptimierung verwendet werden, um die optimale Parameter für die Trendrichtung zu finden.

  3. Die MACD-Parameter können auch weiter optimiert werden, um die genauesten Parameterwerte zu finden, die die Umkehrzeit bestimmen.

  4. Die Erweiterung der Module zur Vermögensverwaltung, wie z. B. der Gewinn- und Verlustquote, kann als dynamische Eingabe verwendet werden, und es kann auch ein Stop-Loss-Slide-Punkt eingerichtet werden.

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

Zusammenfassen

Die MACD EMA Gold-Cross-Trend-Tracking-Strategie ist im Allgemeinen relativ einfach und praktisch. Durch eine doppelte Indikator-Beurteilung wird die Zuverlässigkeit des Signals sichergestellt, und ein vernünftiger Stop-Loss-Methode wird eingesetzt, um die Gewinne zu sichern. Der Haupt-Optimierungsraum besteht in der Parameterwahl, der Indikator-Kombination und der Kapitalverwaltung.

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