Эта стратегия торгуется на основе Индекса динамического импульса (DMI). DMI измеряет процентное отклонение между ценой и скользящими средними различной длины для определения тренда.
Логика торговли такова:
Расчет процентного отклонения цены от длинного MA (например, 200-дневного) как 1-го DMI
Вычислить отклонение от среднего MA (например, 50 дней) как 2-ю DMI
Расчет отклонения от короткого MA (например, 20-дневного) как 3-го DMI
Когда 3-й DMI выше 1-го DMI - медвежий, когда 3-й DMI ниже 2-го DMI - бычий.
Торговые сигналы, генерируемые на основе DMI-отношений
Сравнивая относительную силу динамически в периоды MA, DMI стремится определить поворотные моменты тренда.
DMI сочетает в себе многопериодный просмотр для надежности
Сравнивает относительную силу с абсолютными уровнями
Гибкие периоды MA для адаптации рынка
DMI имеет задержку и может пропустить обратные действия
Тщательная оптимизация параметров периода
Склонность к множественным ложным сигналам
DMI оценивает поворотные моменты, сравнивая динамику силы в несколько периодов MA. Оптимизация может соответствовать различным рыночным условиям.
/*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")