Opções de ações python
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: 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.
Wallstreet 0.1.5.
Ferramentas de estoque e opção em tempo real.
Wallstreet: ferramentas de estoque e opção em tempo real.
Wallstreet é uma biblioteca Python para monitorar e analisar dados em estoque e opções em tempo real. As cotações são fornecidas a partir da API do Google Finance. Wallstreet exige uma entrada mínima do usuário, ele usa dados disponíveis online para calcular os gregos da opção e até mesmo arranca o site do Tesouro dos EUA para obter a taxa de risco livre atual.
Dependências.
Wallstreet exige que Scipy, requests e bs4 (BeautifulSoup4) estejam instalados.
Comments
Post a Comment