Квантовый анализ временных рядов | Метод бэк‑нормализации с округлением до степени 10
📌 Проблема: рывки на порядки в котировках
При анализе долгосрочных исторических данных (с 1996 года) для 85 валютных пар проекта Abscur мы обнаружили аномалии: в некоторые дни цена закрытия изменялась в 100 и более раз. Это не могло быть следствием реальных рыночных движений, так как даже при гиперинфляции дневные изменения редко превышают 50%. Пример — пара JPY/SEK (японская иена / шведская крона) в 2016–2017 годах демонстрировала вертикальные «ступеньки» с коэффициентами 0,01 и 100. Такие скачки делают любой статистический анализ (корреляции, волатильность, расчет абсолютных курсов) бессмысленным.
Рис.1. Исходный ряд JPY/SEK с разрывами (слева) и после нормализации (справа). Логарифмическая доходность до/после.
🧠 Природа артефактов: смена базы котировок
Поставщики финансовых данных (Yahoo Finance, AlphaVantage) иногда меняют масштаб представления валютной пары: вместо прямой котировки (1 JPY = 0,058 SEK) используют 100 JPY как единицу (5,8 SEK). При склейке таких рядов возникают скачки в 100 раз. Также возможна подмена прямой и обратной котировки. В нашем наборе данных артефакты обнаружены не только в JPY/SEK, но и в 11 других парах, преимущественно с экзотическими валютами (колумбийское песо, вьетнамский донг, пакистанская рупия и др.).
⚙️ Метод обнаружения и нормализации
Для каждой пары вычислялась логарифмическая доходность:
r(t) = ln(Close(t) / Close(t-1))
Дни с |r(t)| > 1,5 признавались кандидатами. Затем для каждого такого дня определялся коэффициент k = Close(t)/Close(t-1), округлялся до ближайшей степени 10 (10^round(log10(k))) и выполнялась бэк‑нормализация (от настоящего к прошлому): все цены до даты скачка умножались на округлённый коэффициент. Это сшивает ряд, устраняя ложную доходность, но сохраняя реальную динамику.
Алгоритм реализован в ETL-тетрадке abscur2, а отдельный ноутбук currency-jump-detection позволяет визуализировать процесс.
📊 Результаты скрининга 85 пар
После применения метода из 85 пар нормализация потребовалась для 12. Общее количество устранённых скачков — 74. Ниже приведена таблица пар с артефактами и итоговая статистика логарифмической доходности после очистки (нормальный диапазон для валют — до ±0,7).
| Пара | Кол-во артефактов | min log_return | max log_return |
|---|---|---|---|
| CHFHKD | 2 | -0.0916 | 0.1749 |
| GBPRUB | 4 | -0.4235 | 0.4278 |
| USDPKR | 6 | -0.6939 | 0.6912 |
| USDRUB | 4 | -0.6511 | 0.6468 |
| USDIDR | 4 | -0.2195 | 0.2122 |
| USDCOP | 18 | -0.6612 | 0.6535 |
| USDISK | 7 | -0.6092 | 0.7369 |
| USDTWD | 4 | -0.4848 | 0.5137 |
| USDCLP | 4 | -0.2833 | 0.2833 |
| JPYSEK | 5 | -0.0890 | 0.0677 |
| USDVND | 14 | -0.4220 | 0.4214 |
| CHFAUD | 2 | -0.0955 | 0.1664 |
💡 Значение для поиска «Альфы»
«Чистые» временные ряды — фундамент любой количественной стратегии. Теперь мы можем с уверенностью рассчитывать абсолютные курсы, корреляции и скользящие волатильности без искажений, вызванных техническими артефактами. Это открывает дорогу к созданию динамических портфелей с контролируемой просадкой — именно то, что мы называем «скрытой альфой» на валютном рынке.
В следующих публикациях мы применим очищенные данные к методу главных компонент (PCA) и построим карту скрытых факторов, управляющих глобальными валютными потоками.
📁 Где взять данные и код?
- Итоговый файл с нормализованными парными курсами: Kaggle — abscur2 / pairs_close.csv
- Алгоритм обнаружения и нормализации: Kaggle — currency-jump-detection
- Интерактивные графики всех валютных пар: abscur.ru — страница мониторинга
Подписывайтесь на обновления проекта в Telegram и VK. Ежедневные расчёты абсолютных курсов — ваш компас в мире валют.
