Writeup · change-point detection
Ловля разворотов: математика четырёх ступеней
Теория, на которой стоит Reversal Lab: быстрая детекция смены знака дрейфа как компромисс «задержка против ложных тревог» — от EMA до оптимальной остановки на процессе Орнштейна–Уленбека.
Везде: leader A даёт сигнал, торгуем follower B (запаздывает на \(L\) баров).
Торгуемый ряд \(s_t\), дрейф \(\mu_t=\mathbb{E}[\Delta s_t]\). «Разворот» — смена знака дрейфа (для дна: \(\mu<0\to\mu>0\)).
Постановка
Задача — online change-point / quickest detection: засечь смену знака дрейфа быстро, но без ложных тревог. Две метрики — задержка \(D\) и среднее время до ложной тревоги \(\mathrm{ARL}_0\):
\[ D=\mathbb{E}\big[\,\tau-\theta \mid \tau\ge\theta\,\big],\qquad \mathrm{ARL}_0=\mathbb{E}\big[\,\tau \mid \text{no change-point}\,\big]. \]Любой детектор — точка на кривой \(D\) против \(\mathrm{ARL}_0\); одновременно мгновенно и без ложных нельзя.
Lead-lag
Follower повторяет тот же путь с задержкой: \(B_t \approx A_{t-L}+\varepsilon_t\). Детектор подтверждает разворот на leader с задержкой \(d\); follower достигает дна на \(L\) баров позже. При исполнении на follower по сигналу leader задержки гасятся:
\[ \underbrace{d}_{\text{detector lag}}\;+\;\underbrace{(-L)}_{\text{lead-time}}\;\approx\;0. \]Ступень 1 — EMA
\[ \mathrm{EMA}_t=\alpha\,s_t+(1-\alpha)\,\mathrm{EMA}_{t-1},\qquad \alpha=\frac{2}{N+1}. \]Три варианта сигнала «разворот вверх»:
1a — наклон сменил знак: \(g_t=\mathrm{EMA}_t-\mathrm{EMA}_{t-1}\), сигнал при \(g_{t-1}<0\le g_t\).
1b — цена пересекла EMA снизу вверх: \(s_{t-1}\le\mathrm{EMA}_{t-1}\) и \(s_t>\mathrm{EMA}_t\).
1c — быстрая EMA пересекла медленную: \(d_t=\mathrm{EMA}^{f}_t-\mathrm{EMA}^{s}_t\) пересекает \(0\).
Структурная задержка (средний «возраст» данных в EMA):
\[ \mathrm{lag}=\frac{1-\alpha}{\alpha} =\frac{1-\tfrac{2}{N+1}}{\tfrac{2}{N+1}} =\frac{N-1}{2}. \]Ступень 2 — z-score и ZigZag
EW-оценки среднего и дисперсии, нормированное отклонение:
\[ \mu_t=(1-\beta)\mu_{t-1}+\beta\,s_t,\qquad \nu_t=(1-\beta)\nu_{t-1}+\beta\,(s_t-\mu_t)^2,\qquad z_t=\frac{s_t-\mu_t}{\sqrt{\nu_t}}. \]Вход при \(|z|\ge z_{\mathrm{in}}\); выход у разворота — пересечение \(z\) через \(0\) (или порог \(z_{\mathrm{out}}<z_{\mathrm{in}}\)) с подтверждением \(k\) баров (гистерезис).
ZigZag по волатильности: от текущего минимума \(m_t\) разворот вверх при превышении порога в \(\sigma\):
\[ \theta_t=c\,\sigma_t,\qquad s_t-m_t\ \ge\ \theta_t. \]Ступень 3 — Kalman и BOCPD
Local linear trend: состояние \(x_t=(\ell_t,\,b_t)^\top\) = (уровень, скорость).
\[ \ell_t=\ell_{t-1}+b_{t-1}+\eta_t,\qquad b_t=b_{t-1}+\zeta_t,\qquad s_t=\ell_t+\varepsilon_t, \] \[ F=\begin{pmatrix}1&1\\[2pt]0&1\end{pmatrix},\qquad H=\begin{pmatrix}1&0\end{pmatrix},\qquad Q=\mathrm{diag}(\sigma_\eta^2,\sigma_\zeta^2),\qquad R=\sigma_\varepsilon^2. \]Предсказание:
\[ \hat x_{t\mid t-1}=F\,\hat x_{t-1\mid t-1},\qquad P_{t\mid t-1}=F\,P_{t-1\mid t-1}\,F^\top+Q. \]Обновление:
\[ \nu_t=s_t-H\hat x_{t\mid t-1},\qquad S_t=H\,P_{t\mid t-1}\,H^\top+R,\qquad K_t=P_{t\mid t-1}\,H^\top S_t^{-1}, \] \[ \hat x_{t\mid t}=\hat x_{t\mid t-1}+K_t\nu_t,\qquad P_{t\mid t}=(I-K_tH)\,P_{t\mid t-1}. \]Сигнал — скорость значимо сменила знак вверх (t-статистика по дисперсии скорости \([P_{t\mid t}]_{22}\)):
\[ T_t=\frac{\hat b_{t\mid t}}{\sqrt{[P_{t\mid t}]_{22}}},\qquad T_{t-1}<\tau^*\le T_t. \]BOCPD: апостериор по длине текущего сегмента (run-length) \(r_t\), hazard \(H=1/\lambda\):
\[ \gamma_t(r)=\gamma_{t-1}(r-1)\,\pi_t^{(r-1)}(1-H),\qquad \gamma_t(0)=\sum_{r'}\gamma_{t-1}(r')\,\pi_t^{(r')}\,H, \]Первое уравнение — рост текущего сегмента, второе (\(r=0\)) — разлад (сброс длины). Здесь \(\pi_t^{(r)}=p\big(s_t\mid s_{t-r:t-1}\big)\) — предиктив. Разворот = масса run-length коллапсирует в \(r=0\).
Ступень 4 — Shiryaev/CUSUM и OU optimal stopping
Наблюдение до/после неизвестного момента разлада \(\theta\):
\[ dX_t=\mu\,\mathbb{1}_{\{t\ge\theta\}}\,dt+\sigma\,dW_t. \]Апостериор \(\pi_t=\mathbb{P}(\theta\le t\mid\mathcal{F}_t)\) — фильтр Вонэма:
\[ d\pi_t=\lambda(1-\pi_t)\,dt+\frac{\mu}{\sigma}\,\pi_t(1-\pi_t)\,d\bar W_t. \]Минимизируя байес-риск \(\mathbb{P}(\tau<\theta)+c\,\mathbb{E}[(\tau-\theta)^+]\), оптимальное правило — порог по апостериору:
\[ \tau^*=\inf\{\,t:\pi_t\ge A^*\,\}. \]Дискретный рабочий эквивалент — CUSUM (Page), оптимальный по Лордену/Мустакидесу. Лог-правдоподобный вклад и накопитель:
\[ \ell_t=\log\frac{f_1(s_t)}{f_0(s_t)},\qquad g_t=\max\big(0,\;g_{t-1}+\ell_t\big),\qquad g_t\ge h, \]где \(f_0\) — плотность «до» (дрейф вниз), \(f_1\) — «после» (вверх). Порог \(h\) задаётся через целевой \(\mathrm{ARL}_0\) (приближение Сигмунда):
\[ \mathrm{ARL}_0\approx\frac{e^{\,h}-h-1}{\text{drift}}. \]OU optimal stopping. Спред как процесс Орнштейна–Уленбека, закрытие максимизирует дисконтированную выручку (издержки \(c\)):
\[ dX_t=\kappa(\bar\theta-X_t)\,dt+\sigma\,dW_t,\qquad V(x)=\sup_{\tau}\mathbb{E}_x\big[e^{-r\tau}(X_\tau-c)\big]. \]В зоне продолжения — обыкновенное ДУ \(\mathcal{L}V=rV\), где
\[ \mathcal{L}=\frac{\sigma^2}{2}\,\partial_{xx}+\kappa(\bar\theta-x)\,\partial_x. \]Решение \(V(x)=A\,F(x)\) с возрастающим фундаментальным решением \(F\). Условие гладкой склейки (smooth pasting) на границе \(b^*\):
\[ A\,F(b^*)=b^*-c,\qquad A\,F'(b^*)=1 \quad\Longrightarrow\quad F(b^*)=(b^*-c)\,F'(b^*). \]Корень \(b^*\) — оптимальный порог выхода, зависит от \(\kappa,\sigma,r,c\), а не от подгонки.