Суточная стратегия торговли с двойным DI Crossover

Автор:Чао Чжан, Дата: 2023-11-13 11:32:08
Тэги:

img

Обзор

Эта стратегия генерирует торговые сигналы, основанные на перекрестке положительного направленного индикатора (DI +) и отрицательного направленного индикатора (DI-) рассчитанных на основе среднего истинного диапазона (ATR).

Логика стратегии

  1. Вычислить ATR ((14): Вычислить средний реальный диапазон за последние 14 дней с использованием высоких, низких и близких цен.

  2. Вычислить DI+ и DI-:

    • Диапазон измерений (DIA)

    • Ди- = 100 * RMA(MAX(DOWN,0),N) / ATNR

    где UP - это разница между текущим максимумом и предыдущим закрытием, DOWN - это разница между текущим минимумом и предыдущим закрытием, N - это параметровый период, по умолчанию до 14, а ATNR - это ATR, рассчитанный с шага 1.

  3. Определить вход и выход:

    • Когда DI+ пересекает DI-, генерируется сигнал покупки.

    • При переходе DI+ ниже DI-, генерируется сигнал продажи.

  4. Установите стоп-лосс и принимайте прибыль:

    • Длинный стоп-лосс - это цена входа минус ATR, умноженная на множитель стоп-лосса

    • Продолжительная прибыль - это цена входа плюс ATR, умноженная на множитель прибыли.

    • Короткий стоп-лосс - это цена входа плюс ATR, умноженная на множитель стоп-лосса

    • Короткая прибыль - это цена входа минус ATR, умноженная на множитель прибыли.

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

  1. Использование перекрестка DI+/DI- для определения обратного направления тренда обеспечивает своевременный сигнал о новом направлении тренда.

  2. ATR как динамический индикатор стоп-лосс/приобретения прибыли может устанавливать разумные уровни на основе волатильности рынка.

  3. Стратегия имеет несколько параметров и легко понять и реализовать.

  4. Результаты обратных тестов показывают, что эта стратегия имеет положительный коэффициент прибыли и превосходит buy & hold.

Риски и решения

  1. Риск ложного сигнала в результате перекрестки DI

    • Фильтруйте сигналы с движущимися средними и т.д., чтобы избежать ложного прорыва.
  2. Стоп-лосс/прибыль слишком близко

    • Настройка ATR мультипликатора для учета волатильности.
  3. Неэффективность на рынке с ограниченным диапазоном

    • Комбинировать с другими показателями для фильтрации сигналов в консолидации.
  4. Риск привлечения

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

Советы по оптимизации

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

  2. Используйте размещение позиций, как фиксированный дробный или Мартингейл, чтобы контролировать снижение и повысить рентабельность.

  3. Оптимизировать параметры ATR для соответствия волатильности различных торговых инструментов.

  4. Оптимизация параметров на период DI, период ATR, мультипликатор ATR и т. д. для поиска оптимальной комбинации.

  5. Добавьте логику ночной и ранней сессии, чтобы использовать стратегию 24/7.

Заключение

Это простая и практичная стратегия, генерирующая сигналы от DI кроссовера и устанавливающая динамическую стоп-лосс / take profit с ATR. С несколькими параметрами ее легко протестировать и оптимизировать. Но DI кроссовер менее эффективен во время консолидации. В будущем сочетание дополнительных фильтров является основной областью улучшения. В целом эта стратегия демонстрирует стабильную производительность, подходящую для краткосрочной дневной торговли.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TheHulkTrading
//@version=4
strategy("DI Crossing Daily Straregy HulkTrading", overlay=true)
// ATR Multiplier. Recommended values between 1..4
atr_multiplier = input(1, minval=1, title="ATR Multiplier") 
//Length of DI. Recommended default value = 14
length = input(14, minval=1, title="Length di")
up = change(high)
down = -change(low)
range = rma(tr, 14)

//DI+ and DI- Calculations
di_plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, length) / range)
di_minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, length) / range)

//Long and short conditions
longCond = crossover(di_plus,di_minus)
shortCond = crossunder(di_plus,di_minus) 


//Stop levels and take profits
stop_level_long = strategy.position_avg_price - atr_multiplier*atr(14)
take_level_long = strategy.position_avg_price + 2*atr_multiplier*atr(14)
stop_level_short = strategy.position_avg_price + atr_multiplier*atr(14)
take_level_short = strategy.position_avg_price - 2*atr_multiplier*atr(14)


//Entries and exits 
strategy.entry("Long", strategy.long, when=longCond)
strategy.exit("Close Long","Long", stop=stop_level_long, limit = take_level_long)
strategy.entry("Short", strategy.short, when=shortCond)
strategy.exit("Close Short","Short", stop=stop_level_short, limit = take_level_short)



Больше