Ветвь | Версия | Статус |
---|---|---|
master | ||
nightly | ||
develop |
Платформа | Ржавчина | Питон |
---|---|---|
Linux (x86_64) | 1.83.0+ | 3.11+ |
macOS (arm64) | 1.83.0+ | 3.11+ |
Windows (x86_64) | 1.83.0+ | 3.11+ |
NautilusTrader — это высокопроизводительная алгоритмическая торговая платформа промышленного уровня с открытым исходным кодом, предоставляющая количественным трейдерам возможность тестировать портфели автоматических торговых стратегий на исторических данных с помощью механизма, управляемого событиями, а также развертывать те же самые стратегии в реальном времени с помощью никаких изменений кода.
Платформа ориентирована на искусственный интеллект и предназначена для разработки и внедрения алгоритмических торговых стратегий в высокопроизводительной и надежной среде Python. Это помогает решить проблему паритета, заключающуюся в обеспечении соответствия среды исследований/бэктестирования Python производственной среде реальной торговли.
Философия дизайна, архитектуры и реализации NautilusTraders обеспечивает правильность и безопасность программного обеспечения на самом высоком уровне с целью поддержки встроенного Python критически важного тестирования торговой системы и рабочих нагрузок развертывания в реальном времени.
Платформа также универсальна и не зависит от класса активов: любой REST, WebSocket или FIX API можно интегрировать через модульные адаптеры. Таким образом, он может обрабатывать высокочастотные торговые операции для любых классов активов, включая валюту, акции, фьючерсы, опционы, CFD, криптовалюту и ставки, - на нескольких площадках одновременно.
IOC
, FOK
, GTD
, AT_THE_OPEN
, AT_THE_CLOSE
, расширенные типы ордеров и условные триггеры. Инструкции выполнения post-only
, reduce-only
и айсберги. Списки заказов на случай непредвиденных обстоятельств, включая OCO
, OTO
.Наутилус – от древнегреческого «моряк» и наус «корабль».
Раковина наутилуса состоит из модульных камер, фактор роста которых приближается к логарифмической спирали. Идея состоит в том, что это можно перенести на эстетику дизайна и архитектуры.
Традиционно исследование торговой стратегии и бэк-тестирование могут проводиться на Python (или другом подходящем языке) с использованием векторизованных методов, после чего стратегию необходимо перереализовать более событийно-ориентированным способом с использованием C++, C#, Java или других статически типизированных языков. ). Причина здесь в том, что векторизованный код бэктестинга не может выразить детализированную сложность торговли в реальном времени, зависящую от времени и событий, где скомпилированные языки оказались более подходящими из-за их изначально более высокой производительности и безопасности типов.
Одним из ключевых преимуществ NautilusTrader здесь является то, что этот шаг повторной реализации теперь можно обойти, поскольку все критические основные компоненты платформы полностью написаны на Rust или Cython. Это означает, что мы используем правильные инструменты для работы: языки системного программирования компилируют производительные двоичные файлы, а модули расширения CPython C затем могут предложить собственную среду Python, подходящую для профессиональных количественных трейдеров и торговых фирм.
Первоначально Python был создан несколько десятилетий назад как простой язык сценариев с понятным синтаксисом. С тех пор он превратился в полноценный объектно-ориентированный язык программирования общего назначения. Согласно индексу TIOBE, Python в настоящее время является самым популярным языком программирования в мире. Мало того, Python стал де-факто лингва-франка науки о данных, машинного обучения и искусственного интеллекта.
Однако готовый язык не лишен недостатков, особенно в контексте реализации больших систем, критичных к производительности. Cython решил многие из этих проблем, предложив все преимущества статически типизированного языка, встроенного в богатую экосистему программных библиотек Python и сообществ разработчиков/пользователей.
Rust — это мультипарадигмальный язык программирования, разработанный для обеспечения производительности и безопасности, особенно безопасного параллельного выполнения. Rust невероятно быстр и эффективно использует память (по сравнению с C и C++) и не имеет сборщика мусора. Он может использоваться в критически важных системах, работать на встроенных устройствах и легко интегрируется с другими языками.
Богатая система типов и модель владения Rust детерминированно гарантируют безопасность памяти и потокобезопасность, устраняя многие классы ошибок во время компиляции.
Проект все чаще использует Rust для основных компонентов, критически важных для производительности. Привязка языка Python осуществляется через Cython и PyO3, при этом статические библиотеки подключаются во время компиляции перед упаковкой двоичных файлов колеса, поэтому пользователю не требуется устанавливать Rust для запуска NautilusTrader.
Этот проект дает «Обещание надежности»:
«Цель этого проекта — избавиться от ошибок, связанных с работоспособностью. Разработчики сделают все возможное, чтобы их избежать, и будут рады помощи в их анализе и исправлении».
Примечание
MSRV: NautilusTrader во многом опирается на улучшения языка и компилятора Rust. В результате Минимальная поддерживаемая версия Rust (MSRV) обычно равна последней стабильной версии Rust.
NautilusTrader имеет модульную конструкцию для работы с адаптерами , обеспечивающую подключение к торговым площадкам и поставщикам данных путем преобразования их необработанных API в унифицированный интерфейс.
На данный момент поддерживаются следующие интеграции:
Имя | ИДЕНТИФИКАТОР | Тип | Статус | Документы |
---|---|---|---|---|
Бетфаир | BETFAIR | Биржа спортивных ставок | Гид | |
Бинанс | BINANCE | Криптобиржа (CEX) | Гид | |
Бинанс США | BINANCE | Криптобиржа (CEX) | Гид | |
Бинанс Фьючерсы | BINANCE | Криптобиржа (CEX) | Гид | |
Байбит | BYBIT | Криптобиржа (CEX) | Гид | |
Датабенто | DATABENTO | Поставщик данных | Гид | |
dYdX | DYDX | Криптобиржа (DEX) | Гид | |
Интерактивные брокеры | INTERACTIVE_BROKERS | Брокерские услуги (на нескольких площадках) | Гид | |
ОКХ | OKX | Криптобиржа (CEX) | Гид | |
Полимаркет | POLYMARKET | Рынок прогнозов (DEX) | Гид | |
ТАРДИС | TARDIS | Поставщик данных | Гид |
building
: В стадии строительства и, вероятно, не в пригодном для использования состоянии.beta
: завершено до минимально рабочего состояния и находится на этапе бета-тестирования.stable
: стабилизированный набор функций и API, интеграция была протестирована как разработчиками, так и пользователями на разумном уровне (некоторые ошибки все еще могут оставаться).Дополнительную информацию см. в документации по интеграции.
Мы стремимся поддерживать стабильную, проходящую сборку во всех ветках.
master
: отражает исходный код последней выпущенной версии.nightly
: включает экспериментальные и находящиеся в стадии разработки функции, объединяемые из ветки develop
ежедневно в 14:00 UTC , а также при необходимости.develop
: самая активная ветка, часто обновляемая новыми коммитами, включая экспериментальные и незавершенные функции. Примечание
Наша дорожная карта направлена на создание стабильного API для версии 2.x (вероятно, после порта на Rust). Как только этот этап будет достигнут, мы планируем реализовать формальный процесс выпуска, включая периоды прекращения поддержки любых изменений API. Такой подход позволяет нам пока сохранять высокие темпы развития.
NautilusTrader все еще находится в стадии активной разработки. Некоторые функции могут быть неполными, и хотя API становится более стабильным, между выпусками могут происходить критические изменения. Мы стремимся максимально документировать эти изменения в примечаниях к выпуску.
Мы стремимся следовать еженедельному графику выпуска , хотя экспериментальные или более крупные функции могут вызвать задержки.
Мы рекомендуем использовать последнюю поддерживаемую версию Python и настроить nautilus_trader в виртуальной среде для изоляции зависимостей.
Чтобы установить последнюю версию двоичного колеса (или пакета sdist) из PyPI с помощью диспетчера пакетов Pythons pip:
pip install -U nautilus_trader
Индекс пакетов Nautech Systems ( packages.nautechsystems.io
) соответствует PEP-503 и содержит как стабильные, так и разрабатываемые бинарные колеса для nautilus_trader
. Это позволяет пользователям устанавливать либо последнюю стабильную версию, либо предварительные версии для тестирования.
Стабильные колеса соответствуют официальным выпускам nautilus_trader
на PyPI и используют стандартное управление версиями.
Чтобы установить последнюю стабильную версию:
pip install -U nautilus_trader --index-url=https://packages.nautechsystems.io/simple
Колеса разработки публикуются как из ветки develop
так и из nightly
ветки для Linux и macOS, что позволяет пользователям тестировать функции и исправления перед выпуском стабильных выпусков.
Этот процесс также помогает сохранить вычислительные ресурсы и обеспечивает легкий доступ к конкретным двоичным файлам, протестированным в конвейерах CI, при этом соблюдая стандарты управления версиями PEP-440:
develop
колес используйте формат версии dev{date}+{build_number}
(например, 1.208.0.dev20241212+7001
).nightly
Wheels используют формат версии a{date}
(alpha) (например, 1.208.0a20241212
). Предупреждение
Мы не рекомендуем использовать колеса разработки в производственных средах, например в реальной торговле, контролирующей реальный капитал.
По умолчанию pip устанавливает последнюю стабильную версию. Добавление флага --pre
гарантирует, что будут учитываться предварительные версии, включая колеса разработки.
Чтобы установить последнюю доступную предварительную версию (включая колеса разработки):
pip install -U nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simple
Чтобы установить определенное колесо разработки (например, 1.208.0a20241212
от 12 декабря 2024 г.):
pip install nautilus_trader==1.208.0a20241212 --index-url=https://packages.nautechsystems.io/simple
Вы можете просмотреть все доступные версии nautilus_trader
в индексе пакетов.
Чтобы программно получить и просмотреть доступные версии:
curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | grep -oP '(?<=<a href=")[^"]+(?=")' | awk -F'#' '{print $1}' | sort
develop
колес ветвей ( .dev
): создаются и публикуются непрерывно при каждом объединенном коммите.nightly
веток ( a
): создаются и публикуются ежедневно, когда ветка develop
автоматически объединяется в 14:00 UTC (при наличии изменений). develop
ветвей колес ( .dev
): сохраняется только самая последняя сборка колеса.nightly
ветки ( a
): сохраняются только 3 самые последние сборки колес. Для установки из исходного кода требуется заголовочный файл Python.h
, который включен в версии для разработки, такие как python-dev
. Вам также понадобится последняя стабильная rustc
и cargo
для компиляции библиотек Rust.
Для MacBook Pro M1/M2 убедитесь, что ваш Python, установленный с помощью pyenv, настроен с помощью --enable-shared
:
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install <python_version>
Дополнительные сведения см. в руководстве пользователя PyO3.
Можно установить из исходного кода с помощью pip, если вы сначала установите зависимости сборки, как указано в pyproject.toml
. Мы настоятельно рекомендуем установить, используя поэзию, как показано ниже.
Установите Rustup (установщик набора инструментов Rust):
curl https://sh.rustup.rs -sSf | sh
rustup-init.exe
rustc --version
Включите cargo
в текущей оболочке:
source $HOME /.cargo/env
Установите clang (интерфейс C для LLVM):
sudo apt-get install clang
clang
в текущей оболочке: [ System.Environment ]::SetEnvironmentVariable( ' path ' , " C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsLlvmx64bin; " + $ env: Path , " User " )
clang --version
Установите поэзию (или следуйте инструкциям по установке на их сайте):
curl -sSL https://install.python-poetry.org | python3 -
Клонируйте исходный код с помощью git
и установите из корневого каталога проекта:
git clone https://github.com/nautechsystems/nautilus_trader
cd nautilus_trader
poetry install --only main --all-extras
Другие варианты и дополнительную информацию см. в Руководстве по установке.
Использование Redis с NautilusTrader не является обязательным и требуется только в том случае, если он настроен в качестве серверной части для базы данных кэша или шины сообщений. Дополнительную информацию см. в разделе Redis Руководства по установке.
Makefile
предоставляется для автоматизации большинства задач установки и сборки при разработке. Он обеспечивает следующие цели:
make install
: Устанавливается в режиме сборки release
с зависимостями main
, dev
и test
затем устанавливает пакет с использованием поэзии (по умолчанию).make install-debug
: То же, что и make install
, но с режимом debug
сборки.make install-just-deps
: Устанавливает только main
зависимости, зависимости dev
и test
(пакет не устанавливает).make build
: запускает сценарий сборки в режиме сборки release
(по умолчанию).make build-debug
: запускает сценарий сборки в режиме debug
.make build-wheel
: Запускает сборку Poetry с форматом колеса в режиме release
.make build-wheel-debug
: запускает сборку Poetry с форматом колеса в режиме debug
.make clean
: ВНИМАНИЕ удаляет из репозитория все артефакты, не относящиеся к исходному коду.make docs
: создает HTML-документацию с использованием Sphinx.make pre-commit
: запускает проверку перед фиксацией всех файлов.make ruff
: запускает ruff для всех файлов, используя конфигурацию pyproject.toml
(с автоисправлением).make pytest
: запускает все тесты с помощью pytest
(кроме тестов производительности).make pytest-coverage
: То же, что и make pytest
, но дополнительно запускается с тестовым покрытием и создает отчет. Кончик
Запуск make build-debug
для компиляции после внесения изменений в код Rust или Cython в настоящее время является наиболее эффективным рабочим процессом при разработке.
Индикаторы и стратегии можно разрабатывать как на Python, так и на Cython. Для приложений, чувствительных к производительности и задержке, мы рекомендуем использовать Cython. Ниже приведены несколько примеров:
BacktestEngine
напрямую. Контейнеры Docker создаются с использованием базового образа python:3.12-slim
со следующими тегами вариантов:
nautilus_trader:latest
установлена последняя версия выпуска.nautilus_trader:nightly
имеет установленную главу nightly
ветки.jupyterlab:latest
установлена последняя версия выпуска вместе с jupyterlab
и примером блокнота для бэктестинга с сопроводительными данными.jupyterlab:nightly
установлена глава nightly
ветки вместе с jupyterlab
и примером блокнота для бэктестинга с сопроводительными данными.Образы контейнеров можно получить следующим образом:
docker pull ghcr.io/nautechsystems/<image_variant_tag> --platform linux/amd64
Вы можете запустить контейнер примера бэктеста, выполнив:
docker pull ghcr.io/nautechsystems/jupyterlab:nightly --platform linux/amd64
docker run -p 8888:8888 ghcr.io/nautechsystems/jupyterlab:nightly
Затем откройте браузер по следующему адресу:
http://127.0.0.1:8888/lab
Предупреждение
NautilusTrader в настоящее время превышает ограничение скорости для ведения журнала блокнота Jupyter (вывод на стандартный вывод). В результате для log_level
в примерах установлено значение ERROR
. Понижение этого уровня для просмотра большего количества журналов приведет к зависанию ноутбука во время выполнения ячейки. Мы изучаем возможность исправления, которое может включать либо повышение настроенных ограничений скорости для Jupyter, либо регулирование очистки журнала из Nautilus.
Мы стремимся обеспечить максимально приятный опыт разработки для этой гибридной кодовой базы Python, Cython и Rust. Дополнительную информацию можно найти в Руководстве разработчика.
Cargo-nextest — стандартный инструмент для запуска тестов Rust для NautilusTrader. Вы можете установить его, запустив:
cargo install cargo-nextest
Кончик
Тесты на ржавчину пройдут только при запуске через cargo-nextest
.
Спасибо, что решили внести свой вклад в Nautilus Trader! Мы приветствуем любую помощь в улучшении проекта. Если у вас есть идея по улучшению или исправлению ошибок, первым делом нужно открыть проблему на GitHub и обсудить ее с командой. Это поможет гарантировать, что ваш вклад будет хорошо соответствовать целям проекта, и позволит избежать дублирования усилий.
Когда вы будете готовы начать работу над своим вкладом, обязательно следуйте рекомендациям, изложенным в файле CONTRIBUTING.md. Это включает в себя подписание Лицензионного соглашения для участников (CLA), гарантирующего, что ваш вклад может быть включен в проект.
Обратите внимание, что все запросы на включение должны быть отправлены в ветку develop
. Здесь перед выпуском интегрируются новые функции и улучшения.
Еще раз спасибо за интерес к Nautilus Trader! Мы с нетерпением ждем возможности рассмотреть ваш вклад и поработать с вами над улучшением проекта.
Присоединяйтесь к нашему сообществу пользователей и участников в Discord, чтобы общаться в чате и быть в курсе последних объявлений и функций NautilusTrader. Являетесь ли вы разработчиком, желающим внести свой вклад или просто хотите узнать больше о платформе, мы приглашаем всех на наш сервер.
Исходный код NautilusTrader доступен на GitHub под лицензией GNU Lesser General Public License v3.0. Вклад в проект приветствуется и требует заключения стандартного лицензионного соглашения участника (CLA).
NautilusTrader разрабатывается и поддерживается Nautech Systems, технологической компанией, специализирующейся на разработке высокопроизводительных торговых систем. Хотя проект использует язык программирования Rust и извлекает выгоду из его экосистемы, Nautech Systems не связана с Rust Foundation, и этот проект не является официальной работой Rust Foundation. Для получения дополнительной информации посетите https://nautilustrader.io.
Copyright (C) 2015–2025 Nautech Systems Pty Ltd. Все права защищены.