Индекс направленного движения Двухнаправленная стратегия торговли

Автор:Чао Чжан, Дата: 2023-12-19 14:13:52
Тэги:

img

Обзор

Эта стратегия рассчитывает индекс направленного движения (DI) товаров и объединяет его с предельными параметрами для реализации двусторонней торговли.

Принцип стратегии

Основным показателем этой стратегии является индекс направленного движения (DI).

DI+ = (DM+ / истинный диапазон) × 100 DI- = (DM- / истинный диапазон) × 100

Там, где DM+ представляет собой положительное направление движения, DM- представляет собой отрицательное направление движения.

Согласно определению DI, когда DI+ > DI-, это означает, что текущий рыночный импульс сильнее, относящийся к бычьему рынку; когда DI- > DI+, это означает, что медвежий импульс сильнее, чем бычий импульс, относящийся к медвежьему рынку.

Эта стратегия использует эту особенность и устанавливает предельный параметр. Когда DI + больше DI- на предельный параметр, он определяет, что текущий рынок является бычьим рынком и идет на длинный. Когда DI - больше DI + на предельный параметр, он определяет, что текущий рынок является медвежьим рынком и идет на короткий.

Например, если предельный параметр установлен на 3, то конкретными правилами торговли являются:

  1. Когда DI+ - DI- > 3, выбираем длинный
  2. Когда DI- - DI+ > 3, перейти на короткий срок

Поскольку часто существуют небольшие колебания между DI+ и DI-, установление предельного параметра может отфильтровать некоторые сделки без значительной направленности и уменьшить ненужные сделки.

Анализ преимуществ

Основными преимуществами этой стратегии являются:

  1. DI достоверно оценивает направленность рынка

    Диссертационный анализ напрямую оценивает рыночные тенденции, рассчитывая силу быков и медведей.

  2. Предельный параметр может эффективно фильтровать сигналы

    Предельный параметр фильтрует небольшие колебания без значительной направленности, выбирая только участки с значительной направленностью к торговле, избегая ловушки.

  3. Достижение автоматизированной двусторонней торговли

    Долгие и короткие позиции могут автоматически переключаться на основе индикатора DI без ручного суждения, что уменьшает сложность торговли.

  4. Настраиваемые временные рамки торговли

    Поддерживает настройку на торговлю только в пределах настраиваемого диапазона дат и автоматическое закрытие всех позиций после этого, гибко и удобно.

  5. Выбирается только длинный или короткий

    С помощью длинных и коротких переключателей можно выбрать только однонаправленные сигналы для реализации длинных или коротких стратегий, подходящих для различных рыночных условий.

Анализ рисков

Эта стратегия также сопряжена с некоторыми рисками:

  1. Возможность того, что ДИ дает неверные сигналы

    DI может давать краткосрочные неверные сигналы при резких колебаниях на рынке, что приводит к неудачным сделкам.

  2. Неправильные параметры предела

    Неправильное установление высоких или низких предельных параметров может привести к слишком малому или слишком большому количеству торговых сигналов.

  3. Невозможно определить конечную точку тренда

    ИИ может определить только текущее направление тенденции и не может судить о том, закончилась ли тенденция или перевернулась.

Решения для рисков включают:

  1. Сочетание скользящей средней и других показателей для фильтрации сигналов DI

  2. Настройка предельных параметров на основе результатов обратных испытаний

  3. Объем объема, MACD и т. д.

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована следующими способами:

  1. Комбинировать с другими показателями оценки тенденции, такими как Профиль рынка

    Объединение таких показателей, как Профиль рынка, который также интуитивно оценивает длинную короткую мощность с DI, может улучшить точность суждения.

  2. Добавить стратегии стоп-прибыли и стоп-потери

    Установка остановки прибыли, времени или процента остановки убытков может зафиксировать прибыль и уменьшить убытки.

  3. Корректировка параметров для конкретных продуктов

    Корректировка предельных параметров и сроков торговли в соответствии с различными характеристиками продукта может улучшить эффективность стратегии.

  4. Динамическая оптимизация с использованием машинного обучения

    Применение алгоритмов обучения усилению для динамической оптимизации параметров на основе живых сигналов.

Резюме

В общем, эта стратегия относительно проста и практична. Она использует расчеты 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()

Больше