Эта стратегия рассчитывает индекс направленного движения (DI) товаров и объединяет его с предельными параметрами для реализации двусторонней торговли.
Основным показателем этой стратегии является индекс направленного движения (DI).
DI+ = (DM+ / истинный диапазон) × 100 DI- = (DM- / истинный диапазон) × 100
Там, где DM+ представляет собой положительное направление движения, DM- представляет собой отрицательное направление движения.
Согласно определению DI, когда DI+ > DI-, это означает, что текущий рыночный импульс сильнее, относящийся к бычьему рынку; когда DI- > DI+, это означает, что медвежий импульс сильнее, чем бычий импульс, относящийся к медвежьему рынку.
Эта стратегия использует эту особенность и устанавливает предельный параметр. Когда DI + больше DI- на предельный параметр, он определяет, что текущий рынок является бычьим рынком и идет на длинный. Когда DI - больше DI + на предельный параметр, он определяет, что текущий рынок является медвежьим рынком и идет на короткий.
Например, если предельный параметр установлен на 3, то конкретными правилами торговли являются:
Поскольку часто существуют небольшие колебания между DI+ и DI-, установление предельного параметра может отфильтровать некоторые сделки без значительной направленности и уменьшить ненужные сделки.
Основными преимуществами этой стратегии являются:
DI достоверно оценивает направленность рынка
Диссертационный анализ напрямую оценивает рыночные тенденции, рассчитывая силу быков и медведей.
Предельный параметр может эффективно фильтровать сигналы
Предельный параметр фильтрует небольшие колебания без значительной направленности, выбирая только участки с значительной направленностью к торговле, избегая ловушки.
Достижение автоматизированной двусторонней торговли
Долгие и короткие позиции могут автоматически переключаться на основе индикатора DI без ручного суждения, что уменьшает сложность торговли.
Настраиваемые временные рамки торговли
Поддерживает настройку на торговлю только в пределах настраиваемого диапазона дат и автоматическое закрытие всех позиций после этого, гибко и удобно.
Выбирается только длинный или короткий
С помощью длинных и коротких переключателей можно выбрать только однонаправленные сигналы для реализации длинных или коротких стратегий, подходящих для различных рыночных условий.
Эта стратегия также сопряжена с некоторыми рисками:
Возможность того, что ДИ дает неверные сигналы
DI может давать краткосрочные неверные сигналы при резких колебаниях на рынке, что приводит к неудачным сделкам.
Неправильные параметры предела
Неправильное установление высоких или низких предельных параметров может привести к слишком малому или слишком большому количеству торговых сигналов.
Невозможно определить конечную точку тренда
ИИ может определить только текущее направление тенденции и не может судить о том, закончилась ли тенденция или перевернулась.
Решения для рисков включают:
Сочетание скользящей средней и других показателей для фильтрации сигналов DI
Настройка предельных параметров на основе результатов обратных испытаний
Объем объема, MACD и т. д.
Стратегия может быть дополнительно оптимизирована следующими способами:
Комбинировать с другими показателями оценки тенденции, такими как Профиль рынка
Объединение таких показателей, как Профиль рынка, который также интуитивно оценивает длинную короткую мощность с DI, может улучшить точность суждения.
Добавить стратегии стоп-прибыли и стоп-потери
Установка остановки прибыли, времени или процента остановки убытков может зафиксировать прибыль и уменьшить убытки.
Корректировка параметров для конкретных продуктов
Корректировка предельных параметров и сроков торговли в соответствии с различными характеристиками продукта может улучшить эффективность стратегии.
Динамическая оптимизация с использованием машинного обучения
Применение алгоритмов обучения усилению для динамической оптимизации параметров на основе живых сигналов.
В общем, эта стратегия относительно проста и практична. Она использует расчеты DI
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Noro's DI Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") len = input(title="Length", defval=14) limit = input(3, title = "limit, %") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //DI TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementMinus = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 //Trend trend = 0 trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1] //Background col = trend == 1 ? lime : red bgcolor(col, transp = 80) //Lines plot(DIPlus, color=lime, title="DI+", linewidth = 3) plot(DIMinus, color=red, title="DI-", linewidth = 3) //Trading size = strategy.position_size lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if trend == 1 strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if trend == -1 strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()