Acesso remoto a dados
Funções de pandas_datareader. data e pandas_datareader. wb extraem dados de várias fontes da Internet para um DataFrame de pandas. Atualmente, as seguintes fontes são suportadas:
Deve-se notar que várias fontes suportam diferentes tipos de dados, portanto, nem todas as fontes implementam os mesmos métodos e os elementos de dados retornados podem também diferir.
Yahoo! Finanças
Preços históricos das ações de Yahoo! Finança.
Ações corporativas históricas (Dividendos e Divisões de estoque) com ex-datas de Yahoo! Finança.
Dividendos históricos de Yahoo! Finança.
Yahoo! Citações Financeiras¶¶
A classe YahooQuotesReader permite obter dados de cotações de Yahoo! Finança.
Yahoo! Opções Financeiras
A classe Opções permite o download de dados de opções de Yahoo! Finança.
O método get_all_data transfere e armazena em cache dados de opções para todos os períodos de validade e fornece um DataFrame formatado com um índice hierárquico, por isso é fácil chegar à opção específica que deseja.
Se você não quer baixar todos os dados, pode-se fazer pedidos mais específicos.
Observe que, se você chamar get_all_data primeiro, esta segunda chamada acontecerá muito mais rápido, pois os dados são armazenados em cache.
Se um determinado prazo de validade não estiver disponível, os dados para a próxima caducidade disponível serão devolvidos (15 de janeiro de 2018 no exemplo acima).
As datas de expiração disponíveis podem ser acessadas na propriedade expiry_dates.
Um objeto semelhante a lista contendo datas também pode ser passado para o parâmetro de expiração, retornando dados de opções para todas as datas de expiração na lista.
Os parâmetros mês e ano podem ser usados para obter todos os dados das opções para um determinado mês.
Google Finance
Google Finance Quotes¶¶
A classe GoogleQuotesReader permite obter dados de orçamento do Google Finance.
Google Finance Options¶¶
A classe Opções permite o download de dados de opções do Google Finance.
O método get_options_data transfere dados de opções para a data de expiração especificada e fornece um DataFrame formatado com um índice hierárquico, por isso é fácil chegar à opção específica que deseja.
As datas de expiração disponíveis podem ser acessadas na propriedade expiry_dates.
Acesse conjuntos de dados da Enigma, o maior repositório mundial de dados públicos estruturados.
A partir de junho de 2017, cada DB possui um esquema de dados diferente, a cobertura em termos de intervalo de tempo às vezes é surpreendentemente pequena e a qualidade dos dados nem sempre é boa.
Fama / French
Acesse conjuntos de dados da biblioteca de dados Fama / French. A função get_available_datasets retorna uma lista de todos os conjuntos de dados disponíveis.
Banco Mundial
Os usuários de pandas podem acessar facilmente milhares de séries de dados de painel dos Indicadores de Desenvolvimento Mundial do World Bank & # 8217; usando as funções de Wb I / O.
Indicadores
Ou de explorar o site do Banco Mundial, ou usando a função de pesquisa incluída, todos os indicadores do banco mundial estão acessíveis.
Por exemplo, se você quisesse comparar o Produto Interno Bruto per capita em dólares constantes na América do Norte, você usaria a função de busca:
Então você usaria a função de download para adquirir os dados dos servidores do World Bank & # 8217; s:
O conjunto de dados resultante é um DataFrame devidamente formatado com um índice hierárquico, por isso é fácil aplicar transformações. groupby a ele:
Agora imagine que você deseja comparar o PIB com a participação de pessoas com contratos de celulares em todo o mundo.
Observe que esta segunda pesquisa foi muito mais rápida que a primeira porque os pandas agora possuem uma lista em cache das séries de dados disponíveis.
Finalmente, usamos o pacote statsmodels para avaliar a relação entre nossas duas variáveis usando a regressão dos mínimos quadrados ordinários. Não surpreendentemente, as populações em países ricos tendem a usar celulares a uma taxa maior:
Country Codes²¶
O argumento do país aceita uma string ou lista de códigos de país ISO de dois ou três caracteres mistos, bem como exceções dinâmicas do Banco Mundial aos padrões ISO.
Para obter uma lista dos códigos de país codificados (usado exclusivamente para lógica de gerenciamento de erros), veja pandas_datareader. wb. country_codes.
Códigos de país problemáticos e amp; Indicadores
A lista de países do Banco Mundial e os indicadores são dinâmicos. A partir de 0.15.1, wb. download () é mais flexível. Para conseguir isso, a lógica de advertência e exceção mudou.
O banco mundial converte alguns códigos de país, em sua resposta, o que dificulta a verificação de erros por pandas. Indicadores aposentados ainda persistem na pesquisa.
Dada a nova flexibilidade de 0.15.1, o tratamento de erros melhorado pelo usuário pode ser necessário para casos marginais.
Para ajudar a identificar problemas:
Existem pelo menos 4 tipos de códigos de país:
Padrão (ISO 2/3) - retorna dados, advertirá e erro corretamente. Não padrão (WB Exceptions) - retorna dados, mas avisará falsamente. Em branco - falta silenciosamente da resposta. Ruim - faz com que toda a resposta do WB falhe, sempre induzindo as exceções.
Existem pelo menos 3 tipos de indicadores:
Corrente - Retorna dados. Aposentado - Aparece nos resultados da pesquisa, mas ganhou os dados retornados. Mau - Não retornará dados.
Use o argumento de erros para controlar avisos e exceções. Configurando erros para ignorar ou avisar, não conseguiu parar as respostas erradas. (ou seja, indicadores de 100% negativos ou um código de país simples e # 8220; mau e # 8221; (# 4 acima)).
Veja docstrings para mais informações.
As estatísticas da OCDE estão disponíveis através do DataReader. Você precisa especificar o código de conjunto de dados da OCDE.
Para confirmar o código do conjunto de dados, acesse cada dado - & gt; Exportar - & gt; Consulta SDMX. O exemplo a seguir é baixar & # 8220; Trade Union Density & # 8221; Os dados que definem o código são & # 8220; UN_DEN & # 8221 ;.
O Eurostat está disponível via DataReader.
Obter acidentes ferroviários por tipo de dados de acidentes (dados ERA). O resultado será um DataFrame que tem DatetimeIndex como índice e MultiIndex de atributos ou países como coluna. O URL alvo é:
Você pode especificar o ID do banco de dados & # 8220; tran_sf_railac & # 8221; para obter dados correspondentes via DataReader.
Índice EDGAR¶¶
** Em 31 de dezembro, o acesso desabilitado SEC via FTP. Suporte EDGAR atualmente quebrado até reescrever para usar o HTTPS. **
Índice de depósito da empresa da EDGAR (SEC).
Os índices diários aumentam rapidamente (ou seja, o conjunto de índices diários de 1994 a 2018 é de 1,5 GB) eo servidor FTP fechará a conexão após algum limite de download. Nos testes, puxar um ano de cada vez funciona bem. Se o servidor FTP começar a recusar suas conexões, você poderá reconectar depois de esperar alguns minutos.
Dados do Fundo TSP
Baixe os preços do índice de fundos mútuos para o TSP.
Nasdaq Trader Symbol Definitions¶¶
Baixe os últimos símbolos da Nasdaq.
Observe que a Nasdaq atualiza esse arquivo diariamente e as versões históricas não estão disponíveis. Mais informações sobre as definições de campo.
&cópia de; Copyright 2018, The PyData Development Team. Revisão 331e3895.
Apple Inc. (AAPL) Cadeia de opções.
Exibições da Lista de Símbolos.
Detalhes da ação.
NOTÍCIAS DA COMPANHIA.
ANÁLISE DE ACÇÃO.
FUNDAMENTOS.
Editar lista de símbolos.
Insira até 25 símbolos separados por vírgulas ou espaços na caixa de texto abaixo. Estes símbolos estarão disponíveis durante a sessão para uso nas páginas aplicáveis.
Não conhece o símbolo do estoque? Use a ferramenta de Pesquisa de Símbolos.
Alfabetizar a ordem de classificação dos meus símbolos.
Pesquisa de Símbolos.
Investir ficou mais fácil e # 8230;
Inscreva-se agora para se tornar um membro NASDAQ e começar a receber notificações instantâneas quando ocorrem eventos-chave que afetam os estoques que você segue.
As opções de chamada e colocação são citadas em uma tabela chamada de folha de corrente. A folha de corrente mostra o preço, o volume e o interesse aberto para cada preço de exercício da opção e mês de vencimento.
Editar favoritos.
Insira até 25 símbolos separados por vírgulas ou espaços na caixa de texto abaixo. Estes símbolos estarão disponíveis durante a sessão para uso nas páginas aplicáveis.
Personalize sua experiência NASDAQ.
Selecione a cor de fundo da sua escolha:
Selecione uma página de destino padrão para sua pesquisa de cotação:
Confirme a sua seleção:
Você selecionou para alterar sua configuração padrão para a Pesquisa de orçamento. Esta será a sua página de destino padrão; a menos que você altere sua configuração novamente ou exclua seus cookies. Tem certeza de que deseja alterar suas configurações?
Desative seu bloqueador de anúncios (ou atualize suas configurações para garantir que o javascript e os cookies estejam habilitados), para que possamos continuar fornecendo as novidades do mercado de primeira linha e os dados que você esperou de nós.
Pergunta: Q. Vá para o Yahoo Financial. Qual é o último preço de uma opção no estoque da Apple com vencimento do Ju.
P. Vá para o Yahoo Finance. Qual é o último preço de uma opção no estoque da Apple com vencimento de 15 de junho de 2018 e preço de exercício de US $ 175?
Eu fui para o Yahoo e o último preço para esta opção foi 91.25, mas não tenho certeza se é certo. Estou ficando confuso e todos misturados.
uma. Agora, suponha que você compre essa opção. Qual é o preço que você paga? Se o preço das ações em 15 de junho de 2018 for de US $ 180, você exercerá sua ligação? Qual é o lucro na sua posição?
b. Se você tiver uma chamada de junho com preço de exercício de US $ 155 e o preço das ações em 15 de junho de 2018 é de US $ 180, você exercitará sua ligação? Qual é a sua recompensa em sua posição?
c. Se você tiver uma chamada de junho com preço de exercício $ 220 e o preço das ações em 15 de junho de 2018 é de US $ 180, você exercitará sua ligação? Qual é a sua recompensa em sua posição?
Se eu precisar, dividirei essas questões em três perguntas separadas, mas por favor, ajude. Você pode verificar o Yahoo Finance para verificar o que eu vi estava certo? Obrigado.
python4econ.
Python for Economists.
5 de fevereiro de 2018.
Criando um banco de dados histórico de opções de estoque.
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, tive tempo livre e juntei-me ao 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! Finança. Este foi um desafio único porque, ao contrário dos dados de capital ou dados de outras fontes como o FRED, as opções de dados não possuem um botão conveniente "download para csv" em qualquer lugar do site.
Escolhendo o formato do arquivo.
Ao escolher um formato de arquivo, eu tinha duas considerações principais: tamanho do arquivo e velocidade na qual ele pode ser escrito / lido. 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:
Automatizando a recuperação de dados.
O próximo passo foi escrever o script que eu teria chamada cron. Isso aparece abaixo.
25 comentários:
Impressionante! Gostaria de fazer algo assim, já que eu também quero fazer algumas das minhas estratégias.
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 essas 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 é puts, calls = aapl. get_options_data ().
Ei Martin, você está certo. Quando eu inicialmente adicionei o código de coleta de opções para pandas, eu tinha chamadas de retorno `get_options_data` primeiro. 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:
Hey Anonymous (desculpe, não conheça seu nome, ou se é Anonymous - isso é incrível!)
Eu consegui fazer algumas mudanças e parece que as coisas estão funcionando para mim. Não tenho certeza de como obter o código atualizado para você.
Spencer Eu sou anônimo, bem, não mais. Basicamente eu acho que o problema era apenas com o get_forward_data, então talvez o seu racional fosse que ele fosse marcado como obsoleto e não foi mantido. No entanto, acho que a função é útil e deve ser mantida.
Ei Greg, isso é ótimo. Estou feliz por ter obtido o código para trabalhar novamente e obrigado por me informar.
& lt; msg = "símbolo deve ser uma string válida"
& lt; para eu, m em enumerar (em_months):
& lt; mon = m - anos * 12.
& gt; in_years = [CUR_YEAR] * (meses + 1)
& gt; # Descobre quantos itens de in_months passam 12.
& gt; para eu no intervalo (meses):
& gt; # Altere os itens correspondentes na lista in_years.
& gt; para i no alcance (1, to_change + 1):
& lt; para eu no intervalo (meses):
& lt; se DEBUG: print & quot; Getting% s:% s /% s & quot; % (self. symbol, m2, y2)
& gt; por intervalo de meses (meses):
& lt; se frame for None:
Obrigado pelo seu excelente trabalho. Parece que está atualmente quebrado - talvez uma mudança de layout / esquema no yahoo (isto é, table_loc = 13 na chamada para _get_option_data ())?
Traceback (última chamada última):
Arquivo "/usr/share/pycharm/helpers/pydev/pydevd. py" ;, linha 1733, em.
debugger. run (setup [& # 39; file & # 39;], None, None)
Arquivo "/usr/share/pycharm/helpers/pydev/pydevd. py" ;, linha 1226, em execução.
pydev_imports. execfile (arquivo, globais, locais) # execute o script.
File & quot; /home/chris/develop/src/trading/options. py" ;, linha 5, em.
puts, calls = aapl. get_options_data (expiry = date (2018, 1, 16))
Arquivo & quot; /usr/lib/python2.7/dist-packages/pandas/io/data. py" ;, linha 630, em get_options_data.
Arquivo "/usr/lib/python2.7/dist-packages/pandas/io/data. py" ;, linha 748, em get_put_data.
retornar self._get_option_data (mês, ano, expiração, 13, & # 39; puts & # 39;)
Arquivo & quot; /usr/lib/python2.7/dist-packages/pandas/io/data. py" ;, linha 673, em _get_option_data.
IndexError: localização da tabela 13 inválida, 3 tabelas encontradas.
de pandas. io. data importar opções.
a partir da data de importação de data e hora.
puts, calls = aapl. get_options_data (expiry = date (2018, 1, 16))
Em [3]: importam pandas.
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: https: // github / pydata / pandas / pull / 8631.
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, por quanto tempo durou o tempo de execução de uma iteração inteira?
Anônimo - não há problema.
Spencer - Eu sou muito novo para python e programação em geral, mas acho poderoso e fascinante com a pequena pesquisa / trabalho que fiz. Até agora eu coloquei um programa muito simples para fazer algo semelhante. Isto é o que eu tenho até agora:
Importar data e hora como dt.
importam pandas como pd.
importa numpy como np.
de pandas. io. data importar opções.
de pandas importam DataFrame.
importe h5py como h5.
enquanto num & lt; tickers. size:
Ainda está em 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, eu sou todo ouvido. Eu sei que uma estrutura de loop pode não ser a mais eficiente, mas tudo para mim é tentativa e erro.
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 postei um link, provavelmente é a melhor maneira de acelerar essa parte.
Embora eu deva alertar que não testei esse código específico por um tempo, então pode ou não funcionar com pandas atuais.
Tenho coletado dados de opções desde janeiro. Não tenho certeza de quão confiável é o dado do Yahoo, mas não encontrei outra fonte gratuita para compará-lo.
@AnonymousMarch 18, 2018 às 5:00 da manhã.
Você pode compartilhar seus scripts de análise? Estou puxando dados de opções de barcharts, mas só oferece cerca de 1000 contratos da maioria dos líquidos. Eu preferiria coletar mais detalhes em tickers selecionados.
Comments
Post a Comment