Schriftsteller:ChaoZhang, Datum: 2024-01-23 11:22:02
Tags:

img

Übersicht

Diese Strategie ist eine automatisierte Handelsstrategie, die auf dem doppelten gleitenden Durchschnitts-Crossover des MACD-Technischen Indikators basiert.

Strategie Logik

Die Strategie berechnet zunächst die drei Linien des MACD-Indikators: schnelle Linie, langsame Linie und Histogramm. Die schnelle Linie ist ein schnellerer gleitender Durchschnitt über einen kürzeren Zeitraum, während die langsame Linie ein langsamerer gleitender Durchschnitt über einen längeren Zeitraum ist. Das Histogramm ist der Unterschied zwischen den schnellen und langsamen Linien. Wenn die schnelle Linie über die langsame Linie kreuzt, ist es ein goldenes Kreuzsignal, das ein Kaufsignal anzeigt. Wenn die schnelle Linie unter die langsame Linie kreuzt, ist es ein Todeskreuzsignal, das ein Verkaufssignal anzeigt.

Die Strategie nutzt diese Logik, um auf Goldkreuze lang zu gehen und auf Todkreuze nahe zu gehen; oder auf Todkreuze kurz zu gehen und auf Goldkreuze nahe zu stehen, um automatisch dem Trend zu folgen. In der Zwischenzeit beurteilt die Strategie auch, ob die absolute MACD-Linie positiv oder negativ ist, um falsche Signale zu vermeiden und Trendumkehrpunkte wirklich zu erfassen.

Vorteile der Strategie

  • Nutzt eine doppelte gleitende Durchschnittsüberschreitung, um die Trendrichtung genau zu bestimmen und die Trendumkehrung zu erfassen
  • Der MACD-Technische Indikator reduziert falsche Signale und verbessert die Signalqualität
  • Flexibilität bei Long- oder Short- oder nur Long-/Short-Verkäufen
  • Einstellbare Parameter entsprechen unterschiedlichen Marktbedingungen

Risiken der Strategie

  • Der doppelte gleitende Durchschnitts-Crossover hat einen Verzögerungseffekt und kann zu Beginn der Umkehrungen teilweise Gewinne verpassen.
  • MACD-Indikator anfällig für falsche Signale während der Marktkonsolidierung
  • Die Parameter müssen richtig eingestellt werden, um zu hohe Empfindlichkeit oder Inertheit zu vermeiden.

Risikominderung:

  • Kombination mit anderen Indikatoren, um Signale zu filtern
  • Einstellen der Parameter auf eine niedrigere Handelsfrequenz
  • Die Strategie wird nur angewandt, wenn der Trend offensichtlich ist.

Verbesserungsbereiche

Die Strategie kann in folgenden Aspekten verbessert werden:

  1. Einbeziehung anderer Indikatoren wie KDJ, Bollinger Bands usw., um Signale zu bestätigen und falsche Signale zu filtern

  2. Verbesserung des Eingangsmechanismus, z. B. Hinzufügen eines Breakout-Filters, um vorzeitige oder verspätete Eingaben zu vermeiden

  3. Optimierung der Parameter-Einstellungen, Anpassung von schnellen und langsamen Zeilen auf der Grundlage verschiedener Zeitrahmen und Marktregime

  4. Hinzufügen von Stop Loss zur Kontrolle von Einzelhandelsverlusten

  5. Erweitern Sie sich auf andere Produkte wie Forex, Kryptowährungen usw.

Zusammenfassung


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 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/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
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

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)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")


Mehr