MACD Momentum Indikator Backtesting Strategie


Erstellungsdatum: 2023-09-24 13:21:54 zuletzt geändert: 2023-09-24 13:21:54
Kopie: 1 Klicks: 796
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Diese Strategie kombiniert MACD-Dynamik und RSI-Überbu-Überverkauf, um zu überprüfen, ob der RSI bei MACD-Gold-/Dead-Fork-Ereignissen auch eine entsprechende Tief-/Oberwende vollendet hat, was zu einem zuverlässigeren Handelssignal führt. Sie gehört zu den typischen kurzfristigen Umkehrstrategien.

Strategieprinzip

  1. Berechnen Sie die DIFF-, DEA- und MACD-Säulen des MACD-Indikators. Die DIFF-Säulen erzeugen ein Goldforksignal, wenn sie die DEA überschreiten, und ein Todesforksignal, wenn sie untergehen.

  2. Berechnen Sie den RSI-Indikator, um zu beurteilen, ob der Tiefpunkt zurückgegangen ist oder der Tiefpunkt zurückgegangen ist. Setzen Sie ein Rückblickfenster, um zu beurteilen, ob ein Tiefpunkt oder ein Tiefpunkt in der letzten Phase aufgetreten ist.

  3. Wenn der MACD Goldfork ist, erzeugt der RSI ein Blicksignal, wenn der RSI einen Touchback im Rückblickfenster abgeschlossen hat. Wenn der MACD Deadfork ist, wird ein Blicksignal erzeugt, wenn der RSI einen Touchback abgeschlossen hat.

  4. Ein Stop-Loss-Punkt nach der Eintrittsphase zur Risikokontrolle.

Strategische Vorteile

  1. Die MACD ist sehr empfindlich, wenn es um eine Trendwende geht. Der RSI ist sehr empfindlich, wenn es um einen Überkauf geht.

  2. Die MACD- und RSI-Token werden gleichzeitig verifiziert, um falsche Signale zu filtern.

  3. Die Zuverlässigkeit des Signals erhöht sich, wenn man sich die Fenster anschaut.

  4. Die Stop-Loss-Einstellung hilft beim Risikomanagement.

Strategisches Risiko

  1. Die MACD und der RSI liegen etwas hinter den besten Einstiegspunkten.

  2. Die Wahrscheinlichkeit, dass gleichzeitig zwei Signale angezeigt werden, ist geringer, und es gibt weniger Signale.

  3. Es ist leicht zu überzeugen, ohne die großen Trends zu berücksichtigen.

  4. Eine falsche Stop-Loss-Einstellung kann zu locker oder zu streng sein.

Entsprechende Lösungen:

  1. Anpassung der MACD- und RSI-Parameter zur Verringerung der Verzögerung

  2. Die Wirkungsbereiche der Indikatoren sollten entsprechend erweitert werden, um mehr Signale bereitzustellen.

  3. Die Einführung von Trendfiltern verhindert die Einführung von Rückwärtskursen.

  4. Verschiedene Stop-Loss-Parameter-Einstellungen werden getestet, um die besten zu finden.

Richtung der Strategieoptimierung

  1. Die Wirksamkeit anderer Gleichungen wie SMA testen.

  2. Das ist eine sehr gute Idee, um den Verlust zu verringern.

  3. Die Eintrittszahlen werden in den nächsten Monaten veröffentlicht.

  4. Einführung von maschinellem Lernen zur Vorhersage von Kennzahlen.

  5. Die Eintrittszeit wird durch mehrere Faktoren optimiert.

Zusammenfassen

Die Strategie nutzt die Kombination von MACD und RSI und tritt nach der Auswahl eines zuverlässigen Umkehrsignals ein. Die Strategie ist klar, die Parameter können flexibel angepasst werden und kann in Bezug auf die Auswahl der Indikatoren, die Beurteilung der Trends und die Stop-Loss-Methode erweitert werden.

Strategiequellcode
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//based on Range Strat - MACD/RSI 
// strategy("MACD/RSI - edited", 
//      overlay=true,
//      default_qty_type=strategy.percent_of_equity,
//      default_qty_value=10, precision=2, initial_capital=100000,
//      pyramiding=2,
//      commission_value=0.05)

//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true

// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")

// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed


coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)

// MACD Input Settings
macdsrc = input(title="MACD Source", defval=close, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")


// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal

MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)

// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01

// Calculating Stop Loss
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)



// Strategy Entry
if (not na(vrsi))
	if (inDateRange and MACDcrossover and coCheck)
		strategy.entry("LONG", strategy.long, comment="LONG")
	if (inDateRange and MACDcrossunder and cuCheck)
		strategy.entry("SHORT", strategy.short, comment="SHORT")

// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
    strategy.exit(id="SHORT STOP", stop=shortStopPrice)