Rama | Versión | Estado |
---|---|---|
master | ![]() | |
nightly | ![]() | |
develop | ![]() |
Plataforma | Óxido | Pitón |
---|---|---|
Linux (x86_64) | 1.83.0+ | 3.11+ |
macOS (arm64) | 1.83.0+ | 3.11+ |
Windows (x86_64) | 1.83.0+ | 3.11+ |
NautilusTrader es una plataforma de negociación algorítmica de código abierto, alto rendimiento y grado de producción, que brinda a los operadores cuantitativos la capacidad de realizar pruebas retrospectivas de carteras de estrategias comerciales automatizadas en datos históricos con un motor basado en eventos y también implementar esas mismas estrategias en vivo, con sin cambios de código.
La plataforma es "AI-first", diseñada para desarrollar e implementar estrategias comerciales algorítmicas dentro de un entorno nativo Python robusto y de alto rendimiento. Esto ayuda a abordar el desafío de la paridad de mantener el entorno de investigación/backtest de Python coherente con el entorno comercial de producción en vivo.
La filosofía de diseño, arquitectura e implementación de NautilusTrader mantiene la corrección y seguridad del software al más alto nivel, con el objetivo de soportar cargas de trabajo de implementación en vivo y pruebas retrospectivas de sistemas comerciales, de misión crítica y nativas de Python.
La plataforma también es universal e independiente de la clase de activo: cualquier API REST, WebSocket o FIX puede integrarse mediante adaptadores modulares. Por lo tanto, puede manejar operaciones comerciales de alta frecuencia para cualquier clase de activos, incluidos FX, acciones, futuros, opciones, CFD, criptomonedas y apuestas, en múltiples lugares simultáneamente.
IOC
, FOK
, GTD
, AT_THE_OPEN
, AT_THE_CLOSE
, tipos de órdenes avanzadas y activadores condicionales. Instrucciones de ejecución post-only
, reduce-only
e icebergs. Listas de órdenes de contingencia que incluyen OCO
, OTO
.nautilus - del griego antiguo "marinero" y naus "barco".
La concha del nautilo consta de cámaras modulares con un factor de crecimiento que se aproxima a una espiral logarítmica. La idea es que esto se pueda traducir a la estética del diseño y la arquitectura.
Tradicionalmente, la investigación de estrategias comerciales y las pruebas retrospectivas se pueden realizar en Python (u otro lenguaje adecuado) utilizando métodos vectorizados, y luego es necesario volver a implementar la estrategia de una manera más basada en eventos utilizando C++, C#, Java u otros lenguajes de tipo estático. ). El razonamiento aquí es que el código de backtesting vectorizado no puede expresar la complejidad granular dependiente del tiempo y los eventos del comercio en tiempo real, donde los lenguajes compilados han demostrado ser más adecuados debido a su rendimiento inherentemente mayor y seguridad de tipos.
Una de las ventajas clave de NautilusTrader aquí es que este paso de reimplementación ahora se evita, ya que todos los componentes centrales críticos de la plataforma se han escrito completamente en Rust o Cython. Esto significa que estamos utilizando las herramientas adecuadas para el trabajo, donde los lenguajes de programación de sistemas compilan binarios de alto rendimiento, con módulos de extensión CPython C capaces de ofrecer un entorno nativo de Python, adecuado para operadores cuantitativos profesionales y empresas comerciales.
Python se creó originalmente hace décadas como un lenguaje de programación simple con una sintaxis limpia y directa. Desde entonces, ha evolucionado hasta convertirse en un lenguaje de programación orientado a objetos de propósito general y completo. Según el índice TIOBE, Python es actualmente el lenguaje de programación más popular del mundo. No solo eso, Python se ha convertido en la lengua franca de facto de la ciencia de datos, el aprendizaje automático y la inteligencia artificial.
Sin embargo, el lenguaje listo para usar no está exento de inconvenientes, especialmente en el contexto de la implementación de grandes sistemas críticos para el rendimiento. Cython ha abordado muchos de estos problemas, ofreciendo todas las ventajas de un lenguaje tipado estáticamente, integrado en el rico ecosistema de bibliotecas de software y comunidades de desarrolladores/usuarios de Python.
Rust es un lenguaje de programación multiparadigma diseñado para brindar rendimiento y seguridad, especialmente simultaneidad segura. Rust es increíblemente rápido y eficiente en memoria (comparable a C y C++) sin recolector de basura. Puede impulsar sistemas de misión crítica, ejecutarse en dispositivos integrados y se integra fácilmente con otros lenguajes.
El sistema de tipos enriquecidos y el modelo de propiedad de Rust garantizan la seguridad de la memoria y de los subprocesos de forma determinista, eliminando muchas clases de errores en tiempo de compilación.
El proyecto utiliza cada vez más Rust para componentes centrales críticos para el rendimiento. El enlace del lenguaje Python se maneja a través de Cython y PyO3, con bibliotecas estáticas vinculadas en tiempo de compilación antes de empaquetar los binarios de la rueda, por lo que el usuario no necesita tener Rust instalado para ejecutar NautilusTrader.
Este proyecto hace el Compromiso de Solidez:
“La intención de este proyecto es estar libre de errores de solidez. Los desarrolladores harán todo lo posible para evitarlos y agradecerán la ayuda para analizarlos y solucionarlos”.
Nota
MSRV: NautilusTrader depende en gran medida de las mejoras en el lenguaje y el compilador de Rust. Como resultado, la versión mínima admitida de Rust (MSRV) es generalmente igual a la última versión estable de Rust.
NautilusTrader está diseñado de forma modular para funcionar con adaptadores , lo que permite la conectividad con centros comerciales y proveedores de datos al convertir sus API sin procesar en una interfaz unificada.
Actualmente se admiten las siguientes integraciones:
Nombre | IDENTIFICACIÓN | Tipo | Estado | Documentos |
---|---|---|---|---|
Betfair | BETFAIR | Intercambio de apuestas deportivas | Guía | |
binance | BINANCE | Intercambio de cifrado (CEX) | Guía | |
Binance EE. UU. | BINANCE | Intercambio de cifrado (CEX) | Guía | |
Futuros de Binance | BINANCE | Intercambio de cifrado (CEX) | Guía | |
Bybit | BYBIT | Intercambio de cifrado (CEX) | Guía | |
Datosbento | DATABENTO | Proveedor de datos | Guía | |
dYdX | DYDX | Intercambio de cifrado (DEX) | Guía | |
Corredores interactivos | INTERACTIVE_BROKERS | Corretaje (múltiples sedes) | Guía | |
OKX | OKX | Intercambio de cifrado (CEX) | Guía | |
Polimercado | POLYMARKET | Mercado de predicción (DEX) | Guía | |
Tardis | TARDIS | Proveedor de datos | Guía |
building
: En construcción y probablemente no en condiciones utilizables.beta
: Completado a un estado de funcionamiento mínimo y en una fase de prueba 'beta'.stable
: Conjunto de características y API estabilizados, la integración ha sido probada tanto por desarrolladores como por usuarios a un nivel razonable (es posible que aún persistan algunos errores).Consulte la documentación de Integraciones para obtener más detalles.
Nuestro objetivo es mantener una estructura estable y transitoria en todas las ramas.
master
: refleja el código fuente de la última versión publicada.nightly
: incluye funciones experimentales y en progreso, fusionadas desde la rama develop
diariamente a las 14:00 UTC y también cuando sea necesario.develop
: la rama más activa, que se actualiza frecuentemente con nuevas confirmaciones, incluidas funciones experimentales y en progreso. Nota
Nuestra hoja de ruta tiene como objetivo lograr una API estable para la versión 2.x (probablemente después del puerto Rust). Una vez que se alcance este hito, planeamos implementar un proceso de lanzamiento formal, incluidos períodos de desuso para cualquier cambio de API. Este enfoque nos permite mantener un ritmo de desarrollo rápido por ahora.
NautilusTrader todavía se encuentra en desarrollo activo. Algunas funciones pueden estar incompletas y, aunque la API se vuelve más estable, pueden ocurrir cambios importantes entre versiones. Nos esforzamos por documentar estos cambios en las notas de la versión de la mejor manera posible .
Nuestro objetivo es seguir un calendario de lanzamiento semanal , aunque las funciones experimentales o de mayor tamaño pueden provocar retrasos.
Recomendamos utilizar la última versión compatible de Python y configurar nautilus_trader en un entorno virtual para aislar las dependencias.
Para instalar la última rueda binaria (o paquete sdist) de PyPI usando el administrador de paquetes pip de Python:
pip install -U nautilus_trader
El índice de paquetes de Nautech Systems ( packages.nautechsystems.io
) es compatible con PEP-503 y alberga ruedas binarias tanto estables como de desarrollo para nautilus_trader
. Esto permite a los usuarios instalar la última versión estable o versiones preliminares para realizar pruebas.
Las ruedas estables corresponden a los lanzamientos oficiales de nautilus_trader
en PyPI y utilizan versiones estándar.
Para instalar la última versión estable:
pip install -U nautilus_trader --index-url=https://packages.nautechsystems.io/simple
Las ruedas de desarrollo se publican desde las ramas develop
y nightly
para Linux y macOS, lo que permite a los usuarios probar funciones y correcciones antes de las versiones estables.
Este proceso también ayuda a preservar los recursos informáticos y garantiza un fácil acceso a los archivos binarios exactos probados en las canalizaciones de CI, al mismo tiempo que cumple con los estándares de control de versiones PEP-440:
develop
utilizan el formato de versión dev{date}+{build_number}
(por ejemplo, 1.208.0.dev20241212+7001
).nightly
utilizan el formato de versión a{date}
(alfa) (p. ej., 1.208.0a20241212
). Advertencia
No recomendamos el uso de ruedas de desarrollo en entornos de producción, como el comercio en vivo que controla el capital real.
De forma predeterminada, pip instala la última versión estable. Agregar el indicador --pre
garantiza que se tengan en cuenta las versiones preliminares, incluidas las ruedas de desarrollo.
Para instalar la última versión preliminar disponible (incluidas las ruedas de desarrollo):
pip install -U nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simple
Para instalar una rueda de desarrollo específica (p. ej., 1.208.0a20241212
para el 12 de diciembre de 2024):
pip install nautilus_trader==1.208.0a20241212 --index-url=https://packages.nautechsystems.io/simple
Puede ver todas las versiones disponibles de nautilus_trader
en el índice del paquete.
Para buscar y enumerar mediante programación las versiones disponibles:
curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | grep -oP '(?<=<a href=")[^"]+(?=")' | awk -F'#' '{print $1}' | sort
develop
ruedas de rama ( .dev
): se crean y publican continuamente con cada confirmación fusionada.nightly
( a
): se crean y publican diariamente cuando la rama develop
se fusiona automáticamente a las 14:00 UTC (si hay cambios). develop
ruedas de rama ( .dev
): solo se conserva la compilación de ruedas más reciente.nightly
( a
): solo se conservan las 3 compilaciones de ruedas más recientes. La instalación desde el código fuente requiere el archivo de encabezado Python.h
, que se incluye en versiones de desarrollo como python-dev
. También necesitarás las últimas versiones estables rustc
y cargo
para compilar las bibliotecas de Rust.
Para MacBook Pro M1/M2, asegúrese de que su Python instalado usando pyenv esté configurado con --enable-shared
:
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install <python_version>
Consulte la guía del usuario de PyO3 para obtener más detalles.
Es posible instalar desde la fuente usando pip si primero instala las dependencias de compilación como se especifica en pyproject.toml
. Recomendamos encarecidamente instalar usando poesía como se muestra a continuación.
Instale Rustup (el instalador de la cadena de herramientas de Rust):
curl https://sh.rustup.rs -sSf | sh
rustup-init.exe
rustc --version
Habilite cargo
en el shell actual:
source $HOME /.cargo/env
Instale clang (una interfaz en lenguaje C para LLVM):
sudo apt-get install clang
clang
en el shell actual: [ System.Environment ]::SetEnvironmentVariable( ' path ' , " C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsLlvmx64bin; " + $ env: Path , " User " )
clang --version
Instale poesía (o siga la guía de instalación en su sitio):
curl -sSL https://install.python-poetry.org | python3 -
Clona el código fuente con git
e instálalo desde el directorio raíz del proyecto:
git clone https://github.com/nautechsystems/nautilus_trader
cd nautilus_trader
poetry install --only main --all-extras
Consulte la Guía de instalación para conocer otras opciones y más detalles.
El uso de Redis con NautilusTrader es opcional y solo es necesario si se configura como backend para una base de datos de caché o un bus de mensajes. Consulte la sección Redis de la Guía de instalación para obtener más detalles.
Se proporciona un Makefile
para automatizar la mayoría de las tareas de instalación y compilación para el desarrollo. Proporciona los siguientes objetivos:
make install
: se instala en modo de compilación release
con dependencias main
, dev
y test
y luego instala el paquete usando poesía (predeterminado).make install-debug
: Igual que make install
pero con modo de compilación debug
.make install-just-deps
: instala solo las dependencias main
, dev
y test
(no instala el paquete).make build
: ejecuta el script de compilación en modo de compilación release
(predeterminado).make build-debug
: ejecuta el script de compilación en modo de debug
.make build-wheel
: ejecuta la compilación de Poetry con un formato de rueda en modo de release
.make build-wheel-debug
: ejecuta la compilación de Poetry con un formato de rueda en modo debug
.make clean
: PRECAUCIÓN elimina todos los artefactos que no son de origen del repositorio.make docs
: crea la documentación HTML utilizando Sphinx.make pre-commit
: ejecuta las comprobaciones previas a la confirmación de todos los archivos.make ruff
: ejecuta ruff sobre todos los archivos usando la configuración pyproject.toml
(con corrección automática).make pytest
: ejecuta todas las pruebas con pytest
(excepto las pruebas de rendimiento).make pytest-coverage
: Igual que make pytest
y además se ejecuta con cobertura de prueba y genera un informe. Consejo
Ejecutar make build-debug
para compilar después de cambios en el código Rust o Cython es actualmente el flujo de trabajo más eficiente al desarrollar.
Se pueden desarrollar indicadores y estrategias tanto en Python como en Cython. Para aplicaciones sensibles al rendimiento y a la latencia, recomendamos utilizar Cython. A continuación se muestran algunos ejemplos:
BacktestEngine
directamente. Los contenedores Docker se crean utilizando la imagen base python:3.12-slim
con las siguientes etiquetas variantes:
nautilus_trader:latest
tiene instalada la última versión.nautilus_trader:nightly
tiene instalado el jefe de la rama nightly
.jupyterlab:latest
tiene instalada la última versión junto con jupyterlab
y un cuaderno de prueba retrospectiva de ejemplo con los datos adjuntos.jupyterlab:nightly
tiene el jefe de la rama nightly
instalado junto con jupyterlab
y un cuaderno de prueba retrospectiva de ejemplo con los datos adjuntos.Las imágenes del contenedor se pueden extraer de la siguiente manera:
docker pull ghcr.io/nautechsystems/<image_variant_tag> --platform linux/amd64
Puede iniciar el contenedor de ejemplo de backtest ejecutando:
docker pull ghcr.io/nautechsystems/jupyterlab:nightly --platform linux/amd64
docker run -p 8888:8888 ghcr.io/nautechsystems/jupyterlab:nightly
Luego abra su navegador en la siguiente dirección:
http://127.0.0.1:8888/lab
Advertencia
NautilusTrader actualmente excede el límite de velocidad para el registro del cuaderno Jupyter (salida estándar). Como resultado, log_level
en los ejemplos se establece en ERROR
. Bajar este nivel para ver más registros hará que el cuaderno se cuelgue durante la ejecución de la celda. Estamos investigando una solución, que puede implicar aumentar los límites de velocidad configurados para Jupyter o limitar la descarga de registros desde Nautilus.
Nuestro objetivo es brindar la experiencia de desarrollador más placentera posible para esta base de código híbrida de Python, Cython y Rust. Consulte la Guía para desarrolladores para obtener información útil.
cargo-nextest es el ejecutor de pruebas de Rust estándar para NautilusTrader. Puedes instalarlo ejecutando:
cargo install cargo-nextest
Consejo
Las pruebas de óxido solo pasarán cuando se ejecuten mediante cargo-nextest
.
¡Gracias por considerar contribuir a Nautilus Trader! Damos la bienvenida a toda ayuda para mejorar el proyecto. Si tiene una idea para una mejora o una corrección de errores, el primer paso es abrir un problema en GitHub para discutirlo con el equipo. Esto ayuda a garantizar que su contribución esté bien alineada con los objetivos del proyecto y evita la duplicación de esfuerzos.
Una vez que esté listo para comenzar a trabajar en su contribución, asegúrese de seguir las pautas descritas en el archivo CONTRIBUTING.md. Esto incluye firmar un Acuerdo de licencia de colaborador (CLA) para garantizar que sus contribuciones puedan incluirse en el proyecto.
Tenga en cuenta que todas las solicitudes de extracción deben realizarse a la rama develop
. Aquí es donde se integran las nuevas funciones y mejoras antes de su lanzamiento.
¡Gracias nuevamente por su interés en Nautilus Trader! Esperamos revisar sus contribuciones y trabajar con usted para mejorar el proyecto.
Únase a nuestra comunidad de usuarios y colaboradores en Discord para chatear y mantenerse actualizado con los últimos anuncios y funciones de NautilusTrader. Si eres un desarrollador que busca contribuir o simplemente quieres aprender más sobre la plataforma, todos son bienvenidos en nuestro servidor.
El código fuente de NautilusTrader está disponible en GitHub bajo la Licencia pública general reducida GNU v3.0. Las contribuciones al proyecto son bienvenidas y requieren la finalización de un Acuerdo de licencia de colaborador (CLA) estándar.
NautilusTrader es desarrollado y mantenido por Nautech Systems, una empresa de tecnología especializada en el desarrollo de sistemas comerciales de alto rendimiento. Aunque el proyecto utiliza el lenguaje de programación Rust y se beneficia de su ecosistema, Nautech Systems no está afiliado a la Fundación Rust y este proyecto no es un trabajo oficial de la Fundación Rust. Para obtener más información, visite https://nautilustrader.io.
Copyright (C) 2015-2025 Nautech Systems Pty Ltd. Todos los derechos reservados.