
Эта стратегия основана на пересечении среднего истинного диапазона (ATR) и трендового индикатора (DMI) с позитивным индикатором (DI+) и отрицательным индикатором (DI-), чтобы определить время покупки и продажи. Эта стратегия относится к стратегии отслеживания тенденций, которая определяет поворотные точки в тренде с помощью пересечения DI+ и DI-, ATR используется для установки стоп-лосс и стоп-стоп цен.
ATR ((14)): рассчитывается средний реальный диапазон колебаний с использованием максимума, минимума и закрытия за последние 14 дней
Расчет DI+ и DI-:
DI+ = 100 * RMA(MAX(UP,0),N) / ATNR
DI- = 100 * RMA(MAX(DOWN,0),N) / ATNR
где UP - разница между сегодняшним максимумом и вчерашним закрытием, DOWN - разница между сегодняшним минимумом и вчерашним закрытием, N - длина параметров, по умолчанию 14, ATNR - ATR, полученный от предыдущего шага
Покупка и продажа:
Когда DI+ наносится на DI-, генерируется сигнал покупки
Когда DI+ попадает под DI-, генерируется сигнал продажи
Настройка стоп-стоп:
множественная единая стоп-стоп цена за вычетом ATR, умноженная на множитель стоп-стоп
Многооднократная цена за входную цену плюс ATR, умноженная на множитель цены за остановку
Стоп-стоп на пустую билетную цену плюс ATR, умноженный на множитель стоп-стоп
Стоп-цены на пустые билеты - это цена входа за вычетом ATR, умноженная на стоп-цену.
Использование пересечения DI+ и DI- для определения переменных в тренде позволяет своевременно улавливать новые тенденции
ATR - динамический индикатор стоп-стоп, позволяющий установить разумные стоп-стоп-стоп в зависимости от степени волатильности рынка
Меньше параметров стратегии, легче понять и реализовать
По данным ретроспекции, эта стратегия имеет положительный коэффициент прибыли и превосходит стратегию покупки и хранения.
Скрещивание DI может привести к ошибочным сделкам
Стоп-стоп слишком близко
Неэффективная борьба с рыночными колебаниями
Риск отступления
Фильтрация пересекающихся сигналов DI в сочетании с индикаторами, такими как движущиеся средние, чтобы избежать ошибочных сделок в условиях шока
Добавление механизмов управления позициями, таких как фиксированные доли, Мартингель и другие, для контроля отступлений и повышения прибыльности
Оптимизация параметров ATR, чтобы приостановка и остановка соответствовали диапазону колебаний различных торговых видов
Оптимизация параметров, чтобы найти оптимальные комбинации параметров, такие как циклы DI, ATR и ATR
Добавление логики трейдинга в ночных и утренних дисках, чтобы стратегия работала круглосуточно
Эта стратегия в целом довольно проста и практична, она определяет время покупки и продажи с помощью перекрёстков DI, а также использует динамические настройки 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)