# Vorontsov Indicator
## Trend Recognition
Пусть есть последовательность Aggregated Price
$$
x_1, x_2, x_3, \ldots, x_t, \ldots
$$
Рассчитаем экспоненциальные сглаженные средние цен
\begin{align}
s_{1} &= x_1 \\
s_{t} &= \alpha x_t + (1 - \alpha) s_{t-1}, \quad t > 1
\end{align}
для нескольких значений $\alpha$ (например, $\frac{1}{4}, \frac{1}{8}, \frac{1}{16}, \frac{1}{32}, \frac{1}{64}$).
Рассчитаем также экспоненциальные сглаженные средние ошибок предсказаний и их модулей для каждого $\alpha$:
\begin{align}
\varepsilon_{t} &= \gamma (x_t - s_t) + (1 - \gamma) \varepsilon_{t-1} \\
\tilde{\varepsilon}_{t} &= \gamma \, |x_t - s_t| + (1 - \gamma) \tilde{\varepsilon}_{t-1}
\end{align}
Где $\gamma$, например $\frac{1}{20}$. Теперь можем определить величину $\large {K_t = \frac{\varepsilon_t}{\tilde{\varepsilon}_t}}$.
_Замечание: $K_t$ зависит от $\alpha$, так как $\varepsilon$ и $\tilde{\varepsilon}$ зависят от $s_t$, которое зависит от $\alpha$. То есть, всего у нас будет столько величин $K_t$, сколько мы взяли разных $\alpha$._
В чём её смысл? Если ошибки $\varepsilon_t$ очень часто больше нуля, то эта величина будет близка к единице. А ошибки будут часто больше нуля, если происходит восходящий тренд -- цена растёт, а наша модель предсказывает по сути среднее по нескольким последним наблюдениям, что не учитывает тренд и занижает прогноз. И наоборот, если ошибки часто меньше нуля, то $K_t$ близко к $-1$.
Таким образом, $K_t$ работает как trend recognition.
## Mean Reversion
Гипотеза, на которую полагаются mean-reversion модели -- цена колеблется, но всегда возвращается к некоторому среднему значению.
Считать это среднее можно разными способами -- в прошлом пункте мы уже посчитали несколько экспоненциальных средних $s_t$. Я буду писать их вот так: $s_t^{(\alpha)}$, чтобы подчеркнуть, что они разные и зависят от $\alpha$.
Какое из всех усреднений лучше? Мы можем использовать для этого $K_t$. В самом деле -- если $K_t$ близко к 1 или -1, это значит, что наша модель систематически недооценивает или систематически переоценивает цену -- то есть, работает плохо. Если же $K_t$ близко к 0, ошибки модели чередуют знаки, так что скорее всего модель работает лучше.
_Замечание: $K_t$ не учитывает, насколько большие ошибки у модели по модулю. То есть, если она ошибается на $+100, -100, +100, -100, \ldots,$ то $K_t$ всё ещё близок к нулю, потому что ошибки хоть и большие, но в среднем равны нулю.
Я также думаю над тем, чтобы использовать для выбора моделей $\tilde{\varepsilon}$, потому что он учитывает масштаб ошибок, но готовой идеи ещё нет._
Итоговый mean reversion:
1. Рассчитать экспоненциальные средние $s_t$ для нескольких значений $\alpha$.
2. Рассчитать соответствующие $K_t$
3. В каждый момент времени $t$ мы выбираем ту модель $s_t$, для которой $|K_t|$ наименьший, и предсказываем mean-reversion к этому среднему.
Что считать сигналом? Для лучшей модели $s_t$ у нас есть также оценка среднего модуля отклонения $\tilde{\varepsilon}$. Если $x_t > s_t + 2 \tilde{\varepsilon}$, то цена слишком высока, и модель предсказывает, что она упадёт, так что это сигнал открывать short-позицию. Если $x_t < s_t - 2 \tilde{\varepsilon}$, то цена слишком низкая, и надо вставать в long.
_Замечание: здесь я использовал ту же логику, что в Bollinger Bands: сигнал к действию -- слишком большое расхождение в реальной цене и предсказании mean-reversion. Может быть, её надо несколько переработать (как минимум, подобрать другую константу, а не 2): дело в том, что теперь у нас есть несколько моделей, и вряд ли все из них будут сильно расходиться._