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.
Jon V.
BigData. Iniciantes. Negociação.
BigData. Iniciantes. Negociação.
Construindo um sistema backtesting em Python: ou como perdi $ 3400 em duas horas.
Construir um sistema de backtest é realmente muito fácil. Fácil de estragar, quero dizer. Embora existam toneladas de excelentes bibliotecas por aí (e as abordaremos em algum momento), eu sempre gosto de fazer isso por conta própria para ajustá-la.
De todos os sistemas backtesting que eu vi, podemos assumir que existem duas categorias:
Hoje, falaremos sobre "loopers".
Os "for-loopers" são o meu tipo favorito de backtesters. Eles são triviais para escrever e super divertidos para expandir, mas eles têm alguns fluxos vitais e, infelizmente, a maioria dos backtesters lá fora é "for-loopers" (ps: Eu preciso encontrar um nome melhor para isso!).
Como funciona o looping? Usando um loop for (como você pode ter adivinhado). É algo assim:
Muito simples, certo? É assim que funciona um sistema de backtesting, que executa uma estratégia de impulso:
Então qual é o problema?
Muito difícil de escalar (horizontalmente) Precisa de muito trabalho para manter sua estratégia de aplicação () trabalhando no backtesting e na produção Você precisa ter tudo na mesma linguagem de programação.
Vamos mergulhar nessas, uma a uma.
Escalabilidade. Eu estava experimentando um par de semanas atrás com um algoritmo de escalada de colina para otimizar uma das minhas estratégias. Ainda está em execução. Depois de duas semanas. E eu construo sistemas robustos para uma vida. Por que ainda está funcionando? Você pode usar multiprocessamento, Disco, produtor / consumidor (usando o ZeroMQ) ou apenas threads para acelerar isso, mas alguns problemas não são "paralisações embaraçosas" (sim, este é um termo real, e não uma das minhas palavras inventadas). A quantidade de trabalho para escalar um backtester como esse (especialmente quando você quer fazer a mesma máquina aprendendo em cima dela) é enorme. Você pode fazê-lo, mas é o caminho errado.
Produção e backtesting em sincronia. As vezes que fui mordido por isso. Posso recordar as trocas perdidas onde eu estava "hm, por que eu entrei nesse comércio?" ou o meu antigo favorito "POR QUE A PARADA DE REALIZAÇÃO FOI APLICADA AGORA?".
Tempo da história: tive uma ideia para otimizar minha estratégia, para executar um backtester para ver o que aconteceria se eu pudesse colocar uma parada posterior depois que o comércio fosse rentável para garantir sempre lucros. Backtesting funcionou como um charme com um aumento de 13% nos ganhos e a produção perdeu todo comércio. Descobri que depois do meu algo perdi US $ 3400 em algumas horas (uma lição muito cara).
Manter a estratégia apply_strategy em sincronia é muito difícil e torna-se quase impossível quando você deseja fazê-lo de forma distribuída. E você não quer ter duas versões de sua estratégia que sejam "quase" idênticas. A menos que você tenha US $ 3400 de sobra.
Usando diferentes idiomas, adoro Python. E Erlang. E Clojure. E J. E C. E R. E Ruby (na verdade eu odeio Ruby). Eu quero poder aproveitar a força de outros idiomas no meu sistema. Quero experimentar estratégias em R onde há 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 crunch dados. Se você quer ser bem sucedido (não apenas na negociação), você precisa usar todos os recursos disponíveis sem prejuízos. Aprendi toneladas de coisas de sair com os desenvolvedores R sobre como você pode delta hedge bonds e visualizá-los ou por que razão Sharpe pode ser uma mentira. Todo idioma tem uma multidão diferente e você quer que muitas pessoas despejam idéias em seu sistema. Se você tentar aplicar a estratégia apply_strategy em idioma diferente, então, boa sorte com (2).
Você está convencido agora? Bem, eu não estou tentando convencê-lo como for-loopers é uma ótima maneira de executar seus testes iniciais. É como eu comecei e, para muitas estratégias, não as envio para o pipeline. Um "melhor" caminho (para que você possa dormir à noite) são os geradores de eventos.
Próximamente, compartilhando e discutindo meu backtester mais simples (mas com maior sucesso)!
Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo.
Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque seguiu quaisquer conselhos de negociação ou implantou este sistema na produção, não pode culpar este blog aleatório (e / ou eu). Aproveite a seu próprio risco.
Negociação de sistema usando python
Se você é um comerciante ou um investidor e gostaria de adquirir um conjunto de habilidades de negociação quantitativas, você está no lugar certo.
O curso Trading With Python irá fornecer-lhe as melhores ferramentas e práticas para pesquisa de negociação quantitativa, incluindo funções e scripts escritos por comerciantes quantitativos especializados. O curso dá o máximo impacto para o seu tempo investido e dinheiro. Ele se concentra na aplicação prática da programação ao comércio e não à informática teórica. O curso irá pagar por si mesmo rapidamente, economizando tempo no processamento manual de dados. Você passará mais tempo pesquisando sua estratégia e implementando negócios lucrativos.
Visão geral do curso.
Parte 1: princípios Você vai aprender por que a Python é uma ferramenta ideal para negociação quantitativa. Começaremos pela criação de um ambiente de desenvolvimento e, em seguida, apresentaremos as bibliotecas científicas.
Parte 2: Manipulação dos dados Saiba 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: estratégias de pesquisa Aprenda a calcular o P & L e as métricas de desempenho acompanhantes, como Sharpe e Drawdown. Desenvolva uma estratégia de negociação e otimize seu desempenho. Múltiplos exemplos de estratégias são discutidos nesta parte.
Parte 4: Indo ao vivo! Esta parte é centrada em torno da Interactive Brokers API. Você aprenderá como obter dados em estoque em tempo real e colocar ordens ao vivo.
Muitos códigos de exemplo.
O material do curso consiste em "cadernos" que contêm texto junto com um código interativo como este. Você poderá aprender interagindo com o código e modificando-o para seu próprio gosto. Será um excelente ponto de partida para escrever suas próprias estratégias.
Embora alguns tópicos sejam explicados em grande detalhe para ajudá-lo a entender os conceitos subjacentes, na maioria dos casos você nem precisa escrever seu próprio código de baixo nível, devido ao suporte de bibliotecas de código aberto existentes:
A biblioteca TradingWithPython combina uma grande parte da funcionalidade discutida neste curso como uma função pronta para usar e será usada ao longo do curso. Pandas irá fornecer-lhe todo o poder de levantamento pesado necessário no trituraçã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 2018, é o que os alunos conseguiram dizer:
Matej curso bem projetado e bom treinador. Definitivamente valeu o preço e meu tempo, Lave Jev, obviamente, conhecia suas coisas. A profundidade de cobertura foi perfeita. Se Jev executar algo assim novamente, serei o primeiro a se inscrever. John Phillips Seu curso realmente me fez começar a pensar em python para a análise do sistema de estoque.
Python para o desenvolvimento de uma plataforma de negociação automatizada em tempo real.
Abstract-Python, hoje em dia, parece ser o ambiente perfeito para o desenvolvimento de uma ferramenta de negociação automatizada em tempo real. Nesta conversa, falaremos sobre como desenvolvemos: um módulo de sistema multiaventário com uso geral de Pyro e ZeroMQ; uma plataforma, com base nisso, para desenvolver estratégias de negociação automatizadas usando Numpy, Numba, Theano. ; e uma ferramenta para visualizar dados de mercado em tempo real usando PyQtGraph e Qt.
Termos de Índice - Python, ZeroMQ, multi-agente, Pyro, NumPy, Numba, Theano, PyQtGraph, Qt.
I. UM SISTEMA MULTI-AGENTE.
A arquitetura de qualquer sistema pode variar e ainda executa a mesma tarefa. Uma arquitetura monolítica é melhor ao procurar o desempenho, mas, por outro lado, a divisão fornece mais robustez no caso de um único módulo falhar e permite fazer modificações sem a necessidade de compilar (se for esse o caso) toda a infra-estrutura. Além disso, quando se fala em tarefas intensivas computacionais, onde a relação entre transmissão de dados e tempo de computação é muito baixa, uma arquitetura baseada em módulos dificilmente impacta o desempenho geral.
Além disso, uma arquitetura baseada em módulos permite a criação de sistemas escaláveis, distribuíveis, altamente disponíveis e paralelos. Um sistema multi-agente é composto de múltiplos agentes que interagem tentando resolver problemas que são difíceis para um agente individual. As principais características são:
• Autonomia: os agentes são pelo menos parcialmente independentes, autoconscientes e autônomos.
• Exibições locais: nenhum agente possui uma visão global global do sistema.
• Descentralização: não há um agente de controle designado.
No OpenSistemas, desenvolvemos um sistema multi-agente de uso geral que está escrito no Python puro: osBrain.
Cada agente é um processo de sistema gerado usando o módulo de multiprocessamento, o que significa que ele é executado de forma independente dos outros e que não atinge problemas de desempenho ao usar intérpretes do Python habilitados para GIL.
Este processo do sistema inicia um servidor Pyro e se registra no servidor de nomes. O servidor Pyro é usado para atender um objeto: uma instância do agente real, que é descrita abaixo. Esta implementação permite ao usuário acessar o objeto através de um proxy Pyro, tratando o agente, que poderia estar em uma máquina remota, como um objeto local e podendo alterar seus atributos e seu comportamento.
Embora o Pyro não seja o caminho mais eficiente para a comunicação entre processos, é muito conveniente para a implantação, permitindo a criação de sistemas complexos e multi-agentes distribuídos de forma simples.
Os agentes, no entanto, se comunicam entre si usando o ZeroMQ. O ZeroMQ é mais eficiente e muito flexível, permitindo que o usuário defina diferentes padrões de comunicação com base em suas necessidades. Um típico processo de agente executará um servidor Pyro no qual o segmento principal executa um loop que simplesmente espera mensagens incomuns de fora. Esse comportamento pode, naturalmente, ser modificado à vontade, mas seria definitivamente o caso mais comum.
Os agentes também podem usar multithreading e são fornecidos com um soquete inproc pesquisado pelo segmento principal para garantir acesso seguro à memória, mesmo em intérpretes do Python GIL-disabled.
II. A PLATAFORMA DE NEGOCIAÇÃO AUTOMÁTICA DE TEMPO REAL.
Na OpenSistemas desenvolveu uma plataforma independente do corretor para negociação automatizada em tempo real: osMarkets. Qualquer corretor pode fornecer os dados necessários e a plataforma executará todos os cálculos necessários para produzir pedidos que serão enviados de volta ao corretor a ser executado.
Esta plataforma é implementada sobre osBrain, mas possui agentes especializados.
O Alimentador é um agente que recebe dados em tempo real do corretor. Geralmente, ele usa multithreading e o soquete de loopback para poder transmitir dados do mercado de tiques ao poder enviar solicitações ativas para o corretor (por exemplo, solicitação de dados históricos). Ele também converte os dados para que ele possa estar no formato adequado para o resto da plataforma.
O roteador é um agente que recebe dados de alimentadores. Ele administra os dados históricos e a criação de novas barras usando dados de ticks em tempo real. O roteador distribui atualizações sobre os dados do mercado para todos os agentes interessados na rede.
O cérebro é o agente mais comum. É receber dados do roteador ou de outros cérebros e processá-lo, enviar os resultados para outros cérebros ou enviar ordens para serem executados. É aqui que as estratégias de negociação automatizadas devem ser implementadas. Brains pode fazer uso de muitos pacotes úteis disponíveis no ecossistema Python: NumPy, SciPy, Numba, Theano. apenas para citar alguns. Os cérebros podem formar uma hierarquia que pode ser usada para abstrair dados do mercado.
Trader é um agente que é projetado para interagir com o corretor, assim como o alimentador, mas para executar ordens de mercado (ou seja, comprar / vender). Outros parâmetros, como stop-loss ou take-profit, podem ser tratados pelo corretor ou internamente por osMarkets também.
Para gerenciar dados de mercado, NumPy ndarrays estão sendo usados. Ao trabalhar com dados em tempo real, as séries temporais estão sempre mudando. Para evitar cópias de memória completas em cada atualização, criamos uma classe personalizada que usa uma estrutura maior como um buffer. Este buffer, que é um ndarray NumPy real, é preenchido ou modificado na atualização e a classe personalizada simplesmente atualiza a exibição de se na memória.
III. VISUALIZANDO DADOS DO MERCADO DE TEMPO REAL.
Embora o Matplotlib seja provavelmente a ferramenta mais conhecida para a visualização de dados e, embora seja muito boa em exibir todo o tipo de gráficos com muito boa qualidade, não é adequado para visualizações em tempo real e não é muito bom na interação.
PyQtGraph, por outro lado, é uma ótima ferramenta para visualização em tempo real e para gráficos interativos. Está escrito em Python puro, então instalar este pacote é bem direto.
Por baixo, usa Qt e OpenGL para permitir a exibição rápida e as interações.
Embora ainda esteja nos estágios iniciais, estamos desenvolvendo uma ferramenta para visualização em tempo real de estratégias comerciais usando o PyQtGraph. Esta ferramenta atua como um agente no sistema multi-agente, o que significa que ele simplesmente se inscreve em atualizações sobre dados de mercado para roteador e nas saídas de cérebros selecionados.
É capaz de desenhar gráficos de candelabro e indicadores básicos e permite ao usuário lidar com cérebros da interface.
Comércio com Python.
Sábado, 20 de maio de 2017.
Yahoo está morto, Viva Yahoo!
Nota: os dados fornecidos parecem ser ajustados para divisões, mas não para dividendos.
Sábado, 20 de fevereiro de 2018.
Uma vantagem estatística simples em SPY.
Ocorreu-me que, na maioria das vezes, há muita conversa na mídia sobre o mercado que cai (depois de grandes perdas ao longo do período de tempo), uma recuperação bastante significativa às vezes segue.
No passado, cometi alguns erros ao fechar minhas posições para reduzir as perdas, apenas para perder uma recuperação nos próximos dias.
Após um período de perdas consecutivas, muitos comerciantes liquidarão suas posições por medo de perda ainda maior. Grande parte desse comportamento é governado pelo medo, ao invés de risco calculado. Comerciantes mais inteligentes entram nas pechinchas.
Depois de três perdas ou mais, percorrer o tempo. Sair no próximo fechamento.
Isso não parece nada mal! Olhando para os índices de sharpe, a estratégia classifica uma descida 2.2 versus 0.44 para os B e H. Na verdade, isso é muito bom! (Não fique excitado demais, pois não contai com custos de comissão, derrapagem, etc.).
Embora a estratégia acima não seja algo que eu gostaria de negociar simplesmente por causa do longo período de tempo, a própria teoria provoca mais pensamentos que poderiam produzir algo útil. Se o mesmo princípio se aplica aos dados intradiários, uma forma de estratégia de escalação poderia ser construída. No exemplo acima, simplifiquei o mundo um pouco apenas contando o * número * dos dias baixos, sem prestar atenção à profundidade da retirada. Além disso, a saída da posição é apenas um "próximo dia próximo" básico. Há muito a ser melhorado, mas a essência na minha opinião é esta:
Segunda-feira, 17 de novembro de 2017.
Trading VXX com previsão de vizinhos mais próximos.
Minha definição desses dois é:
volatilidade premium = VIX-realizadoVol delta (inclinação da estrutura do termo) = VIX-VXV.
Combinar tanto premium como delta em um modelo foi um desafio para mim, mas sempre quis fazer uma aproximação estatística. Em essência, para uma combinação de (delta, premium), gostaria de encontrar todos os valores históricos mais próximos dos valores atuais e fazer uma estimativa dos retornos futuros com base neles. Algumas vezes eu comecei a escrever meus próprios algoritmos de interpolação de vizinho mais próximo, mas sempre que eu tinha que desistir. até encontrar a regressão dos vizinhos mais próximos. Isso me permitiu construir rapidamente um preditor com base em duas entradas e os resultados são tão bons, que estou um pouco preocupado por ter cometido um erro em algum lugar.
crie um conjunto de dados de [delta, premium] - & gt; [Retorno do VXX no próximo dia] (na amostra) crie um preditor vizinho mais próximo baseado no conjunto de dados acima da estratégia de comércio (fora da amostra) com as regras: vá longo se for previsto o retorno & gt; 0 vá curto se for previsto o retorno & lt; 0.
Nas duas últimas parcelas, a estratégia parece executar o mesmo dentro e fora da amostra. O índice Sharpe é de cerca de 2,3.
Estou muito satisfeito com os resultados e tenho a sensação de que eu apenas estava riscando a superfície do que é possível com esta técnica.
Quarta-feira, 16 de julho de 2017.
Módulo de backtesting simples.
Minha busca de uma ferramenta de backtesting ideal (minha definição de "ideal" é descrita nas postagens anteriores de "dilemas de Backtesting") não resultou em algo que eu poderia usar de imediato. No entanto, revisar as opções disponíveis me ajudou a entender melhor o que eu realmente quero. Das opções que eu olhei, pybacktest foi o que mais gostei por causa de sua simplicidade e velocidade. Depois de passar pelo código-fonte, tenho algumas idéias para torná-lo mais simples e um pouco mais elegante. A partir daí, foi apenas um pequeno passo para escrever meu próprio backtester, que agora está disponível na biblioteca TradingWithPython.
encontrar entrada e sair - & gt; calcular pnl e fazer parcelas com backtester - & gt; dados da estratégia pós-processo.
Sábado, 7 de junho de 2017.
Impulsionando o desempenho com Cython.
5k amostras como dados de teste. Aqui vem a versão original da minha função de redução (como agora é implementada na biblioteca TradingWithPython)
Hmm 1,2 segundos não é muito rápido para uma função tão simples. Há algumas coisas aqui que podem ser um excelente arrastar para o desempenho, como uma lista * highwatermark * que está sendo anexado em cada iteração de loop. Acessar a Série pelo seu índice também deve envolver algum processamento que não seja estritamente necessário. Vamos dar uma olhada no que acontece quando esta função é reescrita para trabalhar com dados numpy.
Bem, isso é muito mais rápido do que a função original, aproximadamente 40x de aumento de velocidade. Ainda há muito espaço para melhorar ao mudar para o código compilado com o cython. Agora eu reescrevo a função dd acima, mas usando dicas de otimização encontradas no tutorial do cython. Note que esta é a minha primeira tentativa de otimizar funções com o Cython.
Uau, esta versão é executada em 122 micro segundos, tornando-o dez mil vezes mais rápido que a minha versão original! Devo dizer que estou muito impressionado com o que as equipes de Cython e IPython conseguiram! A velocidade em comparação com a facilidade de uso é incrível!
P. S. Eu costumava fazer otimizações de código em Matlab usando o C puro e o wrapper de. mex, tudo era apenas uma dor no burro em comparação com isso.
Terça-feira, 27 de maio de 2017.
Dilemas de backtesting: revisão de pyalgotrade.
Primeira impressão: desenvolvido ativamente, documentação bastante boa, mais do que suficientes feautures (indicadores de TA, otimizadores, etc.). Parece bom, então continuei com a instalação, que também funcionou sem problemas.
O tutorial parece estar um pouco desactualizado, já que o primeiro comando yahoofinance. get_daily_csv () lança um erro sobre a função desconhecida. Não há preocupações, a documentação está atualizada e acho que a função ausente agora é renomeada para yahoofinance. download_daily_bars (símbolo, ano, csvFile). O problema é que esta função apenas faz o download de dados por um ano em vez de tudo, desde aquele ano até a data atual. Tão bonito, inútil.
Depois que eu baixei os dados e salvou-o para o csv, eu precisava ajustar os nomes das colunas, porque aparentemente o pyalgotrade espera que Date, Adj Close, Close, High, Low, Open, Volume estejam no cabeçalho. Isso é um problema menor.
Após o teste de desempenho em uma estratégia SMA que é fornecida no tutorial. O meu conjunto de dados consiste em 5370 dias de SPY:
Isso é bastante bom para uma estrutura baseada em eventos.
Mas tentei buscar documentação sobre a funcionalidade necessária para espalhar spreads e múltiplas carteiras de ativos e simplesmente não encontrou nenhuma. Então eu tentei encontrar uma maneira de alimentar pandas DataFrame como uma entrada para uma estratégia e não é possível, o que é novamente uma grande decepção. Não afirmei como um requisito na publicação anterior, mas agora chego a perceber que o suporte de pandas é uma obrigação para qualquer estrutura que funcione com dados da série temporal. Pandas foi uma razão para eu mudar de Matlab para Python e nunca mais quero voltar.
Conclusão pyalgotrade não cumpre meu requisito de flexibilidade. Parece que foi projetado com TA clássico em mente e comércio de instrumentos individuais. Eu não vejo isso como uma boa ferramenta para estratégias de backtesting que envolvem vários ativos, hedging etc.
Segunda-feira, 26 de maio de 2017.
Dilemas de backtesting.
Seja uma boa aproximação do mundo real. Este é, claro, o requisito mais importante. Permita flexibilidade ilimitada: as ferramentas não devem impedir o teste de idéias prontas. Tudo o que pode ser quantificado deve ser utilizável. Seja fácil de implementar & amp; manter. É tudo sobre produtividade e ser capaz de testar muitas idéias para encontrar uma que funcione. Permitir varredura de parâmetros, testes avançados e otimizações. Isso é necessário para investigar o desempenho e a estabilidade da estratégia, dependendo dos parâmetros da estratégia. O problema de satisfazer todos os requisitos acima é que # 2 e # 3 são conflitantes. Não há nenhuma ferramenta que possa fazer tudo sem o custo de alta complexidade (= baixa manutenção). Normalmente, uma ferramenta de ponto e clique de terceiros limitará severamente a liberdade para testar com sinais personalizados e portfólios ímpares, enquanto que na outra extremidade do espectro, uma solução diy com codificação personalizada exigirá dezenas ou mais horas para implementar com altas chances de terminando com código desordenado e ilegível. Então, na tentativa de combinar o melhor dos dois mundos, vamos começar alguns lugares no meio: use uma estrutura de backtesting existente e adapte-a ao nosso gosto.
Nas seguintes postagens, eu estarei olhando três candidatos possíveis que eu encontrei:
A Zipline é amplamente conhecida e é o motor por trás da Pyonggotpia da Lospian parece estar ativamente desenvolvido e o bem-documentado pybacktest é uma estrutura leve baseada em vetor que pode ser interessante por causa de sua simplicidade e desempenho. Eu estarei olhando a adequação dessas ferramentas comparando-as contra uma estratégia de negociação hipotética. Se nenhuma dessas opções se adequar aos meus requisitos, terei que decidir se eu quero investir na escrita da minha própria estrutura (pelo menos, olhando as opções disponíveis I & # 8217; saberá o que não funciona) ou fique com código personalizado para cada uma estratégia.
O primeiro para a avaliação é Zipline.
Minha primeira impressão de Zipline e Quantopian é positiva. A Zipline é apoiada por uma equipe de desenvolvedores e é testada em produção, então a qualidade (bugs) deve ser excelente. Há uma boa documentação no site e um exemplo de caderno no github.
Para arrumar isso, baixei o notebook do exampe e comecei a jogar com ele. Para minha decepção, rapidamente me deparo com o primeiro exemplo, Algoritmo de Zipline Simplest: Compre a Apple. O conjunto de dados tem apenas 3028 dias, mas executar este exemplo demorou para sempre. Aqui é o que eu medei:
Eu não esperava um desempenho estelar como o tirolesa é um backtester baseado em eventos, mas quase um minuto para 3000 amostras é muito ruim. Esse tipo de desempenho seria proibitivo para qualquer tipo de digitalização ou otimização. Outro problema surgirá ao trabalhar com conjuntos de dados maiores, como dados intradiários ou vários títulos, que podem conter facilmente centenas de milhares de amostras.
Infelizmente, eu vou ter que descartar Zipline da lista de backtesters utilizáveis, pois não atende a minha exigência # 4 por uma margem de gordura.
Na próxima publicação, eu vou olhar para PyAlgotrade.
Nota: Meu sistema atual tem alguns anos, executando um AMD Athlon II X2 @ 2800MHZ com 3 GB de RAM. Com o backtesting baseado em vetor I & # 8217; m usado para tempos de cálculo de menos de um segundo para um único backtest e um minuto ou dois para uma verificação de parâmetros. Um teste básico walk-forward com 10 passos e uma varredura de parâmetros para grade 20x20 resultaria em uma frequência de 66 horas com tirolesa. Não é tão paitient.
Quarta-feira, 15 de janeiro de 2017.
Iniciando o IPython notebook a partir do arquivo Windows exlorer.
Segunda-feira, 13 de janeiro de 2017.
ETFs com alavancas em 2018, onde está sua decadência agora?
Conhecendo o comportamento alavancado de etf, eu esperaria que esses resultados melhorassem seu benchmark, então a estratégia que tentaria lucrar com a deterioração perderia dinheiro.
Uma vez que normalizamos os preços para 100 $ no início do período de atraso (250 dias), é evidente que o 2x etf supera 1x etf.
O código fonte completo dos cálculos está disponível para os assinantes do curso Trading With Python. Caderno # 307.
Quinta-feira, 2 de janeiro de 2017.
Colocando um preço na TWTR.
Preço derivado do valor do usuário.
O TWTR é atualmente mais valioso por usuário que não é FB ou LNKD. Isso não é lógico, pois ambos os concorrentes têm mais valiosos dados de usuários pessoais à sua disposição. O GOOG tem se destacado na extração de receita de anúncios de seus usuários. Para fazer isso, tem um conjunto de ofertas altamente diversificadas, do mecanismo de busca para Google+, Docs e Gmail. TWTR não tem nada parecido com isso, enquanto seu valor por usuário é apenas 35% menor que o do Google. A TWTR tem um espaço limitado para aumentar a base de usuários, pois não oferece produtos comparáveis às ofertas do FB ou do GOOG. TWTR tem sido em torno de sete anos agora e a maioria das pessoas que desejam um accout tem sua chance. O resto simplesmente não se importa. A base de usuários TWTR é volátil e é provável que se mova para o próximo hot thing quando ele estará disponível.
Preço derivado de ganhos futuros.
Conclusão.
Quinta-feira, 19 de setembro de 2018.
Curso de negociação com Python disponível!
Domingo, 18 de agosto de 2018.
Estratégia VXX curta.
Em um mundo ideal, se você segurar o tempo suficiente, um lucro gerado pela queda do tempo nos futuros e o reequilíbrio é garantido, mas, no curto prazo, você teria que passar por algumas retiradas bastante pesadas. Basta olhar para trás no verão de 2018. Fui lamentável (ou tolo) o suficiente para manter uma curta posição VXX logo antes do VIX subir. Eu quase explodi minha conta até então: 80% de redução em apenas alguns dias, resultando em uma ameaça de chamada de margem por meu corretor. Margin Call significaria cobrar a perda. Esta não é uma situação em que eu gostaria de estar novamente. Eu sabia que não seria fácil manter a cabeça fresca em todos os momentos, mas experimentar o estresse e a pressão da situação era algo diferente. Felizmente, eu sabia como VXX tende a comportar-se, então não entrei em pânico, mas troquei de lado para XIV para evitar uma chamada de margem. A história acaba bem, 8 meses depois, meu portfólio voltou à força e eu aprendi uma lição muito valiosa.
Dito isto, vamos dar uma olhada em uma estratégia que minimiza alguns dos riscos ao curvar o VXX somente quando for apropriado.
O gráfico acima mostra dados VIX-VXV desde janeiro de 2018. Os pontos de dados do ano passado são mostrados em vermelho.
Eu escolhi usar um ajuste quadrático entre os dois, aproximando VXV = f (VIX). O f (VIX) é plotado como uma linha azul.
Os valores acima da linha representam a situação quando os futuros estão em contango mais forte do que o normal. Agora eu defino um indicador delta, que é o desvio do ajuste: delta = VXV-f (VIX).
É evidente que áreas verdes correspondem a retornos negativos no VXX.
Short VXX quando delta & gt; 0 Capital constante (aposta em cada dia é de 100 $) Não há custos de deslizamento ou de transação.
Obtendo um pequeno volume de BATS.
Quinta-feira, 15 de agosto de 2018.
Construindo um indicador a partir de dados de curto volume.
Precisamos de mais informações adicionais ao que contém o preço para fazer um palpite mais informado sobre o que acontecerá no futuro próximo. Um excelente exemplo de combinar todo tipo de informações com uma análise inteligente pode ser encontrado no blog Short Side of Long. Produzir esse tipo de análise exige uma grande quantidade de trabalho, para o qual eu simplesmente não tenho tempo, pois só negocio a tempo parcial.
Então eu criei o meu próprio "painel de bordo do mercado" que coleciona informações automaticamente para mim e a apresenta de forma facilmente digerível. Nesta publicação, vou mostrar como criar um indicador com base em dados de curto volume. Esta publicação irá ilustrar o processo de coleta e processamento de dados.
A troca de BATS fornece dados de volume diários gratuitamente em seu site.
Os dados de curto volume da troca do BATS estão contidos em um arquivo de texto que é compactado. Cada dia tem seu próprio arquivo zip. Depois de baixar e descompactar o arquivo txt, isso é o que está dentro (primeiro várias linhas):
Esses dados precisam de algum trabalho antes que ele possa ser apresentado de forma significativa.
O que eu realmente quero não é apenas os dados de um dia, mas uma proporção de volume curto para volume total nos últimos anos, e eu realmente não sinto como baixar 500 arquivos zip e copiá-los em excel manualmente.
Por sorte, a automação total é apenas um par de linhas de código:
Primeiro, precisamos criar dinamicamente um URL a partir do qual um arquivo será baixado:
Passo 5: Faça um gráfico:
Domingo, 17 de março de 2018.
Negociação com curso Python - atualização de status.
A partir de hoje, vou preparar um novo site e material para o curso, que começará na segunda semana de abril.
Quinta-feira, 12 de janeiro de 2018.
Reconstruindo VXX a partir de dados futuros do CBOE.
Os scripts abaixo automatizam esse processo. O primeiro, downloadVixFutures. py, obtém os dados do cboe, salva cada arquivo em um diretório de dados e os combina em um único arquivo csv, vix_futures. csv.
O segundo script reconstituir VXX. p.p. analisa o vix_futures. csv, calcula os retornos diários do VXX e salva os resultados para reconstruídoVXX. csv.
Para verificar os cálculos, comparei meus resultados simulados com os dados do índice SPVXSTR, os dois concordam muito bem, veja os gráficos abaixo.
Código para reconstruir o VXX.
Segunda-feira, 26 de dezembro de 2018.
howto: padrão de observador.
Uma classe de ouvinte pode ser de qualquer tipo, aqui eu faço um monte de classes de ExampleListener, chamado Bob, Dave & amp; Charlie. Todos eles têm um método, isto é, está inscrito no remetente. A única coisa especial sobre o método inscrito é que deve conter três parâmetros: remetente, evento, mensagem. Sender é a referência de classe da classe Remetente, então um ouvinte saberia quem enviou a mensagem. O evento é um identificador, pelo qual geralmente uso uma string. Opcionalmente, uma mensagem é o dado que é passado para uma função.
Um detalhe agradável é que, se um método de ouvinte lança uma exceção, ele é automaticamente cancelado a inscrição em outros eventos.
Quarta-feira, 14 de dezembro de 2018.
Ploting with guiqwt.
aquisição de dados: ibpy & amp; tradingWithPython. lib. yahooData - verificar.
recipiente de dados: pandas e amp; sqlite - cheque.
biblioteca de gráficos: matplotlib - ehm. Não.
Mas, como muitas vezes acontece com o Python, alguém, em algum lugar, já escreveu um kit de ferramentas kick-ass que é perfeito para o trabalho. E parece que o guiqt é apenas isso. Os gráficos interativos são apenas algumas linhas de código agora, veja um exemplo aqui: Criando caixa de diálogo de curva. Para isso eu usei um exemplo de código de guiqwt com alguns ajustes menores.
. Se eu soubesse como definir datas no eixo dos x.
Sexta-feira, 4 de novembro de 2018.
Como configurar o ambiente de desenvolvimento do Python.
2. Instale Tortoise SVN. Este é um utilitário que você precisa para extrair o código-fonte do Google Code.
3. Instalar Pandas (biblioteca de séries temporais)
Para obter o código, use o menu de contexto 'Windows Svn Checkout' do Windows Explorer que esteja disponível após a instalação do Tortoise SVN. Marque assim (mude o diretório Checkout para o local desejado, mas deve terminar com tradingWithPython):
Ok, tudo pronto, agora você pode executar os exemplos de \ cookbok dir.
Sexta-feira, 28 de outubro de 2018.
Os pandios kung fu resolverão seus problemas de dados.
Há algum tempo, encontrei um conjunto de ferramentas de análise de dados, especialmente adequado para trabalhar com dados financeiros. Depois de apenas arranhar a superfície de suas capacidades, eu já estou impressionado com o que entrega. O pacote está sendo desenvolvido ativamente por Wes McKinney e sua ambição é criar a ferramenta de análise / manipulação de dados de código aberto mais poderosa e flexível disponível. Bem, acho que ele está bem no caminho!
Aqui está o resultado:
Cara, isso poderia me salvar uma tonelada de tempo! Mas ainda vai me ajudar no futuro, pois vou usar seu objeto DataFrame como padrão no meu trabalho adicional.
Комментарии
Отправить комментарий