MACD-Handelsstrategie basierend auf adaptivem ATR-Stop-Loss


Erstellungsdatum: 2023-09-20 15:23:00 zuletzt geändert: 2023-09-20 15:23:00
Kopie: 1 Klicks: 867
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie nutzt MACD-Indikatoren, um Handelssignale zu erzeugen, und verwendet ATR-basierte adaptive Stop-Losses, um das Risiko zu kontrollieren. Sie gehört zu den Strategien der Trendfolger-Klasse.

Strategieprinzip

  1. Der Abweichungswert der MACD-Indikator-Delt-Fraktion durchbricht die 0-Achse und erzeugt ein Kauf- und Verkaufssignal.

  2. Der ATR ist ein dynamischer Stop-Loss, der auf den letzten N-Zyklen basiert. Der ATR kann die Marktfluktuation widerspiegeln.

  3. Die Stop-Loss-Position passt sich an die Veränderung der Schwankungsrate an und wird erleichtert, wenn die Schwankungen zunehmen.

  4. Die Stop-Loss-Position wird in Echtzeit aktualisiert, wenn ein Signal gehalten wird, um Gewinne zu sichern und Risiken zu kontrollieren.

  5. Wenn der Stop-Loss ausgelöst wird, müssen Sie Ihre Position beenden und die Risikokontrolle abschließen.

Analyse der Stärken

  1. Der MACD ist empfindlicher auf Trends.

  2. Die dynamische Stop-Loss kann sich an die Marktumgebung anpassen und verhindert, dass die Stop-Loss zu kurz oder zu lang ist.

  3. Die visualisierte Stop-Loss-Linien, die das Risiko visuell widerspiegeln.

  4. Die Regeln der Strategie sind einfach, klar und verständlich.

  5. Die Rücknahme ist kontrollierbar und das Risiko ist gut gemanagt.

Risikoanalyse

  1. Die MACD-Indikatoren können falsche Signale erzeugen, was zu unnötigen Verlusten führt.

  2. Die ATR-Parameter sind falsch eingestellt und beeinträchtigen zu nahe oder zu weit.

  3. Das Risiko, dass die Schäden zu häufig ausgelöst werden.

  4. Es ist schwierig, den Trend umzukehren, und es ist schwierig, ihn zu stoppen.

  5. Die Optimierung der Parameter kann zu einem Überangebot führen.

Optimierungsrichtung

  1. Testen Sie verschiedene MACD-Kombinationen mit verschiedenen Parametern, um die optimale Parameter zu finden.

  2. Versuchen Sie andere Methoden, um Ihre Verluste zu stoppen, wie z. B. die Verfolgung von Verlusten.

  3. Optimierung der Stop-Loss-Parameter, Ausgleich der Stop-Loss-Frequenz und Risikokontrolle.

  4. Die Einführung eines Trend-Durchführungsmechanismus verhindert die Umkehrung von Stop-Losses.

  5. Berücksichtigen Sie die Auswirkungen der Transaktionskosten und verhindern Sie übermäßige Transaktionen

  6. Der Einsatz von Gleitpunkten oder verstärkten Stop-Losses sorgt dafür, dass der Stop-Loss wirksam wird.

Zusammenfassen

Die Strategie basiert auf MACD-Indikatoren und verwendet eine automatische ATR-Dynamik zum Stoppen von Verlusten. Die Strategie ist risikobeherrschbar und praktisch einfach. Die MACD-Signal ist jedoch anfällig für Fehleinschätzungen, und die Stop-Loss-Mechanismen müssen ständig optimiert werden. Insgesamt kann es durch die Anpassung der Parameter, die Optimierung der Stop-Loss-Strategie usw. zu einem stabileren Trend-Tracking-Handelssystem werden.

Strategiequellcode
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MACD BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

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

testPeriod() =>  true

///////////////  MACD  /////////////// 
fastLength = input(13) 
slowlength = input(30) 
MACDLength = input(12) 

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

///////////////  Strategy  /////////////// 
long = crossover(delta, 0)
short = crossunder(delta, 0)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
atrLkb = input(2, minval=1, title='ATR Stop Period')
atrMult = input(1.25, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop = 0.0
longStop :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop[1]
shortStop = 0.0
shortStop := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop[1]

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)
    strategy.exit("Long SL", "Long", stop=longStop, when=since_longEntry > 0)
    strategy.exit("Short SL", "Short", stop=shortStop, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
barcolor(long ? color.lime : short ? color.red : na)
plot(strategy.position_size <= 0 ? na : longStop, title="Long Stop Loss", color=color.yellow, style=plot.style_circles, linewidth=2)
plot(strategy.position_size >= 0 ? na : shortStop, title="Short Stop Loss", color=color.orange, style=plot.style_circles, linewidth=2)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)