Schwingungsdifferentialdurchschnittliche Zeitstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-26 14:40:12
Tags:

img

Übersicht

Diese Strategie berechnet die Differenz zwischen der schnellen EMA und der langsamen EMA, um den MACD-Oszillator zu bilden, und berechnet die EMA des MACD selbst, um die Signallinie zu bilden, wodurch ein duales Filtersystem aufgebaut wird.

Strategieprinzip

Der Kernindikator dieser Strategie ist der MACD-Oszillator, der berechnet wird, indem man die langsame EMA (typischerweise 26-Tage-EMA) von der schnellen EMA (typischerweise 12-Tage-EMA) subtrahiert. Die schnelle EMA ist empfindlicher und kann kurzfristige Kursschwankungen erfassen. Die langsame EMA reagiert langsamer auf Preisänderungen. Die beiden subtrahieren einen Oszillator, der den Unterschied zwischen kurzfristigen und mittelfristigen Preiszyklen darstellt. Die EMA (typischerweise 9-Tage) des MACD-Oszillators selbst wird dann berechnet, um die Signallinie zu erhalten. Wenn der MACD über die Signallinie von unten kreuzt, signalisiert er, dass der Aufwärtstrend des kurzfristigen Trends stärker ist als der des mittelfristigen Trends, was ein Kaufsignal erzeugt. Wenn der DD über die Linie von oben kreuzt, signalisiert er, dass der Aufwärtstrend des kurzfristigen

Die Eingabeparameter dieser Strategie werden auf die schnelle Linie Länge, langsame Linie Länge, Preisquelle und Signallinie Glättungsperiode festgelegt. Diese können je nach verschiedenen Märkten angepasst werden, um die optimalen Parameterkombinationen zu finden. Der Hintergrundfarbblock zeigt den Backtest-Zeitrahmen. Die Strategie eröffnet nur Positionen innerhalb dieses Zeitrahmens.

Analyse der Vorteile

  1. Der MACD-Indikator ist klassisch und leicht verständlich und erfasst kurz- bis mittelfristige Umkehrchancen effektiv.

  2. Die doppelte EMA-Konstruktion des MACD-Systems ist reibungsloser als die einzelnen EMA-Systeme.

  3. Relativ mehr verstellbare Parameter ermöglichen eine Optimierung auf verschiedenen Märkten.

  4. Die Kombination mit Lautstärkenindikatoren hilft, hochwertige Signale zu erkennen.

Risikoanalyse

  1. Der MACD kann in schwankenden Märkten mehr falsche Signale erzeugen.

  2. Es ist nicht in der Lage, Trends zu bestimmen, und kann bei Trendsverletzungen entstehen.

  3. Der begrenzte Zeitrahmen für Backtests kann extreme Marktbedingungen ignorieren.

  4. Bei der Parameter-Ausrichtung sind mehr Marktdaten erforderlich, um eine Überanpassung an bestimmte Marktperioden zu vermeiden.

Die Risiken können durch die Einbeziehung von Trendindikatoren und Stop-Loss-Mechanismen kontrolliert werden.

Optimierungsrichtlinien

  1. Verschiedene Preisquellen wie Schließ-, Median-, Reset-Preise usw. testen.

  2. Suche nach optimalen Parametermengen auf Basis historischer Daten.

  3. Integration anderer Indikatoren zur Beurteilung der Signalqualität, z. B. Lautstärksignale.

  4. Einbeziehung von Trend- und Zyklanalyse, um signifikante Trendkonflikte zu vermeiden.

Schlussfolgerung

Diese Strategie erfasst kurz- bis mittelfristige Umkehrchancen durch den Aufbau eines doppelten EMA-Filtersystems. Sie gehört zu einer klassischen und praktischen Markttimming-Strategie. Die Risiken können durch Parameteroptimierung, Signalfilterung und Stop-Loss-Mittel kontrolliert werden. Die Einbeziehung von Trendanalyse-Tools, um Höchstkäufe und Verkaufsabschnitte zu vermeiden, kann zu stetigen Gewinnen führen.


/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")

// Getting inputs
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

grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)

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)

//Strategy Testing

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "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=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

//Entry and Close settings
if testPeriod() 
    strategy.entry("grow", true, 10, when = grow, limit = close)
    strategy.close("grow", when = fall)
    strategy.close("grow", when = stop)
    
//if testPeriod() 
//   strategy.entry("fall", false, 1000, when = fall, limit = close)
//    strategy.close("fall", when = grow)    



Mehr