Руководство по интеграции
### Введение
Классический парный арбитраж основывается на поиске коинтегрированных активов (например, 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` (что означает структурный распад спреда), бот принудительно ликвидирует обе ноги позиции для предотвращения бесконечного убытка при расхождении цен.
Классический парный арбитраж основывается на поиске коинтегрированных активов (например, 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` (что означает структурный распад спреда), бот принудительно ликвидирует обе ноги позиции для предотвращения бесконечного убытка при расхождении цен.