Pairs Trading Kalman

Kalman Cointegration: Адаптивный парный арбитраж на фильтре Калмана

Published: 2026-06-25 · Trading

Введение Классический парный арбитраж основывается на поиске коинтегрированных активов (например, ETH и BTC), спред между которыми стационарен (возвращается к среднему).

⚡ Быстрый ответ

  • Adaptive pairs trading strategy using Engle-Granger cointegration and Kalman Filter state space modeling.
  • Dynamically estimates hedge ratios and spread mean reversion parameters in real-time.
MemIR AI Agent Summary
Adaptive pairs trading strategy using Engle-Granger cointegration and Kalman Filter state space modeling. Dynamically estimates hedge ratios and spread mean reversion parameters in real-time.

Executable Parameters

Contracts

BTCUSDT Perpetual: BTCUSDT [binance_futures]
ETHUSDT Perpetual: ETHUSDT [binance_futures]

RPC Endpoints

https://fapi.binance.com/fapi/v1/klines

Constants

confidence_level: 0.95
half_life_limit_days: 10
entry_zscore: 2
exit_zscore: 0

Safety Guards

Rule Max Limit Action On Breach
block_on_cointegration_break 0.05 liquidate_pairs_position

Руководство по интеграции

### Введение
Классический парный арбитраж основывается на поиске коинтегрированных активов (например, ETH и BTC), спред между которыми стационарен (возвращается к среднему). Однако стандартная оценка коэффициента хеджирования (hedge ratio) через метод наименьших квадратов (OLS) по скользящему окну имеет запаздывание и чувствительна к шуму. Применение **фильтра Калмана** (Kalman Filter) позволяет отслеживать динамическое соотношение цен в реальном времени как скрытое состояние.

### Модель в пространстве состояний (State Space Model)
Отношение двух активов \(y_t\) (ETH) и \(x_t\) (BTC) выражается через линейное уравнение наблюдения:

\[ y_t = \beta_t x_t + \alpha_t + e_t \]

Где параметры регрессии \(\theta_t = [\beta_t, \alpha_t]^T\) изменяются во времени по закону случайного блуждания (уравнение системы):

\[ \theta_t = \theta_{t-1} + w_t \]

Здесь \(e_t \sim N(0, V_t)\) — шум измерения, а \(w_t \sim N(0, W_t)\) — шум процесса.

### Алгоритм фильтра Калмана
Фильтр Калмана работает в два шага на каждом новом ценовом тике:
1. **Прогноз (Predict)**: Прогнозирование текущего вектора состояния \(\theta_{t|t-1}\) и ковариации ошибки \(P_{t|t-1}\) на основе предыдущего шага.
2. **Обновление (Update)**: Расчет невязки прогноза (ошибки отслеживания спреда) и коррекция вектора состояний с помощью коэффициента усиления Калмана (Kalman Gain):

\[ K_t = P_{t|t-1} x_t^T (x_t P_{t|t-1} x_t^T + V_t)^{-1} \]
\[ \theta_{t|t} = \theta_{t|t-1} + K_t (y_t - x_t \theta_{t|t-1}) \]

Это позволяет алгоритму мгновенно адаптировать размер позиции короткой ноги к длинной при изменении корреляции активов.

### Торговые сигналы и Z-Score
Спред рассчитывается как разность цен с учетом динамической беты:

\[ \text{spread}_t = y_t - \beta_t x_t - \alpha_t \]

На основе дисперсии спреда вычисляется его стандартизированное значение (Z-Score). При \(|\text{Z-Score}| > 2.0\) открывается парная позиция (лонг недооцененного актива, шорт переоцененного). При возвращении \(\text{Z-Score}\) к `0.0` позиция полностью закрывается.

### Защитные правила
Если тест Дики-Фуллера (ADF) или Йохансена отвергает коинтеграцию с уровнем значимости выше `0.05` (что означает структурный распад спреда), бот принудительно ликвидирует обе ноги позиции для предотвращения бесконечного убытка при расхождении цен.