Filial | Versão | Status |
---|---|---|
master | ||
nightly | ||
develop |
Plataforma | Ferrugem | Pitão |
---|---|---|
Linux (x86_64) | 1.83.0+ | 3.11+ |
macOS (arm64) | 1.83.0+ | 3.11+ |
Windows (x86_64) | 1.83.0+ | 3.11+ |
NautilusTrader é uma plataforma de negociação algorítmica de alto desempenho, de código aberto e de nível de produção, que fornece aos traders quantitativos a capacidade de fazer backtest de portfólios de estratégias de negociação automatizadas em dados históricos com um mecanismo orientado a eventos, e também implantar essas mesmas estratégias ao vivo, com nenhuma alteração de código.
A plataforma é 'AI-first', projetada para desenvolver e implantar estratégias de negociação algorítmica em um ambiente nativo Python robusto e de alto desempenho. Isso ajuda a enfrentar o desafio da paridade de manter o ambiente de pesquisa/backtest do Python, consistente com o ambiente de negociação em tempo real de produção.
A filosofia de design, arquitetura e implementação da NautilusTrader mantém a correção e segurança do software no mais alto nível, com o objetivo de suportar backtesting de sistema de negociação nativo e de missão crítica em Python e cargas de trabalho de implantação ao vivo.
A plataforma também é universal e independente de classe de ativos – com qualquer API REST, WebSocket ou FIX capaz de ser integrada por meio de adaptadores modulares. Assim, ele pode lidar com operações de negociação de alta frequência para qualquer classe de ativos, incluindo FX, Ações, Futuros, Opções, CFDs, Criptomoedas e Apostas - em vários locais simultaneamente.
IOC
, FOK
, GTD
, AT_THE_OPEN
, AT_THE_CLOSE
, tipos de pedidos avançados e gatilhos condicionais. Instruções de execução post-only
, reduce-only
e icebergs. Listas de ordens de contingência incluindo OCO
, OTO
.nautilus - do grego antigo 'marinheiro' e naus 'navio'.
A concha do nautilus consiste em câmaras modulares com um fator de crescimento que se aproxima de uma espiral logarítmica. A ideia é que isso possa ser traduzido para a estética do design e da arquitetura.
Tradicionalmente, a pesquisa de estratégia de negociação e backtesting podem ser conduzidos em Python (ou outra linguagem adequada) usando métodos vetorizados, com a estratégia precisando então ser reimplementada de uma forma mais orientada a eventos usando C++, C#, Java ou outra(s) linguagem(s) de tipo estaticamente. ). O raciocínio aqui é que o código de backtesting vetorizado não pode expressar a complexidade granular dependente do tempo e do evento da negociação em tempo real, onde as linguagens compiladas provaram ser mais adequadas devido ao seu desempenho inerentemente superior e à segurança de tipo.
Uma das principais vantagens do NautilusTrader aqui é que esta etapa de reimplementação agora é contornada - já que os componentes principais críticos da plataforma foram todos escritos inteiramente em Rust ou Cython. Isso significa que estamos usando as ferramentas certas para o trabalho, onde linguagens de programação de sistemas compilam binários de alto desempenho, com módulos de extensão CPython C capazes de oferecer um ambiente nativo de Python, adequado para traders quantitativos profissionais e empresas de negociação.
Python foi originalmente criado décadas atrás como uma linguagem de script simples com uma sintaxe limpa e direta. Desde então, ela evoluiu para uma linguagem de programação orientada a objetos de uso geral totalmente desenvolvida. Com base no índice TIOBE, Python é atualmente a linguagem de programação mais popular do mundo. Além disso, Python se tornou a língua franca de fato da ciência de dados, aprendizado de máquina e inteligência artificial.
No entanto, a linguagem pronta para uso tem suas desvantagens, especialmente no contexto da implementação de grandes sistemas de desempenho crítico. Cython abordou muitos desses problemas, oferecendo todas as vantagens de uma linguagem de tipo estaticamente, incorporada ao rico ecossistema de bibliotecas de software e comunidades de desenvolvedores/usuários do Python.
Rust é uma linguagem de programação multiparadigma projetada para desempenho e segurança, especialmente simultaneidade segura. Rust é extremamente rápido e eficiente em termos de memória (comparável a C e C++) sem coletor de lixo. Ele pode alimentar sistemas de missão crítica, funcionar em dispositivos incorporados e integrar-se facilmente com outras linguagens.
O sistema de tipo rico e o modelo de propriedade do Rust garantem a segurança da memória e do thread de forma determinística - eliminando muitas classes de bugs em tempo de compilação.
O projeto utiliza cada vez mais Rust para componentes essenciais de desempenho crítico. A vinculação da linguagem Python é tratada por meio de Cython e PyO3, com bibliotecas estáticas vinculadas em tempo de compilação antes que os binários do wheel sejam empacotados, portanto, o usuário não precisa ter o Rust instalado para executar o NautilusTrader.
Este projeto faz o Soundness Pledge:
“A intenção deste projeto é estar livre de bugs de solidez. Os desenvolvedores farão o possível para evitá-los e receberão ajuda para analisá-los e corrigi-los.”
Observação
MSRV: NautilusTrader depende muito de melhorias na linguagem Rust e no compilador. Como resultado, a versão mínima suportada do Rust (MSRV) é geralmente igual à versão estável mais recente do Rust.
O NautilusTrader foi projetado modularmente para funcionar com adaptadores , permitindo conectividade com locais de negociação e provedores de dados, convertendo suas APIs brutas em uma interface unificada.
As seguintes integrações são atualmente suportadas:
Nome | EU IA | Tipo | Status | Documentos |
---|---|---|---|---|
Betfair | BETFAIR | Bolsa de Apostas Esportivas | Guia | |
Binância | BINANCE | Troca de criptografia (CEX) | Guia | |
Binance EUA | BINANCE | Troca de criptografia (CEX) | Guia | |
Binance Futuros | BINANCE | Troca de criptografia (CEX) | Guia | |
Bybit | BYBIT | Troca de criptografia (CEX) | Guia | |
Databento | DATABENTO | Provedor de dados | Guia | |
dYdX | DYDX | Troca de criptografia (DEX) | Guia | |
Corretores interativos | INTERACTIVE_BROKERS | Corretagem (vários locais) | Guia | |
OKX | OKX | Troca de criptografia (CEX) | Guia | |
Polimercado | POLYMARKET | Mercado de Previsão (DEX) | Guia | |
Tardis | TARDIS | Provedor de dados | Guia |
building
: Em construção e provavelmente não em condições de uso.beta
: Concluído em um estado minimamente funcional e em fase de teste 'beta'.stable
: conjunto de recursos e API estabilizados, a integração foi testada por desenvolvedores e usuários em um nível razoável (alguns bugs ainda podem permanecer).Consulte a documentação de integrações para obter mais detalhes.
Nosso objetivo é manter uma versão estável e transitável em todas as filiais.
master
: reflete o código-fonte da versão lançada mais recente.nightly
: Inclui recursos experimentais e em andamento, mesclados do branch develop
diariamente às 14h UTC e também quando necessário.develop
: O branch mais ativo, frequentemente atualizado com novos commits, incluindo recursos experimentais e em andamento. Observação
Nosso roteiro visa alcançar uma API estável para a versão 2.x (provavelmente após a porta Rust). Assim que esse marco for alcançado, planejamos implementar um processo formal de lançamento, incluindo períodos de suspensão de uso para quaisquer alterações na API. Esta abordagem permite-nos manter um ritmo de desenvolvimento rápido por enquanto.
O NautilusTrader ainda está em desenvolvimento ativo. Alguns recursos podem estar incompletos e, embora a API esteja se tornando mais estável, podem ocorrer alterações significativas entre os lançamentos. Nós nos esforçamos para documentar essas alterações nas notas de lançamento da melhor maneira possível .
Nosso objetivo é seguir um cronograma de lançamento semanal , embora recursos experimentais ou maiores possam causar atrasos.
Recomendamos usar a versão mais recente suportada do Python e configurar o nautilus_trader em um ambiente virtual para isolar dependências
Para instalar a roda binária mais recente (ou pacote sdist) do PyPI usando o gerenciador de pacotes pip do Python:
pip install -U nautilus_trader
O índice de pacotes da Nautech Systems ( packages.nautechsystems.io
) é compatível com PEP-503 e hospeda rodas binárias estáveis e de desenvolvimento para nautilus_trader
. Isso permite que os usuários instalem a versão estável mais recente ou versões de pré-lançamento para teste.
As rodas estáveis correspondem aos lançamentos oficiais do nautilus_trader
no PyPI e usam controle de versão padrão.
Para instalar a versão estável mais recente:
pip install -U nautilus_trader --index-url=https://packages.nautechsystems.io/simple
As rodas de desenvolvimento são publicadas nos ramos develop
e nightly
para Linux e macOS, permitindo que os usuários testem recursos e correções antes dos lançamentos estáveis.
Esse processo também ajuda a preservar os recursos de computação e garante fácil acesso aos binários exatos testados em pipelines de CI, ao mesmo tempo em que adere aos padrões de versão PEP-440:
develop
usam o formato de versão dev{date}+{build_number}
(por exemplo, 1.208.0.dev20241212+7001
).nightly
usam o formato de versão a{date}
(alpha) (por exemplo, 1.208.0a20241212
). Aviso
Não recomendamos o uso de rodas de desenvolvimento em ambientes de produção, como negociações ao vivo controlando capital real.
Por padrão, o pip instala a versão estável mais recente. Adicionar o sinalizador --pre
garante que as versões de pré-lançamento, incluindo rodas de desenvolvimento, sejam consideradas.
Para instalar o pré-lançamento mais recente disponível (incluindo rodas de desenvolvimento):
pip install -U nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simple
Para instalar uma roda de desenvolvimento específica (por exemplo, 1.208.0a20241212
para 12 de dezembro de 2024):
pip install nautilus_trader==1.208.0a20241212 --index-url=https://packages.nautechsystems.io/simple
Você pode visualizar todas as versões disponíveis do nautilus_trader
no índice do pacote.
Para buscar e listar programaticamente as versões disponíveis:
curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | grep -oP '(?<=<a href=")[^"]+(?=")' | awk -F'#' '{print $1}' | sort
develop
branchwheels ( .dev
): São construídos e publicados continuamente com cada commit mesclado.nightly
branchwheels ( a
): São construídos e publicados diariamente quando o ramo develop
é mesclado automaticamente às 14:00 UTC (se houver alterações). develop
rodas de ramificação ( .dev
): apenas a construção da roda mais recente é mantida.nightly
( a
): apenas as 3 construções de rodas mais recentes são mantidas. A instalação a partir do código-fonte requer o arquivo de cabeçalho Python.h
, que está incluído em versões de desenvolvimento como python-dev
. Você também precisará do rustc
e cargo
estáveis mais recentes para compilar as bibliotecas Rust.
Para MacBook Pro M1/M2, certifique-se de que seu Python instalado usando pyenv esteja configurado com --enable-shared
:
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install <python_version>
Consulte o guia do usuário do PyO3 para obter mais detalhes.
É possível instalar a partir do código-fonte usando pip se você primeiro instalar as dependências de compilação conforme especificado em pyproject.toml
. É altamente recomendável instalar usando poesia conforme abaixo.
Instale o Rustup (o instalador do conjunto de ferramentas Rust):
curl https://sh.rustup.rs -sSf | sh
rustup-init.exe
rustc --version
Habilite cargo
no shell atual:
source $HOME /.cargo/env
Instale o clang (um frontend em linguagem C para LLVM):
sudo apt-get install clang
clang
no shell atual: [ System.Environment ]::SetEnvironmentVariable( ' path ' , " C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsLlvmx64bin; " + $ env: Path , " User " )
clang --version
Instale poesia (ou siga o guia de instalação no site):
curl -sSL https://install.python-poetry.org | python3 -
Clone a fonte com git
e instale a partir do diretório raiz do projeto:
git clone https://github.com/nautechsystems/nautilus_trader
cd nautilus_trader
poetry install --only main --all-extras
Consulte o Guia de Instalação para outras opções e mais detalhes.
Usar Redis com NautilusTrader é opcional e necessário apenas se configurado como back-end para um banco de dados de cache ou barramento de mensagens. Consulte a seção Redis do Guia de Instalação para obter mais detalhes.
Um Makefile
é fornecido para automatizar a maioria das tarefas de instalação e construção para desenvolvimento. Ele fornece os seguintes alvos:
make install
: Instala no modo de compilação release
com dependências main
, dev
e test
e depois instala o pacote usando poesia (padrão).make install-debug
: O mesmo que make install
, mas com modo de compilação debug
.make install-just-deps
: Instala apenas as dependências main
, dev
e test
(não instala o pacote).make build
: executa o script de construção no modo de compilação release
(padrão).make build-debug
: Executa o script de compilação no modo de compilação debug
.make build-wheel
: Executa a compilação Poetry com um formato de roda no modo de release
.make build-wheel-debug
: Executa a compilação Poetry com um formato de roda no modo de debug
.make clean
: CUIDADO remove todos os artefatos que não são de origem do repositório.make docs
: Constrói a documentação HTML usando Sphinx.make pre-commit
: Executa as verificações de pré-commit em todos os arquivos.make ruff
: Executa ruff em todos os arquivos usando a configuração pyproject.toml
(com autofix).make pytest
: Executa todos os testes com pytest
(exceto testes de desempenho).make pytest-coverage
: O mesmo que make pytest
e, adicionalmente, é executado com cobertura de teste e produz um relatório. Dica
Executar make build-debug
para compilar após alterações no código Rust ou Cython é atualmente o fluxo de trabalho mais eficiente durante o desenvolvimento.
Indicadores e estratégias podem ser desenvolvidos tanto em Python quanto em Cython. Para aplicativos sensíveis ao desempenho e à latência, recomendamos o uso do Cython. Abaixo estão alguns exemplos:
BacktestEngine
diretamente. Os contêineres Docker são criados usando a imagem base python:3.12-slim
com as seguintes tags variantes:
nautilus_trader:latest
tem a versão mais recente instalada.nautilus_trader:nightly
tem o chefe da filial nightly
instalado.jupyterlab:latest
tem a versão mais recente instalada junto com jupyterlab
e um exemplo de notebook de backtest com os dados que o acompanham.jupyterlab:nightly
tem o chefe da filial nightly
instalado junto com jupyterlab
e um exemplo de notebook de backtest com os dados que o acompanham.As imagens do contêiner podem ser extraídas da seguinte maneira:
docker pull ghcr.io/nautechsystems/<image_variant_tag> --platform linux/amd64
Você pode iniciar o contêiner de exemplo de backtest executando:
docker pull ghcr.io/nautechsystems/jupyterlab:nightly --platform linux/amd64
docker run -p 8888:8888 ghcr.io/nautechsystems/jupyterlab:nightly
Em seguida, abra seu navegador no seguinte endereço:
http://127.0.0.1:8888/lab
Aviso
Atualmente, o NautilusTrader excede o limite de taxa para registro do notebook Jupyter (saída padrão). Como resultado, o log_level
nos exemplos é definido como ERROR
. Reduzir esse nível para ver mais registros fará com que o notebook trave durante a execução da célula. Estamos investigando uma correção, que pode envolver o aumento dos limites de taxa configurados para o Jupyter ou a limitação da liberação de log do Nautilus.
Nosso objetivo é fornecer a experiência de desenvolvedor mais agradável possível para esta base de código híbrida de Python, Cython e Rust. Consulte o Guia do desenvolvedor para obter informações úteis.
cargo-nextest é o executor de teste Rust padrão para NautilusTrader. Você pode instalá-lo executando:
cargo install cargo-nextest
Dica
Os testes de ferrugem só serão aprovados quando executados via cargo-nextest
.
Obrigado por considerar contribuir com o Nautilus Trader! Agradecemos toda e qualquer ajuda para melhorar o projeto. Se você tiver uma ideia para uma melhoria ou correção de bug, o primeiro passo é abrir um problema no GitHub para discuti-lo com a equipe. Isto ajuda a garantir que a sua contribuição estará bem alinhada com os objetivos do projeto e evita a duplicação de esforços.
Quando estiver pronto para começar a trabalhar em sua contribuição, siga as diretrizes descritas no arquivo CONTRIBUTING.md. Isso inclui a assinatura de um Contrato de Licença de Contribuidor (CLA) para garantir que suas contribuições possam ser incluídas no projeto.
Observe que todas as solicitações pull devem ser feitas para o branch develop
. É aqui que novos recursos e melhorias são integrados antes de serem lançados.
Obrigado novamente pelo seu interesse no Nautilus Trader! Estamos ansiosos para revisar suas contribuições e trabalhar com você para melhorar o projeto.
Junte-se à nossa comunidade de usuários e colaboradores no Discord para conversar e manter-se atualizado com os últimos anúncios e recursos do NautilusTrader. Seja você um desenvolvedor que deseja contribuir ou apenas deseja aprender mais sobre a plataforma, todos são bem-vindos em nosso servidor.
O código-fonte do NautilusTrader está disponível no GitHub sob a GNU Lesser General Public License v3.0. Contribuições para o projeto são bem-vindas e exigem a conclusão de um Contrato de Licença de Contribuinte (CLA) padrão.
O NautilusTrader é desenvolvido e mantido pela Nautech Systems, uma empresa de tecnologia especializada no desenvolvimento de sistemas de negociação de alto desempenho. Embora o projeto utilize a linguagem de programação Rust e se beneficie de seu ecossistema, a Nautech Systems não é afiliada à Rust Foundation e este projeto não é um trabalho oficial da Rust Foundation. Para mais informações, visite https://nautilustrader.io.
Copyright (C) 2015-2025 Nautech Systems Pty Ltd. Todos os direitos reservados.