Sunday, 6 August 2017

Moving Average Matplotlib


Zipline iniciante tutorial Zipline é um simulador de negociação algorítmica de código aberto escrito em Python. Alguns benefícios incluem: Realista: deslizamento, custos de transação, atrasos nas ordens. Transmissão: processar cada evento de forma individual, evita o viés avançado. Pilhas incluídas: transformações comuns (média móvel), bem como cálculos de risco comuns (Sharpe). Desenvolvido e continuamente atualizado por Quantopian, que fornece uma interface web fácil de usar para a Zipline, dados de estoque históricos históricos de 10 anos de resolução de minutos e recursos de negociação ao vivo. Este tutorial é dirigido a usuários que desejem utilizar Zipline sem usar o Quantopian. Se você preferir começar a atapitar, veja aqui. Este tutorial pressupõe que você tenha instalada corretamente o zipline, veja as instruções de instalação se ainda não tiver configurado a linha de tirolesa. Todo algoritmo de tirolesa consiste em duas funções que você precisa definir: inicializar (contexto) handledata (contexto, dados) Antes do início do algoritmo, a tirolesa chama a função inicializar () e passa em uma variável de contexto. O contexto é um espaço de nomes persistente para você armazenar variáveis ​​que você precisa acessar de uma iteração de algoritmo para a próxima. Depois que o algoritmo foi inicializado, a tirolesa chama a função handledata () uma vez para cada evento. Em cada chamada, passa a mesma variável de contexto e um quadro de eventos chamado dados que contém a barra comercial atual com preços abertos, altos, baixos e próximos (OHLC), bem como volume para cada estoque em seu universo. Para obter mais informações sobre essas funções, consulte a parte relevante dos documentos do quespian. Meu primeiro algoritmo Vamos dar uma olhada em um algoritmo muito simples do diretório de exemplos, buyapple. py: Como você pode ver, primeiro devemos importar algumas funções que gostaríamos de usar. Todas as funções comumente usadas em seu algoritmo podem ser encontradas em zipline. api. Aqui estamos usando o order (), que leva dois argumentos: um objeto de segurança e um número que especifica quantos estoques deseja marcar (se negativo, order () venderá ações premium). Neste caso, queremos encomendar 10 partes da Apple em cada iteração. Para mais documentação na ordem (). Veja os documentos de Quantopian. Finalmente, a função record () permite salvar o valor de uma variável em cada iteração. Você fornece um nome para a variável juntamente com a própria variável: varnamevar. Após o algoritmo terminar, você terá acesso a cada valor de variável que você rastreou com registro () sob o nome que você forneceu (veremos isso mais adiante). Você também vê como podemos acessar os dados de preços atuais do estoque AAPL no quadro de eventos de dados (para obter mais informações, consulte aqui. Executando o algoritmo Para agora testar este algoritmo em dados financeiros, a linha aérea fornece três interfaces: uma interface de linha de comando, IPython Notebook magic e runalgorithm (). Ingerindo dados Se você não tiver ingerido os dados, execute: onde ltbundlegt é o nome do pacote a ser ingerido, o que é incumprimento para quantopian-quandl. Você pode verificar a seção de ingestão de dados para mais detalhes. Comando Interface de linha Depois de instalar o tirolesa, você deve ser capaz de executar o seguinte a partir de sua linha de comando (por exemplo, cmd. exe no Windows ou o aplicativo Terminal no OSX): como você pode ver, há alguns sinalizadores que especificam onde encontrar o seu Algoritmo (-f), bem como parâmetros que especificam quais os dados a serem usados, como padrão para o espelho Quantopian Quandl WIKI. Também há argumentos para o intervalo de datas para executar o algoritmo sobre (--start e - end). Finalmente, you8217ll quer salvar As métricas de desempenho do seu algoritmo para que você possa analisar como ele se realizou. Isso é feito através do sinalizador --output e fará com que ele escreva o desempenho DataFrame no formato de arquivo Python de pepino. Observe que você também pode definir um arquivo de configuração com esses parâmetros que você pode então passar convenientemente para a opção - c para que você não tenha que fornecer a linha de comando args o tempo todo (consulte os arquivos. conf no diretório de exemplos). Assim, para executar o nosso algoritmo a partir de cima e salvar os resultados para buyappleout. pickle, chamaríamos tirolesa da seguinte maneira: execute primeiro chama a função inicializar () e transmite o preço histórico das ações dia a dia através de handledata (). Após cada chamada para handledata (), instruímos a tirolesa para encomendar 10 ações da AAPL. Após a chamada da função order (), a tirolesa entra no estoque pedido e no valor na lista de pedidos. Depois que a função handledata () tiver terminado, a zipline procura por ordens abertas e tenta preenchê-las. Se o volume de negociação for alto o suficiente para este estoque, a ordem será executada depois de adicionar a comissão e aplicar o modelo de deslizamento que modela a influência do seu pedido no preço das ações, de modo que seu algoritmo será cobrado mais do que o preço das ações 10. (Nota, que você também pode alterar o modelo de comissão e deslizamento que usa a linha de tirolesa, veja os documentos do Quantopian para obter mais informações). Vamos dar uma olhada no desempenho do DataFrame. Para isso, usamos pandas dentro do notebook IPython e imprimos as dez primeiras linhas. Observe que a tirolesa faz uso intenso de pandas. Especialmente para entrada e saída de dados, portanto, vale a pena gastar algum tempo para aprender. 5 linhas 39 colunas Como você pode ver, há uma linha para cada dia de negociação, a partir do primeiro dia útil de 2000. Nas colunas você pode encontrar várias informações sobre o estado do seu algoritmo. A primeira coluna AAPL foi colocada lá pela função de registro () mencionada anteriormente e nos permite plotar o preço da maçã. Por exemplo, poderíamos facilmente examinar agora como o valor do nosso portfólio mudou ao longo do tempo em comparação com o preço das ações da AAPL. Como você pode ver, nosso desempenho de algoritmo, conforme avaliado pelo valor do portfólio, coincide perfeitamente com o preço das ações da AAPL. Isso não é surpreendente, pois nosso algoritmo só comprou a AAPL a cada chance. IPython Notebook O IPython Notebook é uma interface muito poderosa baseada em navegador para um intérprete Python (este tutorial foi escrito nele). Como já é a interface de fato para a maioria dos pesquisadores quantitativos, a tirolesa fornece uma maneira fácil de executar seu algoritmo dentro do Notebook, sem exigir que você use a CLI. Para usá-lo, você precisa escrever seu algoritmo em uma célula e deixar a linha aérea saber que é suposto executar esse algoritmo. Isso é feito através do comando mágico IPIlio de tirolesa que está disponível depois de importar a linha aérea do IPython Notebook. Essa magia leva os mesmos argumentos que a interface de linha de comando descrita acima. Assim, para executar o algoritmo a partir de cima com os mesmos parâmetros, precisamos executar a seguinte célula após a importação de tirolesa para registrar a magia. Observe que não precisamos especificar um arquivo de entrada como acima, uma vez que a magia usará o conteúdo da célula e procurará suas funções de algoritmo lá. Além disso, em vez de definir um arquivo de saída, estamos especificando um nome de variável com - o que será criado no espaço do nome e conterá o desempenho DataFrame que analisamos acima. Acesso a preços anteriores usando o histórico Exemplo de trabalho: Transferência média móvel dupla A média móvel dupla (DMA) é uma estratégia de impulso clássica. It8217s provavelmente não é usado por qualquer comerciante sério, mas ainda é muito instrutivo. A idéia básica é que nós calculamos duas médias móveis ou móveis (mavg) 8211 com uma janela mais longa que é suposto capturar tendências de longo prazo e uma janela mais curta que é suposto capturar tendências de curto prazo. Uma vez que o curto-mavg cruza o longo-mavg de baixo, assumimos que o preço das ações tem impulso ascendente e longo o estoque. Se o curto-mavg cruza de cima, saímos das posições quando assumimos o estoque para diminuir ainda mais. Como precisamos ter acesso a preços anteriores para implementar esta estratégia, precisamos de um novo conceito: History history () é uma função de conveniência que mantém uma janela de dados para você. O primeiro argumento é o número de barras que você deseja coletar, o segundo argumento é a unidade (1d para 1m, mas note que você precisa ter dados de nível de minuto para usar 1m). Para obter uma descrição mais detalhada dos recursos do histórico () 8216s, veja os documentos de Quantopian. Vamos analisar a estratégia que deve deixar isso claro: Aqui estamos definindo explicitamente uma função de análise () que é automaticamente chamada quando o backtest é feito (isto não é possível no aspian atualmente). Embora possa não ser diretamente aparente, o poder do histórico () (chatigo) não pode ser subestimado, pois a maioria dos algoritmos faz uso de desenvolvimentos anteriores do mercado de uma forma ou de outra. Você poderia facilmente conceber uma estratégia que treine um classificador com scikit-learn que tenta prever movimentos futuros do mercado com base em preços passados ​​(note, que a maioria das funções scikit-learn requerem numpy. ndarray s em vez de pandas. DataFrame s, então você Pode simplesmente passar o ndarray subjacente de um DataFrame via. values). Também usamos a função ordertarget () acima. Esta e outras funções como essa podem tornar o gerenciamento de pedidos e o reequilíbrio de portfólio muito mais fácil. Veja a documentação da Quantopian nas funções de ordem para obter mais detalhes. Conclusões Esperamos que este tutorial tenha dado uma pequena visão sobre a arquitetura, a API e as características da linha aérea. Para os próximos passos, confira alguns exemplos de ferramentas publicitárias. Analogamente, o DataFrame possui um método cov para calcular covariâncias em pares entre as séries no DataFrame, excluindo valores NAnull. Supondo que os dados em falta faltam aleatoriamente, isso resulta em uma estimativa para a matriz de covariância que é imparcial. No entanto, para muitas aplicações, esta estimativa pode não ser aceitável porque a matriz de covariância estimada não é garantida como semi-definida positiva. Isso poderia levar a correlações estimadas com valores absolutos que são superiores a uma, e ou uma matriz de covariância não reversível. Consulte Estimativa de matrizes de covariância para obter mais detalhes. DataFrame. cov também suporta uma palavra-chave minperiods opcional que especifica o número mínimo necessário de observações para cada par de colunas para ter um resultado válido. Os pesos utilizados na janela são especificados pela palavra-chave wintype. A lista de tipos reconhecidos são: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (precisa de beta) gaussian (needs std) generalgaussian (precisa de energia, largura) slepian (precisa de largura). Observe que a caixa de caixa é equivalente à média (). Para algumas funções de janela, parâmetros adicionais devem ser especificados: Para. sum () com um wintype. Não há normalização feita para os pesos da janela. Passar pesos personalizados de 1, 1, 1 produzirá um resultado diferente do que os pesos de 2, 2, 2. por exemplo. Ao passar um tipo de vitoria em vez de especificar explicitamente os pesos, os pesos já estão normalizados para que o maior peso seja 1. Em contraste, a natureza do cálculo. mean () é tal que os pesos são normalizados uns com os outros. Os pesos de 1, 1, 1 e 2, 2, 2 produzem o mesmo resultado. Rolling de tempo novo Novo na versão 0.19.0. Novos na versão 0.19.0 são a capacidade de passar um deslocamento (ou conversível) para um método. rolling () e fazer com que eles produza janelas de tamanho variável com base na janela de tempo passada. Para cada ponto de tempo, isso inclui todos os valores anteriores que ocorrem dentro do tempo delta indicado. Isso pode ser particularmente útil para um índice de freqüência de tempo não regular. Este é um índice de frequência regular. O uso de um parâmetro de janela inteira funciona para rolar ao longo da freqüência da janela. Especificar um deslocamento permite uma especificação mais intuitiva da freqüência de rolamento. Usando um índice não regular, mas monotônico, rolar com uma janela inteira não fornece nenhum cálculo especial. Usando a especificação de tempo gera janelas variáveis ​​para esses dados esparsos. Além disso, agora permitimos um parâmetro opcional para especificar uma coluna (em vez do padrão do índice) em um DataFrame. Time-aware Rolling vs. Resampling Usando. rolling () com um índice baseado em tempo é bastante semelhante ao reesserramento. Ambos operam e realizam operações redutoras em objetos de pandas indexados no tempo. Ao usar. rolling () com um deslocamento. O deslocamento é um delta de tempo. Faça uma janela de visualização no sentido inverso, e agregue todos os valores nessa janela (incluindo o ponto final, mas não o ponto de partida). Este é o novo valor nesse ponto no resultado. Estas são janelas de tamanho variável no espaço de tempo para cada ponto da entrada. Você receberá o mesmo resultado de tamanho que a entrada. Ao usar. resample () com um deslocamento. Construa um novo índice que seja a frequência do deslocamento. Para cada compartimento de frequência, agregue pontos a partir da entrada dentro de uma janela de visualização para trás que se encontra naquela lixeira. O resultado dessa agregação é o resultado desse ponto de freqüência. As janelas são tamanho de tamanho fixo no espaço de frequência. Seu resultado terá a forma de uma freqüência regular entre o mínimo e o máximo do objeto de entrada original. Para resumir. Rolling () é uma operação de janela baseada em tempo, enquanto que. resample () é uma operação de janela baseada em freqüência. Centrando o Windows Por padrão, as etiquetas são definidas para a borda direita da janela, mas uma palavra-chave central está disponível para que as etiquetas possam ser definidas no centro. Funções de janela binária cov () e corr () podem calcular estatísticas de janela em movimento sobre duas séries ou qualquer combinação de DataFrameSeries ou DataFrameDataFrame. Aqui está o comportamento em cada caso: duas séries. Calcular a estatística para o emparelhamento. DataFrameSeries. Computa as estatísticas de cada coluna do DataFrame com a série passada, devolvendo um DataFrame. DataFrameDataFrame. Por padrão, computa a estatística para combinar nomes de colunas, retornando um DataFrame. Se o argumento da palavra-chave pairwiseTrue for passado, calcula a estatística para cada par de colunas, retornando um Painel cujos itens são as datas em questão (veja a próxima seção). Computação de rolamento de covariâncias e correlações em pares Na análise de dados financeiros e outros campos, it8217s comuns às margens de covariância e correlação de cálculo para uma coleção de séries temporais. Muitas vezes, um também está interessado em covariância de janela móvel e matrizes de correlação. Isso pode ser feito passando o argumento da palavra-chave pairwise, que no caso das entradas do DataFrame produzirá um Painel cujos itens são as datas em questão. No caso de um único argumento do DataFrame, o argumento pairwise pode ser omitido: os valores faltantes são ignorados e cada entrada é calculada usando as observações completas pairwise. Veja a seção de covariância para as advertências associadas a este método de cálculo das matrizes de covariância e correlação. Além de não ter um parâmetro de janela, essas funções têm as mesmas interfaces que suas contrapartes. Como acima, os parâmetros que todos eles aceitam são: minperiods. Limite de pontos de dados não nulos para exigir. Padrão mínimo necessário para calcular estatística. Nenhum NaNs será emitido uma vez que os pontos de dados não-nulos de minperiods tenham sido vistos. centro. Booleano, seja para definir os rótulos no centro (o padrão é Falso) A saída dos métodos. rolling e. expanding não retorna um NaN se houver pelo menos valores mínimos não mínimos na janela atual. Isso difere do cumsum. Cumprod. Cummax. E cummin. Que retornam NaN na saída onde quer que um NaN seja encontrado na entrada. Uma estatística da janela em expansão será mais estável (e menos responsivo) do que a contrapartida da janela rolante, pois o aumento do tamanho da janela diminui o impacto relativo de um ponto de dados individual. Como exemplo, aqui está a saída média () para o conjunto de dados da série temporal anterior: Windows ponderado exponencial Um conjunto de funções relacionadas são versões ponderadas exponencialmente de várias das estatísticas acima. Uma interface semelhante a. rolling e. expanding é acessada através do método. ewm para receber um objeto EWM. São fornecidos vários métodos EW expandidos (ponderados exponencialmente):

No comments:

Post a Comment