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 Michael Halls-Moore em 21 de janeiro de 2014.
No artigo anterior sobre Ambientes de Análise de Análise de Pesquisa Em Python Com Pandas, criamos um ambiente de backtesting baseado em pesquisa orientado a objetos e testávamos isso em uma estratégia de previsão aleatória. Neste artigo, faremos uso da maquinaria que introduzimos para realizar pesquisas sobre uma estratégia real, ou seja, o Crossover de média móvel na AAPL.
Estratégia de Crossover Média em Movimento.
A técnica de Crossover de média móvel é uma estratégia de impulso simplista extremamente conhecida. Muitas vezes, é considerado o exemplo do "Olá Mundo" para negociação quantitativa.
A estratégia descrita aqui é longa apenas. São criados dois filtros de média móvel simples separados, com diferentes períodos de lookback, de uma série temporal específica. Os sinais para comprar o recurso ocorrem quando a média móvel de lookback mais curta excede a média móvel de lookback mais longa. Se a média mais longa exceder a média mais curta, o ativo é vendido de volta. A estratégia funciona bem quando uma série temporal entra em um período de forte tendência e, em seguida, inverte lentamente a tendência.
Para este exemplo, escolhi a Apple, Inc. (AAPL) como a série temporal, com um curto lookback de 100 dias e um longo lookback de 400 dias. Este é o exemplo fornecido pela biblioteca de negociação algorítmica de tirolesa. Assim, se quisermos implementar o nosso próprio backtester, precisamos garantir que ele coincida com os resultados na linha aérea, como um meio básico de validação.
Implementação.
Certifique-se de seguir o tutorial anterior aqui, que descreve como a hierarquia de objeto inicial para o backtester é construída, caso contrário, o código abaixo não funcionará. Para esta implementação particular usei as seguintes bibliotecas:
A implementação do ma_cross. py requer backtest. py do tutorial anterior. O primeiro passo é importar os módulos e objetos necessários:
Como no tutorial anterior, vamos sub-classificar a classe base abstrata da Estratégia para produzir MovingAverageCrossStrategy, que contém todos os detalhes sobre como gerar os sinais quando as médias móveis da AAPL se cruzam.
O objeto requer um short_window e um long_window sobre o qual operar. Os valores foram configurados para padrões de 100 dias e 400 dias, respectivamente, que são os mesmos parâmetros utilizados no exemplo principal de tirolesa.
As médias móveis são criadas usando a função pandas rolling_mean nas barras ['Fechar'] preço de fechamento do estoque da AAPL. Uma vez que as médias móveis individuais foram construídas, a série do sinal é gerada definindo a coluna igual a 1,0 quando a média móvel curta é maior do que a média móvel longa, ou 0,0 caso contrário. A partir disso, as ordens de posições podem ser geradas para representar sinais comerciais.
O MarketOnClosePortfolio é subclassado do Portfolio, que é encontrado em backtest. py. É quase idêntico à implementação descrita no tutorial anterior, com a exceção de que os negócios são agora realizados em uma base Close-to-Close, em vez de Open-to-Open. Para obter detalhes sobre como o objeto Portfolio está definido, consulte o tutorial anterior. Eu deixei o código em completo e mantenho esse tutorial autônomo:
Agora que as classes MovingAverageCrossStrategy e MarketOnClosePortfolio foram definidas, uma função __main__ será chamada para amarrar toda a funcionalidade em conjunto. Além disso, o desempenho da estratégia será examinado através de um gráfico da curva de equidade.
O objeto DataReader de pandas transfere os preços de ações da AAPL da OHLCV para o período de 1º de janeiro de 1990 a 1º de janeiro de 2002, momento em que os sinais DataFrame são criados para gerar os sinais de longo tempo. Posteriormente, o portfólio é gerado com uma base de capital inicial de 100.000 USD e os retornos são calculados na curva de patrimônio.
O passo final é usar matplotlib para plotar um gráfico de dois dígitos de ambos os preços da AAPL, superado com as médias móveis e os sinais de compra / venda, bem como a curva de equidade com os mesmos sinais de compra / venda. O código de plotagem é tomado (e modificado) do exemplo de implementação de tirolesa.
A saída gráfica do código é a seguinte. Utilizei o comando IPython% paste para colocar isso diretamente no console IPython, enquanto no Ubuntu, de modo que a saída gráfica permaneça em exibição. Os roseticks cor-de-rosa representam a compra do estoque, enquanto os bastões negros representam a venda de volta:
AAPL Moving Average Crossover Performance de 1990-01-01 a 2002-01-01.
Como pode ser visto, a estratégia perde dinheiro ao longo do período, com cinco comércios de ida e volta. Isso não é surpreendente, dado o comportamento da AAPL durante o período, que estava em uma ligeira tendência descendente, seguido de um aumento significativo em 1998. O período de lookback dos sinais da média móvel é bastante grande e isso impactou o lucro do comércio final , o que de outra forma pode ter tornado a estratégia rentável.
Em artigos subsequentes, criaremos um meio mais sofisticado de análise de desempenho, além de descrever como otimizar os períodos de lookback dos sinais de média móvel individual.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com 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.

Estratégia de negociação simples python
Muitas pessoas ouvem programação com finanças e eles imediatamente pensam em High Frequency Trading (HFT), mas também podemos aproveitar a programação para ajudar no financiamento, mesmo com coisas como investir e até mesmo investir em longo prazo. A maioria das pessoas pensa em programar com financiamento para ser usado para negociação de alta freqüência ou negociação algorítmica porque a idéia é que os computadores podem ser usados ​​para realmente executar negócios e fazer posições em uma velocidade muito mais rápida do que uma lata humana.
Isso é verdade, mas as máquinas também podem ajudar os seres humanos a investir, reduzindo o tempo de pesquisa necessário. Mesmo os investidores de longo prazo tendem a fazer muito trabalho para criar uma espécie de "algoritmo", onde pesquisam empresas, analisando todos os tipos de fundamentos, como o índice de preços / ganhos (PE), receita / ganhos por ação (EPS), trimestral Earnings, Debt / Equity, e a lista continua. Mesmo que um investidor simplesmente procurava valores específicos para essas métricas fundamentais da empresa, existem mais de 10.000 estoques dos EUA para possivelmente negociar. Passar por tudo isso levaria uma quantidade imensa de tempo, anos fáceis, e no momento em que você fez isso, muitos novos valores saíram.
Observe o texto que se parece com isso? Você pode clicar em texto como este para saber mais sobre o tópico se você não está familiarizado. Com as finanças, há muitos termos que podem rapidamente deixá-lo para trás se você não estiver familiarizado, então, para qualquer recém-chegado, os termos são explicados. Ainda confuso? Publique um comentário no vídeo.
Rácio de preço para ganhos.
Um índice de PE é um índice de avaliação do preço atual da ação da empresa em comparação com os ganhos da ação nos últimos 12 meses.
Um exemplo aqui seria se uma participação da empresa fosse avaliada em US $ 38,96 e tiveram ganhos nos últimos 12 meses de US $ 4,87, então o preço de ganhos seria (US $ 38,96 / US $ 4,87), o que resulta em 8. Geralmente, o número "mágico" é 12, mas isso varia muito pelo tipo de mercado (como banco, tecnologia, medicina, etc.), bem como o crescimento esperado da empresa.
Texto Explicado.
Você pode clicar neles para ter modais pop-up que explicam mais texto e conceitos.
Receita / Ganhos por ação (EPS)
O lucro por ação é o valor do lucro de uma empresa que é alocado a cada uma das ações em circulação das ações ordinárias da empresa, que é usada para medir a rentabilidade de uma empresa.
Ganhos trimestrais.
As empresas públicas são obrigadas por lei a produzir relatórios trimestrais de seus ganhos. Esses relatórios trimestrais são divulgados a cada 3 meses (trimestres do ano) e tendem a conter informações como os Resultados Trimestrais, que geralmente são números mágicos, bem como receitas, crescimento, perspectivas e muito mais.
Dirigindo-se aos relatórios de ganhos trimestrais, os preços das ações tendem a ser preços com base no que os especuladores esperam que os relatórios digam. Muitas vezes, os resultados são diferentes, mais positivos do que o esperado, mais negativos do que o esperado, ou completamente o oposto do que era esperado, causando movimentos muito significativos nos preços às vezes, às vezes por tanto ou mais de 20%.
Rácio de dívida para capital próprio.
O índice dívida / capital é a comparação do montante da dívida que uma empresa tem em relação ao valor do patrimônio líquido que possui. Normalmente, é preferível que este número seja inferior a um, mas, novamente, isso varia muito pelo tipo de empresa em questão.
Outra razão pela qual podemos estar interessados ​​em utilizar computadores para finanças é tentar filtrar nossos preconceitos inerentes. Provavelmente, uma das principais razões pelas quais os seres humanos subiram ao domínio é a nossa capacidade inata de fazer padrões e ver relacionamentos imediatamente nas coisas. Fazemos isso muito bem, às vezes um pouco muito bem, vendo padrões e relacionamentos onde não há nenhum. Como predador e possível presa, ver padrões e relacionamentos geralmente são mais úteis do que não, então funcionou. Em finanças, ver padrões onde não há nenhum pode ser prejudicial, e é. Você provavelmente já ouviu números como mais de 90% dos comerciantes perder dinheiro nos mercados. Isso é praticamente o motivo.
Fonte de imagem: morguefile.
Eu argumentaria que o valor adicionado para o uso de máquinas com financiamento não tem nada a ver com High Frequency Trading, tem tudo a ver com as habilidades de pesquisa e back-testing.
Back testing é uma forma de análise que nos permite olhar para trás no histórico e negociar uma estratégia contra dados históricos para ver como fizemos. Esta é, naturalmente, uma definição muito simples de back-testing, mas abrange bem. A idéia aqui é fazer uma espécie de back-test cego sempre que possível, bem como eliminar o viés de sobrevivência.
Onde muitos comerciantes falham, eles tendem a "superar" estratégias para dados históricos. Isso geralmente acontece quando os resultados de um teste de volta não são tão bons quanto eles esperavam, então eles alteram os números um pouco e repitam. Eles continuam fazendo isso até que os resultados sejam o que eles queriam. Isso é uma superposição e um snooping de dados, e isso vai acabar com você.
Com isso em mente, existem alguns outros fatores para o back-testing, o que nos permite não apenas testar o desempenho de uma estratégia, mas também realizar análises de risco e testes de validade nas estratégias que escrevemos, o que pode nos ajudar a obter mais informações além de como nós fizemos, como quanto de risco tomamos, em comparação com os retornos que teríamos feito.
Programar com Finanças pode ou não ganhar dinheiro, mas é quase certo que isso vai poupar dinheiro se empregado direito. É para isso que esta série de tutorial será orientada. Para fazer isso, vamos utilizar a linguagem de programação Python.
Python faz uma excelente linguagem usar porque é bastante fácil de entender. Geralmente, o código Python é legível mesmo por um não programador. Há também muitos módulos úteis e uma grande comunidade que faz o backup do Python, por isso é uma ótima linguagem para usar com as finanças.
Em seguida, temos que decidir como planejamos testar estratégias. Escrever uma estrutura de back-testing é uma tarefa enorme, e com certeza parece muito importante que entendamos isso se o fizermos. Assim como você provavelmente não deveria escrever seus próprios algoritmos de criptografia, você provavelmente não deveria tentar realmente escrever seus próprios sistemas de back-testing, a menos que seja apenas por diversão. Vamos utilizar o serviço web chamado Quantopian.
Quantopian é construído em cima de um poderoso algoritmo de back-testing para Python chamado Zipline. A Zipline é capaz de testar os algoritmos de negociação, incluindo a contabilização de coisas como o deslizamento, bem como calcular várias métricas de risco.
Enquanto estaremos fazendo a maior parte dessa série em Quantopian, é completamente possível baixar o Zipline e usá-lo em seu próprio computador, localmente, sem realmente usar o Quantopian. A razão pela qual eu gostaria que usássemos o Quantopian é porque as métricas de risco e a interface de usuário geral fornecida em Quantopian são excelentes. Isso sozinho nos salvará uma incrível quantidade de tempo em desenvolvimento, e também é amplamente testado. Se o fizéssemos nós mesmos, poderíamos fazê-lo com algo como Matplotlib, mas estaríamos quase certos de mexer um monte de coisas ao longo do caminho.
Dirigindo-se a Quantopian, crie uma conta escolhendo "assinar" na página inicial:
Sinta-se livre para puxar ao redor, mas o próximo lugar para a cabeça, uma vez que você cria uma conta e logar-se é a guia "Algoritmos" na parte superior.
Uma vez lá, você deve ver uma seção chamada "Testing Algorithms". Se você não possui algoritmos, você deve ver algo como:
Escolha "clonar algoritmos de amostra". Se você não vê a opção para fazer isso, não se preocupe! Em vez disso, dirija-se à documentação para o Quantopian e os algoritmos de amostra estão aqui e então você pode clicar em "algoritmo de clones" aqui. Como uma nota, você pode fazer isso com praticamente qualquer algoritmo que você vê. Se você dirija para a guia da comunidade, você verá pessoas publicando perguntas e informações sobre o Quantopian em geral. Algumas pessoas vão compartilhar seus algoritmos e back-tests aqui, que você pode então clonar para jogar consigo mesmo.
Quando você clona o algoritmo, você deve ser levado para sua página de algoritmos de edição ativa com o algoritmo clonado, que se parece a isso (menos as caixas coloridas)
Python Editor - É onde você codifica sua lógica Python para o algoritmo. Resultados do algoritmo construído - Quando você cria o algoritmo, os resultados gráficos aparecerão aqui. Saída de registro / erro - Qualquer informação de saída / log do console virá aqui. É comum que o seu programa libere vários bits de texto para depuração ou apenas para obter mais informações. Algoritmo de criação: use isso para testar rapidamente o que você escreveu. Os resultados não serão salvos, mas você pode ver o resultado na seção de resultados do algoritmo incorporado. Full Backtest - Isso executará um teste de retorno completo com base no seu algoritmo atual. Os testes completos completos vêm com um pouco mais de análise, os resultados são salvos e o algoritmo que gerou esses resultados também é salvo, para que você possa rever os testes de volta e visualizar o código exato que gerou um resultado específico.
O código de amostra completo é algo como:
Sob o "def initialize (context) :," este é o código que será executado no início apenas uma vez, e então temos o método handle_data. O método handle_data será executado uma vez por barra. Quantopian tem duas configurações principais: Diário ou Minuto. Se você estiver executando Diariamente, por exemplo, então handle_data será executado "uma vez por dia".
Dentro deste método handle_data, estamos calculando a média móvel de 5 dias, além de armazenar o preço atual para as variáveis. A partir daqui, perguntamos se o preço atual é maior do que o preço médio, e se tivermos o dinheiro para pagar outra ação. Se este for o caso, então nós compramos. Se não estiver, então queremos vender se tivermos partes para fazê-lo.
Este é apenas um resumo aproximado do que está acontecendo aqui. No próximo tutorial, estaremos executando o código por linha, o que ajudará a solidificar sua compreensão sobre como isso funciona.
Agora, pressione "executar back-test completo". Vai demorar um momento para começar, e então você deve começar a ver os resultados. Aqui, podemos ver o desempenho histórico do nosso algoritmo em comparação com alguns benchmark. O benchmark padrão é o índice S & P 500, que é uma coleção do top 500 (atualmente é atualmente 502 no momento da minha escrita) empresas convertidas em um índice. Esta é uma medida popular usada para calcular a saúde do mercado de ações como um todo.
Não só podemos ver o desempenho, vemos algumas métricas de risco no topo, mas também podemos jogar com essa barra de navegação lateral para examinar uma tonelada de dados que também é rastreado em relação à nossa estratégia.
Sinta-se livre para puxar essa página e ver o que está disponível. Se você ainda estiver um pouco nublado, isso não deve ser uma surpresa, nós vamos esclarecer mais sobre a quespian à medida que vamos. Se você está se perdendo com o código Python, você pode querer olhar para a série tutorial Python 3 Basics.
Você também pode tentar ir para a barra de pesquisa do tutorial do Python para ver se você pode encontrar uma resposta rápida para um tópico específico. Se tudo mais falhar, publique um comentário no vídeo relacionado e eu ou outra pessoa provavelmente será capaz de ajudá-lo!

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.

Estratégia de negociação simples python
Nós vamos criar uma estratégia de cruzamento Simple Moving Average neste financiamento com o tutorial Python, o que nos permitirá ficar confortáveis ​​com a criação de nosso próprio algoritmo e utilizando os recursos da Quantopian. Para começar, vá para a guia Algoritmos e escolha o botão "Algoritmo novo". Aqui, você pode nomear seu algoritmo o que quiser, e então você deve ter algum código inicial como:
Como você pode ver, alguns códigos iniciais foram preparados para nós.
Se você não está familiarizado com as médias móveis, o que faz é ter um certo número de "janelas" de dados. No caso de correr contra preços diários, uma janela seria um dia. Se você tivesse uma média móvel de 20, isso significaria uma média móvel de 20 dias. A partir daqui, a idéia é dizer que você tem uma média móvel de 20 e uma média móvel de 50. Traçar isso em um gráfico pode parecer algo como:
Aqui, a linha azul é o preço das ações, a linha vermelha é a média móvel de 20 e a linha amarela é a média móvel de 50. A idéia é que quando a média móvel de 20, que reage mais rápido, ultrapassa a média móvel de 50, isso significa que o preço pode estar tendendo, e podemos querer investir. Por outro lado, se a média móvel de 20 cai abaixo da média móvel de 50, isso talvez signifique que o preço está em declínio e que queremos vender ou investir ou até vender a empresa.
Venda curta.
A venda a descoberto é o ato de vender uma segurança que não possui. Normalmente, isso é feito emprestando a parte de outra pessoa para vender, com a promessa de comprá-lo de volta. O objetivo aqui é vender o estoque de outra pessoa, por exemplo, $ 100, porque você acha que vai cair. Então, então cai para US $ 90, você compra de volta, e depois devolve o proprietário original. A diferença de US $ 10 é sua para manter.
A venda a descoberto é arriscada por dois motivos principais. O primeiro é que, na maioria das vezes, é que a outra pessoa está emprestando as ações da empresa, então este é um empréstimo, e você pode acabar perdendo dinheiro que você nunca teve.
A próxima razão pela qual isso é arriscado é porque um short pode ir infinitamente ruim. Por exemplo, se você comprar uma empresa por US $ 100, o máximo que você pode perder é de US $ 100 por ação, pois a participação pode ser igual a zero. Se você abre uma empresa que é de US $ 100, você pode perder uma quantidade infinita de dinheiro, porque essa empresa deve pagar US $ 200 por ação, US $ 2.000 por ação. ou $ 200,000 por ação. É claro que é improvável que isso seja ruim, mas o ponto é: você pode perder muito mais do que seu investimento original, e isso geralmente é acompanhado pelo fato de que o investimento original não era mesmo com o dinheiro, era um empréstimo.
Normalmente, você será emprestado a parte pelo seu corretor ou banco, que também tem o direito de reclamar as ações sempre que quiserem. Isso significa que as ações de US $ 100 podem subir para US $ 110 antes de descer para US $ 90, mas o banco pode reclamar as ações na marca de US $ 110 e você está pagando essa conta.
Olhando para o gráfico acima, parece-nos gostaríamos de fazer muito bem. Perdemos os picos absolutos e as tarifas do preço, mas, em geral, pensamos que faríamos tudo bem com esta estratégia.
Toda vez que você cria um algoritmo com Zipline ou Quantopian, você precisará ter os métodos initialize e handle_data. Eles devem ser incluídos em todos os algoritmos que você inicia de novo.
O método de inicialização é executado uma vez no início do algoritmo (ou uma vez por dia, se você estiver executando o algoritmo ao vivo em tempo real). Handle_data é executado uma vez por período. No nosso caso, estamos executando dados diários, então isso significa que ele será executado uma vez por dia.
Dentro do nosso método de inicialização, geralmente passamos esse parâmetro de contexto. Contexto é um dicionário de Python, que é o que usaremos para rastrear o que de outra forma poderemos usar variáveis ​​globais. O contexto acompanhará vários aspectos do nosso algoritmo de negociação à medida que o tempo passa, para que possamos fazer referência a essas coisas dentro do nosso script.
Dentro do nosso método de inicialização:
O que isso faz, é que estabelece a nossa segurança para a comercialização para o SPY. Esta é a ETF Spyder S & P 500 (Exchange Traded Fund), que é um método que podemos usar para trocar o índice S & P 500.
Isso é tudo o que faremos agora no nosso método de inicialização, a seguir iniciaremos nosso método handle_data:
Observe aqui que passamos o contexto e um novo parâmetro chamado dados. Dados rastreiam os dados atuais das empresas dentro do nosso "universo comercial". O universo é a coleção de empresas às quais estamos potencialmente interessados ​​em investir. No nosso caso, estabelecemos este universo no início no método de inicialização, definindo todo o nosso universo no SPY.
Simplificando, o contexto var é usado para rastrear nossa atual situação de investimento, com coisas como nosso portfólio e dinheiro. A variável de dados é usada para rastrear nosso universo de empresas e suas informações.
.mavg () é um método incorporado em Quantopian, e "data [context. security]" é nós referenciando a chave por este nome no nosso dicionário de contexto.
Poderíamos chamar esses context. MA1 e context. MA2 se quisermos armazená-los no nosso dicionário de contexto e usá-lo fora do nosso método handle_data, mas não precisamos acessar esses dados fora daqui, então nós apenas os faremos variáveis ​​locais.
Agora que temos as médias móveis calculadas, estamos prontos para obter mais lógica. Para negociar, precisamos ter lógica como se os MAs se cruzassem, mas também, antes que possamos fazer um comércio, precisamos ver se temos dinheiro suficiente para fazer uma compra, precisamos saber o preço do segurança, e devemos verificar se já temos essa posição. Para fazer isso, adicionamos o seguinte ao nosso método handle_data:
Nós pegamos o preço atual referenciando dados, que é nossa maneira de rastrear nosso universo de empresas (atualmente apenas o S ​​& P 500 ETF $ SPY). Em seguida, verificamos para ver as posições atuais que temos ao fazer referência ao nosso contexto. Portfólio. Aqui, podemos fazer referência a todos os tipos de coisas em relação ao nosso portfólio, mas, agora mesmo, queremos verificar nossas posições. Isso retorna um dicionário de todas as suas posições, o valor, quanto foi preenchido e assim por diante. Então, estamos interessados ​​em uma posição específica em uma empresa, então fazemos context. portfolio. positions [symbol ('SPY')]. A partir daqui, nossa única preocupação agora é apenas ver se temos algum investimento, então o atributo que mais nos interessa é a quantidade de posições que temos, então usamos. amount no final.
Até agora, criamos as informações necessárias para que possamos saber antes de realmente usar alguma lógica para executar negócios, mas não escrevemos nada para realmente fazer a negociação. É o que vamos cobrir no próximo tutorial.

Comments

Popular Posts