MACD-quantitative Strategie - Double-Cross-Moving-Average-Durchbruch-Strategie


Erstellungsdatum: 2024-02-22 15:32:42 zuletzt geändert: 2024-02-22 15:32:42
Kopie: 0 Klicks: 679
1
konzentrieren Sie sich auf
1617
Anhänger

MACD-quantitative Strategie - Double-Cross-Moving-Average-Durchbruch-Strategie

Überblick

Diese Strategie bildet den MACD-Indikator durch Berechnung der Differenz zwischen dem schnellen und dem langsamen Moving Average und kombiniert die Signallinie mit dem Trend der Finanzmärkte und den überkauften und überverkauften Bereichen. Die MACD und die Signallinie bilden mehrköpfige Forks, wenn der Preis gleichzeitig über der 200-Tage-Durchschnittslinie liegt, und bilden einen leeren Forks, wenn der Preis gleichzeitig unter der 200-Tage-Durchschnittslinie liegt.

Strategieprinzip

Die Basis ist die Berechnung der Differenz zwischen dem schnellen und dem langsamen Moving Average, um die MACD-Indikator zu bilden, um die Richtung des Markttrends zu bestimmen, und dann die Signallinie zu verwenden, um die Überkauf-Überverkaufszone zu bestimmen. Wenn der MACD und die Signallinie einen Goldfork bilden, ist das mehrköpfige Signal gut, wenn der Todesfork gebildet wird, ist das leere Signal leer.

Die Berechnungsmethode lautet:

  1. Die 12-Tage-EMA minus die 26-Tage-EMA ergibt MACD
  2. Der MACD 9-Tage-EMA erhält eine Signalleitung
  3. MACD minus die Signallinie ergibt die MACD-Verlängerung

Wenn die MACD über die Signalleitung fließt und die MACD und die Signalleitung gleichzeitig unter 0 sind, gibt der Goldfork mehr Signal, wenn die MACD unter der Signalleitung fließt und die MACD und die Signalleitung gleichzeitig über 0 sind, gibt der Dead-Fork das Leerzeichen. Wenn der Preis über der 200-Tage-Durchschnittslinie liegt, gibt der Goldfork mehr Signal, und wenn der Preis unter der 200-Tage-Durchschnittslinie liegt, gibt der Dead-Fork das Leerzeichen.

Strategische Vorteile

  1. Die Verwendung von doppelten Indikatoren vermeidet die Einschränkungen einer einzigen Indikatorentscheidung und erhöht die Genauigkeit der Signale
  2. Doppelfilterung in Kombination mit Preis-Gleichgewichtsbeziehung, um Fehlsignale in starken Trends zu vermeiden
  3. Großer Raum für Parameteroptimierung, die durch Anpassung der Mittellinienparameter an unterschiedliche Marktumgebungen angepasst werden können
  4. Konservative Parameter-Einstellungen ergeben weniger Signale, aber höhere Genauigkeit
  5. Strategie, die leicht zu verstehen und umzusetzen ist

Strategisches Risiko

  1. Bei starken Marktschwankungen können Indikatoren beeinflusst werden und falsche Signale erzeugen.
  2. Die Verzögerung des Gleichgewichtssystems beeinträchtigt die Aktualität der Strategie
  3. Weniger Signale, leicht zu übersehen
  4. PARAMETERS Optimierung mit einem Risiko von Überoptimierung
  5. Rücknahme-Kontrollen und Schadensausfallmechanismen müssen verbessert werden

Das Risiko kann durch eine angemessene Verkürzung des Durchschnittszyklus, die Einbeziehung anderer Indikatoren und die Einbeziehung von Stop-Loss-Maßnahmen verringert werden.

Richtung der Strategieoptimierung

1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns

2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart

3.also tested hull moving average for MACD which gave good results

4.stoploss can also be trailed for better risk management

Zusammenfassen

Diese Strategie ist sehr einfach und praktisch, sie erzeugt ein hohes Handelssignal mit hoher Wahrscheinlichkeit durch Doppelindikator-Urteil und Preis-Filterung, eine hohe Marginal-Gewinnrate, die Verwendung der klassischen MACD-Parameterpalette und wird nicht übermäßig optimiert. Der Optimierungsraum ist groß und die Strategie kann durch die Anpassung der durchschnittlichen Parameterpalette, die Aufnahme anderer Indikator-Urteile und Stop-Loss-Maßnahmen weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © Hurmun

//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)


fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
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=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// 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


movinga2 = input(title="movinga 2", type=input.integer, defval=200)

movinga200 = sma(close, movinga2)

plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
    
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100

longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
    
if (strategy.position_size > 0 )
    strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)






if (strategy.position_size < 0 )
    strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)