Добро пожаловать в StarQuant!
StarQuant — это лёгкий, ориентированный на индивидуальных (обычных) пользователей комплексный количественный торговый бэктестер, который в настоящее время используется для алгоритмической торговли фьючерсами и опционами (CTP-интерфейс, тестирование на реальном рынке), а также поддерживает функции торговли акциями (XTP-интерфейсы от Zhongtai и OES, тестируются и совершенствуются).
Текущее состояние: завершена бета-версия 1.0. В тестировании на реальном рынке CTP:
-
Для ликвидных инструментов с большими объёмами сделок тикового уровня результаты бэктеста совпадают с временем и ценой исполнения сделок на реальном рынке;
-
Без вмешательства человека серверы Aliyun/Tencent работают непрерывно 7*24 часа, API-киоски автоматически переподключаются при отключении, данные о состоянии рынка автоматически записываются, стратегии автоматически инициализируются, запускаются и останавливаются.
Особенности функционала
- Используется многопроцессорность и многопоточность: потоки обработки данных о состоянии рынка, выполнения стратегий, графического интерфейса пользователя являются независимыми процессами, поддерживаются различные режимы межпроцессного взаимодействия, для обычных приложений можно использовать очереди сообщений со скоростью в сотни микросекунд (измерено между 30 и 100 микросекундами, пропускная способность около 10 тыс./с, достаточно низкая задержка для обычного пользователя), для торговли акциями L2 с потиковыми данными можно использовать режим общей памяти, достигая задержки в 10 микросекунд, одновременно сохраняя все торговые данные;
- Поддерживается алгоритмическая торговля на реальном рынке, поддерживается несколько API-интерфейсов (например, CTP для фьючерсов, Tap для Yi Sheng, XTP для Zhongtai, OES для Kuanrui, можно одновременно войти в несколько учётных записей разных бирж, запустить несколько групп стратегий независимо друг от друга, настроить триггерные условия для автоматического входа, выхода и сброса, может работать 7*24 часов, имеет модуль управления рисками, позволяющий устанавливать параметры контроля потока и ограничения объёма, поддерживает локальные стоп-приказы, однократное полное закрытие позиции, выравнивание и другие пользовательские команды;
- Стратегии могут управляться динамически в режиме реального времени (добавление, удаление, изменение параметров, запуск, остановка, перезагрузка и т. д.), аналогично модулю ctaStrategy в VNPY, можно управлять несколькими стратегическими процессами;
- Поддержка стратегий на языках C++ или Python для бэктестинга и торговли на реальном рынке. Архитектура бэктестера основана на VNPY и использует событийно-ориентированный подход, позволяя динамически перезагружать стратегии. Стратегии в бэктестере и торговом движке имеют одинаковую форму, не требуя переписывания кода. Одновременно с этим формат данных и функции стратегий в Python совместимы с VNPY, что удобно для преобразования, переноса и тестирования;
- Поддержка бэктестирования на различных временных масштабах, таких как тиковый и баровый. Существуют режимы Lite и Pro, а также пакетный режим бэктестинга. Режим Lite представляет собой односимвольный режим, в пакетном режиме можно проводить пакетное бэктестирование различных стратегий и контрактов одновременно, что упрощает комбинирование различных стратегий для анализа совокупной прибыли. Режим Pro поддерживает одновременное бэктестирование нескольких символов, регулярные выражения определяют диапазон символов, пакетный режим поддерживает параллельное бэктестирование в нескольких процессах, упрощая разделение символов для параллельного быстрого бэктестинга;
- Результаты бэктестов включают общие показатели (доходность, Sharpe Ratio, максимальный просадок и т.д.), кривые доходности, подробные данные по каждой сделке, ежедневные сводки, на графиках отображаются соответствующие точки покупки и продажи, отображаются тиковые данные, облегчая анализ. Можно фильтровать сделки по определённым условиям, результаты бэктестов можно экспортировать в CSV и соответствующие изображения. Поддерживаются настраиваемые индикаторы для отображения и анализа;
- Поддерживает функцию оптимизации параметров бэктестинга, включая многопроцессную оптимизацию и генетические алгоритмы;
- Поддерживает подписку на данные о состоянии рынка и их хранение (тик, бар), режим очередей сообщений аналогичен VNPY Data Recorder, отдельный процесс, также имеет функцию CSV Loader, как у VNPY. В режиме общей памяти данные сохраняются асинхронно на диск, есть специальный скрипт для экспорта и обработки данных; поддерживает загрузку данных из различных источников (RQData, Tushare, JoinQuant);
- Поддерживает имитацию торговли на основе данных о реальном рынке (Paper brokerage, простая агрегация), удобна для тестирования перед реальной торговлей;
- Использует графический интерфейс Qt в качестве фронтэнда, удобен для управления, мониторинга и операций, все данные мониторинга записываются и могут быть экспортированы в файлы CSV. Можно просматривать данные реального рынка в реальном времени. Можно просматривать основную информацию о контрактах. Можно выборочно отображать/скрывать определённые элементы интерфейса, настраивать компоновку интерфейса. Также поддерживается мониторинг через командную строку (CLI, TUI);
- Поддерживает push-уведомления в WeChat в реальном времени и получение информации (itchat или Server Jujube и т. п.);
- Работает на платформах Linux и Windows.
Примечание: текущий открытый исходный код предоставляет все основные функции от бэктестинга до торговли на реальном рынке и демонстрирует прототип и архитектуру системы, что облегчает дальнейшую разработку и настройку на этой основе. Код версии Pro (для платных пользователей) пока не открыт, но может быть рассмотрен для открытия после достижения определённого количества пользователей (более 1 тыс.).
Версия PRO
- Бэктестинг поддерживает любое количество символов; поддерживает параллельный пакетный бэктестинг различных комбинаций стратегий; результаты бэктестинга можно фильтровать по заданным условиям;
- MongoDB используется для чтения и записи данных в пакетном режиме на основе pymongo, скорость увеличивается в 2–10 раз по сравнению с обычной версией;
- Бэктестинг поддерживает режим курсора для чтения данных, экономя память и поддерживая пакетную комбинацию различных результатов бэктестинга;
- Бэктестинг поддерживает сохранение результатов, чтение результатов и режим сценариев;
- Бэктестинг поддерживает распределённые вычисления и оптимизацию;
- Поддерживает факторный анализ, корреляционный анализ, генерацию факторов партиями и регрессионный анализ, что позволяет быстро выбирать факторы;
- Поддерживает векторизованный быстрый бэктестинг на основе прогнозных моделей (внутридневной и между днями), отдельно оценивает тестовый набор и обучающий набор;
- Поддерживает отображение различных пользовательских индикаторов, включая поток ордеров;
- Поддерживает анализ цен и индикаторов для символов на тиковом уровне, поддерживает анализ цен и индикаторов на тиковых данных;
- Торговля на реальном рынке поддерживает режим общей памяти с задержкой в 10 микросекунд и пропускной способностью 100 тыс./сек.;
Архитектура системы
Основная структура системы основана на C++, используя архитектуру клиент-сервер, бэктестинг имеет два режима: событийно-управляемый и векторизованный. Система разработана с использованием модульного подхода и слабой связанности, обеспечивая гибкость и лёгкость расширения. Сервисные процессы, такие как обработка данных о рынке, торговля и запись данных, выполняются отдельными потоками. Связь между сервером и графическим интерфейсом пользователя, стратегиями осуществляется через очереди сообщений (nanomsg) или общую память (на основе Kungfu Engine), данные о рынке могут передаваться в виде сообщений стратегиям, которые затем используют соответствующие API для отправки команд на торговые киоски. Данные о рынке могут храниться локально (в файлах CSV или базе данных MongoDB), стратегии могут быть реализованы на Python или C++. Графический интерфейс основан на PyQt5 и предоставляет функции ручной торговли, торговли по стратегиям, просмотра информации об учётных записях и стратегиях.
Среда разработки
В процессе разработки система опиралась на существующие открытые проекты, такие как VNPY и Kungfu. Основные среды разработки включают Manjaro (Arch, ядро Linux 4.14), Python 3.7.2, GCC 9.1, Ubuntu 18.04 и Windows 10 с Visual Studio 2015. Для сторонних библиотек требуются установленные библиотеки boost, libmongoc-1.0 или скомпилированные вручную. Также требуются установленные или скомпилированные библиотеки nanomsg 1.0, log4cplus 2.04, yaml-cpp, fmt5.3, ta-lib. Для Python-зависимостей требуются пакеты psutil, pyyaml, pyqt, qdarkstyle и другие.
Запуск
Сначала необходимо скомпилировать библиотеки в папке cppsrc, предварительно установив библиотеки boost и nanomsg, а также динамические библиотеки для торговых API, таких как CTP и TAP. Компиляция выполняется с помощью CMake:
$ cd cppsrc
$ mkdir build
$ cd build
$ cmake ..
$ make
После успешной компиляции исполняемый файл apiserver.exe в папке StarQuant/build можно запустить для запуска серверного процесса. Запуск графического интерфейса осуществляется путём выполнения файла gui.py, запуск отдельной стратегии — путём выполнения strategy.py, а запуск процесса записи данных о рынке — путём выполнения recorder.py.
Соглашения по кодированию
Для кода на C++ рекомендуется следовать руководству Google по стилю C++. Для кода на Python рекомендуется использовать flake8 для проверки и autopep8 для форматирования. Переменные должны иметь следующие соглашения об именах: имена классов следуют стилю CamelCase, где первая буква каждого слова заглавная, без использования символа подчёркивания. Имена переменных внутри классов начинаются с маленькой буквы, за которой следует символ подчёркивания, например data_. Глобальные переменные начинаются с g_, а имена функций могут использовать смешанный регистр.
Комментарии ( 0 )