Como Construir um Bot de Trading em Python Sem Reinventar a Roda
Quando um programador decide experimentar trading algorítmico, tudo geralmente começa criando seu próprio script. O script solicita candles via API REST, calcula alguns indicadores e envia ordens. Um mês passa, e o projeto se transforma em uma construção pesada de tratamento de erros de rede, dessincronização de sockets e gambiarras caóticas para controle de ordens.
Em vez de escrever tudo do zero, faz mais sentido utilizar um framework pronto. O projeto VeighNa (anteriormente conhecido como VN.py) surgiu em 2015. Tem mais de 43 mil estrelas no GitHub, e o desenvolvimento ativo continua até hoje.
O Que É a Plataforma
VeighNa é um framework open-source para trading algorítmico em Python. A arquitetura interna é construída em torno de um motor de eventos. O sistema não precisa executar loops de espera intermináveis—ele reage a ticks recebidos, mudanças de status de ordens e sinais do temporizador do sistema.
O projeto tem foco institucional. Na China, é utilizado por corretoras de futuros, empresas de gestão de ativos e fundos de hedge privados. Isso deixa uma certa marca no código-fonte.
A maioria dos conectores integrados são adaptados para o mercado financeiro chinês (CTP, XTP, HTS). No entanto, existe um adaptador para Interactive Brokers para trabalhar com bolsas internacionais. Se a bolsa ou plataforma de criptomoedas necessária não estiver na lista, você precisará escrever seu próprio gateway herdando da classe base Gateway.
Módulos para Resolver Tarefas Práticas
A arquitetura do sistema consiste em três partes principais: o núcleo, as aplicações de trading (apps) e os adaptadores de dados.
Para estratégias, vários motores especializados são fornecidos:
- CTA Strategy lida com trading de tendência e contra-tendência padrão em instrumentos únicos.
- Spread Trading ajuda a implementar trading de pares e arbitragem espacial.
- Option Master contém ferramentas para avaliação de opções, construção de curvas de volatilidade e cálculo de Gregos.
- Portfolio Strategy foca em estratégias que negociam um basket de ativos de uma vez.
Entre os toques interessantes está a presença de interfaces prontas para backtesting. Para testar uma ideia em dados históricos, você não precisa necessariamente abrir o Jupyter Notebook. O sistema tem uma interface gráfica integrada baseada em PyQt, onde você pode executar otimização de parâmetros e visualizar imediatamente a curva de capital e gráficos de drawdown.
Para armazenar histórico, bancos de dados relacionais convencionais como SQLite e MySQL são suportados, assim como armazenamentos colunares especializados como QuestDB e TDengine, otimizados para entrada e saída rápida de séries temporais.
Machine Learning na Versão 4.0
A quarta geração do framework introduziu o módulo vnpy.alpha. Os desenvolvedores admitem honestamente que foram inspirados pelo projeto Qlib da Microsoft.
O módulo fecha o ciclo de desenvolvimento para estratégias de ML:
- Geração e processamento de features baseado no conjunto de expressões de fatores Alpha158.
- Treinamento de modelos de predição usando LightGBM, Lasso ou perceptron multicamadas (MLP).
- Transição rápida do notebook de pesquisa para execução em conta real ou simulada.
O repositório contém Jupyter notebooks prontos com exemplos, então se familiarizar com o pipeline de preparação de dados e treinamento não será difícil.
Como É o Código
Iniciar um terminal de trading com o conjunto necessário de módulos pode ser feito em literalmente uma dúzia de linhas. No exemplo abaixo, montamos uma aplicação com uma conexão de gateway CTP e dois módulos: execução de estratégia CTA e teste histórico.
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
def main():
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)
main_engine.add_app(CtaBacktesterApp)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
Após iniciar, uma janela desktop completa será aberta com tabelas de ordens, posições, logs e gráficos de velas.
Vale a Pena Usar em Produção
VeighNa é uma plataforma massiva. Se você só precisa enviar algumas ordens para o mercado à vista uma vez por dia via API REST, o framework parecerá exageradamente complicado.
No entanto, a ferramenta certamente será útil se você está procurando uma arquitetura testada pelo tempo para trading orientado a eventos, planejando escrever seus próprios conectores, ou quer um terminal desktop pronto com gerenciamento de risco e capacidades de backtesting. O principal é estar preparado para o fato de que parte da documentação e comentários da comunidade são traduzidos do chinês via tradutor.
Projetos relacionados