Quando você vai trabalhar com essas 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 quotsymbol deve ser um stringquot válido lt raise ValueError (msg) lt --- gt self. symbol symbol. upper () 860,866c850,861 lt londres para i, m in enumerate ( Em meses): lt anos (m-1) 12 lt m m - anos12 lt inyears. append (anosCURYEAR) lt inmonthsimon --- gt injetos CURYEAR (meses 1) gt gt Descobre quantos itens em inmests passam 12 gt para trocar 0 Gt para i no alcance (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 (2017, 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 (2017, 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 2017-2017 em um e mesmo arquivo. Porque eu quero classificá-lo no meu software, como um gráfico estendido, é possível fazer com este scriptOptions Pricing em Python Apologies por essa falta de atualizações, tenho ocupado trabalhando em uma biblioteca de preços de opções em Python. Até agora, consegui criar o meu primeiro preço de opção dependente do caminho dependente e está finalmente me fornecendo os resultados corretos. Não está pronto para a implementação, pois precisa de otimização para executar a uma velocidade aceitável no meu servidor. Embora C seja a linguagem predominante para preços de opções, eu decidi ver como eu poderia produzir uma biblioteca baseada em Python. Não só isso melhoraria minhas habilidades em Python, mas permitiria uma integração direta da biblioteca no site. A biblioteca, que sou tentativamente nomeando PyQuant, é muito simples no momento. Consiste em dois componentes principais, um conjunto de soluções fechadas para chamadas de baunilha e os Digitals e um preço básico de Monte Carlo, que classifica os Double-Digitals e Power Options. Com o tempo eu vou caçar ou derivar soluções fechadas para todas as opções que eu sou capaz, mas agora estou aproveitando o desenvolvimento do solucionador de Monte Carlo. As soluções de forma fechada dependem de duas funções estatísticas - a função de densidade de probabilidade normal e a função de distribuição normal cumulativa. Uma aproximação numérica ao CNDF pode ser encontrada em 1. De fato, muitas das soluções de forma fechada são dadas nesse texto, de onde eu obtive. Com o NPDF, um CNDF consegui calcular soluções para as Chamadas e Canetas de Baunilha, bem como os gregos comuns. Delta, Gamma, Rho, Vega e Theta. Ainda estou trabalhando em soluções fechadas para as opções digitais. As soluções baseadas em Monte Carlo funcionam de forma diferente. Existe um módulo que contém todos os objetos de pagamento para cada tipo de opção - Ligar, colocar, Encaminhar, Ligar digital etc. Outro módulo armazena objetos de opção. No caso da opção Vanilla, é necessário um prazo de validade e uma compensação. A greve é encapsulada no objeto de pagamento, o que garante a rentabilidade do código para ambos os pagamentos e opções. O módulo final inclui motores de Monte Carlo que calculam uma grande variedade de evoluções do caminho de estoque (com base em Geometric Brownian Motion) e usam estes para calcular uma compensação esperada da opção. O pagamento é descontado com a taxa livre de risco e isso fornece o preço. Nesta fase, é computacionalmente caro re-executar o premiado Monte Carlo ao mudar uma entrada. Existem algumas maneiras de otimizar isso. O primeiro é usar SciPy. Uma biblioteca científica Python. Inclui muitas estratégias de otimização - veja este artigo sobre o Performance Python. Seu desempenho comparado com C pode apenas surpreendê-lo. O segundo é realmente escrever uma biblioteca C dedicada que pode ser chamada a partir do Python. No entanto, isso é contrário à idéia de uma biblioteca de preços de derivados Python. 1 - Joshi, M. Os conceitos e a prática da finanças matemáticas. Cambridge University Press Clique abaixo para aprender mais sobre. A informação contida neste site é a opinião dos autores individuais com base em sua observação pessoal, pesquisa e anos de experiência. A editora e seus autores não são conselheiros de investimento registrados, advogados, CPAs ou outros profissionais de serviços financeiros e não prestam assessoria jurídica, fiscal, contábil, de investimento ou outros serviços profissionais. A informação oferecida por este site é apenas de educação geral. Como cada situação factual de indivíduos é diferente, o leitor deve procurar seu próprio conselheiro pessoal. Nem o autor nem o editor assumem qualquer responsabilidade ou responsabilidade por quaisquer erros ou omissões e não devem ter responsabilidade nem responsabilidade para qualquer pessoa ou entidade em relação a danos causados ou alegadamente causados direta ou indiretamente pelas informações contidas neste site. Use por sua conta e risco. Além disso, este site pode receber compensações financeiras das empresas mencionadas através de publicidade, programas afiliados ou de outra forma. Taxas e ofertas de anunciantes exibidos neste site mudam com freqüência, às vezes sem aviso prévio. Enquanto nos esforçamos para manter informações precisas e oportunas, os detalhes da oferta podem estar desactualizados. Os visitantes devem assim verificar os termos de tais ofertas antes de participar delas. O autor e a editora estão isentos de responsabilidade pela atualização de informações e negam a responsabilidade pelo conteúdo, produtos e serviços de terceiros, inclusive quando acessados através de hiperlinks ou propagandas neste site.
No comments:
Post a Comment