Индикатор импульса Долгая краткосрочная стратегия

Автор:Чао Чжан, Дата: 2023-11-02 16:34:48
Тэги:

img

Обзор

Эта стратегия использует индикаторы импульса, включая средний индекс направления (ADX), индекс направления движения (DMI) и индекс товарного канала (CCI), для определения направления тренда и следования тенденциям.

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

  1. Расчет показателей ADX, DMI и CCI.

    • Высокий ADX указывает на сильную тенденцию.
    • DMI включает в себя DI+ и DI-. DI+ показывает силу восходящего тренда, а DI- показывает силу нисходящего тренда. Если DI+ больше DI-, это восходящий тренд и наоборот.
    • CCI оценивает уровни перекупленности/перепродажи: ниже -100 - перепроданность, а выше 100 - перекупленность.
  2. Определите направление тренда.

    • Когда DI+ пересекает DI-, выявляется восходящий тренд.
    • Когда DI- переходит ниже DI+, определяется нисходящий тренд.
  3. Войдите на позиции.

    • При формировании восходящего тренда ADX высокий, а CCI < -100 - длинный.
    • При формировании нисходящего тренда ADX становится высоким, а CCI > 100 становится коротким.
  4. Выходные позиции со стоп-лосом.

    • Когда длинный, выйти, когда DI- переходит ниже DI+.
    • Когда короткий, выйти, когда DI + пересекает над DI-.

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

  1. ADX отфильтровывает торговлю во время слабых тенденций.

  2. DMI уменьшает ошибки в определении тренда.

  3. Принятие мер по чрезмерному продлению CCI улучшает сроки и снижает риск.

  4. Объединение индикаторов импульса повышает точность.

  5. Ограничения по потерям стоп-лосса на одну сделку.

Риски и хеджирование

  1. Поднимите порог ADX, чтобы обеспечить достаточно сильный тренд.

  2. DMI отстает от тренда на ранней стадии. Добавьте другой анализ для выявления возможностей.

  3. Высокая торговая частота CCI. Расширить диапазон CCI для фильтрации шума.

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

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

  1. Оптимизировать параметры ADX для сбалансирования фильтрации шума и тенденции улавливания.

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

  3. Оптимизировать параметры CCI для сбалансирования частоты торговли и отслеживания отклонений.

  4. Проверка добавления или изменения индикаторов для улучшения комбинаций, например MACD, KDJ.

  5. Испытать на разных продуктах, чтобы найти лучшее соответствие.

  6. Оптимизировать размер позиций для контроля риска при сохранении отслеживания трендов.

Заключение

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


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true)
adxlen = input(9, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_Entry = input(25, title="ADX Entry")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)
cci_length = input(20, minval=1, title="CCI Length")
cci_ma = sma(close, cci_length)
cci = (close - cci_ma) / (0.015 * dev(close, cci_length))

stop_loss = syminfo.mintick * 100


open_longs = strategy.position_size > 0
open_shorts = strategy.position_size < 0

possible_bull = false
possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false
possible_bear = false
possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false



bool bull_entry = crossover(up,down)

if(bull_entry and up < ADX_Entry and cci < 0)
	possible_bull := true
	bull_entry := false

if(possible_bull and up > ADX_Entry and cci > -100)
	bull_entry := true

bool bear_entry = crossover(down,up)

if(bear_entry and down < ADX_Entry and cci > 0)
	possible_bear := true
	bear_entry := false

if(possible_bear and down >= ADX_Entry and cci < 100)
	bear_entry := true

strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry)
strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry )	

strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))


Больше