Bifurquer | Version | Statut |
---|---|---|
master | ||
nightly | ||
develop |
Plate-forme | Rouiller | Python |
---|---|---|
Linux (x86_64) | 1.83.0+ | 3.11+ |
macOS (arm64) | 1.83.0+ | 3.11+ |
Windows (x86_64) | 1.83.0+ | 3.11+ |
NautilusTrader est une plateforme de trading algorithmique open source, haute performance et de qualité production, offrant aux traders quantitatifs la possibilité de backtester des portefeuilles de stratégies de trading automatisées sur des données historiques avec un moteur événementiel, et également de déployer ces mêmes stratégies en direct, avec aucun changement de code.
La plateforme est « AI-first », conçue pour développer et déployer des stratégies de trading algorithmiques dans un environnement natif Python hautement performant et robuste. Cela permet de relever le défi de parité consistant à maintenir l’environnement de recherche/backtest Python cohérent avec l’environnement de trading en direct de production.
La philosophie de conception, d'architecture et de mise en œuvre de NautilusTraders maintient l'exactitude et la sécurité des logiciels au plus haut niveau, dans le but de prendre en charge les charges de travail de déploiement en direct et natives de Python, critiques pour la mission, de backtesting du système commercial et de déploiement en direct.
La plate-forme est également universelle et indépendante des classes d'actifs - avec n'importe quelle API REST, WebSocket ou FIX pouvant être intégrée via des adaptateurs modulaires. Ainsi, il peut gérer des opérations de trading à haute fréquence pour toutes les classes d'actifs, notamment les devises, les actions, les contrats à terme, les options, les CFD, les cryptomonnaies et les paris, sur plusieurs sites simultanément.
IOC
, FOK
, GTD
, AT_THE_OPEN
, AT_THE_CLOSE
, types d'ordres avancés et déclencheurs conditionnels. Instructions d'exécution post-only
, reduce-only
et icebergs. Listes d'ordres d'urgence comprenant OCO
, OTO
.nautile - du grec ancien « marin » et naus « navire ».
La coquille du nautile est constituée de chambres modulaires avec un facteur de croissance qui se rapproche d'une spirale logarithmique. L’idée est que cela puisse se traduire par l’esthétique du design et de l’architecture.
Traditionnellement, la recherche et le backtesting sur les stratégies de trading peuvent être menés en Python (ou dans un autre langage approprié) à l'aide de méthodes vectorisées, la stratégie devant ensuite être réimplémentée de manière plus événementielle en utilisant C++, C#, Java ou d'autres langages typés statiquement. ). Le raisonnement ici est que le code de backtesting vectorisé ne peut pas exprimer la complexité granulaire dépendante du temps et des événements du trading en temps réel, où les langages compilés se sont révélés plus adaptés en raison de leurs performances intrinsèquement plus élevées et de leur sécurité de type.
L'un des principaux avantages de NautilusTrader ici est que cette étape de réimplémentation est désormais contournée, car les composants essentiels de la plate-forme ont tous été entièrement écrits en Rust ou Cython. Cela signifie que nous utilisons les bons outils pour le travail, où les langages de programmation système compilent des binaires performants, avec des modules d'extension CPython C alors capables d'offrir un environnement natif Python, adapté aux traders quantitatifs professionnels et aux sociétés de trading.
Python a été créé il y a plusieurs décennies en tant que langage de script simple avec une syntaxe claire et directe. Il a depuis évolué pour devenir un langage de programmation orienté objet à usage général à part entière. Basé sur l'indice TIOBE, Python est actuellement le langage de programmation le plus populaire au monde. De plus, Python est devenu de facto la lingua franca de la science des données, de l’apprentissage automatique et de l’intelligence artificielle.
Le langage prêt à l'emploi n'est cependant pas sans inconvénients, en particulier dans le contexte de la mise en œuvre de grands systèmes critiques en termes de performances. Cython a résolu bon nombre de ces problèmes, offrant tous les avantages d'un langage typé statiquement, intégré dans le riche écosystème de bibliothèques de logiciels et de communautés de développeurs/utilisateurs de Python.
Rust est un langage de programmation multi-paradigmes conçu pour les performances et la sécurité, en particulier la concurrence sécurisée. Rust est incroyablement rapide et économe en mémoire (comparable à C et C++) sans garbage collector. Il peut alimenter des systèmes critiques, fonctionner sur des appareils embarqués et s'intègre facilement à d'autres langages.
Le système de types riche et le modèle de propriété de Rust garantissent la sécurité de la mémoire et celle des threads de manière déterministe, éliminant ainsi de nombreuses classes de bogues au moment de la compilation.
Le projet utilise de plus en plus Rust pour les composants essentiels aux performances. La liaison du langage Python est gérée via Cython et PyO3, avec des bibliothèques statiques liées au moment de la compilation avant que les binaires de la roue ne soient empaquetés, de sorte qu'un utilisateur n'a pas besoin d'installer Rust pour exécuter NautilusTrader.
Ce projet constitue le Soundness Pledge :
« L’intention de ce projet est d’être exempt de bugs de solidité. Les développeurs feront de leur mieux pour les éviter et apprécieront toute aide pour les analyser et les corriger.
Note
MSRV : NautilusTrader s'appuie fortement sur les améliorations du langage et du compilateur Rust. Par conséquent, la version minimale prise en charge de Rust (MSRV) est généralement égale à la dernière version stable de Rust.
NautilusTrader est conçu de manière modulaire pour fonctionner avec des adaptateurs , permettant la connectivité aux plateformes de négociation et aux fournisseurs de données en convertissant leurs API brutes en une interface unifiée.
Les intégrations suivantes sont actuellement prises en charge :
Nom | IDENTIFIANT | Taper | Statut | Documents |
---|---|---|---|---|
Betfair | BETFAIR | Échange de paris sportifs | Guide | |
Binance | BINANCE | Échange de crypto-monnaie (CEX) | Guide | |
Binance États-Unis | BINANCE | Échange de crypto-monnaie (CEX) | Guide | |
Marchés à terme Binance | BINANCE | Échange de crypto-monnaie (CEX) | Guide | |
Bybit | BYBIT | Échange de crypto-monnaie (CEX) | Guide | |
Databento | DATABENTO | Fournisseur de données | Guide | |
dYdX | DYDX | Échange de crypto-monnaie (DEX) | Guide | |
Courtiers interactifs | INTERACTIVE_BROKERS | Courtage (multi-site) | Guide | |
OKX | OKX | Échange de crypto-monnaie (CEX) | Guide | |
Polymarché | POLYMARKET | Marché de prédiction (DEX) | Guide | |
Tardis | TARDIS | Fournisseur de données | Guide |
building
: En construction et probablement pas dans un état utilisable.beta
: terminé dans un état de fonctionnement minimal et en phase de test « bêta ».stable
: Ensemble de fonctionnalités et API stabilisés, l'intégration a été testée par les développeurs et les utilisateurs à un niveau raisonnable (certains bugs peuvent encore subsister).Consultez la documentation sur les intégrations pour plus de détails.
Nous visons à maintenir une structure stable et passagère dans toutes les branches.
master
: reflète le code source de la dernière version publiée.nightly
: inclut des fonctionnalités expérimentales et en cours, fusionnées à partir de la branche develop
quotidiennement à 14h00 UTC et également lorsque cela est nécessaire.develop
: La branche la plus active, fréquemment mise à jour avec de nouveaux commits, y compris des fonctionnalités expérimentales et en cours. Note
Notre feuille de route vise à parvenir à une API stable pour la version 2.x (probablement après le portage Rust). Une fois cette étape atteinte, nous prévoyons de mettre en œuvre un processus de publication formel, comprenant des périodes de dépréciation pour toute modification de l'API. Cette approche nous permet pour l’instant de maintenir un rythme de développement rapide.
NautilusTrader est toujours en développement actif. Certaines fonctionnalités peuvent être incomplètes et, même si l'API devient plus stable, des modifications importantes peuvent survenir entre les versions. Nous nous efforçons de documenter ces modifications dans les notes de version dans la mesure du possible .
Notre objectif est de suivre un calendrier de publication hebdomadaire , bien que des fonctionnalités expérimentales ou plus importantes puissent entraîner des retards.
Nous vous recommandons d'utiliser la dernière version prise en charge de Python et de configurer nautilus_trader dans un environnement virtuel pour isoler les dépendances.
Pour installer la dernière roue binaire (ou package sdist) à partir de PyPI à l'aide du gestionnaire de packages pip de Python :
pip install -U nautilus_trader
L'index du package Nautech Systems ( packages.nautechsystems.io
) est conforme au PEP-503 et héberge à la fois des roues binaires stables et de développement pour nautilus_trader
. Cela permet aux utilisateurs d'installer soit la dernière version stable, soit des versions préliminaires à des fins de test.
Les roues stables correspondent aux versions officielles de nautilus_trader
sur PyPI et utilisent le versionnage standard.
Pour installer la dernière version stable :
pip install -U nautilus_trader --index-url=https://packages.nautechsystems.io/simple
Les roues de développement sont publiées à partir des branches develop
et nightly
pour Linux et macOS, permettant aux utilisateurs de tester les fonctionnalités et les correctifs avant les versions stables.
Ce processus permet également de préserver les ressources de calcul et garantit un accès facile aux binaires exacts testés dans les pipelines CI, tout en respectant les normes de versioning PEP-440 :
develop
utilisent le format de version dev{date}+{build_number}
(par exemple, 1.208.0.dev20241212+7001
).nightly
utilisent le format de version a{date}
(alpha) (par exemple, 1.208.0a20241212
). Avertissement
Nous ne recommandons pas d'utiliser des roues de développement dans des environnements de production, tels que le trading en direct contrôlant le capital réel.
Par défaut, pip installe la dernière version stable. L'ajout de l'indicateur --pre
garantit que les versions préliminaires, y compris les roues de développement, sont prises en compte.
Pour installer la dernière version préliminaire disponible (y compris les roues de développement) :
pip install -U nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simple
Pour installer une roue de développement spécifique (par exemple, 1.208.0a20241212
pour le 12 décembre 2024) :
pip install nautilus_trader==1.208.0a20241212 --index-url=https://packages.nautechsystems.io/simple
Vous pouvez afficher toutes les versions disponibles de nautilus_trader
sur l'index du package.
Pour récupérer et répertorier par programmation les versions disponibles :
curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | grep -oP '(?<=<a href=")[^"]+(?=")' | awk -F'#' '{print $1}' | sort
develop
des roues de branche ( .dev
) : sont construites et publiées en continu avec chaque validation fusionnée.nightly
( a
) : sont construites et publiées quotidiennement lorsque la branche develop
est automatiquement fusionnée à 14h00 UTC (s'il y a des changements). develop
des roues de branche ( .dev
) : seule la version de roue la plus récente est conservée.nightly
( a
) : Seules les 3 versions de roues les plus récentes sont conservées. L'installation à partir des sources nécessite le fichier d'en-tête Python.h
, qui est inclus dans les versions de développement telles que python-dev
. Vous aurez également besoin des dernières versions stables rustc
et cargo
pour compiler les bibliothèques Rust.
Pour MacBook Pro M1/M2, assurez-vous que votre Python installé à l'aide de pyenv est configuré avec --enable-shared
:
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install <python_version>
Consultez le guide de l'utilisateur de PyO3 pour plus de détails.
Il est possible d'installer à partir des sources à l'aide de pip si vous installez d'abord les dépendances de build comme spécifié dans le pyproject.toml
. Nous vous recommandons fortement d'installer en utilisant la poésie comme ci-dessous.
Installez rustup (le programme d'installation de la chaîne d'outils Rust) :
curl https://sh.rustup.rs -sSf | sh
rustup-init.exe
rustc --version
Activer cargo
dans le shell actuel :
source $HOME /.cargo/env
Installez clang (une interface en langage C pour LLVM) :
sudo apt-get install clang
clang
dans le shell actuel : [ System.Environment ]::SetEnvironmentVariable( ' path ' , " C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsLlvmx64bin; " + $ env: Path , " User " )
clang --version
Installez la poésie (ou suivez le guide d'installation sur leur site) :
curl -sSL https://install.python-poetry.org | python3 -
Clonez la source avec git
et installez-la à partir du répertoire racine du projet :
git clone https://github.com/nautechsystems/nautilus_trader
cd nautilus_trader
poetry install --only main --all-extras
Consultez le guide d'installation pour d'autres options et plus de détails.
L'utilisation de Redis avec NautilusTrader est facultative et uniquement requise si elle est configurée comme backend pour une base de données de cache ou un bus de messages. Consultez la section Redis du guide d'installation pour plus de détails.
Un Makefile
est fourni pour automatiser la plupart des tâches d'installation et de construction pour le développement. Il fournit les cibles suivantes :
make install
: s'installe en mode build release
avec les dépendances main
, dev
et test
puis installe le package en utilisant la poésie (par défaut).make install-debug
: Identique à make install
mais avec le mode de build debug
.make install-just-deps
: installe uniquement les dépendances main
, dev
et test
(n'installe pas le package).make build
: exécute le script de build en mode build release
(par défaut).make build-debug
: Exécute le script de build en mode debug
build.make build-wheel
: Exécute le build Poetry avec un format de roue en mode release
.make build-wheel-debug
: Exécute le build Poetry avec un format de roue en mode debug
.make clean
: CAUTION supprime tous les artefacts non sources du référentiel.make docs
: Construit la documentation HTML en utilisant Sphinx.make pre-commit
: exécute les vérifications préalables à la validation sur tous les fichiers.make ruff
: exécute ruff sur tous les fichiers en utilisant la configuration pyproject.toml
(avec correction automatique).make pytest
: Exécute tous les tests avec pytest
(sauf les tests de performances).make pytest-coverage
: Identique à make pytest
et s'exécute en outre avec une couverture de test et produit un rapport. Conseil
Exécuter make build-debug
pour compiler après des modifications du code Rust ou Cython est actuellement le flux de travail le plus efficace lors du développement.
Des indicateurs et des stratégies peuvent être développés à la fois en Python et en Cython. Pour les applications sensibles aux performances et à la latence, nous vous recommandons d'utiliser Cython. Voici quelques exemples :
BacktestEngine
. Les conteneurs Docker sont construits à l'aide de l'image de base python:3.12-slim
avec les balises variantes suivantes :
nautilus_trader:latest
a la dernière version installée.nautilus_trader:nightly
a installé le chef de la branche nightly
.jupyterlab:latest
a la dernière version installée avec jupyterlab
et un exemple de notebook de backtest avec les données qui l'accompagnent.jupyterlab:nightly
a le responsable de la branche nightly
installé avec jupyterlab
et un exemple de bloc-notes de backtest avec les données qui l'accompagnent.Les images du conteneur peuvent être extraites comme suit :
docker pull ghcr.io/nautechsystems/<image_variant_tag> --platform linux/amd64
Vous pouvez lancer l'exemple de conteneur de backtest en exécutant :
docker pull ghcr.io/nautechsystems/jupyterlab:nightly --platform linux/amd64
docker run -p 8888:8888 ghcr.io/nautechsystems/jupyterlab:nightly
Ouvrez ensuite votre navigateur à l'adresse suivante :
http://127.0.0.1:8888/lab
Avertissement
NautilusTrader dépasse actuellement la limite de débit pour la journalisation du notebook Jupyter (sortie stdout). Par conséquent, le log_level
dans les exemples est défini sur ERROR
. Abaisser ce niveau pour voir plus de journalisation entraînera le blocage du bloc-notes pendant l'exécution de la cellule. Nous étudions un correctif, qui peut impliquer soit d'augmenter les limites de débit configurées pour Jupyter, soit de limiter le vidage des journaux depuis Nautilus.
Notre objectif est de fournir l'expérience de développement la plus agréable possible pour cette base de code hybride de Python, Cython et Rust. Consultez le Guide du développeur pour obtenir des informations utiles.
cargo-nextest est le programme d'exécution de test Rust standard pour NautilusTrader. Vous pouvez l'installer en exécutant :
cargo install cargo-nextest
Conseil
Les tests Rust ne réussiront que lorsqu'ils seront exécutés via cargo-nextest
.
Merci d'avoir envisagé de contribuer à Nautilus Trader ! Nous apprécions toute aide pour améliorer le projet. Si vous avez une idée d'amélioration ou de correction d'un bug, la première étape consiste à ouvrir un ticket sur GitHub pour en discuter avec l'équipe. Cela permet de garantir que votre contribution sera bien alignée sur les objectifs du projet et d'éviter la duplication des efforts.
Une fois que vous êtes prêt à commencer à travailler sur votre contribution, assurez-vous de suivre les directives décrites dans le fichier CONTRIBUTING.md. Cela inclut la signature d'un contrat de licence de contributeur (CLA) pour garantir que vos contributions peuvent être incluses dans le projet.
Notez que toutes les demandes d'extraction doivent être adressées à la branche develop
. C'est ici que les nouvelles fonctionnalités et améliorations sont intégrées avant d'être publiées.
Merci encore de votre intérêt pour Nautilus Trader ! Nous sommes impatients d’examiner vos contributions et de travailler avec vous pour améliorer le projet.
Rejoignez notre communauté d'utilisateurs et de contributeurs sur Discord pour discuter et rester au courant des dernières annonces et fonctionnalités de NautilusTrader. Que vous soyez un développeur souhaitant contribuer ou que vous souhaitiez simplement en savoir plus sur la plateforme, tous sont les bienvenus sur notre serveur.
Le code source de NautilusTrader est disponible sur GitHub sous la licence GNU Lesser General Public License v3.0. Les contributions au projet sont les bienvenues et nécessitent la conclusion d'un contrat de licence de contributeur (CLA) standard.
NautilusTrader est développé et maintenu par Nautech Systems, une société technologique spécialisée dans le développement de systèmes de trading hautes performances. Bien que le projet utilise le langage de programmation Rust et bénéficie de son écosystème, Nautech Systems n'est pas affilié à la Rust Foundation et ce projet n'est pas un travail officiel de la Rust Foundation. Pour plus d'informations, visitez https://nautilustrader.io.
Copyright (C) 2015-2025 Nautech Systems Pty Ltd. Tous droits réservés.