Стратегия прорыва импульса

Автор:Чао Чжан, Дата: 2024-01-17 13:58:19
Тэги:

img

Обзор

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

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

Основным показателем этой стратегии является динамика цен, которая рассчитывается как:

momentum = close - close[n] 

где n представляет собой длину периода импульса. Когда импульс > 0, это означает, что цена росла в течение текущего периода. Когда импульс < 0, это означает, что цена падала в течение текущего периода.

Стратегия сначала устанавливает параметр confirmBars, который представляет количество свечей, необходимых для оценки тренда перед выполнением сделок. В пределах диапазона обратного теста, если импульс > 0 сохраняется для свечей confirmBars, производится длинный вход. Если импульс < 0 сохраняется для свечей confirmBars, производится короткий вход.

Ключ к суждению о тренде стратегии заключается в подсчете количества последовательных свечей, где импульс больше или меньше 0, что достигается с помощью переменных bcount и scount. Они увеличиваются на 1, когда соответствующее условие выполняется, и сброса на 0, когда условие не выполняется. Когда подсчет достигает confirmBars, соответствующая длинная или короткая торговля выполняется.

Преимущества стратегии

Это относительно простая тенденция, следующая за стратегией со следующими преимуществами:

  1. Простая логика, которую легко понять и реализовать
  2. Индикатор импульса чувствителен к изменениям цен и может быстро улавливать тенденции
  3. Настраиваемые параметры для корректировки чувствительности суждения
  4. Может использоваться в различных рыночных условиях

Стратегические риски

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

  1. Склонность к многократным колеблющимся сделкам и переоценкам
  2. Необходима разумная конфигурация параметров, особенно confirmBars для фильтрации колебаний
  3. Не может эффективно справляться с воздействием внезапных событий на рынке
  4. Различия между бэкстестом и торговлей в режиме реального времени, необходимая оптимизация данных и параметров

Оптимизация стратегии

Стратегия может быть оптимизирована в нескольких аспектах:

  1. Добавить логику стоп-лосса к контролю по риску торговли
  2. Добавить фильтры прорыва, чтобы избежать ложных сигналов от колебаний цен
  3. Регулировать параметры confirmBars и т. д. на основе различных продуктов и рыночных условий
  4. Включить другие показатели для подтверждения записей
  5. Использование методов машинного обучения для адаптации параметров и фильтров

Резюме

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


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)

confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")

price = close
momentum = close - close[momentumLength]

// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)

startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)

inBacktestRange = true

// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
    strategy.entry("Buy", strategy.long, comment="Long")

scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
    strategy.entry("Sell", strategy.short, comment="Short")

// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)


Больше