MACD Long-Short Balance Tracking-Strategie


Erstellungsdatum: 2023-10-17 16:15:53 zuletzt geändert: 2023-10-17 16:15:53
Kopie: 0 Klicks: 704
1
konzentrieren Sie sich auf
1617
Anhänger

MACD Long-Short Balance Tracking-Strategie

Überblick

Die Strategie ist eine Trend-Tracking-Strategie, die den MACD-Indikator verwendet, um die polygonale Richtung zu identifizieren. Sie erzeugt die MACD-Hauptlinie, indem sie die Differenz zwischen den schnellen und den langsamen Moving Averages berechnet. Die Strategie verwendet die goldene Kreuzung der MACD-Hauptlinie und der Signallinie, um ein Kaufsignal zu erzeugen, und die tote Kreuzung, um ein Verkaufssignal zu erzeugen, um die polygonale Balance zu verfolgen.

Strategieprinzip

Der Code setzt zunächst die Startzeit der Rückmessung ein, um die historische Leistung der Strategie zu testen.

Dann wird der MACD-Wert berechnet, einschließlich der Längeneinstellungen für den schnellen Moving Average, den langsamen Moving Average und den MACD-Meanline. Die schnellen Linien reagieren empfindlicher und die langsamen Linien reagieren stabiler. Ihre Differenzwerte bilden die MACD-Hauptlinie und die MACD-Signallinie durch die Meanline.

Die letzten Signalzeiten werden auf der Basis von Mehr- und Leerköpfen aufgezeichnet. Die Kauf-/Verkauf-Signale werden bestätigt und aufgezeichnet, wenn die Schnell- und die Langzeilen sich kreuzen, und die Position kann dann eröffnet werden.

Nach dem Eintritt wird der Höchst- und Mindestpreis der Position kontinuierlich verfolgt. Ein Stop-Loss-Prozent wird festgelegt, und der Stop-Loss-Austritt wird durchgeführt, wenn der Verlust diesen Prozentsatz erreicht.

Strategische Vorteile

  1. Der MACD-Indikator ist ein klassischer Indikator für die technische Analyse, der Trends effektiv erkennt.

  2. Durch die Differenzentwicklung des schnellen und langsamen Durchschnitts kann die Dynamik und Richtung der Preisänderungen frühzeitig erfasst werden.

  3. Die Filterwirkung der Gleichlinie kann zum Teil gefälschte Signale filtern.

  4. Die Strategie beinhaltet einen Stop-Loss-Mechanismus, um das Risiko zu kontrollieren.

Strategisches Risiko

  1. Die MACD-Indikatoren sind leicht zu falschen Signalen und haben nur einen begrenzten Optimierungsraum.

  2. Eine falsche Einstellung des Stopps kann zu aktiv oder konservativ sein und muss für verschiedene Sorten individuell optimiert werden.

  3. Fixed-Number-Positionen können leicht zu hohe Leverage verursachen, und es kann in Betracht gezogen werden, die Risikogrenze entsprechend der Größe des Kapitals festzulegen.

  4. Die Wahlmöglichkeit der Rücklaufzeitfenster muss überprüft werden, um eine Überpassung zu vermeiden.

Strategieoptimierung

  1. Optimieren Sie schnellen und mittleren Parameterkombinationen, um die besten Parameter für die Anpassung an verschiedene Sorten zu finden.

  2. Hinzufügen von Filtern für andere Indikatoren, wie K-Linienform, Brin-Band, RSI und andere, um das Signal zu verifizieren.

  3. Die Wirksamkeit verschiedener Stop-Loss-Punkte kann anhand von Kennzahlen wie Rückzug und Sharp-Ratio bewertet werden.

  4. Optimierung von Stop-Loss-Strategien, wie beispielsweise mobile Stop-Loss-Strategien oder Stop-Loss-Strategien.

  5. Versuchen Sie, dynamische Positionen auf Basis von Kapitalveränderungen, Volatilität usw. einzurichten.

Zusammenfassen

Die MACD-Multiple-Horizon-Strategie ist eine auf klassischen technischen Indikatoren basierende Trend-Tracking-Strategie. Sie ist empfindlich auf die Dynamik der Preisänderungen eingestellt und kann durch Parameteroptimierung gut an verschiedene Sorten angepasst werden. In Kombination mit mehr Hybrid-Indikatoren, Stop-Loss-Methoden und dynamischer Positionsverwaltung kann die Stabilität und Profitabilität der Strategie weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
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)

/////////////// Component Code Start ///////////////
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)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true

///////////////  MACD Component - Default settings for one day. /////////////// 
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12)  // 12 for 4hr

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

long = crossover(delta, 0) 
short = crossunder(delta, 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 = 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 = 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 = 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])

sl_inp = input(5.0, title='Stop Loss %', type=float)/100

/////////////// Strategy Component /////////////// 
// Strategy Entry
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy SL Exit
if testPeriod()
    strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
    strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)

//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)