Strategie für einen dynamischen Momentumindex

Schriftsteller:ChaoZhang, Datum: 2023-09-14 16:15:42
Tags:

Strategie Logik

Diese Strategie handelt anhand des Dynamic Momentum Index (DMI), der die prozentuale Abweichung zwischen Preis und gleitenden Durchschnitten unterschiedlicher Länge misst, um den Trend zu bestimmen.

Die Handelslogik lautet:

  1. Berechnung der prozentualen Abweichung des Preises von einem langen MA (z. B. 200-Tage-MA) als 1. DMI

  2. Berechnung der Abweichung von einem mittleren MA (z. B. 50 Tage) als 2. DMI

  3. Berechnung der Abweichung von einem kurzen MA (z. B. 20 Tage) als 3. DMI

  4. Wenn der dritte DMI höher ist als der erste DMI, ist es bärisch.

  5. Handelssignale, die auf der Grundlage der DMI-Beziehung erzeugt werden

Durch den dynamischen Vergleich der relativen Stärke über MA-Perioden hinweg zielt DMI darauf ab, Trendwendepunkte zu identifizieren.

Vorteile

  • DMI kombiniert mehrjähriges Lookback für Robustheit

  • Vergleicht relative Stärke mit absoluten Werten

  • Flexible Zulassungsfristen für die Anpassung an den Markt

Risiken

  • DMI hat Verzögerung und kann Umkehrungen verpassen

  • Sorgfältige Optimierung der Periodenparameter

  • Anfällig für mehrere falsche Signale

Zusammenfassung

DMI beurteilt Wendepunkte, indem es die Stärke der Dynamik der Multi-MA-Perioden vergleicht.


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

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 31/06/2018
// The related article is copyrighted materialfrom Stocks & Commodities Dec 2009
// My strategy modification.
//
// You can change long to short in the Input Settings
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="CMOaDisparity Index Backtest")
LengthFirst = input(200, minval=1)
LengthSecond = input(50, minval=1)
LengthThird = input(20, minval=1)
ShowFirst = input(type=bool, defval=true)
ShowSecond = input(type=bool, defval=true)
ShowThird = input(type=bool, defval=true)
reverse = input(false, title="Trade reverse")
xEMAFirst = ema(close,LengthFirst)
xEMASecond  = ema(close,LengthSecond)
xEMAThird  = ema(close,LengthThird)
xResFirst = 100 * (close - xEMAFirst) / close
xResSecond = 100 * (close - xEMASecond) / close
xResThird = 100 * (close - xEMAThird) / close
pos = iff(xResThird > xResFirst, -1,
       iff(xResThird < xResSecond, 1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(ShowFirst ? xResFirst : na, color=red, title="DIX 1")
plot(ShowSecond ? xResSecond : na, color=blue, title="DIX 2")
plot(ShowThird ? xResThird : na, color=green, title="DIX 3")

Mehr