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.
Centro de troca de opções.
Insira até 25 símbolos para obter a cadeia de opções para o seu estoque favorito.
Ver cadeias de opções para:
Últimas notícias.
Atividade de mercado de hoje.
Últimas notícias.
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.
Produtos.
Ferramentas sérias para comerciantes de opções graves.
O Workbench de opção permite que você busque o sucesso nos mercados de opções, dando-lhe o potencial de analisar as estratégias de volatilidade, risco e negociação, como nunca antes. Ao contrário dos programas que se concentram principalmente na execução ou no gerenciamento de posições, o Option Workbench oferece ferramentas para realizar análises sofisticadas de pré-negociação. Ele usa dados do banco de dados da Estratégia da Zona para ajudá-lo a analisar os gregos de uma posição, encontrar oportunidades de negociação, comparar estratégias e aumentar seus lucros e ganhos.
Como Workbench de opções pode ajudá-lo a encontrar oportunidades potencialmente vencedoras.
Option Workbench tem uma vantagem única: seu acesso ao banco de dados da Estratégia da Zona. Este acesso permite que o Workbench da Opção use os dados inestimáveis da Estratégia da Estratégia sobre as opções de estoque, índice e futuros, incluindo candidatos a negociação para escritos cobertos, vendas desproporcionadas, compras em straddle e spreads de calendário. Option Workbench fornece dados e ferramentas para analisar:
Volatilidade histórica diária Implantação de volatilidade extrema e desvios Relatórios de volume incomuns Retornos esperados e outros drivers da dinâmica das opções.
Ele integra os principais preços e dados de volatilidade em uma única tabela que apresenta um perfil do mercado de opções para cada estoque, índice e futuro coberto. As capacidades extensivas de triagem e filtragem permitem que você dissecar os dados de várias formas para que você possa entrar em oportunidades de negociação. Depois de identificar um perfil de opção promissor, você pode investigar os detalhes da opção com as ferramentas do Workbench da Opção.
Apresentando Option Workbench 4.0!
A última versão do Option Workbench tem uma nova aparência e contém uma série de novos recursos e opções, incluindo dados de ganhos, aprimoramentos de editor de posição, criação de posição, gerenciamento de posição e um monitor de portfólio. Clique aqui para uma explicação mais detalhada ou veja o vídeo abaixo.
Clique aqui para assistir mais Tutoriais do Option Workbench »
Opção Workbench Tools.
O seguinte é uma visão geral das várias ferramentas do Option WorkBench.
O painel de instrumentos.
O Painel tem três seções: o mais recente comentário de mercado da Estratégia Zona, o IV (Implícita Volatilidade) do Histograma e a VIX (Índice de Volatilidade).
O histograma IV fornece uma análise rica / barata de amplo espectro dos mercados de ações, ETF e opções de índice. O histograma IV é um primeiro passo importante para decidir como aplicar os poderosos filtros Option Workbench aos perfis de opções.
O gráfico de Estrutura do Termo VIX mostra os valores dos preços de futuros spot VIX e VIX. O VIX Term Structure é um indicador importante da visão de curto prazo do mercado de opção sobre os preços das ações.
A tabela de preços da opção.
A tabela de preços de opções é uma exibição única de dados de opções semelhantes aos relatórios usados pelos comerciantes do piso. Ele mostra uma matriz de linhas contendo preços de opções, volatilidade implícita e gregos agrupados por preço de exercício e colunas com chamadas e colocações agrupadas por datas de validade. Este layout permite que você visualize mais informações em um piscar de olhos do que os layouts do mesmo mês que são usados pela maioria das telas de preços de agência, acelerando suas análises e decisões.
Você pode usar os dados de mercado mais recentes editando o preço subjacente, bem como o preço de cada opção e a célula de volatilidade implícita. Fazendo isso recalcula automaticamente a opção Gregos.
O Gráfico de Volatilidade Implícita.
Este gráfico apresenta uma visão gráfica do sorriso da volatilidade implícita para cada data de validade. Ele permite que você identifique uma inclinação potencialmente lucrativa de relance.
Você pode selecionar o que o gráfico mostra, como o intervalo de ataques baixos e altos e o IV que é traçado - a chamada IV, a colocação IV ou a média da chamada e colocar IVs.
A Calculadora de Retorno Esperado.
A calculadora de retorno esperada é o núcleo das capacidades de análise de risco do Option Workbench. Dado um perfil de volatilidade específico, muitas vezes existem muitas estratégias que atendem a um determinado conjunto de critérios. A calculadora de retorno esperada oferece um formidável conjunto de ferramentas que permitem comparar e contrastar diferentes spreads em relação ao potencial de lucro e risco. Com as sofisticadas ferramentas de análise de cenários de volatilidade, você pode testar suas previsões de volatilidade futura e seu efeito em suas estratégias.
O Estudo de Volatilidade.
O estudo de volatilidade fornece uma perspectiva única sobre o movimento de preços de fechamento e a volatilidade. Seu gráfico superior exibe um gráfico de linha tradicional de preço fechado, aumentado com um gráfico de barras que mostra quantos desvios padrão o preço mudou do preço de fechamento anterior. O número de desvios padrão é calculado com base na sua escolha da volatilidade histórica de 20, 50 ou 100 dias.
O gráfico inferior mostra as séries temporais da volatilidade estatística atualmente selecionada e a volatilidade implícita composta da opção. Juntas, essas ferramentas constituem um meio poderoso para analisar a volatilidade. Eles lhe dão capacidades avançadas para determinar os riscos associados às diferentes estratégias de negociação de opções e encontrar oportunidades de negociação lucrativas.
Zona de estratégia incluída.
Uma assinatura do Option Workbench inclui acesso ao banco de dados da Estratégia Zona, atualizações automáticas e associação no grupo Workbench do LinkedIn Option.
Se você atualmente é um assinante da Zona de Estratégia e converte-se para o Workbench da Opção, emitiremos um reembolso prorrateado para os seus dias de Zona de Estratégia remanescentes.
Elogio para o Workbench opcional.
Jeff M., San Jose, CA.
Mark B., Seattle, WA.
Opção Worbkench não está disponível atualmente para compra.
Infelizmente, o produto não está atualmente disponível para novos inscritos, pois o produto está em manutenção.
Enquanto isso, formamos um relacionamento com o premiado software de sistemas OptionVue. O OptionVue tem sido líder no desenvolvimento e fornecimento de software de negociação e análise de opções desde 1983 e sempre nos impressionamos com as análises e recursos em seus softwares.
O OptionVue normalmente oferece um teste de 14 dias, mas você pode solicitar o teste especial McMillan de 30 dias clicando no link abaixo:
Categorias de Produtos.
Negociar ou investir se na margem ou de outra forma traz um alto nível de risco e pode não ser adequado para todas as pessoas. A alavancagem pode trabalhar contra você, bem como para você. Antes de decidir negociar ou investir, você deve considerar cuidadosamente seus objetivos de investimento, nível de experiência e capacidade de tolerar o risco. Existe a possibilidade de que você possa sofrer uma perda de algum ou todo seu investimento inicial ou mesmo mais do que seu investimento inicial e, portanto, você não deve investir dinheiro que não pode perder. Você deve estar ciente de todos os riscos associados à negociação e ao investimento, e procurar o conselho de um consultor financeiro independente se tiver dúvidas. O desempenho passado não é necessariamente indicativo de resultados futuros.
Testemunhos *: acredita-se que os depoimentos sejam verdadeiros com base nas representações das pessoas que fornecem os depoimentos, mas os fatos declarados em depoimentos não foram auditados ou verificados independentemente. Nem houve nenhuma tentativa de determinar se os depoimentos são representativos das experiências de todas as pessoas usando os métodos aqui descritos ou comparar as experiências das pessoas que dão testemunhos depois que os depoimentos foram apresentados. Você não deve esperar necessariamente os mesmos resultados ou resultados semelhantes.
Resultados do desempenho: os resultados do desempenho passado para serviços de consultoria e produtos educacionais são mostrados apenas com ilustração e exemplo, e são hipotéticos.
RESULTADOS DE DESEMPENHO HIPOTÉTICOS TEM MUITAS LIMITAÇÕES INERENTES, ALGUNS DESCRITOS ABAIXO. NENHUMA REPRESENTAÇÃO ESTÁ FAZENDO QUE QUALQUER CONTA VÁ OU SEJA PROBABILITÁVEL PARA ALCANÇAR LUCROS OU PERDAS SIMILARES ÀOS MOSTRADOS. POR FAVOR, HÁ DIFERENÇAS FREQUENTEMENTE SHARP ENTRE RESULTADOS DE DESEMPENHO HIPOTÉTICOS E OS RESULTADOS REAIS REALIZADOS POR TODOS OS PROGRAMAS DE NEGOCIAÇÕES PARTICULARES.
UMA DAS LIMITAÇÕES DOS RESULTADOS DE DESEMPENHO HIPOTÉTICOS É QUE ESTÃO GERALMENTE PREPARADAS COM O BENEFÍCIO DE HINDSIGHT. ADICIONALMENTE, A NEGOCIAÇÃO HIPOTÉTICA NÃO IMPORTA RISCOS FINANCEIROS, E NENHUM GRUPO DE NEGOCIAÇÃO HIPOTÉTICA PODE COMPLETAMENTE CONTA PARA O IMPACTO DO RISCO FINANCEIRO NO NEGOCIÃO REAL. POR EXEMPLO, A CAPACIDADE DE PERDER OU DE ADESIVAR A UM PROGRAMA DE NEGOCIAÇÃO ESPECÍFICO EM ESPIRRO DE PERDAS DE NEGOCIAÇÃO SÃO PONTOS MATERIAIS QUE PODEM IGUALMENTE AFETAR EFECTUAR RESULTADOS REAIS DE NEGOCIAÇÃO. HÁ NOMBROSOS OUTROS FATORES RELACIONADOS COM OS MERCADOS EM GERAL OU NA EXECUÇÃO DE QUALQUER PROGRAMA ESPECÍFICO DE NEGOCIAÇÃO QUE NÃO PODE SER COMPLETAMENTE COMPTABILIZADO NA PREPARAÇÃO DE RESULTADOS DE DESEMPENHO HIPOTÉTICOS E TODOS OS QUE PODEMOS ADVERSAMENTE EFECTUAR RESULTADOS REAIS DE NEGOCIAÇÃO.
&cópia de; 2018 The Option Strategist | McMillan Analysis Corporation.
Banco de dados de opções de estoque
Obter através da App Store Leia esta publicação em nosso aplicativo!
Criando um banco de dados de opções de ações na Mathematica.
Estou tentando usar o Mathematica para criar uma base de dados de opções de estoque. Isso é que eu desejo escrever uma função que importa a cadeia de opções de uma determinada ação. Infelizmente, o Wolfram ainda não colocou opções de estoque no servidor de dados associado ao FinancialData [], então eu decidi obter os dados necessários do Yahoo Finance. Aqui está a função que escrevi para fazer isso:
Devo notar que tive que estudar a estrutura do núcleo duro do site do Yahoo Finance para que isso funcione. Embora seja funcional, o problema que tenho é que é simplesmente muito lento. Executar esta função para um estoque único leva cerca de 30 segundos. Vamos supor que existem 1000 ações que têm opções que eu gostaria de adquirir (provavelmente há muito mais do que 1000, eu literalmente quero ser capaz de adquirir todas as últimas opções). Isso levaria cerca de 8 horas e meia, o que é muito longo. Então, estou interessado em como eu posso fazer isso de forma mais eficiente. Se eu usei tabela paralela na minha máquina de 8 núcleos, eu poderia esperar que isso levasse apenas cerca de 2 horas?
Além do código que escrevi, vi que o Yahoo possui uma linguagem de consulta YQL que pode ser usada para tirar dados de seus servidores. Eu então vi que a Mathematica possui operações SQL de banco de dados SQL. Eu não sei muito sobre o SQL / YQL, mas isso teria sido uma direção melhor para entrar? Se assim for, alguém poderia mostrar como vincular Mathematica e YQL e fornecer um exemplo em que o YQL é usado na Mathematica para obter dados de opções?
Ah, e caso alguém estivesse pensando por que estou fazendo isso, é para um modelo de investimento no qual estou trabalhando.
Eu implementei esta função usando YQL:
produz uma longa lista com todos os dados da opção MSFT. Ele mostra melhor aqui como uma tabela:
Se você deseja experimentar com YQL, você deve usar o console YQL.
Minha função é otimizada para um estoque, mas você deseja obter dados para vários estoques diferentes. A maneira mais rápida de fazer isso não é usar esta função em cada estoque, mas sim reescrever a primeira consulta do YQL da maneira como minha segunda consulta está escrita. Usando a forma como minha segunda consulta está escrita, com, você pode adquirir os símbolos de opção de estoque para vários estoques de uma só vez. Em princípio, o que você deseja fazer deve ser capaz de fazer apenas duas chamadas HTTP (duas Importações). Um que adquire todos os símbolos das opções de estoque, e aquele que adquire os dados. Como a maior parte do seu tempo foi gasto na espera de respostas HTTP, isso deve dar-lhe um incrível aumento de velocidade.
Aqui está um exemplo de como obter nomes de opções de estoque para vários estoques ao mesmo tempo no YQL. O console lhe dará o URL que você precisa usar:
Se você está se perguntando qual é o elemento que retorna a lista de aderências, você pode consultar a tabela acima, onde os elementos estão na ordem correta. Para sua conveniência, aqui também há uma lista com os elementos correspondentes:
Como nota final, adicionarei que o YQL é um invólucro para uma API subjacente e pode ser ainda mais rápido para usá-lo diretamente, é descrito aqui para dados de estoque. Mas não é oficial e não consigo encontrar uma referência com os símbolos certos para usar para encontrar dados de opções de estoque. Sal Mangano encontra os dados da opção de estoque desta maneira, no entanto, no Coobook Mathematica e parece ter descoberto tudo. Mas ele não inclui informações suficientes para fazer o que deseja; O link que ele fornece para obter mais informações sobre o Yahoo Finance API está agora quebrado.
Banco de dados de opções de estoque
Obter através da App Store Leia esta publicação em nosso aplicativo!
design de banco de dados: stock & amp; negociações de opção.
Um banco de dados tem duas tabelas: uma para ações (ações) e outra para opções. Estes são tabelas separadas, porque eles têm informações diferentes. Por exemplo, a tabela de ações possui uma coluna de símbolo do ticker e uma coluna de troca (primária); a tabela de opções possui uma coluna de símbolo do ticker, uma coluna FK apontando para a tabela de ações, uma coluna de preço de ataque, uma coluna de data de expiração e uma coluna direita (colocar / chamar). Penso que é uma boa idéia separá-los em duas mesas, embora isso seja aberto para debate.
Eu preciso armazenar negócios (ou ordens, ou transações) no banco de dados. Um único comércio é como "Comprar 100 partes da IBM em US $ 200 em 2018-04-14. Um comércio pode envolver uma equidade ou uma opção. Os negócios devem ser armazenados como uma tabela, com uma coluna que especifica se o comércio envolve um estoque ou uma opção, e outra coluna que é um FK que aponta para a tabela de ações ou a tabela de opções? Ou deve haver duas tabelas de trades, uma para negociações envolvendo ações e outra para negócios envolvendo opções?
Mais tarde, eu também precisarei adicionar uma tabela de posições. Uma posição simples seria composta por dois negócios, como comprar 100 ações da IBM hoje e vender 100 partes da IBM no futuro. No entanto, também pode ser mais complexo, envolvendo opções e estoques (uma chamada coberta, por exemplo). Parece que se eu fizer duas mesas para negociações, então eu enfrento a mesma dificuldade em conceber a tabela de posições que eu faria se eu implementasse uma única tabela de trades: eu precisaria de uma chave estrangeira que aponte para a tabela de ações ou as negociações de opção mesa.
Isso me faz sentir como se houvesse uma única tabela de instrumentos, que contenha ações e opções. No entanto, as informações necessárias para os estoques são tão diferentes das opções (ver primeiro parágrafo), que isso também é errado. Uma linha contendo um estoque teria todas as colunas específicas da opção nulas.
Como eu deveria projetar este banco de dados?
Você provavelmente deve considerar fazer STOCK s e OPTION s subtipos de uma nova tabela: INSTRUMENT. Quando você troca ou grava uma posição, seria com respeito ao supertipo INSTRUMENTO.
Isso permite que você mantenha tabelas distintas para seus estoques e opções, o que é sensível, pois eles possuem atributos diferentes. Ao mesmo tempo, ele permite que você trabalhe de maneira sensata com um único conjunto de transações.
Obter através da App Store Leia esta publicação em nosso aplicativo!
design de banco de dados: stock & amp; negociações de opção.
Um banco de dados tem duas tabelas: uma para ações (ações) e outra para opções. Estes são tabelas separadas, porque eles têm informações diferentes. Por exemplo, a tabela de ações possui uma coluna de símbolo do ticker e uma coluna de troca (primária); a tabela de opções possui uma coluna de símbolo do ticker, uma coluna FK apontando para a tabela de ações, uma coluna de preço de ataque, uma coluna de data de expiração e uma coluna direita (colocar / chamar). Penso que é uma boa idéia separá-los em duas mesas, embora isso seja aberto para debate.
Eu preciso armazenar negócios (ou ordens, ou transações) no banco de dados. Um único comércio é como "Comprar 100 partes da IBM em US $ 200 em 2018-04-14. Um comércio pode envolver uma equidade ou uma opção. Os negócios devem ser armazenados como uma tabela, com uma coluna que especifica se o comércio envolve um estoque ou uma opção, e outra coluna que é um FK que aponta para a tabela de ações ou a tabela de opções? Ou deve haver duas tabelas de trades, uma para negociações envolvendo ações e outra para negócios envolvendo opções?
Mais tarde, eu também precisarei adicionar uma tabela de posições. Uma posição simples seria composta por dois negócios, como comprar 100 ações da IBM hoje e vender 100 partes da IBM no futuro. No entanto, também pode ser mais complexo, envolvendo opções e estoques (uma chamada coberta, por exemplo). Parece que se eu fizer duas mesas para negociações, então eu enfrento a mesma dificuldade em conceber a tabela de posições que eu faria se eu implementasse uma única tabela de trades: eu precisaria de uma chave estrangeira que aponte para a tabela de ações ou as negociações de opção mesa.
Isso me faz sentir como se houvesse uma única tabela de instrumentos, que contenha ações e opções. No entanto, as informações necessárias para os estoques são tão diferentes das opções (ver primeiro parágrafo), que isso também é errado. Uma linha contendo um estoque teria todas as colunas específicas da opção nulas.
Como eu deveria projetar este banco de dados?
Você provavelmente deve considerar fazer STOCK s e OPTION s subtipos de uma nova tabela: INSTRUMENT. Quando você troca ou grava uma posição, seria com respeito ao supertipo INSTRUMENTO.
Isso permite que você mantenha tabelas distintas para seus estoques e opções, o que é sensível, pois eles possuem atributos diferentes. Ao mesmo tempo, ele permite que você trabalhe de maneira sensata com um único conjunto de transações.
Comments
Post a Comment