Python Algorithmic Trading Library.
PyAlgoTrade é uma Biblioteca de Negociação Algorítmica Python com foco em backtesting e suporte para negociação de papel e negociação ao vivo. Digamos que você tenha uma idéia de uma estratégia de negociação e que você gostaria de avaliá-la com dados históricos e ver como ela se comporta. PyAlgoTrade permite que você faça isso com um esforço mínimo.
Principais características.
Totalmente documentado. Evento conduzido. Suporta pedidos Market, Limit, Stop e StopLimit. Suporta Yahoo! Finanças, Google Finance e NinjaTrader CSV. Suporta qualquer tipo de dados da série temporal no formato CSV, por exemplo, Quandl. Suporte comercial Bitcoin através do Bitstamp. Indicadores técnicos e filtros como SMA, WMA, EMA, RSI, Bandas Bollinger, Expositores Hurst e outros. Métricas de desempenho como a taxa de Sharpe e análise de redução. Manipulação de eventos do Twitter em tempo real. Perfil de eventos. Integração TA-Lib.
Muito fácil de dimensionar horizontalmente, ou seja, usando um ou mais computadores para testar uma estratégia.
PyAlgoTrade é gratuito, de código aberto e está licenciado sob a Licença Apache, Versão 2.0.
Por que Python?
Antes de começar, gostaria de falar sobre o porquê eu uso o Python para a computação financeira. Levei vários anos para entender todas as opções lá fora e vou tentar convencê-lo de que o Python é realmente a melhor ferramenta para a maioria das tarefas envolvidas na negociação.
Quando eu comecei a programar como uma criança em algum lugar no início dos anos noventa, escolher uma linguagem de programação era fácil, pois simplesmente não havia muitos para escolher. Comecei pela primeira vez no Pascal e desde então programado em Delphi, C, C ++, C #, Java, VB, PHP, Matlab, Python, SPIN e até mesmo o ASM. Eu não aprendi todas essas línguas por diversão, como eu tenho coisas melhores para fazer (como o trabalho real), mas eu precisava, pois não tinha nenhuma linguagem de "faca do exército suíço" para todas as minhas necessidades. Eu precisava de C e Delphi para fazer aplicativos autônomos, PHP para construir um site e Matlab para cálculos científicos. Como diz o ditado, "jack of all trades é mestre de nenhum", então, mudando de um idioma para outro, nunca adquiri conhecimento especializado em nenhum deles.
Idealmente, eu gostaria de aprender apenas um idioma que seja adequado para todos os tipos de trabalho: crunching de números, criação de aplicativos, desenvolvimento web, interface com API etc. Este idioma seria fácil de aprender, o código seria compacto e claro. correr em qualquer plataforma. Isso me permitiria trabalhar de forma interativa, permitindo que o código evoluísse ao escrevê-lo e ser pelo menos livre, como na fala. E o mais importante, eu me importo muito com o meu próprio tempo do que com o tempo de CPU do meu pc, então o desempenho do número de bits é menos importante para mim do que a minha própria produtividade.
Atualmente, as duas línguas mais populares para computação técnica e científica são Matlab e Python. Ambos cumprem muitos dos desejos descritos acima, mas eles têm algumas diferenças importantes. Matlab é mais popular quando se trata de computação técnica. Isto é o que costumava usar o dia-a-dia para resolver problemas de engenharia. Para simulações numéricas e trabalhar com dados "limpos", é provavelmente a melhor ferramenta que existe. Bom IDE, fantásticas funções de traçabilidade, excelente documentação. É menos adequado para o desenvolvimento de aplicativos ou como linguagem de uso geral. Espere pagar \
2k \ $ para uma licença comercial básica mais extra para caixas de ferramentas específicas.
Fazer pesquisas financeiras em Matlab provou ser um grande desafio para mim, principalmente porque não existe uma maneira fácil de lidar com dados "sujos" (dados que não estão bem alinhados em uma tabela, mas tem múltiplas fontes com datas diferentes e entradas faltantes) . Outro desafio que enfrentei foi impedir que meu código se tornasse uma bagunça. É possível escrever bibliotecas seguras com o Matlab, mas está longe de ser trivial e o design do idioma realmente incentiva a codificação desordenada. Ao usar o Matlab para o desenvolvimento da estratégia de negociação, consegui lidar com as deficiências desta plataforma. No entanto, quando eu decidi construir um sistema de troca automática, eu tinha atingido um beco sem saída. Enquanto consegui me conectar à Interacive Brokers API, descobriu-se que não havia como criar uma aplicação confiável. Embora seja bom para pesquisa, a Matlab é uma merda para implantação. Foi quando eu decidi olhar para outras opções. Python é muito semelhante ao Matlab e resolve a maioria de suas falhas. E é grátis! Com o trabalho interativo do notebook Ipython no Python, é fácil, como no Matlab, mas o que você obtém é uma linguagem de programação que pode completar quase todas as tarefas, desde a mineração de dados até aplicativos de desenvolvimento web e qualidade de produção com grandes GUIs. Se eu tivesse que começar tudo de novo, eu escolheria Python, pois isso me salvaria o problema de aprender outro idioma para Gui e desenvolvimento web. Depois de usar Python por três anos, ainda estou entusiasmado com o momento em que caí apaixonado por isso. Sinto que muitos outros comerciantes podem se beneficiar grandemente aprendendo o Python desde o início e por isso criei um curso de troca com Python.
Instalação.
O Python, como a maioria dos softwares de código aberto, possui uma característica específica: pode ser um desafio para um iniciante encontrar seu caminho em torno de milhares de bibliotecas e ferramentas. Este guia irá ajudá-lo a obter tudo o que precisa em sua caixa de ferramentas quant, espero que sem problemas.
Felizmente, há várias distribuições, contendo a maioria dos pacotes necessários, tornando a instalação brisa.
A melhor distribuição na minha opinião é a Anaconda do Continuum Analytics.
A distribuição da Anaconda inclui:
Python 3 Python interprete em cima do qual tudo o resto é executado Ipython: Interactive shell & amp; notebook Spyder IDE numpy & amp; scipy: ferramentas de computação científica, semelhantes a Matlab pandas2: biblioteca de estruturas de dados. muitos mais pacotes científicos e de utilidade, veja lista de pacotes.
Então, por favor, vá em frente e instale a Anaconda.
Ferramentas e bibliotecas extras.
Ao lado dos brindes incluídos no instalador da Anaconda, você precisará pelo menos de um editor de texto de descida e de um navegador.
notepad ++ é um editor de texto versátil e leve O Google Chrome ou o navegador Firefox são necessários para o notebook Jupyter (o Internet Explorer não funcionará)
Outras bibliotecas úteis incluem ferramentas para leitura xml, documentação, etc., serão abordadas mais tarde.
Código de execução.
A maior parte do código deste curso é executado em um documento interativo chamado "caderno".
Nota: O ambiente de programação interativo que usamos é chamado de notebook Jupyter. Anteriormente, foi chamado de "notebook IPython", mas foi renomeado para "Jupyter". Isso foi feito para mostrar que vários idiomas são suportados (JUlia, PYThon, R e mais). Este curso foi escrito antes dessa transição de nomeação, por isso ocasionalmente, você encontrará referências ao notebook Ipython, que é o mesmo que o notebook Jypyter.
Lançamento do notebook Jupyter.
Neste momento (maio de 2018), não é possível alterar o diretório de trabalho depois de iniciar o notebook. Você precisa iniciá-lo no diretório que contém seus cadernos para acessar seus cadernos.
No entanto, existem várias opções para abrir rapidamente seus cadernos:
Iniciando o notebook Jupyter com um atalho.
Se você estiver usando um diretório estático para armazenar os cadernos, a maneira mais fácil de abri-los seria em um diretório personalizado usando um atalho modificado: 1. Encontre o atalho no caderno no menu Iniciar clicando em 'Iniciar' e digitando 'Jupiter 'na janela de pesquisa.
Uma vez que o atalho é encontrado, copie-o para a área de transferência pressionando o botão direito do mouse e selecionando 'copiar'. Em seguida, cole-o em sua área de trabalho. Agora você pode editar o diretório de trabalho clicando no botão direito no atalho da área de trabalho e escolhendo 'propriedades'. Mude o campo 'Iniciar em' para o diretório onde seus notebooks estão localizados.
Você pode criar vários atalhos um para cada diretório separado de notebooks. & lt;! - Um curto screencast irá mostrar-lhe como fazer isso.
Um tutorial mais extenso sobre o uso do notebook pode ser encontrado aqui.
Bibliotecas científicas.
NumPy é um pacote fundamental projetado para cálculos científicos. Em sua funcionalidade, é muito semelhante ao Matlab, fornecendo métodos de trabalho com matrizes multidimensionais e arrays. O site Numpy fornece toda a documentação que você precisa junto com um tutorial, mas ler o Capítulo 4 do livro Python for Data Analysis é ainda melhor para obter uma visão geral sobre o que essa ferramenta pode fazer. Você não deve se preocupar muito com a compreensão de todos os sinos e assobios do NumPy, por enquanto é suficiente entender os conceitos gerais de trabalhar com ndarray e indexação.
Matplotlib.
Para ter uma idéia das quase infinitas capacidades desta biblioteca, basta dar uma olhada na galeria matplotlib! Nós normalmente só precisaremos das funções plot () e hist (). Outro ótimo tutorial de funções de traçado é dado neste caderno.
Código de escrita, execução e depuração.
Até agora, nos concentramos em escrever código dentro do notebook IPython. Esta é uma boa maneira para a prototipagem rápida, mas quando você precisa reutilizar a mesma funcionalidade em diferentes cadernos, o código de cópia é um hábito muito ruim. Um bom hábito seria usar módulos para reutilizar a funcionalidade. Um módulo é essencialmente um arquivo. py ou um diretório com arquivos. py contendo funções e classes. Essas funções / classes podem ser acessadas pela diretiva de importação. Uma boa explicação dos módulos pode ser encontrada nos documentos do Python. Nós estaremos olhando para escrever nossos próprios módulos na Parte 2, por enquanto é suficiente saber como reutilizar a funcionalidade dos módulos existentes. Um fluxo típico de desenvolvimento de código consiste em duas etapas:
Etapa de prototipagem: é aqui que você toma a abordagem rápida e não suja. Desenvolva de forma interativa usando IPython, IPython ou Spyder. Aqui você pode reutilizar funções de bibliotecas existentes e criar novas funcionalidades. O notebook é ideal para trabalho interativo, mas menos adequado para depuração avançada, o Spyder é excelente para depuração e o Ipython está em algum lugar intermediário. Minha própria experiência é que um depurador avançado raramente é necessário, normalmente eu posso resolver 70% dos erros, apenas olhando a mensagem de erro, outros 25% adicionando uma declaração de impressão. Há também uma maneira de iniciar um depurador do notebook. Basta digitar% qtconsole no notebook e um novo console será aberto conectado ao mesmo ipython nos bastidores. O console tem acesso a todas as variáveis e também pode executar% debug, que iniciará uma sessão de depuração.
Etapa Módulo: uma vez que você esteja feliz com a funcionalidade desenvolvida em uma fase de prototipagem, você pode integrá-la em um módulo. Nesta fase, é uma boa prática adicionar alguma documentação ao código que você escreveu. A documentação do código em Python é muito fácil com docstrings. Docstrings são cadeias de texto incluídas no código que são usadas para documentar a funcionalidade. Para alguns exemplos, dê uma olhada aqui. Para uma produtividade ideal na fase do módulo, você precisa de um bom editor de código fonte. Há muitas opções lá fora. Meus favoritos (gratuitos) são (em ordem crescente de complexidade e recursos):
Notepad ++ notepad, mas muito melhor (destaque de sintaxe etc). Ideal para mudanças rápidas de código, quando você não deseja ativar um editor mais extenso. Spyder: editor leve que fecha a lacuna entre o IPython e um IDE completo (Integrated Development Environment). Especificamente visado no trabalho científico interativo. Pyscripter - IDE fácil de usar com um depurador bem integrado. Somente Windows. Pydev - IDE de qualidade profissional.
Pode demorar algum tempo para encontrar uma maneira de desenvolver um código que melhor lhe convier. Para mim, o fluxo de trabalho ideal é: Protótipo com notebook - & gt; adicionar a um módulo com PyDev ou PyScripter - & gt; use um módulo em um novo notebook. \ Mais material de leitura: capítulo 3 do livro PDA. Ok, teoria suficiente, vamos trabalhar com os módulos. Se você ainda não baixou as pastas de trabalho para esta parte, pegue-as da seção de cadernos de exemplo e veja o caderno twp_03_Working_with_modules.
Exemplo de cadernos.
Agora é a hora de usar os conceitos que você aprendeu nesta parte. Vamos pular diretamente em trabalhar com matrizes numpy e planear funções. No que diz respeito ao planejamento de você, agora só precisa de duas funções plot () e * hist () * juntamente com alguns comandos para definir os títulos e eixos de etiquetas. Existem três exemplos de cadernos para esta parte do curso:
twp_01_IPython_Notebook - mostra o caminho ao redor do notebook IPython (view online) twp_02_Leveraged_etfs - simule alavancados etfs para provar que não existe tal como aproveitamento etf decaimento (visualização online) twp_03_Working_with_modules. ipynb aprenda a trabalhar com módulos (veja online)
Obter os notebooks Apenas pegue o arquivo zip e extraie-o para sua pasta de cadernos e, em seguida, comece o notebook Jupyter para vê-los aparecer no painel de bordo.
No comments:
Post a Comment