Friday 29 September 2017

Python Forex Data


Negociando com o Python Ive leio recentemente uma ótima publicação pelo blog turinginance sobre como ser um quant. Em suma, descreve uma abordagem científica para o desenvolvimento de estratégias comerciais. Para mim pessoalmente, observar dados, pensar com modelos e formar hipóteses é uma segunda natureza, como deve ser para qualquer bom engenheiro. Nesta publicação, vou ilustrar esta abordagem, passando explicitamente por uma série de etapas (apenas um casal, nem todas) envolvidas no desenvolvimento de uma estratégia de negociação. Examinemos o instrumento de negociação mais comum, o SampP 500 ETF SPY. Comece com observações. Observações Ocorreu-me que, na maioria das vezes, há muita conversa na mídia sobre o mercado quebrando (depois de grandes perdas ao longo de vários tempos), uma recuperação bastante significativa às vezes segue. No passado, fiz alguns erros ao fechar minhas posições para reduzir as perdas, apenas para perder uma recuperação nos dias seguintes. Teoria geral Depois de 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. Hipótese: os retornos do dia seguinte do SPY mostrarão um viés ascendente após uma série de perdas consecutivas. Para testar a hipótese, Ive calculou o número de dias consecutivos baixos. Tudo abaixo de -0,1 retorno diário se qualifica como um dia abaixo. As séries de retorno são quase aleatórias, de modo que, como seria de esperar, as chances de 5 ou mais dias consecutivos baixos são baixas, resultando em um número muito limitado de ocorrências. O baixo número de ocorrências resultará em estimativas estatísticas não confiáveis, portanto, eu vou parar em 5. Abaixo está uma visualização dos retornos nex-tday em função do número de dias abaixo. Também planejei 90 intervalos de confiança dos retornos entre as linhas. Acontece que o retorno médio está positivamente correlacionado com o número de dias baixos. Hipótese confirmada. No entanto, você pode ver claramente que esse alfa extra é muito pequeno em comparação com a banda dos prováveis ​​resultados de retorno. Mas mesmo uma pequena vantagem pode ser explorada (encontre uma vantagem estatística e repita sempre que possível). O próximo passo é investigar se essa vantagem pode ser transformada em uma estratégia de negociação. Dado os dados acima, uma estratégia de negociação pode ser associada: depois de três perdas ou mais, percorrer o tempo. Sair no próximo fechamento. Abaixo está um resultado dessa estratégia em comparação com a pura compra e retenção. Isso não parece ruim ao todo. Observando os índices de sharpe, a estratégia classifica uma descida 2,2 contra 0,44 para o BampH. Isso é realmente muito bom (não fique excitado demais, pois não contai com custos de comisã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 de dias baixos, sem prestar atenção à profundidade da redução. Além disso, a saída da posição é apenas um fechamento básico no próximo dia. Há muito a ser melhorado, mas a essência na minha opinião é a seguinte: os retornos futuros da SPY são determinados pela redução e redução do tempo nos últimos 3 a 5 dias. Um comerciante experiente sabe o comportamento a esperar do mercado com base em um conjunto de indicadores e sua interpretação. O último é feito com base em sua memória ou algum tipo de modelo. Encontrar um bom conjunto de indicadores e processar suas informações representa um grande desafio. Primeiro, é preciso entender quais fatores estão correlacionados com os preços futuros. Os dados que não possuem qualidade preditiva apenas provocam o ruído e a complexidade, diminuindo o desempenho da estratégia. Encontrar bons indicadores é uma ciência por conta própria, muitas vezes requerendo compreensão profunda da dinâmica do mercado. Esta parte do projeto de estratégia não pode ser facilmente automatizada. Felizmente, uma vez que um bom conjunto de indicadores foi encontrado, a memória e a intuição dos comerciantes podem ser facilmente substituídas por um modelo estatístico, que provavelmente funcionará muito melhor, já que os computadores possuem memória perfeita e podem fazer estimativas estatísticas perfeitas. Quanto ao comércio de volatilidade, demorou bastante tempo para entender o que influencia seus movimentos. Em particular, estou interessado em variáveis ​​que predizem retornos futuros de VXX e XIV. Eu não vou entrar em uma explicação completa aqui, mas apenas apresentar uma conclusão. Os meus dois indicadores mais valiosos para a volatilidade são o limite da estrutura e a volatilidade atual. A minha definição destes dois é: volatilidade premium VIX-realizadoVol delta (inclinação da estrutura de prazo) VIX-VXV VIX amplificador VXV são as volatilidades implícitas de 1 e 3 meses do SampP 500. realizadoVol aqui é uma volatilidade de 10 dias realizada da SPY, Calculado com a fórmula Yang-Zhang. O delta tem sido frequentemente discutido no blog VixAndMore, enquanto o prémio é conhecido pela negociação de opções. Faz sentido fazer uma baixa volatilidade quando o prémio é alto e os futuros estão em contango (delta lt 0). Isso causará um vento de cauda do rolo premium e diário ao longo da estrutura do termo em VXX. Mas esta é apenas uma estimativa aproximada. Uma boa estratégia de negociação combinaria informações de premium e delta para vir com uma previsão na direção de negociação no VXX. Eu tenho lutado há muito tempo para encontrar uma boa maneira de combinar os dados ruidosos de ambos os indicadores. Eu tentei a maioria das abordagens padrão, como regressão linear, escrevendo um monte de if-thens. Mas todos com melhorias muito menores em comparação com o uso de apenas um indicador. Um bom exemplo de tal estratégia de indicador único com regras simples pode ser encontrada no blog TradingTheOdds. Não parece ruim, mas o que pode ser feito com vários indicadores. Comece com alguns dados VXX fora da amostra que recebi da MarketSci. Observe que isso é dados simulados, antes do VXX ser criado. Os indicadores para o mesmo período são traçados abaixo: se tomarmos um dos indicadores (premium neste caso) e traçamo-lo contra retornos futuros do VXX, pode-se ver alguma correlação, mas os dados são extremamente barulhentos: ainda assim, é claro Esse prémio negativo provavelmente terá retornos VXX positivos no dia seguinte. 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), Id 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 vizinhos mais próximos, mas toda vez que eu tinha que desistir. Até que eu me deparei com a regressão dos vizinhos mais próximos da scikit. 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 que eu tenha cometido um erro em algum lugar. Aqui é o que eu fiz: crie um conjunto de dados de delta, premium - gt VXX retorno do dia seguinte (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á longe se for previsto o retorno gt 0 seja curto se previsto devolver lt0 A estratégia não poderia ser mais simples. Os resultados parecem extremamente bons e melhoram quando mais neigbors são usados ​​para estimativa. Primeiro, com 10 pontos, a estratégia é excelente na amostra, mas é plana fora da amostra (a linha vermelha na figura abaixo é o último ponto na amostra). Em seguida, o desempenho melhora com 40 e 80 pontos: no último Duas 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 só estava riscando a superfície do que é possível com esta técnica. Minha busca de uma ferramenta de backtesting ideal (minha definição de ideal é descrita nas postagens anteriores de dilemas 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 era o que mais gostava por causa de sua simplicidade e velocidade. Depois de passar pelo código-fonte, eu 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. Eu escolhi uma abordagem onde o backtester contém funcionalidades que todas as estratégias de negociação compartilham e que muitas vezes são copiadas. Coisas como calcular posições e pnl, métricas de desempenho e fazer parcelas. A funcionalidade específica da estratégia, como determinar os pontos de entrada e saída, deve ser feita fora do backtester. Um fluxo de trabalho típico seria: encontrar entrada e sair - gt calcular pnl e fazer parcelas com backtester - gt dados de estratégia pós-processo Neste momento, o módulo é muito mínimo (veja a fonte aqui), mas no futuro planejo Na adição de saídas de lucro e stop-loss e de carteiras multi-ativos. O uso do módulo backtesting é mostrado neste caderno de exemplo Eu organizo meus cadernos IPython salvando-os em diretórios diferentes. Isso traz, no entanto, um inconveniente, porque para acessar os cadernos, preciso abrir um terminal e digitar ipython notebook --ylabinline a cada vez. Estou certo de que a equipe do ipython irá resolver isso no longo prazo, mas, entretanto, há uma maneira de descida bonita de acessar rapidamente os cadernos do explorador de arquivos. Tudo o que você precisa fazer é adicionar um menu de contexto que inicie o servidor ipython no diretório desejado: uma maneira rápida de adicionar o item de contexto é executando este patch de registro. (Nota: o patch pressupõe que você tenha sua instalação do python localizada em C: Anaconda. Caso contrário, you8217ll precisa abrir o arquivo. reg em um editor de texto e definir o caminho certo na última linha). Instruções sobre como adicionar as chaves de registro manualmente podem ser encontradas no blog Frolians. Muitas pessoas pensam que os etfs alavancados a longo prazo são inferiores aos seus benchmarks. Isso é verdade para mercados discretos, mas não no caso de condições de tendência, tanto para cima como para baixo. A alavancagem só tem efeito sobre o resultado mais provável, e não sobre o resultado esperado. Para mais informações, leia esta publicação. 2013 tem sido um ano muito bom para ações, que apresentaram tendência para a maior parte do ano. Vejamos o que aconteceria se usássemos em curto prazo alguns dos endividamentos exatamente há um ano atrás e os protegemos com seu benchmark. Conhecendo o comportamento alavancado e esperado, eu esperaria que esses valores alavancados superassem seu benchmark, então a estratégia que tentaria lucrar com a deterioração perderia dinheiro. Eu estarei considerando esses pares: SPY 2 SSO -1 SPY -2 SDS -1 QQQ 2 QLD -1 QQQ -2 QID -1 IYF -2 SKF -1 Cada epopeamento alavancado é mantido curto (-1) e coberto com uma 1x Etf. Observe que, para proteger um inverso, uma posição negativa é realizada no 1x etf. Aqui está um exemplo: SPY vs SSO. Uma vez que normalizamos os preços para 100 no início do período de backtest (250 dias), é evidente que o 2x etf supera 1x etf. Agora, os resultados do backtest nos pares acima: Todos os 2x etfs (incluindo o inverso) superaram seu benchmark ao longo de 2013. De acordo com as expectativas, a estratégia que explora a deterioração beta não seria lucrativa. Eu pensaria que jogar contra o contraparte desalavancado não oferece qualquer vantagem, a menos que você conheça as condições de mercado de antemão (tendência ou limite de alcance). Mas se você conhece o regime de mercado que vem, existem maneiras muito mais fáceis de lucrar com isso. Infelizmente, ninguém tem sido muito bem sucedido na previsão do regime de mercado mesmo no curto prazo. O código fonte completo dos cálculos está disponível para os assinantes do curso Trading With Python. Notebook 307 Aqui está o meu tiro na avaliação do Twitter. Gostaria de começar com um aviso: neste momento, uma grande parte do meu portrolio consiste em uma curta posição TWTR, então minha opinião é bastante distorcida. A razão pela qual eu fiz minha própria análise é que minha aposta não funcionou bem, e o Twitter fez um movimento parabólico em dezembro de 2013. Então, a pergunta que eu estou tentando responder aqui é que eu devo tirar minha perda ou manter meus shorts. No momento da redação, a TWTR comercializa cerca de 64 pontos, com um limite de mercado de 34,7 B. Até agora, a empresa não obteve lucro, perdendo 142 milhões em 3013, depois de ter gerado 534 milhões de receitas. Os últimos dois números nos dão gastos anuales da empresa de 676M. Preço derivado do valor do usuário O Twitter pode ser comparado com o Facebook, Google e LinkedIn para ter uma idéia dos números de usuários e seus valores. A tabela abaixo resume os números de usuários por empresa e um valor por usuário derivado do limite de mercado. (Fonte para o número de usuários: Wikipedia, o número do Google baseia-se no número de pesquisas exclusivas). Aparentemente, a avaliação do mercado por usuário é muito similar para todas as empresas, no entanto, minha opinião pessoal é a seguinte: TWTR é atualmente mais valioso Por usuário que não FB ou LNKD. Isso não é lógico porque ambos os concorrentes possuem 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 pesquisa ao Google. Docs e Gmail. TWTR não tem nada parecido com isso, enquanto seu valor por usuário é apenas 35 inferior ao do Google. O 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 a chance. O resto simplesmente não se importa. A base de usuários TWTR é volátil e é provável que se mova para a próxima coisa quente quando ela se tornará disponível. Eu acho que a melhor referência aqui seria o LNKD, que tem um nicho estável no mercado profissional. Por esta métrica TWTR seria sobrevalorizado. Definir o valor do usuário em 100 para TWTR produziria um preço TWTR justo de 46. Preço derivado de ganhos futuros Existe dados suficientes disponíveis sobre as estimativas de ganhos futuros. Um dos mais úteis que eu encontrei está aqui. Usando esses números enquanto resta as despesas da empresa, o que eu suponho que permaneça constante. Produz esses números: Conclusão Com base nas informações disponíveis, a avaliação otimista do TWTR deve estar no intervalo 46-48. Não há razões claras para negociar mais alto e muitos riscos operacionais para negociar mais baixos. Meu palpite é que, durante o IPO, profissionais suficientes revisaram o preço, ajustando-o a um nível de preço justo. O que aconteceu a seguir foi um movimento de mercado irracional, não justificado por novas informações. Basta dar uma olhada no frenesi bullish sobre os estoques de estoque. Com pessoas que reivindicam coisas como esse pássaro voará para 100. A emoção pura, que nunca funciona bem. O único que me resta agora é colocar o meu dinheiro onde está minha boca e manter meus shorts. O tempo vai dizer. A curto prazo, a volatilidade etn VXX pode parecer uma ótima idéia quando você olha o gráfico de uma certa distância. Devido ao contango nos futuros de volatilidade, o etn experimenta bastante vento na cabeça a maior parte do tempo e perde um pouco seu valor todos os dias. Isso acontece devido ao reequilíbrio diário, para obter mais informações, consulte a perspectiva. 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ê deve passar por algumas retiradas bastante pesadas. Basta olhar para trás no verão de 2011. 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 redução em apenas alguns dias, resultando em uma ameaça de chamada de margem pelo meu corretor. Margin Call significaria cobrar a perda. Esta não é uma situação que a Id 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. Por sorte, eu sabia como VXX tende a se comportar, 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 aprendi uma lição muito valiosa. Para começar com uma palavra de advertência aqui: não troque a volatilidade, a menos que você saiba exatamente quanto você está tomando. Dito isto, vamos dar uma olhada em uma estratégia que minimiza alguns dos riscos ao curto-circuito do VXX somente quando apropriado. Tese de estratégia: o VXX experimenta o maior arrasto quando a curva de futuros está em um contango íngreme. A curva de futuros é aproximada pela relação VIX-VXV. VXX será curto quando o VXV tiver um prémio excepcionalmente elevado ao longo do VIX. Primeiro, dê uma olhada no relacionamento VIX-VXV: o gráfico acima mostra dados VIX-VXV desde janeiro de 2010. 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). Agora, dê uma olhada no preço do VXX juntamente com o delta: acima: preço do VXX na escala de registro. Abaixo: delta. Marcadores verdes indicat delta gt 0. markers vermelhos deltalt0. É evidente que áreas verdes correspondem a retornos negativos no VXX. Vamos simular uma estratégia com estes pressupostos: Curto VXX quando delta gt 0 Capital constante (aposta em cada dia é de 100) Não há custos de deslizamento ou de transação Esta estratégia é comparada com a que troca curto todos os dias, mas não leva delta em conta . A linha verde representa nossa estratégia curta do VXX, a linha azul é a besta. Sharpe de 1.9 para uma estratégia simples de fim de dia não é ruim na minha opinião. Mas, ainda mais importante, é que as eliminações desgastantes são largamente evitadas ao prestar atenção à curva de futuros futuros. A construção desta estratégia passo a passo será discutida durante o próximo curso de negociação com Python. O preço de um ativo ou um ETF é, naturalmente, o melhor indicador que existe, mas, infelizmente, há apenas tanta informação contida nisso. Algumas pessoas parecem pensar que os indicadores mais (rsi, macd, crossover médio móvel, etc.). O melhor, mas se todos eles se basearem na mesma série de preços subjacentes, todos eles contêm um subconjunto da mesma informação limitada contida no preço. 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 requer uma grande quantidade de trabalho, para o qual eu simplesmente não tenho o tempo como eu só negocio a tempo parcial. Então, eu construí meu próprio painel do mercado que cobra informações automaticamente para mim e a apresenta de forma facilmente digerível. Nesta publicação, vou mostrar como construir um indicador com base em dados de curto volume. Esta publicação irá ilustrar o processo de coleta e processamento de dados. Passo 1: Localizar fonte de dados. A troca de BATS fornece dados de volume diários gratuitamente em seu site. Etapa 2: Obter dados manualmente com inspeção do amplificador Os dados do volume curto 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): no total, um arquivo contém cerca de 6000 símbolos. Esses dados precisam de algum trabalho antes que ele possa ser apresentado de forma significativa. Passo 3: Obter dados automaticamente O que eu realmente quero não é apenas os dados por 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 completa é apenas um par de linhas de código: Primeiro, precisamos criar dinamicamente uma url a partir da qual um arquivo será baixado: agora podemos baixar vários arquivos ao mesmo tempo: Etapa 4. Parse de arquivos baixados Podemos usar zip e pandas Bibliotecas para analisar um único arquivo: ele retorna uma proporção de Volume VolumeTotal Curto para todos os símbolos no arquivo zip: Etapa 5: Faça um gráfico: Agora, só é necessário analisar todos os arquivos baixados e combiná-los para uma única tabela e trama O resultado: na figura acima, tracei a proporção de volume curto médio nos últimos dois anos. Eu também poderia ter usado um subconjunto de símbolos se eu quisesse examinar um setor ou estoque específico. O olhar rápido sobre os dados me dá uma impressão de que os altos índices de volume curto geralmente correspondem com os fundos do mercado e os baixos índices parecem ser bons pontos de entrada para uma posição longa. A partir daqui, esse baixo índice de volume pode ser usado como base para o desenvolvimento da estratégia. Curso de negociação com Python Se você é um comerciante ou um investidor e gostaria de adquirir um conjunto de habilidades de negociação quantitativas, você pode considerar levar o Trading With Python couse. O curso on-line irá fornecer-lhe as melhores ferramentas e práticas para pesquisas quantitativas, incluindo funções e scripts escritos por comerciantes quantitativos especializados. Você aprenderá como obter e processar quantidades incríveis de dados, estratégias de projeto e backtest e analisar o desempenho comercial. Isso o ajudará a tomar decisões informadas que são cruciais para o sucesso de um comerciante. Clique aqui para continuar no site do curso Trading With Python Meu nome é Jev Kuznetsov, durante o dia eu sou pesquisador de engenharia em uma empresa envolvida na impressão de negócios. O resto do tempo eu sou comerciante. Eu estudei física aplicada com especialização em reconhecimento de padrões e inteligência artificial. O meu trabalho diário envolve qualquer coisa, desde a prototipagem rápida de algoritmos no Matlab e outros idiomas até a programação de amplificação de hardware. Desde 2009, uso minhas habilidades técnicas nos mercados financeiros. Antes de chegar à conclusão de que a Python é a melhor ferramenta disponível, eu estava trabalhando extensivamente em Matlab, que está coberta no meu outro blog. Sou novo na programação, Python e Pandas, então, espero que não seja uma pergunta tola. Eu baixei alguns dados FOREX daqui. Um mês de dados é de cerca de 50mil linhas em formato CSV para todos os pares. Eu gostaria de eventualmente ser capaz de testar uma estratégia em vários quadros de tempo e instrumentos. Aqui está o código Im usando: Em qualquer coisa, exceto um arquivo de teste truncado, esta leitura em processo leva muito tempo. Existe uma maneira que eu deveria estar armazenando os dados para que os Pandas possam ler os arquivos muito mais rápido Existe um limite para o tamanho dos dados que os Pandas podem lidar razoavelmente. Qualquer ajuda seria muito apreciada.

No comments:

Post a Comment