Friday 25 May 2018

Construa o sistema de negociação com python


Biblioteca de Negociação Algorítmica Python.
O PyAlgoTrade é uma Biblioteca de Negociação Algorítmica Python com foco em backtesting e suporte para negociação de papéis e negociação ao vivo. Digamos que você tenha uma ideia para uma estratégia de negociação e gostaria de avaliá-la com dados históricos e ver como ela se comporta. O PyAlgoTrade permite que você faça isso com o mínimo de esforço.
Principais características.
Totalmente documentado. Evento dirigido. Suporta ordens Market, Limit, Stop e StopLimit. Suporta o Yahoo! Arquivos Finanças, Google Finance e NinjaTrader CSV. Suporta qualquer tipo de dados de séries temporais no formato CSV, por exemplo, o Quandl. Suporte de negociação Bitcoin através do Bitstamp. Indicadores técnicos e filtros como SMA, WMA, EMA, RSI, Bandas de Bollinger, expoente de Hurst e outros. Métricas de desempenho como a taxa de Sharpe e a análise de rebaixamento. Manipulando eventos do Twitter em tempo real. Criador de perfil de eventos. Integração TA-Lib.
Muito fácil de dimensionar horizontalmente, isto é, usando um ou mais computadores para fazer backtest de uma estratégia.
O PyAlgoTrade é gratuito, de código aberto e está licenciado sob a Licença Apache, Versão 2.0.

BigData. Iniciantes. Negociação
BigData. Iniciantes. Negociação
Construindo um sistema de backtesting em Python: ou como eu perdi $ 3400 em duas horas.
Construir um sistema de backtest é realmente muito fácil. Fácil de estragar eu quero dizer. Embora existam toneladas de excelentes bibliotecas por aí (e nós as percorremos em algum momento), eu sempre gosto de fazer isso sozinho para ajustá-las.
De todos os sistemas de backtesting que vi, podemos supor que existem duas categorias:
Hoje, falaremos sobre loopers.
Os "loopers" são o meu tipo favorito de backtesters. Eles são triviais para escrever e super divertidos de se expandir, mas eles têm alguns fluxos vitais e, infelizmente, a maioria dos backtesters por aí é "for-loopers" (ps: eu preciso encontrar um nome melhor para isso!).
Como funcionam os loopers? Usando um loop for (como você deve ter imaginado). É algo assim:
Muito simples né? É assim que funciona um sistema de backtesting, que executa uma estratégia de momentum:
Então qual é o problema?
Muito difícil de escalar (horizontalmente) Precisa de muito trabalho para manter seu apply_strategy () trabalhando em backtesting e produção Você precisa ter tudo na mesma linguagem de programação.
Vamos mergulhar neles, um por um.
Escalabilidade Eu estava experimentando algumas semanas atrás com um algoritmo de escalada para otimizar uma das minhas estratégias. Ainda está em execução. Depois de duas semanas. E eu construo sistemas escaláveis ​​para a vida. Por que ainda está funcionando? Você pode usar multiprocessamento, Disco, produtor / consumidor (usando ZeroMQ) ou apenas threads para acelerar isso, mas alguns problemas não são "paralelos embaraçosos" (sim, este é um termo real, não uma das minhas palavras inventadas). A quantidade de trabalho para escalar um backtester como este (especialmente quando você quer fazer o mesmo aprendizado de máquina em cima dele) é enorme. Você pode fazer isso, mas é o caminho errado.
Produção e backtesting em sincronia. As vezes eu fui mordido por isso. Eu me lembro dos negócios perdidos onde eu estava "hm, porque eu entrei neste comércio?" ou o meu favorito dos velhos tempos "PORQUE PARAR DE TRAILING FOI APLICADO AGORA?"
Hora da história: Eu tive uma idéia para otimizar minha estratégia, para executar um backtester para ver o que aconteceria se eu pudesse colocar uma parada depois que o negócio fosse lucrativo, a fim de sempre garantir lucros. O backtesting funcionou como um encanto, com um aumento de 13% nos lucros e a produção perdeu todos os negócios. Eu percebi isso depois que meu algo perdeu $ 3400 em um par de horas (uma lição muito cara).
Manter o apply_strategy em sincronia é muito difícil e se torna quase impossível quando você quer fazê-lo de maneira distribuída. E você não quer ter duas versões da sua estratégia que são "quase" idênticas. A menos que você tenha $ 3400 de sobra.
Usando diferentes linguagens eu amo o Python. E Erlang. E Clojure. E J. E C. E R. E Ruby (não, na verdade, eu odeio Ruby). Eu quero ser capaz de aproveitar a força de outras linguagens no meu sistema. Eu quero experimentar estratégias em R onde existem bibliotecas muito bem testadas e há uma enorme comunidade por trás disso. Eu quero ter Erlang para escalar meu código e C para processar dados. Se você quer ser bem sucedido (não apenas na negociação), você precisa ser capaz de usar todos os recursos disponíveis sem preconceitos. Eu aprendi toneladas de coisas de sair com desenvolvedores de R sobre como você pode delta de títulos de hedge e visualizá-los ou por que razão de Sharpe pode ser uma mentira. Cada idioma tem uma multidão diferente e você quer tantas pessoas despejando ideias em seu sistema. Se você tentar ter apply_strategy em uma linguagem diferente, então boa sorte com (2).
Você está convencido agora? Bem, eu não estou tentando convencê-lo como para loopers é uma ótima maneira de executar seus testes iniciais. Foi assim que comecei e, para muitas estratégias, não as envio para o pipeline. Um "melhor" caminho (assim você pode dormir à noite) é o gerador de eventos.
Chegando em seguida, compartilhando e discutindo meu mais simples (mas mais bem sucedido) backtester!
Se você tiver mais comentários, envie-me um ping no jonromero ou inscreva-se no boletim informativo.
Outro Jurídico Este é um tutorial de engenharia sobre como construir uma plataforma de algotrading para experimentação e DIVERSÃO. Todas as sugestões aqui não são conselhos financeiros. Se você perder algum (ou todo) dinheiro porque seguiu qualquer aviso de negociação ou implantou este sistema em produção, não poderá culpar este blog aleatório (e / ou eu). Aproveite por sua conta e risco.

Construa o sistema de negociação com python
Se você é um profissional ou um investidor e gostaria de adquirir um conjunto de habilidades de negociação quantitativa, você está no lugar certo.
O curso de Trading With Python fornecerá as melhores ferramentas e práticas para pesquisa quantitativa de negociação, incluindo funções e scripts escritos por especialistas em negociações quantitativas. O curso dá o máximo impacto ao seu tempo e dinheiro investidos. Centra-se na aplicação prática da programação à negociação, em vez da informática teórica. O curso se pagará rapidamente economizando seu tempo no processamento manual de dados. Você passará mais tempo pesquisando sua estratégia e implementando negociações lucrativas.
Visão geral do curso.
Parte 1: Noções básicas Você aprenderá por que o Python é uma ferramenta ideal para negociações quantitativas. Começaremos configurando um ambiente de desenvolvimento e, em seguida, apresentaremos as bibliotecas científicas.
Parte 2: Manipulando os dados Aprenda como obter dados de várias fontes gratuitas como Yahoo Finance, CBOE e outros sites. Leia e escreva vários formatos de dados, incluindo arquivos CSV e Excel.
Parte 3: Pesquisando estratégias Aprenda a calcular P & L e acompanhar as métricas de desempenho como Sharpe e Drawdown. Construa uma estratégia de negociação e otimize seu desempenho. Vários exemplos de estratégias são discutidos nesta parte.
Parte 4: Indo ao vivo! Esta parte é centralizada em torno da API Interactive Brokers. Você aprenderá como obter dados de estoque em tempo real e fazer pedidos ao vivo.
Muito código de exemplo.
O material do curso consiste em 'cadernos' que contêm texto juntamente com código interativo como este. Você poderá aprender interagindo com o código e modificando-o ao seu gosto. Será um ótimo ponto de partida para escrever suas próprias estratégias.
Embora alguns tópicos sejam explicados detalhadamente para ajudá-lo a entender os conceitos subjacentes, na maioria dos casos você não precisará escrever seu próprio código de baixo nível, devido ao suporte de bibliotecas de código aberto existentes:
A biblioteca TradingWithPython combina grande parte da funcionalidade discutida neste curso como uma função pronta para uso e será usada durante todo o curso. Os pandas fornecerão a você todo o poder de levantamento pesado necessário para a compactação de dados.
Todo o código é fornecido sob a licença BSD, permitindo seu uso em aplicações comerciais.
Classificação do curso.
Um piloto do curso foi realizado na primavera de 2013, isso é o que os alunos puderam dizer:
Matej curso bem planejado e bom treinador. Definitivamente vale seu preço e meu tempo Lave Jev obviamente sabia suas coisas. A profundidade da cobertura foi perfeita. Se Jev executar algo assim novamente, eu serei o primeiro a me inscrever. John Phillips Seu curso realmente me fez começar a considerar o python para análise de sistemas de estoque.

Construa o sistema de negociação com python
Eu estou construindo um pequeno programa para recuperar dados do mercado e fazer o gráfico em tempo real. Embora as decisões de negociação sejam amplamente automatizadas, os gráficos são atualizados continuamente para que alguém possa acompanhar como as decisões estão sendo tomadas e intervir manualmente quando necessário.
O que seria uma boa biblioteca GUI para a tarefa (para Python). Aqui estão as considerações -
Linguagem de programação: Python (Você acha que eu deveria usar outra coisa? Pode ser mesmo fazer o GUI e backend em diferentes idiomas.).
Sistema Operacional: De preferência, multiplataforma, mas se tiver que ser específico da plataforma, então o Linux é.
Velocidade + Curva de Aprendizagem: Embora o tempo (baixa latência) não seja uma questão crítica e eu prefira algo fácil de usar e rápido de aprender, o programa tem que ser responsivo e eu não gostaria de trocar velocidade pela facilidade de codificação além de uma certa ponto. Eu acho que essa é a parte em que sua experiência poderia me ajudar.
Eu tinha considerado fortemente o WxPython, mas alguns dos comentários disseram que ele não era bem projetado (como em, não se encaixa bem com o Python!)
Portanto, a complexidade da tarefa e as considerações de meta foram colocadas à sua frente. Por favor ajude / sugira.

Construa o sistema de negociação com python
Em primeiro lugar, você provavelmente será direcionado para considerar o Zipline. Vale a pena dar uma olhada, mas não acho que seja um bom ponto de partida, já que:
Os desenvolvedores da Quantopian não têm experiência financeira e são mostrados no código fonte da Zipline.
A tirolesa é terrivelmente lenta se você a comparar com qualquer plataforma comercial com funcionalidade de backtesting em um aplicativo compilado, até mesmo nas plataformas de negociação de varejo de baixo custo (por exemplo, NinjaTrader, Sierra, TradeStation).
Zipline não é muito conveniente para a negociação de vários produtos. Eu acho que o produto mais barato que tem esse nível de funcionalidade é o Deltix.
Um processador moderno deve ser capaz de fazer backtest de uma estratégia de crossover média móvel em um dia inteiro do feed OPRA (todos os produtos) sem agendá-lo durante a noite. Qualquer funcionalidade menor ou mais lenta e você tem desenvolvedores ruins. (Eu lembro que o Goldman tinha 12-14 servidores lidando com OPRA em tempo real em 2007-2008 e 2 pessoas reescreveram tudo do zero para a arquitetura de 128 bits em um fim de semana. Não há razão para anos de desenvolvimento em Zipline não corresponderem a 2 desenvolvedores em um final de semana antes do Stack Exchange existir.
Aqui estão algumas das principais considerações que você deve fazer antes de criar seu mecanismo de backtesting:
Como você estará armazenando / serializando seus dados de mercado no disco e na memória?
A abordagem de um homem pobre é envolvê-lo em um dataframe de pandas, mas isso acontece com o custo da abstração e irá desacelerar seu mecanismo de backtesting. O pandas é bom para a exploração de dados, mas não para uma tarefa que você repetirá muitas vezes.
Como você lidará com uma fonte de dados cujo tamanho excede a memória disponível?
Como você lidará com dados de mercado não estruturados?
Como você estará armazenando suas saídas?
Um problema óbvio e ingênuo é que você não quer reiniciar um backtest que levou 1 noite para ser executado se o aplicativo travasse no meio do caminho. Outro exemplo ingênuo é que você deve ser capaz de acessar resultados antigos de 6 meses atrás sem repetir o loop de backtest.

No comments:

Post a Comment