Торговые стратегии являются основной частью каждой системы алгоритмической торговли. Для их проектирования и разработки требуется инфраструктура для тестирования, проверки и проверки производительности и точности. Эти процессы обычно используют исторические финансовые данные для изучения очевидных и скрытых рыночных ценовых моделей, извлечения простых или сложных правил и применения полученных знаний к будущим решениям. Эти процессы называются тестированием на истории.

Совершенная, быстрая и гибкая платформа для тестирования на исторических данных необходима для разработки продуктов для алгоритмической торговли. Многие пакеты, библиотеки или платформы для тестирования на исторических данных доступны в Интернете. Хотя эти инструменты охватывают большинство требований для разработки торговой системы, они обычно слишком общие, чтобы их могли использовать фирмы или финансовые корпорации. Следовательно, проектирование и разработка специализированной платформы для тестирования на исторических данных в соответствии с конкретными требованиями имеет важное значение. В Eveince мы делаем все возможное, чтобы создать нашу индивидуальную платформу для тестирования на исторических данных, чтобы удовлетворить наши потребности на основе наших процедур разработки технологий. В этой статье описывается архитектура настраиваемой платформы для тестирования на исторических данных, которая делает процесс более гибким и быстрым, а также подробно обсуждаются ее элементы.

Данная многоуровневая платформа для тестирования на исторических данных логически изолирует каждый уровень в виде отдельных модулей. Такая архитектура помогает разделить различные части, что делает процесс разработки более оптимизированным и простым. Единственное требование, которое следует учитывать при таком подходе, — это определение стандартных входных и выходных данных для каждого модуля или уровня, чтобы сделать связь между ними более управляемой и легко связать данные. Независимо от сложности каждого уровня, эта архитектура предоставляет возможность параллельной разработки для количественных членов команды. На рис. 1 показана многоуровневая архитектура.

Как видите, большинство слоев состоит из нескольких подслоев, которые являются подмодулями с более широким функционалом. Подобно логически связанным модулям, все разделенные данные также логически связаны с временным индексом, что позволяет объединять различные части данных.

Первый уровень: выборка данных

Биржи часто предоставляют трейдерам стандартные API для получения исторических данных. Приоритетом является доступ к ценовым данным с различными временными интервалами и точная информация для создания платформы для тестирования на исторических данных. Этот слой реализует функции или методы для получения данных с различных бирж через стандартные API и их сохранения в формате цена свечи OLHCV. В этой части пользователю просто нужно определить время начала и окончания данных, список символов и временной интервал. Пока мы фиксируем формат ввода и вывода в этом слое, мы можем изменить внутренние API и логику обмена. У нас есть две разные функции для получения данных. Один основан на временном диапазоне, а другой — на количестве точек данных. Более подробно показано на рис.2.

Второй уровень: извлечение признаков

Этот слой состоит из двух разных модулей. Первый — это извлечение признаков, а второй — маркировка. Каждой модели машинного обучения нужны данные в качестве вектора признаков для работы, а также требуются метки, если используются контролируемые методы. В Eveince группа данных стремится разрабатывать количественные торговые стратегии с особым упором на методы и модели машинного обучения. Следовательно, векторы признаков являются одним из наиболее важных аспектов нашей работы. Этот слой использует в качестве признаков технические индикаторы, фундаментальные данные и дополненные переменные. Вы можете обогатить свою библиотеку индикаторов, добавив наиболее полезные технические индикаторы и разработав новые индикаторы для представления дополнительных аспектов ценовых данных в вашем наборе индикаторов.

Одним из важных средств на этом уровне является файл конфигурации, описывающий вектор признаков в виде справочного листа. Трейдер определяет функции, параметры и методы нормализации в этом файле, что делает новые функции намного более простыми, чем другие подходы.

Второй подуровень связан с маркировкой. Все проблемы классификации или вообще все контролируемые модели нуждаются в метках, чтобы различать разные классы, чтобы разобраться в проблеме. Иногда метки рассчитываются непосредственно по детальным данным, но обычно мы используем сложные метки, которые более точно различают пространство. В этом слое реализованы все необходимые методы расчета меток.

Таким образом, входными данными этого слоя являются необработанные данные о ценах в виде файлов CSV, а выходными данными являются окончательные векторы признаков и метки, которые отдельно хранятся в файлах CSV. Все детали слоя извлечения признаков показаны на рисунке 3.

Третий уровень: подгонка модели и прогнозирование

Этот уровень состоит из трех очень важных подуровней в нашей процедуре тестирования на исторических данных. На первом подуровне тщательно выполняются действия по обучению и выводу, что является наиболее важной частью нашей платформы. На этом этапе определяется способ, которым мы распознаем шаблоны из векторов признаков и как их количественно анализировать. Мы просто меняем логику в этих процедурах, чтобы исследовать новые идеи или модели. Чтобы запустить этот подуровень, нам нужно определить данные для обучения и тестирования, время для тестирования на истории и параметры модели. Фаза обучения должна выполняться, когда мы строим новые модели, но фаза вывода всегда выполняется во время тестирования на исторических данных. Выходными данными являются вероятности и оценки достоверности выводов; в большинстве случаев мы не можем использовать их напрямую для принятия окончательных решений. Исходя из этого, нам нужен еще один подуровень, который получает выводы выводов и преобразует их в ожидания, которые можно использовать в качестве данных для создания окончательных заказов. Этот слой представляет собой сопоставление между выводами и ожиданием поведения рынка.

Последний уровень, называемый стоп-лосс, используется для добавления стоп-лосса в исполнение на основе фиксированных правил. Он добавляет флаги, которые указывают время срабатывания стоп-лосса, и мы должны учитывать эти моменты времени при исполнении. Детали этого слоя показаны на рис.4.

Уровень четвертый: исполнение

Исполнение — это основной уровень для создания и исполнения ордеров, которые генерируют портфели. Он состоит из двух подуровней: исполнения и ребалансировки портфеля. Первый использует значения ожидания из предыдущего слоя и конвертирует их в исполняемые ордера на бирже. Как и на других платформах для тестирования на истории, стоимость портфеля рассчитывается путем моделирования исполнения без ограничения объема. Выполнение может быть долгим или коротким, и мы поддерживаем как точечные, так и будущие методы исполнения. В этом разделе функция использует для исполнения параметры из конфигурационного файла и ценовые данные. Каждый ордер, выполненный в моделировании, будет обновлять стоимость портфеля. Это означает, что точная стоимость актива должна быть рассчитана в соответствии с прибылью или убытком от сделки и комиссией, которая должна быть уменьшена с актива на основе суммы сделки. В этом разделе мы также управляем риском, корректируя размер позиции на основе риска, который мы можем допустить, путем измерения риска активов и будущих ожиданий.

На втором подуровне, который является необязательным, мы перебалансируем портфель и перераспределяем активы в соответствии с производительностью и риском. Этому слою требуется один полный портфель для первой итерации, а затем он вычисляет метрики по пунктам и запускает методы повторной балансировки. На этом уровне процесс выполнения запускается несколько раз в зависимости от триггерных точек, каждый раз создавая новый портфель.

Выходными данными являются стоимость портфеля и другие расчетные показатели, такие как количество сделок, стоимость покупки и удержания и сумма наличных. Детали этого слоя показаны на рисунке 5.

Уровень пятый: Аналитика

Этот уровень разработан для наблюдения и анализа результатов обратного тестирования и показателей эффективности портфеля. Он состоит из двух подуровней, и первый отвечает за генерацию данных эксперимента для сегмента визуализатора. Этот слой делит вывод на производительность брокера и отдельных символов.

Второй слой визуализирует данные эксперимента с различными диаграммами и таблицами или графиками. У нас также есть компаратор для одновременного сравнения результатов и производительности нескольких портфелей.

Фархад Азаджу, инженер по машинному обучению и количественный исследователь, Eveince.