Обсуждение статьи "Альтернатива временным барам (Часть 1): Построение баров активности и дисбаланса в Python и MQL5"

Опубликована статья Альтернатива временным барам (Часть 1): Построение баров активности и дисбаланса в Python и MQL5:

В данной статье сэмплирование по времени заменяется альтернативными типами баров Лопеса де Прадо. Представлены две согласованные реализации: унифицированный модуль Python для пакетной обработки истории тиков и объектно-ориентированная библиотека MQL5 для советников, работающих в реальном времени. В статье рассматриваются инфраструктура Parquet/Dask, очистка данных и единый API. Отдельно решаются практические задачи: фильтрация временных баров с нулевым тиковым объемом, инициализация порога дисбаланса, сохранение состояния экспоненциально взвешенного среднего (EWM) и обеспечение совпадения результатов Python и MQL5.

Модель, обученная на одноминутных барах, наследует допущение, не имеющее никакого отношения к рынку: будто каждое 60-секундное окно содержит одинаковое количество информации. Это не так. За минуту при открытии лондонской сессии могут пройти сотни тиков и произойти направленное движение; за минуту в 03:00 UTC в воскресенье — всего три тика без какого-либо сигнала. Если считать оба случая равнозначными наблюдениями, это приводит к появлению гетероскедастичности на уровне данных еще до вычисления каких-либо признаков.

В главе 1 книги Лопеса де Прадо "Advances in Financial Machine Learning" сэмплирование по времени заменяется альтернативными схемами, основанными на активности и рыночной направленности. В этой статье все десять типов баров из указанной главы реализованы в двух вариантах: унифицированном модуле Python (afml.data_structures.bars) для пакетной обработки многолетней истории тиков и объектно-ориентированной библиотеке MQL5 для потикового построения баров в реальном времени внутри советника.

В пайплайне решаются четыре практические проблемы: загрузка многолетних тиковых данных без превышения доступной памяти (чтение партиционированного хранилища Parquet с помощью Dask); очистка артефактов брокерского потока данных, нарушающих построение баров (нулевые спреды, дублирующиеся временные метки, индексы NaT); автоматическая калибровка адаптивного порога баров дисбаланса, чтобы первый бар не смещал историю экспоненциально взвешенного среднего (EWM); сохранение состояния EWM между перезапусками советника, чтобы порог не сбрасывался в середине сессии. Краткая проверка совпадения в конце подтверждает, что две реализации, получая один и тот же поток тиков, генерируют идентичные бары.

Beyond the Clock (Part 1): Building Activity and Imbalance Bars in Python and MQL5

Автор: Patrick Murimi Njoroge

Итак, вы придумываете графики без временной шкалы — с полосками равного объема, диапазонными полосками, Ренко и т. д.?

Странно читать такие вещи:

source of raw tick data via copy_rates_from_pos()

потому что эта функция возвращает котировки/бары, а не тики.

Stanislav Korotky #:

Итак, вы создаете графики без временной шкалы — например, с одинаковым объемом, диапазонные, Ренко и т. д.?

Странно читать такие вещи:

потому что эта функция возвращает котировки/бары, а не тики.

Бар с равным объемом, диапазонный бар и Ренко — это типы графиков, основанные на пороговых значениях: они формируют новый бар, когда цена проходит фиксированное расстояние или достигается фиксированный объем. Типы баров, описанные в этой статье, основаны на теории информации: они формируют новый бар, когда на рынке наблюдается определённое количество активности (тиков, объёма или оборота в долларах). Это различие важно, поскольку пороговое значение адаптируется к недавней активности, а не устанавливается однократно. Барные графики на основе дисбаланса идут дальше — они зависят от направленного дисбаланса потока ордеров, а не от общей активности, поэтому бары группируются вокруг периодов одностороннего давления. Это конструкции Лопеса де Прадо из главы 2 книги AFML; в данной статье они реализованы и портированы на MQL5, но не являются оригинальной разработкой.

Вы правы — функция CopyRatesFromPos() возвращает бары OHLCV, а не необработанные тики. Фраза «источник необработанных тиковых данных» в этом разделе является ошибкой в обозначении; функция используется для извлечения ряда баров, который служит входными данными для построения баров. Я исправил текст статьи. Спасибо, что заметили это.
Прекрасная статья. Давно интересна тема вневременных баров.