Стратегия торговли транзитивным коэффициентом на основе фильтра Калмана и средней реверсии

Автор:Чао Чжан, Дата: 2023-12-29 17:23:14
Тэги:

img

Обзор

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

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

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

Для того, чтобы фильтровать сигнал соотношения плавно, стратегия использует алгоритм фильтра Калмана. Фильтр Калмана взвешивает фактическое наблюдаемое значение соотношения с прогнозируемым значением и обновляет прогноз соотношения в режиме реального времени. И рассчитывает плавное значение фильтра Калмана. Торговые сигналы генерируются, когда фильтрованное значение превышает 2 стандартных отклонения выше или ниже нормальных уровней.

Кроме того, стратегия также учитывает факторы объема торговли. Реальные торговые сигналы генерируются только при большом объеме торговли. Это избегает некоторых ложных сделок.

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

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

Во-вторых, сочетание объемов торговли также повышает практическую применимость стратегии.

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

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

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

Первый - это риск модели. Некоторые ключевые параметры в модели фильтра Калмана, такие как вариантность шума процесса, вариантность шума наблюдения и т. Д., Необходимо оценить на основе исторических данных. Если оценка неточна или происходит значительное изменение рыночных условий, это приведет к отклонению в прогнозе модели.

Во-вторых, есть риск расходов на скольжение. Частая торговля повлечет за собой более высокие расходы на скольжение, что снизит доходность стратегии. Оптимизация параметров и фильтрация объема транзакций могут до некоторой степени уменьшить ненужные транзакции.

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

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

Существует возможность дальнейшей оптимизации стратегии:

  1. Использование более сложных моделей глубокого обучения для адаптации и прогнозирования коэффициентов цен. Это может повысить точность и надежность модели.

  2. Оптимизировать правила фильтрации объема торговли для достижения более динамичных и интеллектуальных параметров порога.

  3. Проверяйте различные рыночные индексы в качестве стратегических ориентиров и выбирайте индексы с меньшими и более стабильными колебаниями.

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

  5. Использование высокочастотных внутридневных данных для обратного тестирования и оптимизации стратегии. Это улучшает реальную торговую производительность стратегии.

Заключение

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


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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/
// © xXM3GAXx

//@version=5
strategy("My strategy", overlay=true)

//SPY or QQQ
context = request.security("BTC_USDT:swap", timeframe.period, input(close))
//our stock
particular = input(close)

//ratio
src = ta.roc(particular, 1) / math.abs(ta.roc(context, 1))

//kalman calculation
Sharpness = input.float(1.0)
K = input.float(1.0)


greencolor =  color.lime
redcolor =  color.red

velocity = 0.0
kfilt = 0.0

Distance = src - nz(kfilt[1], src)
Error = nz(kfilt[1], src) + Distance * math.sqrt(Sharpness*K/ 100)
velocity := nz(velocity[1], 0) + Distance*K / 100
kfilt := Error + velocity

//2 std devs up and down
upper = kfilt[1] + 2 * ta.stdev(kfilt, input(20))
lower = kfilt[1] - 2 * ta.stdev(kfilt, input(20))

//plotting for visuals
plot(kfilt, color=velocity > 0 ? greencolor : redcolor, linewidth = 2)
plot(upper)
plot(lower)
//plot(ta.ema(ta.roc(particular, 1)/ta.roc(context, 1), 5), color = #00ffff, linewidth=2)

//volume data
vol = volume
volema = ta.ema(volume, 10)

//buy when ratio too low
longCondition = kfilt<=lower and vol>=volema
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

//sell when ratio too high
shortCondition = kfilt>=upper and vol>=volema
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


Больше