MACD-Gleitender Durchschnitt, Cross-Trend, Trailing-Stop-Loss-Strategie


Erstellungsdatum: 2023-11-06 11:56:14 zuletzt geändert: 2023-11-06 11:56:14
Kopie: 0 Klicks: 623
1
konzentrieren Sie sich auf
1617
Anhänger

MACD-Gleitender Durchschnitt, Cross-Trend, Trailing-Stop-Loss-Strategie

Überblick

Die Strategie nutzt die MACD-Indikatoren, um die Richtung des Trends zu bestimmen, in Kombination mit der EMA-Mittellinie und der SMA-Mittellinie-Kreuzung als Hilfsentscheidung. Die Eintrittssignale durchqueren die Signallinie auf der MACD-Gleichlinie und treten nach oben, der Stop-Loss ist die von ATR berechnete schwimmende Stop-Loss-Linie.

Grundsätze

Eintrittszeichen

Wenn die kurze EMA die langsame EMA durchbricht, ist die kurzfristige Preisentwicklung besser als die langfristige Tendenz und wird als Kaufsignal bewertet. Die langsame EMA auf der schnellen EMA zeigt auch, dass die kurzfristige Preiserhöhung besser ist als die langfristige. Die Kombination der MACD-Straße mit dem EMA & SMA-Kreuzsignal in Richtung der Tendenz kann daher eine stärkere Eintrittszeit bestimmen.

Verlustbewältigung

Der ATR kann die Schwankungsbreite des Preises effektiv widerspiegeln. Wenn der Preis diese Schwankungsbreite überschreitet, wird der Stop beendet. Der ATR ist regelbar, wobei die Schwankung des Zyklus den Stop präziser macht, aber auch leichter durchbrochen werden kann.

Auftritt

In der Regel werden die Positionen in Gruppen gehalten, wobei der Teil der Position nach einem kleinen Anstieg ausgeglichen wird. Dann wird der Teil der Position nach einem starken Preisanstieg ausgeglichen.

Vorteile

  • Die MACD wird verwendet, um die Richtung des Trends zu bestimmen, ergänzt durch die Kreuzung von EMA und SMA, um den Zeitpunkt des Eintritts zu bestimmen
  • ATR-berechneter Stop-Loss-Bereich ermöglicht sowohl einen Stop-Loss als auch einen Trend-Tracking
  • In den USA gibt es mehrere Arten von Online-Shopping-Systemen, die sich als “Shopping-System” bezeichnen.

Risiken und Gegenmaßnahmen

  • Das Risiko, dass MACD- und Trendindikatoren falsche Signale senden. Die Parameter können entsprechend angepasst werden oder andere Indikatoren können als Hilfsmittel verwendet werden.
  • Das Risiko, dass die ATR-Stoppschwelle überschritten wird. Die ATR-Zyklen können entsprechend verlängert oder der Stop-Factor erhöht werden.
  • Die Gefahr, bei der Teil-Positionsverfolgung eingesperrt zu werden. Sie können die Verfolgungsquote verkleinern und den Verlust rechtzeitig beenden.

Optimierungsrichtung

  • Optimierung der MACD-Parameter, um die Trends besser zu beurteilen

  • Optimierung der ATR-Zyklusparameter, um die Stop-Loss-Parametern besser anzupassen

  • Optimierung der Ausgangsquote und der Positionskontrolle, um das Risiko einer Absicherung zu verringern

  • Erhöhung der mobilen Stop-Loss oder Berücksichtigung der Volatilitätsindikatoren zur Optimierung der Stop-Loss

Zusammenfassen

Die Strategie kombiniert mehrere Indikatoren wie MACD, EMA/SMA, um die Richtung des Trends zu bestimmen, um den richtigen Einstieg zu erhalten. Gleichzeitig wird ein schwimmender ATR-Stopp verwendet, um die Gewinne zu sperren und den Trend zu verfolgen.

Strategiequellcode
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Deobald

//@version=4
strategy("MACD Strategy", overlay=true)

// FUNCTIONS

Ema(src,p) =>
    ema = 0.
    sf = 2/(p+1)
    ema := nz(ema[1] + sf*(src - ema[1]),src)

Sma(src,p) => a = cum(src), (a - a[max(p,0)])/max(p,0)

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

/// TREND
ribbon_period = input(34, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)


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

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



// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(1, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(10, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(5, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(50, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)




// Stop Loss
multiplier = input(2.2, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(17,"ATR period", minval=1, step=1)

// Strategy
entry_long=crossover(macd,signal) and leadLine2 < leadLine1
entry_price_long=valuewhen(entry_long,close,0)
SL_floating_long = entry_price_long - multiplier*Atr(ATR_period)
exit_long= close < SL_floating_long 

///// BACKTEST PERIOD ///////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() => true

if testPeriod()
    strategy.entry("long", strategy.long, comment="Long", when=entry_long)
    strategy.exit("TP1","long", qty_percent=long_tp1_qty, limit=long_take_level_1)//, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.exit("TP2", qty_percent=long_tp2_qty, limit=long_take_level_2) //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.close_all("long", when=exit_long, comment="exit long" )


// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")