Conheça as habilidades de Quant Se você é um comerciante ou um investidor e gostaria de adquirir um conjunto de habilidades de negociação quantitativas, você está no lugar certo. O curso Trading With Python proporcionará as melhores ferramentas e práticas para pesquisa de negociação quantitativa, incluindo funções e scripts escritos por comerciantes quantitativos especializados. O curso dá o máximo impacto para o seu tempo investido e dinheiro. Ele centra-se na aplicação prática da programação ao comércio e não à informática teórica. O curso irá pagar por si mesmo rapidamente, economizando tempo no processamento manual de dados. Você passará mais tempo pesquisando sua estratégia e implementando negócios lucrativos. Visão geral do curso Parte 1: princípios Você vai aprender por que o Python é uma ferramenta ideal para negociação quantitativa. Começaremos pela criação de um ambiente de desenvolvimento e, em seguida, apresentaremos as bibliotecas científicas. Parte 2: Manipulação dos dados Saiba como obter dados de várias fontes gratuitas, como Yahoo Finance, CBOE e outros sites. Leia e escreva vários formatos de dados, incluindo arquivos CSV e Excel. Parte 3: estratégias de pesquisa Aprenda a calcular o PL e as métricas de desempenho acompanhantes, como Sharpe e Drawdown. Desenvolva uma estratégia de negociação e otimize seu desempenho. Múltiplos exemplos de estratégias são discutidos nesta parte. Parte 4: Iniciando esta parte é centrada em torno da Interactive Brokers API. Você aprenderá a obter dados em estoque em tempo real e a colocar pedidos ao vivo. Muitos códigos de exemplo O material do curso consiste em cadernos que contêm texto juntamente com um código interativo como esse. Você poderá aprender interagindo com o código e modificando-o para seu próprio gosto. Será um excelente ponto de partida para escrever suas próprias estratégias. Enquanto alguns tópicos são explicados com grande detalhe para ajudá-lo a entender os conceitos subjacentes, na maioria dos casos você nem precisa escrever seu próprio código de baixo nível, devido ao suporte aberto existente - bibliotecas de fontes. A biblioteca TradingWithPython combina grande parte das funcionalidades discutidas neste curso como funções prontas a usar e serão usadas ao longo do curso. Pandas irá fornecer-lhe todo o poder de levantamento pesado necessário no trituração de dados. Todo o código é fornecido sob a licença BSD, permitindo seu uso em aplicações comerciais Avaliação do curso Um piloto do curso foi realizado na primavera de 2013, é o que os alunos conseguiram dizer: Matej curso bem projetado e bom treinador. Definitivamente valeu o preço e meu tempo, Lave Jev, obviamente, conhecia suas coisas. A profundidade de cobertura foi perfeita. Se Jev executar algo assim novamente, eu vou ser o primeiro a se inscrever. John Phillips Seu curso realmente me fez começar a pensar em python para análise de estoque. 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 conhece 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 opções da Apple Inc.. 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 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 arquivos. 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 o tempo mágico 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, sã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 o motivo pelo qual o formato do arquivo hdf5 é 1 2 o 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 nos preocupamos com dados com duas casas decimais, então a precisão de 32 bits é suficiente. Automatizando a recuperação de dados O último passo para obter esse banco de dados iniciado foi 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 administrai o comando a seguir no terminal: este comando cria o arquivo crontab etc (se já não existir) 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 googling para isso lhe dará muitos exemplos e tutoriais. Eu, no entanto, darei 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-aaa). 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 7.648.648 MB. Se eu permitisse que esse arquivo fosse executado em cada dia útil por um ano, o tamanho final do arquivo ficaria abaixo de 2 GB. Não é ruim Se você quiser mais informações sobre como coleciono nomes de ticker ou o que a funcionalidade de Opções está em pandas 0.10 ou anterior, deixe um comentário e eu faço o meu melhor para responder. Impressionante eu tenho querido fazer algo assim, já que eu também quero fazer algumas das minhas estratégias. Provavelmente você deve mudar as opções de opções de opções Options 39 para 39 de pandas. io. data import Options39, mas, além disso, seu script funciona de forma excelente. Você estaria 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 caso você nunca perca 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. Na hora de escrever 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 a versão local (em um arquivo chamado opções) sobre a qual baseava 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. Pelo menos, ainda deve começar a começar as pessoas, 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 de dados getoptions. Não tenho certeza de por que alguém mudou. Eu atualizei o código na postagem para usar as colocações corretas, as requisições de chamadas agora. Apesar disso, seria muito útil poder baixar preços de opções. Para começar, 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 da opção, acho que tenho que usar o método getforwarddata. Os outros métodos parecem apenas suportar a obtenção de um mês específico. O erro é bastante longo, mas as últimas duas linhas são: File quot usr local lib python2.7 dist-packages pandas io parsers. pyquot, linha 1653, na linha de seguimento raise 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 ponto, então eu provavelmente estou preso tentando obter a versão 0.13.1 funcionando. Hey Anonymous (Desculpe, não conheça seu nome, ou se é Anônimo - 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 ele funcione com 0.13. Posso dizer que toda a funcionalidade descrita nesta publicação ainda existe com v0.13, mas algumas das assinaturas do método podem ter mudado. Eu acredito que os docstrings para cada método da classe Options devem ser detalhados o suficiente para lhe dar uma boa idéia sobre o que precisa mudar. Você pode encontrá-los aqui: github pydata pandas blob master pandas io data. pyL545-L905 Se você está se sentindo e acabou fazendo as mudanças necessárias, avise-me e atualizarei o código aqui para refleti-los. P. S. Se você tentar e está tendo dificuldade, poste aqui novamente e tentarei dar algumas orientações. Fiquei ocupado com outro projeto, mas basicamente fiz algumas mudanças para que as coisas funcionassem. Por simplicidade, eu apenas fiz as alterações em data. py. Eu acho que os índices intra e índices foram calculados erradamente. Além disso, em alguns casos quadro retorna Nenhum. Quadro de retorno Nenhum estava causando o acidente. Se alguém tiver a hora em que o código deve ser atualizado para apenas consultar dados de opções que realmente existem no intervalo de tempo passado. Não tenho certeza de como analisar essas informações do HTML. Agora consultará o Yahoo por cada mês de dados, mesmo quando não houver opções disponíveis para esse mês ano para o método getforwarddata. Aqui está a saída do diff do Linux para as mudanças que fiz: diff pandas io data. py pandas.01 io data. py 25d24 lt DEBUG True 538,541d536 lt if (len (dados) 0): lt return Nenhum lt 590,595c585 lt try : Lt self. symbol 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 lll to lt for i M em enumerar (inmonths): lt anos (m-1) 12 lm m m - anos12 lt inyears. append (yearsCURYEAR) lt inmonthsimon --- gt inject CURYEAR (meses 1) gt gt Descobre quantos itens em inmonths vão Mais de 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 alcance (meses): lt m2 inmonthsi lt y2 inyearsi lt se DEBUG: imprimir quotGetting s: s squot (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 grande trabalhos. Parece que está quebrado atualmente - talvez uma mudança de esquema de layout no yahoo (é esse que o pool de tabelas 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 quot usr share pycharm helpers pydev pydevd. pyquot, linha 1733, no debugger. run (setup39file39, None, None) Arquivo quot usr share pycarm helpers pydev pydevd. pyquot, linha 1226, em run pydevimports. execfile (arquivo, globals, locais) execute o script Arquivo quot home chris desenvolve src trading options. pyquot, linha 5, em puts, chama aapl. getoptionsdata (expiridate (2015, 1, 16)) File quot usr lib python2.7 Dist-packages pandas io data. pyquot, linha 630, em getoptionsdata self. getcalldata) File quot usr lib python2.7 dist-packages pandas io data. pyquot, linha 748, em getputdata return self. getoptiondata (mês, ano, expiração, 13, 39puts39) File quot usr lib python2.7 dist-packages pandas io data. pyquot, linha 673, em getoptio Ndata quot foundquot. format (tableloc, ntables)) IndexError: Tabela de localização 13 inválida, 3 tabelas encontradas de pandas. io. data import Opções de data de importação de data aapl Opções (39AAPL39, quotyahooquot) coloca, chama aapl. getoptionsdata (expiridate (2015) , 1, 16)) In3: importar pandas In4: pandas. version Out4: 390.13.139 Oi, obrigado pelo comentário. Esse 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 puxe 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, quanto tempo foi o tempo de execução de uma iteração inteira Anonymous - sem problemas. Essa rotina faz muito tempo para correr. Provavelmente na ordem de 6-8 horas. Poderia ser acelerado um pouco, fazendo vários pedidos ao mesmo tempo, usando os módulos Threading e Fila na biblioteca padrão. Eu tenho um exemplo de fazer isso com dados de equidade regulares aqui: gist. github spencerlyon2 8a90d9fdffd15e3ecddb Spencer - Eu sou muito novo para python e programação em geral, mas acho poderoso e fascinante com o pequeno trabalho de pesquisa que fiz. Até agora eu coloquei um programa muito simples para fazer algo semelhante. Isto é o que eu tenho até agora: importa o tempo da data como o dt importa pandas como pd importa numpy como np de pandas. io. data import Opções de pandas importam DataFrame importam h5py como h5 num 0 newdatapd. DataFrame () enquanto num lt tickers. size: Tente: itickers39Symbol39num options Opções (i, quotyahooquot) data options. getoptionsdata () newdatanewdata. append (data) exceto: pass print num numnum1 Na minha lista de ticker eu tenho 6280 símbolos ou assim, e descobri que o getoptionsdata executa muito mais rápido do que o Método do getalldata. Agora, isso funciona em cerca de 3 horas. Meu objetivo é cortar isso em 1 ° 6. 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 esta é 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. org ipython-doc 2 parallel paralleldemos. 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-me, mas não visitei este 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. org pandas-docs stable remotedata. 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 no mesmo arquivo. Porque eu quero classificá-lo no meu software, como um gráfico estendido, isso é possível fazer com esse script
Comments
Post a Comment