QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Frank Smietana em 18 de julho de 2017.
Neste artigo, Frank Smietana, um dos colaboradores experientes do QuantStart, descreve a paisagem do software de backtesting de código aberto da Python e fornece conselhos sobre quais framework de backtesting são adequados para suas próprias necessidades de projeto.
Backtesting é indiscutivelmente a parte mais crítica do processo de produção da Sistemática de Negociação Sistemática (STS), sentado entre o desenvolvimento da estratégia e a implantação (negociação ao vivo). Se uma estratégia é defeituosa, um teste rigoroso provavelmente expõe isso, evitando que uma estratégia de perda seja implantada.
Uma série de capacidades relacionadas se sobrepõem com backtesting, incluindo simulação comercial e negociação ao vivo. O Backtesting usa dados históricos para quantificar o desempenho STS. Os simuladores de negociação levam backtesting um passo adiante, visualizando o desencadeamento de trades e desempenho de preços em uma base bar-a-bar. A negociação simulada / ao vivo implementa um STS testado em tempo real: negociações de sinalização, gerando ordens, roteando ordens para corretores e mantendo as posições à medida que as ordens são executadas.
A maioria dos quadros vai além do backtesting para incluir algumas capacidades de negociação ao vivo. Isso é conveniente se você deseja implantar a partir de sua estrutura de backtesting, que também funciona com o seu fornecedor preferido e fontes de dados. Quantopian / Zipline vai um passo adiante, fornecendo uma solução totalmente integrada de desenvolvimento, backtesting e implantação.
A comunidade Python é bem servida, com pelo menos seis estruturas de backtesting de código aberto disponíveis. No entanto, estão em vários estágios de desenvolvimento e documentação. Se você gosta de trabalhar em uma equipe construindo uma estrutura de backtesting de código aberto, confira seus reembolsos Github.
Antes de avaliar quadros de teste, vale a pena definir os requisitos do seu STS.
Qual classe de ativos você está negociando? Embora a maioria dos frameworks ofereça suporte aos dados da US Equities via YahooFinance, se uma estratégia incorporar derivados, ETFs ou títulos de EM, os dados precisam ser importados ou fornecidos pela estrutura. As coberturas de classe de ativos vão além dos dados. O framework pode lidar com futuros e opções de tamanho finito e gerar negociações de roll-over automaticamente? E quanto aos mercados ilíquidos, quão realista é uma suposição ao executar grandes encomendas?
Qual a frequência e o detalhe dos dados do seu STS? Um sistema de negociação que exige que cada marca ou lance / peça tenha um conjunto muito diferente de problemas de gerenciamento de dados do que um intervalo de 5 minutos ou horário. Os hedge funds e as lojas HFT investiram significativamente na construção de quadros robustos e escaláveis de backtesting para lidar com esse volume e freqüência de dados. Algumas plataformas fornecem um conjunto rico e profundo de dados para várias classes de ativos, como ações da S & P, com resolução de um minuto.
Qual (s) tipo (s) de ordem o seu STS requer? No mínimo, o limite, as paradas e o OCO devem ser suportados pela estrutura.
Nível de suporte e amp; documentação necessária. Os quadros de estágio inicial têm escassa documentação, poucos têm suporte além de placas comunitárias.
Os Componentes de um Quadro de Teste de Backtesting.
Dados e aquisição de STS: os componentes de aquisição consomem o arquivo de script / definição STS e fornecem os dados necessários para testes. Se a estrutura exige que qualquer STS seja recodificado antes do teste posterior, a estrutura deve suportar funções enlatadas para os indicadores técnicos mais populares para acelerar o teste STS. Os usuários determinam o tempo de um período histórico para fazer backtest com base no que o framework fornece, ou o que eles são capazes de importar.
O teste de desempenho aplica a lógica STS à janela de dados históricos solicitada e calcula uma ampla gama de riscos & amp; métricas de desempenho, incluindo redução máxima, taxas Sharpe e Sortino. A maioria dos frameworks suporta um número decente de capacidades de visualização, incluindo curvas de equidade e estatísticas decimais.
A otimização tende a exigir a maior parte dos recursos de computação no processo STS. Se o seu STS precisar de otimização, concentre-se em uma estrutura que suporte processamento escalável distribuído / paralelo.
No contexto de estratégias desenvolvidas usando indicadores técnicos, os desenvolvedores de sistemas tentam encontrar um conjunto ideal de parâmetros para cada indicador. Mais simplesmente, a otimização pode achar que um fluxo de média móvel de 6 e 10 dias STS acumulou mais lucro sobre os dados de teste históricos do que qualquer outra combinação de períodos de tempo entre 1 e 20. Já com este exemplo trivial, 20 * 20 = 400 combinações de parâmetros devem ser calculado & amp; classificado.
No contexto de um portfólio, a otimização procura encontrar a ponderação ideal de cada ativo na carteira, incluindo os instrumentos em curto e alavancado. Em uma base periódica, o portfólio é reequilibrado, resultando na compra e venda de participações da carteira, conforme necessário, para alinhar com os pesos otimizados.
O dimensionamento de posição é um uso adicional da otimização, ajudando os desenvolvedores de sistemas a simular e analisar o impacto da alavancagem e dimensionamento de posição dinâmico no STS e no desempenho do portfólio.
Seis quadros de teste para o Python.
As capacidades padrão das plataformas open source Python backtesting parecem incluir:
Gerenciamento de eventos, flexível e irrestrito Coleta decente de indicadores técnicos pré-definidos Captação de desempenho padrão / visualização / geração de relatórios.
PyAlgoTrade.
PyAlgoTrade é uma estrutura de backtesting mutuamente documentada, juntamente com capacidades de negociação em papel e ao vivo. O suporte a dados inclui Yahoo! Finanças, Google Finance, NinjaTrader e qualquer tipo de série de tempo baseada em CSV, como Quandl. Os tipos de pedidos suportados incluem Market, Limit, Stop e StopLimit.
O PyAlgoTrade suporta a negociação Bitcoin via Bitstamp e o gerenciamento de eventos do Twitter em tempo real.
bt - Backtesting para Python.
bt "visa promover a criação de blocos de lógica de estratégia facilmente testáveis, reutilizáveis e flexíveis para facilitar o rápido desenvolvimento de estratégias comerciais complexas".
O framework é particularmente adequado para testar STS com base em portfólio, com algos para ponderação de ativos e reequilíbrio de portfólio. A modificação de uma estratégia para executar em diferentes freqüências de tempo ou pesos de ativos alternativos envolve um mínimo de ajuste de código. bt é construído em cima do ffn - uma biblioteca de funções financeiras para Python.
Backtrader.
Esta plataforma está excepcionalmente bem documentada, com um blog acompanhante e uma comunidade on-line ativa para postar perguntas e solicitações de recursos. O Backtrader suporta uma série de formatos de dados, incluindo arquivos CSV, Pandas DataFrames, iteradores de incandescência e feeds de dados em tempo real de três corretores. Esses feeds de dados podem ser acessados simultaneamente e podem até representar diferentes cronogramas. Os corretores suportados incluem Oanda para negociação de Forex e negociação de classes de ativos múltiplos através de Interactive Brokers e Visual Chart.
Pysystemtrade.
O desenvolvedor da Pysystemtrade, Rob Carver, tem uma ótima postagem em discussão sobre o porquê ele se propôs a criar mais uma nova estrutura de teste do Python e os argumentos para e contra o desenvolvimento do framework. A estrutura backtesting para pysystemtrade é discutida no livro Rob, "Systematic Trading".
Pysystemtrade lista uma série de recursos de roteiro, incluindo um testador de back-up completo, que inclui técnicas de otimização e calibração e negociação de futuros totalmente automáticos com Interactive Brokers. Os contribuidores da fonte aberta são bem-vindos.
Zipline é um simulador de negociação algorítmica com recursos de papel e negociação ao vivo. Acessível através da interface do navegador IPython baseado no navegador, a Zipline fornece uma alternativa fácil de usar para ferramentas de linha de comando. Suportado e desenvolvido por Quantopian, Zipline pode ser usado como uma estrutura de backtesting autônomo ou como parte de um ambiente completo de desenvolvimento, teste e implantação de STS, de Aosta / Zipline STS. A Zipline fornece 10 anos de dados de estoque históricos históricos de última hora e uma série de opções de importação de dados.
QSTrader é uma estrutura de backtesting com capacidades de negociação ao vivo. O fundador da QuantStart, Michael Halls-Moore, lançou o QSTrader com a intenção de construir uma plataforma robusta e escalável o suficiente para atender às necessidades dos fundos de hedge quantitativos institucionais, bem como aos comerciantes quantos de varejo. O QSTrader atualmente suporta dados de resolução "barra" da OHLCV em várias escalas de tempo, mas permite que dados de marca sejam usados.
Tanto o backtesting como o comércio ao vivo são completamente orientados para eventos, simplificando a transição das estratégias da pesquisa para o teste e, finalmente, a negociação ao vivo. A estratégia básica / código do portfólio geralmente é idêntico em ambas as implementações.
O principal benefício do QSTrader é em sua modularidade, permitindo uma ampla personalização de código para aqueles que possuem requisitos específicos de gerenciamento de risco ou portfólio.
Abraçando o Backtest.
É a natureza humana se concentrar na recompensa de desenvolver um STS (esperançosamente lucrativo), então apressar-se a implantar uma conta financiada (porque esperamos), sem gastar tempo e recursos suficientes para testar completamente a estratégia. Mas backtesting não é apenas um gatekeeper para nos impedir de implementar estratégias erradas e perder capital comercial, também fornece uma série de diagnósticos que podem informar o processo de desenvolvimento STS. Por exemplo, testando um STS idêntico em dois intervalos de tempo diferentes, compreendendo a redução máxima de uma estratégia no contexto de correlações de ativos e criando portfólios mais inteligentes por backtesting de alocações de ativos em várias regiões geográficas.
Em futuras postagens, iremos abordar frameworks de backtesting para ambientes que não sejam Python e o uso de várias técnicas de amostragem como bootstrapping e jackknife para testar modelos de negociação preditivos.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
LearnDataSci.
Início »Python for Finance, Parte 2: Introdução às Estratégias de Negociação Quantitativas.
Python for Finance, Parte 2: Introdução às Estratégias de Negociação Quantitativas.
Python for Finance, Parte 2: Introdução às Estratégias de Negociação Quantitativas.
Idioma: Python 3.5 Bibliotecas: pandas, numpy e matplotlib iPython notebook: disponível no GitHub.
Em Python for Finance, Parte I, nos concentramos no uso de Python e Pandas para.
Recupere as séries temporais financeiras das fontes on-line gratuitas (Yahoo), formateie os dados preenchendo observações faltantes e alinhando-as, calcule alguns indicadores simples, como médias móveis rolantes e visualize as séries temporais finais.
Como lembrete, o quadro de dados contendo os três & # 8220; cleaned & # 8221; timeseries de preços tem o seguinte formato:
Também calculamos as médias móveis de rolamento destas três vezes, da seguinte forma. Observe que ao calcular a média móvel de $ M $ dias, os primeiros $ M-1 $ não são válidos, pois os preços de $ M $ são necessários para o primeiro ponto de dados de média móvel.
Com base nesses resultados, nosso objetivo final será projetar uma estratégia de negociação simples e realista. No entanto, primeiro precisamos passar por alguns dos conceitos básicos relacionados às estratégias de negociação quantitativas, bem como as ferramentas e técnicas no processo.
Considerações gerais sobre estratégias de negociação.
Existem várias maneiras de se lidar com uma estratégia de negociação. Uma abordagem seria usar as séries temporais de preços diretamente e trabalhar com números que correspondem a algum valor monetário. Por exemplo, um pesquisador poderia estar trabalhando com séries temporais que expressam o preço de uma determinada ação, como as séries temporais usadas no artigo anterior. Da mesma forma, se estiver trabalhando com instrumentos de renda fixa, por exemplo, títulos, pode-se usar uma série de tempo que expressa o preço do vínculo como uma porcentagem de um determinado valor de referência, neste caso, o valor nominal da obrigação. Trabalhar com este tipo de séries de tempo pode ser mais intuitivo, pois as pessoas costumam pensar em termos de preços. Contudo, as séries temporais dos preços apresentam algumas desvantagens. Os preços geralmente são apenas positivos, o que dificulta a utilização de modelos e abordagens que exigem ou produzam números negativos. Além disso, as séries temporais de preços geralmente não são estacionárias, ou seja, suas propriedades estatísticas são menos estáveis ao longo do tempo.
Uma abordagem alternativa é usar séries temporais que correspondem não a valores reais, mas mudanças no valor monetário do recurso. Essas séries de tempo podem assumir valores negativos e também, suas propriedades estatísticas são geralmente mais estáveis do que as séries temporais de preços. Os formulários mais utilizados são os retornos relativos definidos como.
e log-returns definido como.
onde $ p \ left (t \ right) $ é o preço do ativo no tempo $ t $. Por exemplo, se $ p \ left (t \ right) = 101 $ e $ p \ left (t-1 \ right) = 100 $ e $ r_> \ left (t \ right) = \ frac = 1 \% $ .
Há várias razões pelas quais os log-returns estão sendo usados no setor e alguns deles estão relacionados a premissas de longa data sobre o comportamento dos retornos de ativos e estão fora do nosso alcance. No entanto, o que precisamos apontar são duas propriedades bastante interessantes. Log-returns são aditivos e isso facilita o tratamento de nossas séries temporais, os retornos relativos não são. Podemos ver a aditividade de log-returns na seguinte equação.
que é simplesmente o log-return de $ t_0 $ para $ t_2 $. Em segundo lugar, os retornos de log são aproximadamente iguais aos retornos relativos dos valores de $ \ frac $ suficientemente perto de $ 1 $. Ao tomar a expansão Taylor de 1ª ordem de $ \ log \ left (\ frac \ right) $ em torno de US $ 1 $, obtemos.
Ambos são calculados trivialmente usando Pandas como:
Uma vez que os retornos de log são aditivos, podemos criar as séries temporais dos retornos de registro cumulativos definidos como.
c \ left (t \ right) = \ sum_ ^ t r \ left (t \ right)
Os retornos de log cumulativos e os retornos relativos totais de 2000/01/01 para as três séries de tempo podem ser vistos abaixo. Observe que, embora os log-returns sejam fáceis de manipular, os investidores estão acostumados a usar retornos relativos. Por exemplo, um retorno de log de $ 1 $ não significa que um investidor tenha duplicado o valor de seu portfólio. Um retorno relativo de $ 1 = 100 \% $ faz! A conversão entre o retorno de log cumulativo $ c \ left (t \ right) $ eo retorno relativo total $ c_> \ left (t \ right) = \ frac $ é simples.
Para aqueles que estão se perguntando se isso está correto, sim é. Se alguém tivesse comprado $ \ $ 1000 $ de ações da AAPL em janeiro de 2000, seu portfólio agora valeria mais de $ \ $ 30,000 $. Se ao menos tivéssemos uma máquina do tempo & # 8230;
O que é uma estratégia de negociação quantitativa?
Nosso objetivo é desenvolver uma estratégia de negociação de brinquedos, mas o que significa a estratégia de negociação quantitativa & # 8220; # 8221; realmente significa? Nesta seção, daremos uma definição que nos guiará em nosso objetivo de longo prazo.
Suponha que temos à nossa disposição uma certa quantia de dólares, $ N $, que estamos interessados em investir. Temos à nossa disposição um conjunto de ativos de US $ K $ dos quais podemos comprar e vender livremente qualquer valor arbitrário. Nosso objetivo é derivar pesos $ w_i \ left (t \ right), i = 1, \ ldots, K $ desse tipo.
$$ w_i \ left (t \ right) \ in \ mathbb \ \ text \ \ sum_ ^ K w_i \ left (t \ right) \ leq 1 $$
de modo que uma quantia de dólares igual a $ w_i \ left (t \ right) N $ é investida no time $ t $ no asset $ i $.
A condição de desigualdade significa $ \ sum_ ^ K w_i \ left (t \ right) \ leq 1 $ que o valor máximo que podemos investir é igual ao valor de dólares que temos, que é $ N $.
Por exemplo, suponha que possamos investir apenas US $ 2 $ e que $ N = \ $ 1000 $. O objetivo é derivar dois pesos $ w_1 \ left (t \ right) $ e $ w_2 \ left (t \ right) $.
Se em algum ponto $ w_1 \ left (t \ right) = 0.4 $ e $ w_2 \ left (t \ right) = 0.6 $, isso significa que investimos $ w_1 \ left (t \ right) N = \ $ 400 $ no activo $ 1 $ e $ w_2 \ left (t \ right) N = \ $ 600 $ no ativo $ 2 $. Uma vez que só temos $ \ $ 1000 $, só podemos investir tanto quanto isso significa isso.
$$ w_1 \ left (t \ right) N + w_2 \ left (t \ right) N \ leq N \ Rightarrow w_1 \ left (t \ right) + w_2 \ left (t \ right)
Georgios Efstathopoulos.
A Georgios tem mais de 7 anos de experiência como analista quantitativo no setor financeiro e tem trabalhado extensivamente em modelos estatísticos e de aprendizagem por máquina para negociação quantitativa, gerenciamento de risco de mercado e de crédito e modelagem comportamental. Georgios possui doutorado em Matemática Aplicada e Estatística no Imperial College de Londres, e é fundador e CEO da QuAnalytics Limited, uma consultoria focada em soluções quantitativas e de análise de dados para indivíduos e organizações que desejam colher o potencial de seus próprios dados para aumentar seus negócios .
Recomendado.
Python for Finance, Parte I: Yahoo Finance API, pandas e matplotlib.
Em detalhes, no primeiro de nossos tutoriais, vamos mostrar como se pode usar facilmente o Python para baixar dados financeiros de bancos de dados on-line gratuitos, manipular os dados baixados e, em seguida, criar alguns indicadores técnicos básicos que serão usados como base de nossa estratégia quantitativa.
Python for Finance, Parte 3: uma estratégia de negociação média móvel.
Neste artigo, começaremos a conceber uma estratégia de negociação mais complexa, que terá pesos não constantes wi (t) wi (t), e assim se adaptará de algum modo ao comportamento recente do preço de nossos ativos.
Melhores Cursos Online de Ciência de Dados em 2017.
O seguinte é uma extensa lista de cursos e recursos de Ciências da Informação, de plataformas como Coursera, edX e Udacity, que lhe dão as habilidades necessárias para se tornar um cientista de dados.
Mais de 100 livros gratuitos de ciência de dados para 2017.
Tirado da web, aqui está a nossa coleção dos melhores livros gratuitos em Data Science, Big Data, Data Mining, Machine Learning, Python, R, SQL, NoSQL e muito mais.
Obrigado por compartilhar Georgios. Utilizar uma simulação de Monte Carlo para derivar os pesos ótimos divididos para maximizar o retorno seja uma melhoria dessa estratégia em vez de dividir uniformemente 1/3 de cada uma? : weights_vector = pd. DataFrame (1/3, index = r_t. index, columns = r_t. columns)
Você está certo, a MC seria uma das formas possíveis de otimizar os pesos para essa estratégia. Note, no entanto, que existem várias questões abertas sobre esta otimização. Em primeiro lugar, o que estamos otimizando? Retorno total, volatilidade da carteira, retração? Em segundo lugar, a otimização corre o risco de sobrepor os pesos ao intervalo histórico que estamos usando para a otimização. Essas e outras questões serão abordadas nos seguintes artigos nesta série.
Quando podemos esperar a próxima publicação?
Obrigado pelo artigo. Há várias instâncias acima, onde você divide 1/3 e 1/7. Python assume que o resultado seja um número inteiro, então a resposta é 0 em ambos os casos. Você deve usar 1.0 / 3 e 1.0 / 7 para evitar esse problema.
Obrigado pelo aviso. Esta série de artigos pressupõe que o Python 3 é usado. No Python 3, 1/3 produzirá 1.3333, em vez da divisão inteira, que foi o caso no Python 2.
No entanto, para tornar isso compatível com os usuários do Python 2, no que se segue, eu me certificarei de que, nesses casos, seja tomado um cuidado especial para garantir que as divisões sejam tratadas de forma adequada.
Copyright © 2017 LearnDataSci. Todos os direitos reservados.
No comments:
Post a Comment