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:
Berechnung der prozentualen Abweichung des Preises von einem langen MA (z. B. 200-Tage-MA) als 1. DMI
Berechnung der Abweichung von einem mittleren MA (z. B. 50 Tage) als 2. DMI
Berechnung der Abweichung von einem kurzen MA (z. B. 20 Tage) als 3. DMI
Wenn der dritte DMI höher ist als der erste DMI, ist es bärisch.
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.
DMI kombiniert mehrjähriges Lookback für Robustheit
Vergleicht relative Stärke mit absoluten Werten
Flexible Zulassungsfristen für die Anpassung an den Markt
DMI hat Verzögerung und kann Umkehrungen verpassen
Sorgfältige Optimierung der Periodenparameter
Anfällig für mehrere falsche Signale
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")