Wednesday 27 September 2017

Python Baixar Opções De Estoque


Python Algorithmic Trading Library PyAlgoTrade é uma Python Algorithmic Trading Library com foco em backtesting e suporte para papel-trading e live-trading. Digamos que você tenha uma idéia de uma estratégia comercial e que gostaria de avaliá-la com dados históricos e ver como ela se comporta. PyAlgoTrade permite que você faça isso com um esforço mínimo. Principais características Totalmente documentado. Evento conduzido. Suporta pedidos de Mercado, Limite, Parada e StopLimit. Suporta os arquivos do Yahoo Finance, Google Finance e NinjaTrader CSV. Suporta qualquer tipo de dados de séries temporais no formato CSV, por exemplo, Quandl. Suporte comercial Bitcoin através do Bitstamp. Indicadores técnicos e filtros como SMA, WMA, EMA, RSI, Bandas Bollinger, Expositores Hurst e outros. Métricas de desempenho como a taxa de Sharpe e análise de redução. Manipulação de eventos no Twitter em tempo real. Perfil de eventos. Integração TA-Lib. Muito fácil de dimensionar horizontalmente, ou seja, usando um ou mais computadores para testar uma estratégia. PyAlgoTrade é gratuito, de código aberto e está licenciado sob a Licença Apache, Versão 2.0. Quando você vai trabalhar com tais séries de tempo em Python, os pandas são indispensáveis. E heres a boa notícia: ele vem com um downloader histórico de dados para o Yahoo: pandas. io. data. DataReader. Atualização para pandas 0.19: o módulo pandas. io. data foi removido do pandasgt0.19 em diante. Em vez disso, você deve usar o pacote separado de pandas-datareader. Instale com: E então você pode fazer isso em Python: respondeu 20 de setembro 12 às 10:05 você pode fechar o paren na linha goog. Eu não tive repetições suficientes para fazê-lo. Felicidades. Ndash Milktrader 2 de janeiro 13 às 22:30 Quando eu tento, as importações funcionam bem, mas quando eu chamo a linha 39goog39, recebo um erro: quotIOError: após 3 tentativas, o Yahoo não retornou um 200 para url 39ichart. finance. yahoohellip Como Isso poderia ser corrigido ndash Cleb 25 de agosto 15 às 15: 01 Estou interessado em fazer análises econométricas sobre derivativos financeiros. O obstáculo principal que enfrentei é que não há bons recursos gratuitos (pelo menos que eu conheça) para dados de opções históricas. Por essa razão, eu quero criar meu próprio banco de dados pessoal de preço de opções históricas. Eu quebrei este projeto em três obstáculos principais: descubra como obter dados de opções dentro do python Escolha um formato de armazenamento de dados Automatize a coleta de dados diários Obtendo dados de opções em python Durante o verão eu tive algum tempo livre e juntei-me com o meu Pai para criar um modelo de investimento. Embora seja um modelo muito simples, este post é sobre a construção de um banco de dados, então não vou entrar em detalhes aqui. Basta dizer que eu precisava encontrar uma maneira de obter dados de opções do yahoo Finance. Este foi um desafio único porque, ao contrário dos dados de capital ou dados de outras fontes, como FRED, as opções de dados não possuem um download conveniente para o botão csv em qualquer lugar do site. Na época, eu estava lendo o excelente livro Python para Análise de Dados por Wes McKinney e obteve uma idéia de como implementar um rastreador web básico para analisar o html no yahoo e retornar os dados em um formato amigo de Python. Longa história curta, escrevi algum código para fazer exatamente isso e entrou na versão 0.9 da biblioteca de pandas (se você não está familiarizado com os pandas e você trabalha com dados em python, você definitivamente deve verificar isso). Agora, apenas esses poucos comandos são necessários para obter dados de opções do yahoo. Finanças: as chamadas e coloca objetos são pandas DataFrames que contêm a mesma informação que você encontraria na página de Yahoo do Yahoo para as opções da Apple Inc.. Escolhendo o formato do arquivo Ao escolher um formato de arquivo, tive duas considerações principais: tamanho do arquivo e velocidade em que ele pode ser lido por escrito. Para testar isso, escrevi um script simples que gerou uma matriz aleatória 4000 por 4000 numpy e funções definidas para escrever e ler esses dados em diferentes formatos de arquivo. Os formatos com os quais escolhi trabalhar foram csv, hdf5 (.h5) e MatLab (.mat). Abaixo está o script que eu usei para executar o teste: Depois de ter esse código, eu simplesmente disparei o iPython e corri o arquivo (filetest. py) e usei a magia do tempo para ver quanto tempo levou cada um dos três métodos para ler e escrever os dados. Os resultados do tempo, juntamente com o tamanho final dos arquivos, estão resumidos na tabela abaixo: é fácil ver que o tipo de arquivo hdf5 é o melhor para escolher para meus propósitos. Gostaria de notar aqui que a razão pela qual o formato do arquivo hdf5 é 12 do tamanho do arquivo. mat, é porque o dtype no arquivo. h5 é um flutuador de 32 bits, enquanto o. mat dtype é um flutuador de 64 bits. No entanto, para as opções de estoque, geralmente geralmente não temos detalhes sobre duas casas decimais, então a precisão de 32 bits é suficiente. Automatizando a recuperação de dados O último passo para começar este banco de dados foi o de automatizar o processo de recuperação de dados. Para fazer isso, usei a popular ferramenta de agendamento UNIX cron. Executo OSX 10.8 Mountain Lion e, por padrão, em 10.8, a ferramenta Cron está desabilitada. Para corrigir isso, eu simplesmente corri o seguinte comando no terminal: Este comando cria o arquivo etccrontab (se já não existe) e o prepara para uso pelo cron. Eu não vou dar uma explicação detalhada sobre como usar o cron aqui (como eu ainda sou bastante novo nisso mesmo), mas google para isso lhe dará muitos exemplos e tutoriais. No entanto, vou dar a linha no meu arquivo crontab que executa o script: o próximo passo foi escrever o script que eu teria chamada cron. Isso aparece abaixo. Tenho o cron executado este script em um horário especificado a cada dia de semana e preencher o arquivo hdf5. O arquivo resultante terá uma estrutura aninhada como esta: A notação CTICKmm-yy representa uma opção de chamada (C), um ticker dado (TICK) e a expiração da opção (mm-yy). Dentro de cada um dos conjuntos de dados, existem três colunas: preço de exercício, último preço no contrato de opção e volume no último dia de negociação. Depois de executar este script por uma noite, o arquivo de dados hdf5 resultante foi de 7,648648 MB. Se eu permitisse que esse arquivo fosse executado cada dia útil por um ano, o tamanho final do arquivo seria menor que 2 GB. Não é ruim Se você quiser obter mais informações sobre como coleciono nomes de ticker ou o que a funcionalidade de Opções está nos pandas 0.10 ou anteriores, deixe um comentário e eu faço o meu melhor para responder. Incrível eu tenho querido fazer algo assim, já que eu também quero fazer algumas das minhas estratégias. Você provavelmente deve mudar as opções de Opções 39 a 39 de pandas. io. data Import Options39, mas, além disso, seu script funciona de forma excelente. Você estará disposto a compartilhar os dados da opção que você já coletou até agora, eu poderia retribuir o favor, agindo como um backup para executar o script no caso de você perder a conectividade por alguns dias. Eu estava pensando em testar grosseiramente usando os preços gerados usando Black8211Scholes, mas os dados reais obviamente são melhores. Fico feliz que você goste do script. Na verdade, parei de executar o arquivo todas as noites, então não tenho muitos dados. Caso contrário, eu gostaria de compartilhar com você. Com relação às declarações de importação. Eu sou o autor da classe Options em pandas. No momento em que escreveu esta publicação no blog, algumas das funcionalidades que uso no script não foram incorporadas em uma versão lançada de pandas, então liguei para minha versão local (em um arquivo chamado opções) sobre a qual eu baseei a versão pandas FYI: Lá Na verdade, algumas mudanças de API acontecem com a classe Options dentro dos pandas agora. Se as mudanças acontecem da forma como um dos outros contribuintes sugeriu, grande parte do código neste script pode ser obsoleto. No mínimo, as pessoas ainda devem começar. Eu estou no processo de criação de um banco de dados de derivados grande. A análise de weblinks está tudo pronto. Onde eu estou um pouco perdido é como criar o banco de dados de todas as opções individuais de tal forma que permite cálculos como SKEW, etc, sem escolher manualmente as opções individuais de cada vez para fazer o cálculo. Como fazer referências genéricas. Estou um pouco perdido aqui e quer resolver isso primeiro antes de avançar com a criação de dados. Eu acredito que a ordem correta na tupla de retorno é colocada, chama aapl. getoptionsdata (). Ei Martin, você está certo. Quando eu inicialmente adicionei o código de coleta de opções para pandas, eu recebi primeiro as chamadas de retorno getoptionsdata. Não tenho certeza quando por que alguém mudou. Eu atualizei o código na postagem para usar as colocações corretas, as chamadas solicitadas agora. Apesar disso, seria muito útil poder baixar preços de opções. Para começar, eu estava usando o script que você forneceu acima (praticamente). Eu tenho pandas 0.13.1, mas parece completamente quebrado. Os erros ocorrem com a seguinte linha: rawcalls option. getforwarddata (months100, callTrue, putFalse, nearFalse, abovebelow6). Como eu quero obter todos os dados das opções, acho que eu tenho que usar o método getforwarddata. Os outros métodos parecem apenas suportar a obtenção de um mês em particular. O erro é bastante longo, mas as últimas duas linhas são: Arquivo quotusrlocallibpython2.7dist-packagespandasioparsers. pyquot, linha 1653, na linha de seguimento, levantar StopIteration StopIteration Alguém sabe como corrigir isso. Também estou executando o Ubuntu Linux. Eu acho que a versão 0.11 da Pandas estava funcionando um pouco, embora não obtivesse todos os preços das opções. Não tenho certeza de como usar pip para rebaixar neste momento, então eu provavelmente estou preso tentando obter a versão 0.13.1 em funcionamento. Hey Anonymous (desculpe, não conheça seu nome, ou se é Anonymous - isso é incrível) Desculpe-me por que essas funções não funcionem corretamente. Eu escrevi esse código há cerca de um ano e no momento em que isso funcionou sem problemas. Pandas está em desenvolvimento pesado e parece que, desde o momento em que escrevi esse código, a api passou por algumas mudanças quebradas. Infelizmente, não tenho tempo agora para passar e mudar o código desta publicação para que funcione com 0.13. Posso dizer que todas as funcionalidades descritas nesta publicação ainda existem com v0.13, mas algumas das assinaturas do método podem ter mudado. Eu acredito que o docstrings para cada método da classe Options deve ser detalhado o suficiente para lhe dar uma boa idéia sobre o que precisa mudar. Você pode encontrá-los aqui: githubpydatapandasblobmasterpandasiodata. pyL545-L905 Se você está se sentindo e acabou fazendo as mudanças necessárias, avise-me e atualizarei o código aqui para refletir-los. P. S. Se você tentar e está tendo dificuldade, poste aqui novamente e tentarei dar algumas orientações. Fui ocupado com outro projeto, mas basicamente eu fiz algumas mudanças para que as coisas funcionem. Por simplicidade, eu apenas fiz as alterações para data. py. Eu acho que os índices intra e índices foram calculados erradamente. Além disso, em alguns casos o quadro retorna Nenhum. Quadro de retorno Nenhum estava causando o acidente. Se alguém tiver o tempo em que o código deve ser atualizado para apenas consultar dados de opções que realmente existem no intervalo de meses passados. Não tenho certeza de como analisar essas informações do HTML. No momento, ele irá consultar o Yahoo por cada mês de dados, mesmo quando não há opções disponíveis para esse mês para o método getforwarddata. Aqui está o resultado do diff do Linux para as mudanças que fiz: diff pandasiodata. py pandas.01iodata. py 25d24 lt DEBUG True 538.541d536 lt if (len (data) 0): lt return None lt 590,595c585 lt try: lt self. Símbolo symbol. upper () lt, exceto: lt msg quotymbol deve ser um stringquot válido lt raise ValueError (msg) lt --- gt self. symbol symbol. upper () 860,866c850,861 lt lears in the I, m in enumerate (Em meses): lt anos (m-1) 12 lt m m - anos12 lt inyears. append (yearsCURYEAR) lt inmonthsimon --- gt inject CURYEAR (meses 1) gt gt Descobre quantos itens em inms passam 12 gt para trocar 0 gt para i no intervalo (meses): gt se inmonthsi gt 12: gt inmonthsi - 12 gt tochange 1 gt gt Mude os itens correspondentes na lista de injeções. Gt for i in range (1, to 1): gt inyears-i 1 875,878c870,873 lt para i no intervalo (meses): lt m2 inmonthsi lt y2 inyearsi lt if DEBUG: print quotGetting s: ssquot (self. symbol, M2, y2) --- gt por segunda vez (meses): gt m2 inmonthsmon gt y2 inyearsmon gt 892,895d886 lt if frame is None: lt if DEBUG: print 39. no data39 lt continue lt Oi, Obrigado pelo seu excelente trabalho . Parece que está atualmente quebrado - talvez uma mudança de layoutschema no yahoo (é o que é o tableloc 13 na chamada para getoptiondata ()) I39ll depurá-lo quando eu tiver tempo, aqui os detalhes até agora: Conectado ao depurador pydev (compilação 135.1057) Traceback (A última chamada mais recente): File quotusrsharepycharmhelperspydevpydevd. pyquot, linha 1733, no debugger. run (setup39file39, None, None) File quotusrsharepycharmhelperspydevpydevd. pyquot, linha 1226, em execução pydevimports. execfile (arquivo, globals, locais) execute o script File Quothomechrisdevelopsrctradingoptions. pyquot, linha 5, em puts, chama aapl. getoptionsdata (expiridate (2015, 1, 16)) Arquivo quotusrlibpython2.7dist-packagespandasiodata. pyquot, linha 630, em getoptionsdata self. getcalldata) Arquivo quotusrlibpython2.7dist-packagespandasiodata. pyquot , Linha 748, em getputdata retorna self. getoptiondata (mês, ano, expiração, 13, 39puts39) Arquivo quotusrlibpython2.7dist-packagespandasiodata. pyquot, linha 673, em getoptiondata quot foundquot. format (tableloc, nt Ablell)) IndexError: localização da tabela 13 inválida, 3 tabelas encontradas de pandas. io. data import Opções da data de importação do data e data Opções (39AAPL39, quotyahooquot) coloca, chamadas aapl. getoptionsdata (expiridate (2015, 1, 16)) In3: Importar pandas In4: pandas. version Out4: 390.13.139 Oi, obrigado pelo comentário. Este código agora está quebrado devido a mudanças na API do Yahoo Finance. Eu acho que os desenvolvedores de pandas têm o código original que eu dei. Veja a discussão relevante aqui: githubpydatapandaspull8631 Oi Spencer se desculpa pela questão anônima, mas, quando você executou este programa para cada ticker em sua lista de símbolos NASDAQ e NYSE, quanto tempo durou o tempo de execução de uma iteração inteira Anonymous - sem problema. Esta rotina leva muito tempo para ser executada. Provavelmente na ordem de 6-8 horas. Poderia ser acelerado um pouco, fazendo várias solicitações de cada vez usando os módulos de Threading e Fila na biblioteca padrão. Eu tenho um exemplo de fazer isso com dados de equidade regulares aqui: gist. githubspencerlyon28a90d9fdffd15e3ecddb Spencer - Eu sou muito novo para python e programação em geral, mas acho poderoso e fascinante com a pequena pesquisa que fiz. Até agora eu coloquei um programa muito simples para fazer algo semelhante. Isto é o que eu tenho até agora: importa data e hora como importar pandas como pd importar numpy como np de pandas. io. data importar Opções de pandas importar DataFrame importar h5py como h5 num 0 newdatapd. DataFrame () enquanto num lt tickers. size: Tente: itickers39Symbol39num options Opções (i, quotyahooquot) dados options. getoptionsdata () newdatanewdata. append (data) except: pass print num numnum1 Na minha lista de ticker tenho 6280 símbolos ou assim, e descobri que o getoptionsdata executa muito mais rápido do que o Método getalldata. Agora, isso funciona em cerca de 3 horas. Meu objetivo é cortar isso até o 16. Ainda está nos estágios muito básicos, mas funciona e reúne os dados para os tickers que o contêm. Se você tiver alguma sugestão ou sugestão para melhorar o desempenho, I39m todos os ouvidos. Eu sei que uma estrutura de loop pode não ser a mais eficiente, mas tudo para mim é tentativa e erro. Se isso é trivial e / ou uma pergunta tola, peço desculpas, Novamente, eu sou novo e aprendendo. Eu imagino que o gargalo (parte mais lenta) deste programa está recuperando os dados da web. Usar as ferramentas de Fila e Threading na biblioteca padrão, como fiz no exemplo em que publiquei um link, provavelmente é a melhor maneira de acelerar essa parte. Outra opção relativamente simples para realizar a recuperação de dados paralelos é escrever uma função que obtenha os dados para uma única lista. Então você pode usar algo como o IPython paralelo para mapear a função sobre a lista de tickers em paralelo. Um exemplo de usar o mapa em paralelo pode ser encontrado aqui: ipython. orgipython-doc2parallelparalleldemos. html Por sinal, o loop único aqui certamente não é o que leva esse código muito tempo para ser executado - então não se preocupe com isso. Desculpe, mas não visitei esse código em mais de 2 anos. Pandas move-se bastante rapidamente, então não é surpreendente que o código nesta publicação não funcione. Atualmente, não tenho tempo para depurar o script, mas eu sugiro olhar para a documentação do pandas para os atuais recursos de raspagem de preço da opção. Você pode encontrá-lo aqui pandas. pydata. orgpandas-docsstableremotedata. htmlyahoo-finance-options. Para listas de ticker. Eu estava obtendo-os a partir dessas duas URLs: eu não sei muito sobre programação, mas eu tenho muitos arquivos de símbolos anuais de intradata. co, mas eu preciso ter, por exemplo, o ano 2012-2015 em um e mesmo arquivo. Porque eu quero classificá-lo no meu software como um gráfico estendido, isso é possível fazer com esse script

No comments:

Post a Comment