Design do banco de dados do sistema de negociação
Um fórum público para discutir o design do software, desde a interface do usuário até a arquitetura de código. Agora fechado.
Banco de dados de negociação online.
- eles mudaram. Se uma ação for suspensa temporariamente, seu símbolo será alterado. Se uma empresa é comprada, seu símbolo pode mudar.
- eles são reutilizados. SE costumava ser 7-11, agora 7-11 é privado e alguém usa esse símbolo.
Eles são bastante padronizados e a maior parte do mundo deveria ser capaz de traduzi-los em sua representação local.
Este tópico está arquivado. Nenhuma outra resposta será aceita.
Começando: Construindo um Sistema de Negociação Totalmente Automatizado.
Nos últimos 6 meses, tenho focado no processo de construção da pilha completa de tecnologia de um sistema de negociação automatizado. Eu me deparei com muitos desafios e aprendi muito sobre os dois métodos diferentes de backtesting (Vectorised e Event driven). Na minha jornada para construir um backtester orientado a eventos, veio a minha surpresa que o que você iria acabar é perto de toda a pilha de tecnologia necessária para construir uma estratégia, fazer backtest e executar a execução ao vivo.
Meu maior problema ao enfrentar o problema foi a falta de conhecimento. Procurei em muitos lugares uma introdução à construção da tecnologia ou um blog que me orientasse. Eu encontrei alguns recursos que vou compartilhar com vocês hoje.
Para iniciantes:
Para os leitores novatos no comércio quantitativo, eu recomendaria o livro de Ernie P. Chan intitulado: Negociação Quantitativa: Como construir seu próprio negócio de comércio algorítmico. Este livro é o básico. Na verdade, é o primeiro livro que li sobre negociação quantitativa e mesmo assim achei muito básico, mas há algumas notas que você deve tomar.
Da página 81-84 Ernie escreve sobre como, no nível de varejo, uma arquitetura de sistema pode ser dividida em estratégias semi-automatizadas e totalmente automatizadas.
Um sistema semi-automatizado é adequado se você quiser fazer algumas transações por semana. Ernie recomenda usar o Matlab, R ou até mesmo o Excel. Eu usei todas as 3 plataformas e este é o meu conselho:
Saltar do Matlab, custou muito dinheiro e só consegui acesso aos laboratórios da universidade. Não há muito material de treinamento como blogs ou livros que ensinem como codificar uma estratégia usando o Matlab. R tem toneladas de recursos que você pode utilizar para aprender como construir uma estratégia. Meu blog favorito cobrindo o tópico é: QuantStratTradeR é executado por Ilya Kipnis. É mais provável que o Microsoft Excel inicie onde você não tem experiência em programação. Você pode usar o Excel para negociações semi-automáticas, mas isso não vai funcionar quando se trata de construir a pilha completa de tecnologias.
Estrutura semiautomática pg 81.
Sistemas de negociação totalmente automatizados são para quando você deseja colocar automaticamente as negociações com base em um feed de dados ao vivo. Eu codifiquei o meu em C #, o QuantConnect também usa o C #, o QuantStart orienta o leitor através da construção em Python, o Quantopian usa o Python, o HFT provavelmente usará o C ++. Java também é popular.
Estrutura de negociação completamente automatizada página 84.
Passo 1: Conseguir um bom começo.
Faça o Programa Executivo em Algorithmic Trading oferecido pela QuantInsti. Acabei de começar o curso e o primeiro conjunto de palestras foi na arquitetura do sistema. Teria me poupado cerca de 3 meses de pesquisa se eu tivesse começado aqui. As palestras me acompanharam através de cada componente que eu precisaria, bem como uma descrição detalhada do que cada componente precisa fazer. Abaixo está uma captura de tela de um de seus slides usados na apresentação:
Você também pode usar essa estrutura geral ao avaliar outros sistemas de negociação automáticos.
No momento em que escrevo, estou apenas na terceira semana de palestras, mas estou confiante de que um praticante será capaz de construir uma estratégia comercial totalmente automatizada que poderia, com um pouco de refinamento, ser transformada no começo de um fundo de hedge quantitativo. .
Nota: o curso não está focado na construção da pilha de tecnologia.
Etapa 2: codifique um backtester baseado em eventos básicos.
Blog de Michael Hallsmore, quantstart & amp; livro “Negociação Algorítmica Bem Sucedida”
Este livro tem seções dedicadas à construção de um robusto backtester orientado a eventos. Ele orienta o leitor através de vários capítulos que explicarão sua escolha de idioma, os diferentes tipos de backtesting, a importância do backtesting orientado a eventos e como codificar o backtester.
Michael introduz o leitor às diferentes classes necessárias em um projeto orientado a objetos. Ele também ensina o leitor a construir um banco de dados mestre de títulos. É aqui que você verá como a arquitetura do sistema da QuantInsti se encaixa.
Nota: Você precisará comprar o livro dele: “Successful Algorithmic Trading”, seu blog deixa de fora muita informação.
Passo 3: Volte para o TuringFinance.
O programa EPAT Reading “Successful Algorithmic Trading” & amp; codificando um backtester em um idioma diferente de sua escolha.
Você deve ir para um blog chamado TuringFinance e ler o artigo intitulado "Algorithmic Trading System Architecture" Por: Stuart Gordon Reid. Em seu post ele descreve a arquitetura seguindo as diretrizes dos padrões ISO / IEC / IEEE 42010 e padrão de descrição de arquitetura de engenharia de software.
Eu achei este post muito técnico e tem algumas ótimas idéias que você deve incorporar em sua própria arquitetura.
Uma captura de tela de seu post.
Etapa 4: Estude os sistemas de negociação de código aberto.
4.1) Quantopian.
Escusado será dizer que Quantopian deve ser adicionado a esta lista e tenho vergonha de dizer que não passei muito tempo usando sua plataforma (devido à minha escolha de idioma). Quantopian tem muitas vantagens, mas as que mais se destacam para mim são as seguintes:
Fácil de aprender Python Acesso gratuito a muitos conjuntos de dados Uma grande comunidade e competições Eu amo como eles hospedam a QuantCon!
Quantopian é os líderes de mercado neste campo e é amado por todos os quants! Seu projeto de código aberto está sob o nome de código Zipline e isso é um pouco sobre isso:
“O Zipline é o nosso mecanismo de código aberto que alimenta o backtester no IDE. Você pode ver o repositório de código no Github e contribuir com solicitações de pull para o projeto. Há um grupo do Google disponível para procurar ajuda e facilitar discussões. ”
Aqui está um link para a documentação deles:
4.2) QuantConnect.
Para aqueles que não estão familiarizados com o QuantConnect, eles fornecem um mecanismo completo de negociação algorítmica de código aberto. Aqui está um link.
Você deve dar uma olhada no código deles, estudá-lo, & amp; dê-lhes louvor. Eles são competição de quantopianos.
Eu gostaria de aproveitar esta oportunidade para agradecer a equipe QuantConnect por me deixar escolher o cérebro deles e pelo serviço brilhante que eles oferecem.
Aqui está um link para a documentação deles:
Observações finais:
Espero que este guia ajude os membros da comunidade. Eu gostaria de ter essa percepção 6 meses atrás quando comecei a codificar nosso sistema.
Eu gostaria de falar com a comunidade e perguntar: “Que bons cursos de negociação algorítmica você conhece?” Eu gostaria de escrever um post que analise o tópico e forneça uma classificação. Há alguma recomendação para criar um sistema de negociação totalmente automatizado que você gostaria de adicionar a este post?
Compartilhar isso:
Compartilhe esta entrada.
Você pode gostar também.
Artigo agradável. Eu gostaria de ter cerca de 6 meses atrás. Eu uso QuantConnect porque eu sou um programador c #. Eu achei muito conveniente para poder baixar o teste de Lean e voltar localmente. Vasculhar seu código também é valioso. Eles também fizeram um acordo com a Tradier para negociações de US $ 1. Isso ajuda muito. Eu não sou tão saliente sobre os spreads e a execução do Tradier. O IB pode ser melhor para isso.
Vou dar uma olhada no curso que você mencionou.
Você não mencionou Quantocracy ou RBloggers. Ambos são recursos muito valiosos.
O que você usa para mapear os resultados dos testes de volta? Eu registro OHLC e valores de indicador para csv do evento OnData e estou realmente cansado de usar o Excel para traçar resultados. Eu gostaria de poder apontar um pacote de gráficos para um arquivo de dados e tê-lo apenas ir.
Você já tem um fornecedor de fluxo de ticks?
Eu tenho um pensamento sobre sistemas orientados a eventos. O problema com os eventos é que eles são assíncronos e latentes. Parece que eles são inevitáveis assim que você começa uma corretora envolvida, então eu tenho sonhado com um sistema mais streaming seguindo os princípios da programação funcional.
& # 8211; Injest um fluxo de carrapato ou bar.
& # 8211; Execute-o através de um processo de cálculo de indicadores, execução de análise ou ML e assim por diante.
& # 8211; Receba de volta um sinal.
& # 8211; Envie para o corretor para executar.
Então, em um fluxo separado.
& # 8211; Receba de volta uma resposta do corretor.
O problema, claro, é o estado. Eu tenho margem suficiente para fazer o trade? O que tem no meu portfólio? Como está se saindo? Geralmente, o broker api pode ser consultado para descobrir essas coisas, mas leva tempo e é assíncrono. Eu também estou olhando para extensões de Rx. Dessa forma, o sistema pode reagir a mudanças no sistema através do padrão observável.
Eventos são ótimos para cliques do mouse. Não é tão bom para processamento transacional de alto volume.
Essa é exatamente a abordagem que eu fiz com minhas próprias coisas. Essencialmente eu tenho um & # 8216; normal & # 8217; programa que envolve uma pequena parte que é acionada por eventos para falar com o intermediário (IB API). Agora, para o problema do estado. Você tem duas escolhas; obter estado do corretor, ou armazená-lo internamente atualizá-lo quando você receber um preenchimento de volta. Isso significa que há momentos em que você não conhece seu estado ou quando as duas fontes de estado estão potencialmente em conflito (dados incorretos ou atrasos). Parte disso depende da rapidez com que você negocia. A menos que você esteja negociando muito rapidamente, em seguida, pausar se você tiver um conflito de estado, ou você está incerto do estado, é melhor do que prosseguir sem conhecer o seu estado. Eu uso um banco de dados & # 8216; lock & # 8217; paradigma para lidar com isso.
Em relação a quase tudo o que você pediu, você está próximo da resposta em Reative Extension (Rx).
Com Rx indo de carrapatos para velas é trivial.
Indo de velas para indicadores é trivial.
Compor indicadores de outros indicadores é trivial.
Compor posições de indicadores é trivial.
Compor portfólios (como realizados ao longo do tempo) a partir de posições é trivial.
Simular o Modelo de Risco é trivial.
Voltar teste ou negociação ao vivo é simplesmente decidir entre uma transmissão ao vivo de dados ou uma repetição simulada de dados do banco de dados.
A execução é trivial.
A implementação é possível em tudo, de C # a F #, a JavaScript e C ++ em código quase idêntico.
A otimização é feita rapidamente porque o Rx puramente funcional é amplamente paralisável para a GPU.
É verdade que a otimização e a alimentação do efeito da otimização contínua de volta ao back-test não é trivial, mas, dado que é não-trivial de qualquer maneira, eu vou deixar que isso se deslize 😉
Puramente Funcional (ou próximo a ele) Rx é, na minha opinião, a única maneira de lidar com a infra-estrutura desse problema.
Eu conheço o sistema que quero negociar. Eu não quero programar ou aprender algo que alguém já conhece. Então, quem posso contratar para pegar o sistema que eu quero usar e automatizá-lo. Ao automatizá-lo, quero dizer, não quero olhar para ele. Vou dar uma olhada nos resultados uma vez por semana e os negócios serão executados sem a minha atenção. Parece estranho para mim que, em 2016, seja preciso muito esforço para tomar um conjunto de regras e executar essas regras no meu corretor.
Eu sugiro inscrever-se com o Quantopian e, em seguida, encontrar alguém dentro da comunidade para construir a estratégia para você. Eles serão capazes de construí-lo para você dentro da plataforma de corretores IB e serão totalmente automatizados.
Deixe-me dizer, no entanto, que acho que você deveria monitorá-lo de perto, e não apenas esquecê-lo para "###".
Design do banco de dados do sistema de negociação
A regra 10 é um dos erros comuns de design de banco de dados.
Eu sou totalmente novo no design de banco de dados e realmente aprecio o seu artigo! Eu me vejo em um beco sem saída no meu projeto de design e saber o tempo o problema está dentro da própria estrutura de banco de dados porque eu não consigo ver o caminho para implementar a minha estrutura desejada no quadro SQL.
Eu adoraria entrar em contato e fazer uma pergunta simples, mas não é possível encontrar detalhes de contato aqui. Por favor, entre em contato!
é o 8º ponto aceitável para o grande conjunto de dados também?
Você pode me dizer qual software ou ferramenta você usa para desenhar a tabela na imagem?
Parece incrível e eu gosto disso.
Gostaria de acrescentar que a redundância nem sempre é uma coisa ruim.
se torna a manutenção clara e fácil.
Notícias Gerais Sugestão Pergunta Bug Resposta Joke Praise Rant Admin.
Use Ctrl + Esquerda / Direita para alternar mensagens, Ctrl + Up / Down para alternar threads, Ctrl + Shift + Esquerda / Direita para alternar páginas.
Web01 | 2.8.180218.2 | Última atualização em 26 de fevereiro de 2014.
Todo o resto Copyright & copy; CodeProject, 1999-2018.
Design do banco de dados do sistema de negociação
+44 (0) 1747 822616.
Procurando por ajuda?
Vídeo tutorial.
Download de Amostra.
Walk Through - Criando um banco de dados de controle de estoque do MS Access.
Se você quiser tentar criar seu próprio banco de dados de controle de estoque, continue lendo.
Neste artigo, você será guiado por algumas instruções passo a passo para criar seu próprio banco de dados de gerenciamento de estoque ou sistema de controle de estoque no MS Access. Incluímos também algumas dicas e sugestões baseadas em nossos muitos anos de experiência na criação de bancos de dados Access para empresas reais. Para baixar o banco de dados que faremos neste tutorial de graça, clique no link acima. Você também pode seguir este tutorial usando nosso vídeo do YouTube que explica cada etapa e fornece demonstrações para ajudá-lo a fazer isso sozinho; Clique no link acima para abrir o vídeo em uma nova guia / janela.
Observe que, para seguir este passo a passo, ou executar o banco de dados gratuito finalizado vinculado acima, você deve ter uma versão completa do Microsoft Access instalada no seu computador.
Pode parecer óbvio, mas um dos pontos mais importantes ao criar seu banco de dados de controle de estoque é decidir exatamente o que você precisa fazer e para que serve. Obter o design correto é muito mais fácil quando você entende a finalidade do banco de dados. Um banco de dados bem projetado será mais simples de manter e adaptar-se posteriormente se seus requisitos forem alterados.
Por exemplo, o banco de dados simples que estamos criando precisa ser capaz de:
Registrar pedidos de clientes Rastrear níveis de estoque Avisar quando as peças precisarem ser reordenadas.
Pense nos detalhes da maneira como sua empresa funciona. Cada cliente solicita um tipo de item de cada vez, ou seus clientes solicitam uma série de peças ou itens de você todos ao mesmo tempo? Você tem apenas um fornecedor para cada peça que você armazena? Você pede uma gama de itens de cada fornecedor ou cada fornecedor fornece apenas um tipo de item? Seu design também será diferente se você armazenar itens para fabricação em vez de vender. Mantenha as respostas a estas perguntas em mente quando entramos na próxima etapa.
Defina as tabelas necessárias.
Informações em um banco de dados são mantidas em tabelas. Nesse ponto, você deve ter alguma idéia das informações que o banco de dados precisa manter para atingir suas metas. Você precisa categorizar essas informações em um conjunto de tabelas. Para começar, você nem precisa fazer isso no Access, basta fazer uma lista manualmente ou em outro programa.
As tabelas em nosso banco de dados de exemplo são: Peças, Clientes, Pedidos, PartTypes, PurchaseOrders e Suppliers. Para simplificar, vamos supor que cada cliente pede apenas uma peça de cada vez e que encomendamos apenas uma peça de um fornecedor de cada vez. Claro que isso pode não ser verdade para você; seus clientes podem pedir uma seleção inteira de itens juntos, e você provavelmente comprará uma variedade de itens de uma só vez. Nesse caso, você precisará de uma tabela que contenha todas as partes vinculadas a cada pedido, provavelmente denominadas Itens do pedido.
Nós fizemos um tipo semelhante de suposição sobre os clientes, assumindo que eles são todos pessoas individuais ou pequenas empresas; para clientes de grandes empresas com vários endereços ou números de telefone para armazenar você talvez precisaria de um conjunto mais avançado de tabelas para armazenar todas as informações de forma consistente. Mas tudo isso é um tópico mais avançado, então vamos mostrar a maneira simples de usar tabelas com objetivos mais básicos.
Configure campos dentro das tabelas.
Dentro de uma tabela, as informações são mantidas nos campos "& # 8220; & # 8221 ;. Basicamente, um campo é a informação específica sobre a coisa pela qual a mesa é responsável. Campos típicos na tabela Parts, por exemplo, podem ser PartNumber, PartDescription, Supplier e StockLevel. Se você imaginar uma tabela como uma grade tabular, os campos serão os títulos das colunas, com cada linha representando uma entrada na tabela ou registro.
Todas as tabelas devem ter um campo de identificação exclusivo chamado de chave primária, que não pode ser o mesmo para nenhum registro ou estar vazio. Então, em nossa tabela de peças, o PartNumber é único para cada parte e cada parte tem uma, então podemos usá-la. Mas para outras tabelas onde isso pode não ser o caso, podemos inventar números de ID ou códigos para uso interno no sistema para garantir que ele possa identificar exclusivamente qualquer entrada em qualquer tabela. No Access, há algo chamado campo de numeração automática que você pode usar como chave primária, se não houver outra opção ou preferência óbvia, que apenas atribua um novo número sequencial a cada registro na tabela.
Para cada campo na tabela, você precisa escolher um tipo de dados para mostrar o tipo de dado que será mantido, como Número, Texto, Data / Hora ou Moeda. Dentro de cada tipo, você pode especificar a natureza exata dos dados, como o número de caracteres para um texto. Você já pode usar números de peça em sua empresa, e o formato usado provavelmente ajudará a decidir o tipo de dados para o campo Part Number. Seus números de peça podem ser algo como ACBD2222, caso em que você pode optar por usar uma cadeia de texto de 8 caracteres.
Agora vamos imaginar que o nosso negócio lida com um grande número de diferentes partes que classificamos em diferentes tipos. Temos uma tabela chamada PartTypes, que lista os diferentes tipos de partes. Queremos que nossa tabela de peças tenha um campo que possa ser vinculado às PartTypes para que cada parte possa ser atribuída a um tipo. O campo na tabela de peças precisa ser o mesmo que o campo de chave primária (a coisa que identifica o registro no sistema) na tabela PartTypes, na qual criamos um código de 1 caractere. A tabela de peças também seria relacionada de maneira semelhante à tabela Fornecedores, para que você possa descobrir quem fornece uma peça específica.
Fazendo nosso design no papel.
Pense em como você estará usando os campos e certifique-se de defini-los da maneira mais lógica para seus objetivos. Por exemplo, pode fazer sentido armazenar os nomes das pessoas como Primeiro Nome e Sobrenome separadamente, em vez de apenas um campo, para que você possa classificar e listar nomes em ordem alfabética (de sobrenome). Uma dica que achamos útil é manter os endereços postais como um campo, em vez de dividi-los em elementos individuais do endereço, como a Linha de Endereço 1, a Linha de Endereço 2, a Cidade, o Condado e o Código Postal. Isso torna muito mais fácil incorporar endereços em formulários e relatórios e facilita a entrada de dados, pois o Access fica feliz em armazenar as várias linhas em um campo.
Ao pensar em quais campos você precisa, verifique se todos eles têm nomes exclusivos, a menos que dois campos realmente contenham as mesmas informações. Só neste caso você deve dar a eles o mesmo nome, como no PartTypeCode anterior. Algo para manter em mente com seus nomes é que, se você quiser avançar para o uso de consultas SQL ou o código Visual Basic for Applications (VBA) com seu banco de dados, você encontrará a vida mais fácil se não houver espaços nos nomes de tabela ou de campo. É por isso que estamos escrevendo PartTypes como uma palavra, em vez de ter o espaço.
Outra dica a ter em mente é que é uma prática ruim dar a um campo um nome que já esteja sendo usado nos bastidores pelo Access para outra coisa. Essas chamadas "palavras reservadas" inclua itens como & # 8216; nome & # 8217 ;, & # 8216; data & # 8217 ;, & # 8216; nível & # 8217; e & # 8216; dinheiro & # 8217 ;, entre muitos outros. Você pode procurar uma lista completa de palavras reservadas do Access on-line para garantir que nenhum dos seus campos use um. Isso pode ajudar a evitar confusão no mecanismo de banco de dados entre palavras predefinidas e seus nomes de campo, que, se não forem verificados, poderão causar sérios erros.
Crie suas tabelas no Access.
Para criar uma tabela de peças e definir seus campos:
No MS Access 2013/2010/2007, clique na guia Criar na Faixa de Opções, em Design de Tabela. Isso abre uma nova tabela no modo de design. Cada linha na exibição de design representa um campo na tabela. (No Access 2003, clique em Tabelas na lista de Objetos e, em seguida, clique no botão Novo, que abre uma caixa de diálogo chamada Nova Tabela. Finalmente, selecione Exibição de Design e clique em OK.) Clique na primeira coluna, na linha superior. Digite o nome do primeiro campo (PartNo) Use a tecla Tab para ir para a próxima coluna onde definimos o tipo de dados. Clique no menu suspenso e selecione Texto. Use a tecla Tab para ir para a próxima coluna e insira uma descrição para o novo campo. Como esta será a chave primária da tabela, clique no botão da chave primária na barra de ferramentas. Na guia Geral, na parte inferior da janela, clique na linha Tamanho do campo e insira 10 para definir uma cadeia de texto com 10 caracteres. Na guia Geral, clique na linha Legenda e digite o rótulo desejado para esse campo na tela (por exemplo, Número da peça). Clique na segunda linha para definir o próximo campo na tabela. E assim por diante. Quando terminar de adicionar campos à tabela, feche-a clicando no X no canto superior direito. O Access pedirá que você nomeie a tabela. Digite "Peças" e "# 8221".
A tabela de peças do banco de dados de controle de estoque de exemplo contém os seguintes campos:
String de texto de 10 caracteres.
Número de peça exclusivo para definir cada parte.
Sequência de texto de 50 caracteres.
Nome / descrição desta parte.
String de texto de 20 caracteres.
A unidade de medida para esta parte, e. Kg, Metros, caixa de 10.
Seqüência de texto de 6 caracteres.
O fornecedor desta peça.
O número desta parte no estoque atual.
O número mínimo desta peça em estoque antes de você precisar reordenar.
O preço de custo desta peça.
O preço de venda desta peça.
String de texto de 1 caractere.
O tipo de parte disso é.
Cadeia de texto de 255 caracteres.
Dica: geralmente é útil incluir um campo do Notes para qualquer outra informação que você queira adicionar posteriormente.
A tabela de peças no modo Design (Access 2013)
A tabela Parts no modo Design (Access 2003)
As capturas de tela acima mostram a tabela Parts de nosso banco de dados de controle de estoque no modo Design. O uso da Visualização de design permite definir todos os campos da tabela, especificar seus tipos de dados, descrevê-los e definir seu formato.
Sugestão & # 8211; Complete a descrição do campo. Quando você usa o Assistente de Formulários para criar formulários para você mais tarde, essa descrição será exibida na barra de status para ajudar os usuários.
Sugestão & # 8211; Se o seu campo tiver um nome abreviado ou não tiver espaços, use a área Legenda para escrever seu nome em inglês simples. Essa legenda aparecerá em formulários produzidos pelo Assistente de formulário. Por exemplo, se o seu campo é chamado POQty, insira Quantidade na legenda.
A tabela Customers é a seguinte:
String de texto de 8 caracteres.
Referência exclusiva de oito caracteres para este cliente com base nas primeiras quatro letras do sobrenome (por exemplo, SMIT0001). Isso facilitará a localização de clientes individuais. Este campo é a chave primária.
String de texto de 20 caracteres.
O primeiro nome deste cliente.
Sequência de texto de 25 caracteres.
O sobrenome deste cliente.
Cadeia de texto de 255 caracteres.
O endereço deste cliente.
String de texto de 15 caracteres.
O número de telefone deste cliente.
A tabela de clientes acima é projetada para uma empresa cujos clientes são predominantemente indivíduos, conforme assumido anteriormente. Quando seus clientes são principalmente grandes empresas, e você pode ter vários contatos em cada negócio, ou cada empresa pode ter vários sites, então você precisará de uma solução mais complexa.
Depois de pegar o jeito, passe pelo restante das tabelas planejadas configurando-as também. Você verá suas novas tabelas aparecendo no navegador de objetos à esquerda à medida que você as faz (pressione F11 para ativar este navegador se não puder vê-lo).
Os relacionamentos são configurados no banco de dados, para mostrar a maneira como uma tabela se relaciona com outra. Um relacionamento um-para-muitos é o tipo mais comum de relacionamento. Nesse relacionamento, um registro em uma tabela pode ter mais de um registro correspondente em uma segunda tabela, mas cada registro na segunda tabela pode ter apenas um registro correspondente na primeira tabela. Por exemplo, cada parte pode ter apenas um tipo de peça, mas para cada tipo de peça provavelmente haverá muitas partes desse tipo.
Se cada parte tiver apenas um fornecedor, como no nosso exemplo, esse é outro relacionamento direto de um para muitos. Se cada peça puder ser fornecida por vários fornecedores diferentes, você precisará de um design diferente.
Em nosso banco de dados de exemplo, os seguintes relacionamentos entre tabelas são obrigatórios.
Fornecedores - Peças, para especificar o fornecedor de cada peça.
Parts - PurchaseOrders, mostrando a peça solicitada em um pedido.
Peças - Pedidos, mostrando a peça solicitada por um cliente.
Clientes - Pedidos, mostrando o cliente para cada pedido.
PartTypes - Partes, classificando cada parte em um tipo de peça específico.
Como exemplo, mostraremos como configurar o relacionamento entre as partes Parts e PartTypes. Antes de começar a fazer relacionamentos, é uma boa idéia escrever algumas informações de amostra em suas tabelas que apresentem entradas que sejam tão longas quanto você acha que você usará. Isso ajudará um pouco com algumas configurações que você precisará ajustar mais tarde.
Configure o campo PartTypeCode na tabela Part Types como uma cadeia de texto de um único caractere que define o tipo de peça. Tornar este campo a chave primária Abra a tabela Parts no modo Design. Adicione um campo PartTypeCode à tabela Parts. Certifique-se de que também seja uma cadeia de texto de caractere único. Agora clique na coluna Data Type do campo Part type para exibir uma seta para baixo. Clique aqui para exibir uma lista suspensa e selecione Assistente de pesquisa. Selecione "Eu quero que a coluna de pesquisa pesquise os valores em uma tabela ou consulta & # 8221 ;. Clique em Next. Na lista de tabelas exibidas, selecione a tabela PartTypes. Clique em Next. Clique nos campos que você deseja incluir na sua coluna de pesquisa. Neste caso, vamos selecionar os dois campos. Clique em Next. Uma ordem de classificação pode ser selecionada, se necessário. Selecione Descrição. Clique em Next. A próxima etapa permite definir a largura das colunas em sua coluna de pesquisa e especificar se você deseja que a coluna-chave (a coluna que contém a chave do campo principal) seja exibida. Por padrão, a coluna-chave não é exibida e, no nosso caso, apenas queremos visualizar a descrição, portanto, deixe o carrapato na caixa. Agora defina a largura da sua coluna de pesquisa, arrastando a borda para a posição desejada. Se você já tiver inserido alguns dados na tabela PartTypes, isso será exibido para ajudá-lo a ajustar a coluna à largura do conteúdo provável. Clique em Next. Agora selecione o rótulo da sua coluna de pesquisa. O rótulo sugerido geralmente estará correto. Clique em Concluir para concluir o Assistente de pesquisa. Você será perguntado se deseja salvar a tabela para que os relacionamentos possam ser criados. Clique em Sim Para concluir o relacionamento, selecione Ferramentas, Relacionamentos ou clique no botão Relacionamentos na barra de ferramentas para exibir a janela de relacionamentos. Você verá a tabela Parts e a tabela PartTypes com uma linha ligando o campo PartType em Parts com o campo PartTypeCode em PartTypes. Passe o mouse sobre essa linha e escolha Editar Relacionamento (ou clique duas vezes na linha). Marque a caixa Enforce Integrity Referential. Você deve sempre assinalar isso, caso contrário, o relacionamento tem pouco valor. Por exemplo, se você definiu três tipos de peças diferentes na tabela Tipos de peça: E & # 8211; Eletrônica, S & # 8211; Software, H & # 8211; Hardware, assinalando a caixa Enforce Integrity Referential (Integridade Referencial Reforçada), garantirá que você não será capaz de definir uma nova peça como qualquer outro tipo de peça. Além disso, se você tentar excluir um tipo de peça da tabela PartTypes, quando as peças na tabela Parts tiverem esse tipo de peça, o banco de dados o avisará. Marque a caixa Cascade Update Related Fields. Isso significa que você pode alterar a chave primária na tabela principal (por exemplo, a tabela PartTypes) e ela será atualizada automaticamente na tabela relacionada (Parts). A terceira caixa é Cascade Delete Related Fields. Assinalar isso significa que, se você excluir um registro, por exemplo Software, da tabela principal (por exemplo, PartTypes), todos os registros na tabela relacionada (Parts) com esse tipo de peça também serão excluídos. Normalmente você não iria querer que isso acontecesse & # 8211; Se você tivesse partes do tipo Software na tabela de peças, você não desejaria excluir esse tipo de peça, portanto, deixe a caixa desmarcada. Provavelmente haverá exemplos em seu banco de dados em que você deseja marcar a caixa Cascade Delete Related Records. Normalmente, aplica-se quando uma tabela forma informação suplementar para outra & # 8211; por exemplo, se você tivesse tabelas Orders e OrderItems (listando vários itens em um Pedido), você desejaria excluir todos os OrderItems se excluísse um Order inteiro.
A janela de relacionamentos no Access 2013.
A janela de relacionamentos no Access 2003.
Então, agora que você viu como estabelecer um relacionamento, você deve passar pelas tabelas que estabelecem os relacionamentos que você planejou em seu design. Uma vez que você fez todos eles, podemos passar para a parte final do nosso banco de dados.
Criando uma consulta de reordenação.
Em geral, as consultas são usadas para extrair dados e informações do banco de dados. Em nosso exemplo, queremos saber se temos menos do que o nível mínimo de estoque para todas as peças, para que saibamos quando você precisa pedir mais. Você pode extrair todos os tipos de outras informações com consultas. Você pode querer saber todas as peças fornecidas por um determinado fornecedor ou quantas vezes um determinado cliente solicitou no ano passado. Frequentemente, você extrairá as informações usando uma consulta e, em seguida, usará um relatório do Access para apresentar os dados de maneira clara, mas aqui estaremos fazendo a consulta.
Agora, vamos ver como configurar uma consulta para mostrar quais partes estão abaixo do nível mínimo de estoque e informar os fornecedores de quem elas devem ser reordenadas.
Para configurar uma consulta para mostrar quais partes estão abaixo do nível mínimo de estoque e os fornecedores de quem elas devem ser solicitadas:
Na guia Criar, clique em Design da Consulta (Access 2013/2010/2007). Ou, em Consultas, clique em Novo, selecione Design e clique em OK (Access 2003). Na caixa Mostrar Tabela, selecione Peças. Clique em Adicionar. Selecione fornecedores. Clique em Adicionar. Clique em Fechar. A grade de design de consulta agora é exibida com as tabelas escolhidas acima. Os campos a serem incluídos na consulta são adicionados arrastando-os da tabela para a grade ou clicando duas vezes sobre eles. Os campos que exigimos são PartNo e StockLevel da tabela Parts e SupplierName e Address da tabela Fornecedores, portanto, selecione-os. Queremos apenas exibir peças cujo nível de estoque seja menor que o nível mínimo de estoque para essa peça. Isso é feito definindo um critério para esse campo. Digite & lt; = [MinStockLevel] na linha de critérios do campo Nível de estoque (coluna). Clique no X no canto superior direito da janela para fechar a consulta. O Access perguntará se você deseja salvar alterações na consulta e solicitará um nome para a consulta (por exemplo, LowStockLevels). Agora, clique duas vezes na consulta que você acabou de criar para visualizar as peças com baixos níveis de estoque.
A grade de design da consulta no Access 2010.
A consulta deve estar visível no navegador de objetos à esquerda. Clique duas vezes na consulta para visualizar as peças com baixos níveis de estoque depois de ter alguns dados em funcionamento no sistema.
Mais uma coisa sobre a consulta: as linhas entre as tabelas no conjunto de dados da consulta são chamadas de Joins. As junções são criadas automaticamente entre tabelas quando existem campos que já possuem um relacionamento entre eles ou entre uma chave primária e outro campo com o mesmo nome. Normalmente, você gostaria de participar aqui, mas haverá casos em que você não deseja ingressar nesses campos por vários motivos, portanto, lembre-se de que talvez seja necessário verificar todas as associações depois que elas forem criadas.
As propriedades de associação nas consultas são muito importantes quando sua consulta usa mais de uma tabela. Se a consulta não lhe der os resultados esperados, verifique-os clicando com o botão direito do mouse na linha que une as duas tabelas no modo Design. Aqui, você pode escolher se deseja apenas ver as peças que têm um fornecedor ou todas as peças com baixo estoque, independentemente de terem um fornecedor (escolhendo "Incluir todos os registros de & # 8216; Peças" e somente esses registros de "Fornecedores", onde os campos unidos são iguais. & # 8221;). Você pode querer usar essa opção neste exemplo. A terceira opção é o contrário disso, portanto, mostre todos os fornecedores, mesmo que eles não forneçam peças de baixo estoque, o que, nesse caso, não faria sentido, portanto, ignore-o.
Então, agora nós completamos o banco de dados de acordo com o nosso design. Podemos inserir todos os dados de que precisamos e nos informará quando reordenar os produtos. É claro que os usos potenciais de um banco de dados são muitos, então agora vamos discutir brevemente algumas maneiras de expandir esse banco de dados para torná-lo mais útil e mais fácil de usar.
No MS Access, você usa formulários para exibir, inserir e editar dados e controlar o banco de dados. Quando você configura todas as tabelas e relacionamentos em seu banco de dados, o Assistente de Formulários é muito útil na configuração de formulários baseados em suas tabelas, para entrada de dados, visualização e edição. Você pode então fazer alterações no formulário produzido pelo Assistente de Formulários, adicionando e editando os recursos conforme necessário.
Formulários no MS Access também podem ser usados para exibir botões e links para fornecer acesso a todos os outros formulários e relatórios. Nós sempre configuramos uma forma desse tipo e a chamamos de tela frontal. A configuração de um formulário claro de nível superior facilita as pessoas a usar o sistema sem conhecimento do banco de dados.
Os relatórios do MS Access permitem exibir informações ao usuário de maneira conveniente, que podem ser visualizadas na tela e impressas, se necessário. Normalmente, as informações do relatório virão de uma consulta. O Assistente de Relatório ajudará a criar relatórios simples. Relatórios mais detalhados estão além do escopo deste artigo.
Você pode querer certificar-se de que ninguém que não é confiável possa adulterar seus dados. A maneira mais simples de proteger o banco de dados é definir uma senha.
Para definir ou alterar a senha, o banco de dados deve ser aberto para uso exclusivo. Para fazer isso, abra o MS Access, use Arquivo, Abrir para selecionar o banco de dados. Clique na caixa Abrir à direita do botão Abrir e selecione Abrir exclusivo. Selecione Ferramentas, Segurança, Definir Senha do Banco de Dados (Access 2003). Ou selecione a guia Database Tools na Ribbon e clique em Set Database Password (Access 2007). Ou vá para o menu Arquivo, selecione o submenu Informações e clique em Definir senha do banco de dados (Access 2010/2013) Digite a senha desejada e digite novamente para verificar. A senha está agora definida.
Ao criar um banco de dados de controle de estoque grande ou um que contenha informações confidenciais, você pode exigir segurança mais complexa. Por exemplo, você pode querer restringir o acesso a algumas das informações no banco de dados ou permitir que alguns usuários visualizem as informações no banco de dados, mas não alterá-las. O MS Access permite definir tipos de usuários e aplicar níveis de segurança, para que você possa especificar quais ações estão disponíveis para cada tipo de usuário. Isso está além do escopo deste artigo, mas é chamado de "segurança em nível de usuário" se você quiser pesquisá-lo mais.
O Access permite que você escreva um código personalizado em seu Visual Basic for Applications, conhecido como VBA. Você pode configurar um código para ser executado quando você executar determinadas ações ou apenas no comando. Isso permite que você automatize muitos processos. Por exemplo, você pode querer que o seu sistema ajuste automaticamente os níveis de estoque registrados sempre que uma entrega for recebida, ou você pode querer que o campo Referência do cliente seja criado automaticamente a partir do sobrenome do cliente. Usar o VBA para automatizar recursos pode tornar um banco de dados mais poderoso e fácil de usar, mas requer conhecimento de programação, por isso é um passo mais avançado para o desenvolvimento de seu banco de dados.
Então, isso é tudo para este artigo tutorial. Se você gostaria de continuar aprendendo sobre como criar bancos de dados de gerenciamento de estoque no MS Access, por favor clique aqui para o nosso artigo adicional sobre relacionamentos muitos-para-muitos.
Se você decidir que construir seu próprio banco de dados de controle de estoque não é para você, afinal, nós da Software-Matters estamos felizes em oferecer conselhos sobre alternativas através de nossa consulta inicial gratuita. Contacte-nos em 01747 822616 ou preencha um formulário de inquérito aqui e nós entraremos em contato com você. Obrigado pela leitura!
Se você gostou deste artigo ou achou útil, por que não contar aos outros sobre isso?
Design do banco de dados do sistema de negociação
Bem-vindo ao Home do Open Java Trading System.
O Open Java Trading System (OJTS) pretende ser uma infra-estrutura comum para desenvolver sistemas de negociação de ações. Consiste em quatro partes: a coleta de dados brutos pela internet, o reconhecimento de sinais de negociação, um módulo de visualização e módulos para conectar as interfaces programáticas de plataformas de negociação, como bancos. O objetivo do projeto é fornecer uma infra-estrutura comum Java independente (independente de plataforma) para desenvolvedores de sistemas de negociação. Alguns dos aspectos que devem ser abordados são fornecer um esquema de banco de dados compatível com SQL92 comum para armazenar dados financeiros, interfaces Java comuns para como trocar dados entre diferentes módulos, visualização de dados financeiros brutos e sinais de negociação e vários outros aspectos comuns necessários para criar um sistema final de negociação.
Por causa do meu trabalho e da minha família, não encontro mais tempo para melhorar a OJTS. Eu continuo atualizando a seção de links abaixo que irá guiá-lo para projetos java open source mais ativos nessa área, no entanto.
Na verdade, como consequência do meu interesse pela dinâmica dos mercados de ações, comecei uma jornada para os detalhes mais profundos da economia nacional, a fim de entender as taxas de câmbio. Este tópico finalmente me levou a um estudo mais profundo do dinheiro em si como a unidade métrica que usamos na economia para medir "valor", "sucesso" ou "utilidade". Este tópico acabou por ser extremamente interessante, mas ao mesmo tempo foi muito difícil encontrar qualquer informação sobre como funciona o nosso sistema monetário. Circule e pergunte às pessoas de onde vem o dinheiro, quem o cria e o que determina seu valor. Você vai notar que até mesmo as pessoas que têm um mestrado ou doutorado. em economia não vai saber esses detalhes. Ah, sim, eles responderão em termos técnicos enigmáticos, mas não conseguirão desenhar um diagrama simples que descreva o processo.
H. G. Wells é relatado para ter dito:
"Escrever de moeda é geralmente reconhecido como uma prática censurável, na verdade quase indecente. Os editores irão implorar ao escritor quase que em lágrimas para não escrever sobre dinheiro, não porque seja um assunto desinteressante, mas porque sempre foi profundamente perturbador. "
Sugiro a qualquer pessoa que viva em uma sociedade democrática que leia sobre esse assunto. Afeta nossas vidas todos os dias em uma extensão que não pode ser exagerada! Na minha opinião, todo cidadão de um país democrático daquele mundo deveria saber de onde vem o nosso dinheiro. O mais provável é que você tenha acessado este site para procurar ferramentas que o ajudem a aumentar sua riqueza monetária. Entender a unidade métrica "dinheiro" (não importa se dólar ou euro) será um ingrediente importante em seu kit de ferramentas para ganhar dinheiro.
Se você tem pouco tempo e só pode dar ao luxo de ler um único livro sobre esse assunto, então eu sugiro que você leia Riqueza, riqueza virtual e dívida por Frederick Soddy. Eu consegui comprar uma cópia usada via Amazon por US $ 23,48, mas também existe uma versão online. Você precisará do plugin DjVu para lê-lo. Este livro foi publicado originalmente em 1929, mas ainda descreve os fatos reais muito bem. Mesmo que eu não concorde com todas as conclusões de Frederick Soddy, seu trabalho é estimulante e fará com que você faça as perguntas certas.
Lançamentos, correções de bugs e documentação atualizada.
Estou investigando como tornar o OJTS mais compatível com outros esforços do sistema de negociação java.
Existe um novo wiki disponível na ITSdoc, focado na distribuição de conhecimento no domínio dos sistemas de investimento e negociação. A ideia por trás do ITSdoc é ter uma plataforma de colaboração semelhante à wikipedia, ajudando a comunidade a compartilhar conhecimento.
Ontem lancei a versão 0.13 da biblioteca OpenJavaTradingSystem. Entre as novidades estão: Recuperação de dados para ações, fundos e moedas da OnVista. Implementação de manipulação de moeda e conversões. Os portfólios são implementados e você pode trabalhar com portfólios da mesma forma que com itens de papel de segurança únicos. Adicionado um quadro geral para a aplicação de algoritmos para séries temporais do mercado de ações. Comutado do shell interativo SISC / Scheme para ABCL / CommonLisp mais seu editor chamado "J". Adicionado um mecanismo geral de armazenamento em cache de dados para armazenar em cache os dados que já foram recuperados pela Web no sistema de arquivos. Além disso, muitas outras pequenas melhorias Se você estiver interessado nesta nova versão, você deve começar na seção de início rápido / captura de tela. O manual ainda não está atualizado, mas pode fornecer informações valiosas, no entanto, se você quiser usar a biblioteca em seu projeto. A documentação deve ser atualizada em breve.
D a c u e n t a ç ã o.
Documentos descrevendo os componentes internos do projeto. Documentação do Java Data Objects and Interface.
& gt; & gt; HTML & gt; PDF Projeto de documentação do sistema de investimento e negociação.
T e h o o o g y.
Blocos de Construção de Terceiros usados neste projeto.
O HSQLDB é o mecanismo de banco de dados fornecido com o projeto para que você possa começar imediatamente a usar o OJTS sem instalar um banco de dados de terceiros. Mas se você planeja usar outro banco de dados compatível com SQL92, essa é uma opção de configuração. Castor (licença: a licença Exolab)
Castor é uma estrutura de ligação de dados de código aberto para Java [tm]. É o caminho mais curto entre objetos Java, documentos XML e tabelas relacionais. O Castor fornece ligação Java para XML, persistência de Java para SQL e muito mais. Castor Doclet (licença: GNU LGPL v2.1)
Java doclet para gerar mapeamento e arquivos DDL para Castor JDO e Castor XML. TestMaker (licença: Licença Open Source do TestMaker)
A partir do projeto TestMaker, apenas a implementação de protocolos como HTTP ou HTTPS é usada para coletar dados da web. jCookie (licença: GNU LGPL v2.1)
A biblioteca jCookie é necessária para que as bibliotecas do TestMaker funcionem. htmlparser (licença: GNU LGPL v2.1)
A biblioteca htmlparser é usada para extrair os dados dos recursos da web. ABCL / CommonLisp (licença: GNU GPL v2)
ABCL (Armed Bear Common Lisp) é usado para implementar o coração algorítmico do projeto na linguagem de programação ANSI Common Lisp. JFreeChart (licença: GNU LGPL v2.1)
JFreeChart é usado para a visualização de dados financeiros como gráficos. JSci (licença: GNU LGPL v2.1)
O Joda Time substitui as classes originais de Data e Hora do JDK.
Links para outros projetos.
O grupo JavaTraders do Google pode ser a melhor entrada para você descobrir sobre outros sistemas e ferramentas de negociação baseados em Java.
O código do projeto é licenciado sob os termos da LGPL e toda a documentação que você encontra neste projeto está licenciada sob os termos da FDL.
Bancos de Dados Securities Master para Negociação Algorítmica.
Bancos de Dados Securities Master para Negociação Algorítmica.
No comércio algorítmico, o centro das atenções geralmente brilha no componente de modelo alfa do sistema de negociação completo. Essa é a parte do sistema que gera os sinais de negociação, antes da filtragem por um sistema de gerenciamento de risco ou de construção de portfólio. Como tal, os comerciantes de algo geralmente gastam uma parte significativa de seu tempo de pesquisa refinando o modelo alfa para gerar o maior índice backpe de Sharpe antes de colocar seu sistema em produção.
No entanto, um modelo alfa é tão bom quanto os dados que estão sendo alimentados. Este conceito é bem resumido pelo velho ditado da ciência da computação de "lixo, lixo fora". É crucial que dados precisos e oportunos sejam usados para alimentar o modelo alfa. Caso contrário, os resultados serão, na melhor das hipóteses, ruins ou, na pior, completamente incorretos, levando a grandes perdas se o sistema for colocado em produção.
Neste artigo, quero discutir questões relacionadas à aquisição e fornecimento de dados precisos oportunos para um sistema de backtesting de estratégia algorítmica e, finalmente, um mecanismo de execução de negociação. Em particular, estudaremos como obter dados financeiros, como armazená-los, como limpá-los e como exportá-los. No setor financeiro, esse tipo de serviço de dados é conhecido como banco de dados mestre de títulos.
O que é um mestre de valores mobiliários?
Um mestre de títulos é um banco de dados de toda a organização que armazena dados fundamentais, de preços e transacionais para uma variedade de instrumentos financeiros em todas as classes de ativos. Ele fornece acesso a essas informações de maneira consistente para ser usado por outros departamentos, como gerenciamento de risco, compensação / liquidação e negociação proprietária.
Em grandes organizações, uma variedade de instrumentos e dados será armazenada. Aqui estão alguns dos instrumentos que podem ser de interesse para uma empresa:
Acções Equity Options Índices Taxas de Juros Cambiais Futuros Commodities Bonds - Derivativos do Governo e Societários - Caps, Floors, Swaps.
Bases de dados mestre de títulos geralmente têm equipes de desenvolvedores e especialistas em dados garantindo alta disponibilidade dentro de uma instituição financeira. Embora isso seja necessário em grandes empresas, no nível de varejo ou em um fundo pequeno, um mestre em títulos pode ser muito mais simples. Na verdade, embora os grandes mestres de valores mobiliários usem bancos de dados empresariais caros e sistemas de análise, é possível usar software de código aberto de commodity para fornecer o mesmo nível de funcionalidade, assumindo um sistema bem otimizado.
Quais conjuntos de dados são usados?
Para o comerciante algorítmico de varejo ou para o pequeno fundo quantitativo, os conjuntos de dados mais comuns são o preço de fim de dia e histórico intradiário para ações, índices, futuros (principalmente commodities ou renda fixa) e câmbio (forex). Para simplificar esta discussão, nos concentraremos exclusivamente nos dados de fim de dia (EOD) para ações, ETFs e índices de ações. Artigos posteriores discutirão a adição de dados de frequência mais alta, classes de ativos adicionais e dados de derivativos, que possuem requisitos mais avançados.
É fácil obter dados de EOD para ações. Há vários serviços que fornecem acesso gratuitamente por meio de APIs disponíveis na Web:
É fácil fazer o download manual de dados históricos para títulos individuais, mas isso consome tempo se muitas ações precisarem ser baixadas diariamente. Assim, um componente importante do nosso título de títulos atualizará automaticamente o conjunto de dados.
Outra questão é o período de lookback. Até que ponto no passado precisamos ir com nossos dados? Isso será específico para os requisitos da sua estratégia de negociação, mas há certos problemas que abrangem todas as estratégias. O mais comum é a mudança de regime, que é frequentemente caracterizada por um novo ambiente regulatório, períodos de maior / menor volatilidade ou mercados de tendência de longo prazo. Por exemplo, uma estratégia de curto prazo direcional / de tendência a longo prazo provavelmente teria um bom desempenho de 2000 a 2003 ou 2007-2009. No entanto, teria sido difícil para 2003-2007 ou 2009 até o presente.
Minha regra é obter o máximo de dados possível, especialmente para dados de EOD, onde o armazenamento é barato. Só porque os dados existem no seu mestre de segurança, isso não significa que deva ser utilizado. Há ressalvas em torno do desempenho, pois tabelas de banco de dados maiores significam tempos de consulta mais longos (veja abaixo), mas os benefícios de ter mais pontos de amostra geralmente superam quaisquer problemas de desempenho.
Como em todos os dados financeiros, é imperativo estar ciente dos erros, como preços altos / baixos incorretos ou viés de sobrevivência, que discuti longamente com o QuantStart (veja aqui).
O que é usado para armazenar dados?
Existem três maneiras principais de armazenar dados financeiros. Todos eles possuem diferentes graus de acesso, desempenho e capacidades estruturais. Vamos considerar cada um por sua vez.
Armazenamento de Arquivo Simples.
O armazenamento de dados mais simples para dados financeiros e a maneira como você provavelmente receberá os dados de qualquer fornecedor de dados é o formato de arquivo simples. Os arquivos simples geralmente usam o formato CSV (Comma-Separated Variable), que armazena uma matriz bidimensional de dados como uma série de linhas, com dados de coluna separados por um delimitador (geralmente uma vírgula, mas podem ser espaços em branco, como como um espaço ou tabulação). Para dados de precificação EOD, cada linha representa um dia de negociação através do paradigma OHLC (ou seja, os preços no aberto, alto, baixo e próximo do período de negociação).
A vantagem dos arquivos simples é sua simplicidade e capacidade de serem fortemente compactados para arquivamento ou download. As principais desvantagens residem na falta de capacidade de consulta e no baixo desempenho para iteração em grandes conjuntos de dados. O SQLite e o Excel atenuam alguns desses problemas, fornecendo certos recursos de consulta.
Armazenamento de documentos / NoSQL.
As bases de dados de armazenamento de documentos / NoSQL, embora certamente não sejam um conceito novo, ganharam proeminência significativa nos últimos anos devido ao seu uso em empresas "escala da web", como Google, Facebook e Twitter. Eles diferem substancialmente dos sistemas RDBMS, pois não há conceito de esquemas de tabelas. Em vez disso, há coleções e documentos, que são as analogias mais próximas das tabelas e registros, respectivamente. Existe uma ampla taxonomia de lojas de documentos, cuja discussão está bem fora deste artigo! No entanto, algumas das lojas mais populares incluem MongoDB, Cassandra e CouchDB.
As lojas de documentos, em aplicações financeiras, são mais adequadas a dados fundamentais ou metadados. Os dados fundamentais para ativos financeiros vêm em muitas formas, como ações corporativas, declarações de lucros, arquivamentos na SEC, etc. Assim, a natureza sem esquema dos bancos de dados NoSQL é bem adequada. No entanto, os bancos de dados NoSQL não são bem projetados para séries temporais, como dados de preços de alta resolução e, portanto, não os consideraremos mais neste artigo.
Sistemas de gerenciamento de banco de dados relacional.
Um sistema de gerenciamento de banco de dados relacional (RDBMS) faz uso do modelo relacional para armazenar dados. Esses bancos de dados são particularmente adequados aos dados financeiros porque diferentes "objetos" (como trocas, fontes de dados, preços) podem ser separados em tabelas com relacionamentos definidos entre eles.
O RDBMS faz uso da Linguagem de Consulta Estruturada (SQL) para realizar consultas de dados complexas em dados financeiros. Exemplos de RDBMS incluem Oracle, MySQL, SQLServer e PostgreSQL.
As principais vantagens do RDBMS são sua simplicidade de instalação, independência de plataforma, facilidade de consulta, facilidade de integração com os principais softwares de backtest e recursos de alto desempenho em larga escala (embora alguns argumentem que este último não é o caso!). Suas desvantagens costumam ser devidas à complexidade da customização e às dificuldades de alcançar o desempenho, sem o conhecimento subjacente de como os dados do RDBMS são armazenados. Além disso, eles possuem esquemas semi-rígidos e, portanto, os dados geralmente precisam ser modificados para se adequarem a esses projetos. Isso é diferente dos armazenamentos de dados NoSQL, em que não há esquema.
Para todos os artigos sobre implementação de precificação histórica futura no QuantStart, faremos uso do MySQL RDBMS. É livre, de código aberto, multiplataforma, altamente robusto e seu comportamento em escala é bem documentado, o que o torna uma escolha sensata para o trabalho quant.
Como os dados históricos são estruturados?
Existe um corpo significativo de teorias e pesquisas acadêmicas realizadas no campo da ciência da computação para o design ideal para armazenamentos de dados. No entanto, não vamos entrar em muitos detalhes, pois é fácil se perder em minúcias! Em vez disso, apresentarei um padrão comum para a construção de um mestre de segurança de ações, que você pode modificar conforme achar adequado para seus próprios aplicativos.
A primeira tarefa é definir nossas entidades, que são elementos dos dados financeiros que serão mapeados para as tabelas no banco de dados. Para um banco de dados mestre de ações, prevejo as seguintes entidades:
Trocas - Qual é a fonte original final dos dados? Fornecedor - De onde é obtido um determinado ponto de dados? Instrumento / Ticker - O ticker / símbolo para o patrimônio ou índice, juntamente com informações corporativas da empresa ou fundo subjacente. Preço - O preço real de um determinado título em um determinado dia. Ações corporativas - A lista de todos os desdobramentos ou ajustes de dividendos (isso pode levar a uma ou mais tabelas), necessários para ajustar os dados de precificação. Feriados Nacionais - Para evitar a classificação incorreta de feriados comerciais como erros de dados perdidos, pode ser útil armazenar feriados nacionais e referências cruzadas.
Existem problemas significativos no que diz respeito ao armazenamento de tickers canônicos. Eu posso atestar isso com experiência em primeira mão em um fundo de hedge lidando com esse problema exato! Diferentes fornecedores usam métodos diferentes para resolver tickers e, assim, combinar várias fontes de precisão. Além disso, as empresas tornam-se falidas, estão expostas a atividades de fusões e aquisições (ou seja, adquirem e mudam nomes / símbolos) e podem ter várias classes de ações negociadas publicamente. Muitos de vocês não terão que se preocupar com isso, porque seu universo de tickers estará limitado aos constituintes maiores do índice (como o S & P500 ou o FTSE350).
Como os dados são avaliados quanto à precisão?
Dados históricos de preços de fornecedores são propensos a muitas formas de erro:
Ações Corporativas - Tratamento incorreto de desdobramentos e ajustes de dividendos. É preciso ter absoluta certeza de que as fórmulas foram implementadas corretamente. Picos - Pontos de preços que excedem em muito determinados níveis históricos de volatilidade. É preciso ter cuidado aqui, pois esses picos ocorrem - veja o May Flash Crash para um exemplo assustador. Os picos também podem ser causados por não levar em conta os desdobramentos quando eles ocorrem. Os scripts de filtro de pico são usados para notificar os operadores sobre essas situações. Agregação do OHLC - Dados OHLC livres, como do Yahoo / Google, são particularmente propensos a situações de 'agregação de tick ruim', onde pequenas trocas processam pequenos negócios bem acima dos preços de troca 'principais' do dia, levando a máximas / mínimos inflacionados excessivamente uma vez agregado. Isso é menos um "erro" como tal, mas é mais um problema para ser cauteloso. Dados em falta - Os dados em falta podem ser causados por falta de negociações em um determinado período de tempo (comum em dados de resolução de segundo / minuto de small-caps sem liquidez), por feriados ou simplesmente por um erro no sistema de troca. Os dados em falta podem ser preenchidos (isto é, preenchidos com o valor anterior), interpolados (linearmente ou de outro modo) ou ignorados, dependendo do sistema de negociação.
Muitos desses erros dependem de julgamento manual para decidir como proceder. É possível automatizar a notificação de tais erros, mas é muito mais difícil automatizar sua solução. Por exemplo, é preciso escolher o limite para ser informado sobre picos - quantos desvios padrão usar e durante o período de lookback? Um stdev muito alto perderá alguns picos, mas muito baixo e muitos noticiários incomuns levarão a falsos positivos. Todas essas questões exigem um julgamento avançado do trader de quantificação.
Também é necessário decidir como corrigir erros. Os erros devem ser corrigidos assim que forem conhecidos e, em caso afirmativo, deve ser realizada uma trilha de auditoria? Isso exigirá uma tabela extra no banco de dados. Isso nos leva ao tópico de back-filling, que é uma questão particularmente insidiosa para o backtesting. Trata-se de correção automática de dados ruins a montante. Se o fornecedor de dados corrigir um erro histórico, mas uma estratégia de negociação com backtested estiver em produção com base em pesquisas de dados ruins anteriores, é necessário tomar decisões com relação à eficácia da estratégia. Isso pode ser um pouco mitigado por estar plenamente ciente de suas métricas de desempenho da estratégia (em particular, a variação em suas características de ganhos / perdas para cada negociação). Estratégias devem ser escolhidas ou projetadas de tal forma que um único ponto de dados não possa distorcer o desempenho da estratégia em grande medida.
Como esses processos são automatizados?
O benefício de escrever scripts de software para realizar o download, armazenamento e limpeza dos dados é que os scripts podem ser automatizados por meio de ferramentas fornecidas pelo sistema operacional. Em sistemas baseados em UNIX (como Mac OSX ou Linux), pode-se fazer uso do crontab, que é um processo em execução contínua que permite que scripts específicos sejam executados em horários definidos ou em períodos regulares. Existe um processo equivalente no MS Windows conhecido como o Agendador de Tarefas.
Um processo de produção, por exemplo, pode automatizar o download de todos os preços do final do dia do S & P500 assim que forem publicados por meio de um fornecedor de dados. Em seguida, executará automaticamente os scripts de filtragem de dados e spike em falta, alertando o profissional por email, SMS ou outra forma de notificação. Neste ponto, todas as ferramentas de backtesting terão automaticamente acesso a dados recentes, sem que o operador tenha que levantar um dedo! Dependendo se o seu sistema de negociação está localizado em um desktop ou em um servidor remoto, você pode escolher, no entanto, ter um processo semi-automatizado ou totalmente automatizado para essas tarefas.
Como os dados são fornecidos para software externo?
Quando os dados são atualizados automaticamente e residem no RDBMS, é necessário inseri-los no software de backtesting. Esse processo será altamente dependente de como o seu banco de dados está instalado e se o seu sistema de negociação é local (por exemplo, em um computador desktop) ou remoto (como em um servidor Exchange co-localizado).
Uma das considerações mais importantes é minimizar a entrada / saída excessiva (E / S), pois isso pode ser extremamente caro, tanto em termos de tempo quanto de dinheiro, assumindo conexões remotas onde a largura de banda é cara. A melhor maneira de abordar esse problema é mover somente os dados por uma conexão de rede que você precisa (via consulta seletiva) ou exportar e compactar os dados.
Muitos RDBMS suportam a tecnologia de replicação, que permite que um banco de dados seja clonado em outro sistema remoto, geralmente com um grau de latência. Dependendo da sua configuração e quantidade de dados, isso pode ser apenas da ordem de minutos ou segundos. Uma abordagem simples é replicar um banco de dados remoto em uma área de trabalho local. No entanto, esteja avisado que os problemas de sincronização são comuns e consomem muito tempo para serem corrigidos!
Tentarei discutir algumas situações de exemplo abaixo, mas há muitas maneiras de abordar esse problema e elas serão altamente específicas para sua configuração individual:
Se você estiver usando o MySQL, então você pode fazer uso de uma linguagem de script de código aberto, como o Python (através da biblioteca MySQLdb ou SQLAlchemy ORM) para se conectar ao banco de dados e executar consultas sobre ele.
Bibliotecas de análise de dados mais recentes, como pandas, permitem acesso direto ao MySQL (veja este tópico para um exemplo).
Você também pode usar seu idioma / ambiente favorito (C ++, C #, Matlab) e um link ODBC para se conectar a uma instância do MySQL.
MS SQLServer.
SQLServer é projetado para ser facilmente conectado a idiomas MS, como C # e Visual Basic via o LINQ ORM. Você também pode se conectar ao SQLServer com Python, via pyODBC.
Existem claramente muitas outras combinações de armazenamento de dados e ambiente de backtesting. No entanto, vou deixar a discussão dessas configurações para artigos posteriores!
Próximos passos.
Em artigos futuros, vamos discutir os detalhes técnicos de implementação para mestres de valores mobiliários. Em particular, vamos instalar o MySQL, configurá-lo para dados de preços e obter dados EOD do Yahoo / Google finance e explorá-los através da biblioteca de análise de dados do pandas.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.
A regra 10 é um dos erros comuns de design de banco de dados.
Eu sou totalmente novo no design de banco de dados e realmente aprecio o seu artigo! Eu me vejo em um beco sem saída no meu projeto de design e saber o tempo o problema está dentro da própria estrutura de banco de dados porque eu não consigo ver o caminho para implementar a minha estrutura desejada no quadro SQL.
Eu adoraria entrar em contato e fazer uma pergunta simples, mas não é possível encontrar detalhes de contato aqui. Por favor, entre em contato!
é o 8º ponto aceitável para o grande conjunto de dados também?
Você pode me dizer qual software ou ferramenta você usa para desenhar a tabela na imagem?
Parece incrível e eu gosto disso.
Gostaria de acrescentar que a redundância nem sempre é uma coisa ruim.
se torna a manutenção clara e fácil.
Notícias Gerais Sugestão Pergunta Bug Resposta Joke Praise Rant Admin.
Use Ctrl + Esquerda / Direita para alternar mensagens, Ctrl + Up / Down para alternar threads, Ctrl + Shift + Esquerda / Direita para alternar páginas.
Web01 | 2.8.180218.2 | Última atualização em 26 de fevereiro de 2014.
Todo o resto Copyright & copy; CodeProject, 1999-2018.
Design do banco de dados do sistema de negociação
+44 (0) 1747 822616.
Procurando por ajuda?
Vídeo tutorial.
Download de Amostra.
Walk Through - Criando um banco de dados de controle de estoque do MS Access.
Se você quiser tentar criar seu próprio banco de dados de controle de estoque, continue lendo.
Neste artigo, você será guiado por algumas instruções passo a passo para criar seu próprio banco de dados de gerenciamento de estoque ou sistema de controle de estoque no MS Access. Incluímos também algumas dicas e sugestões baseadas em nossos muitos anos de experiência na criação de bancos de dados Access para empresas reais. Para baixar o banco de dados que faremos neste tutorial de graça, clique no link acima. Você também pode seguir este tutorial usando nosso vídeo do YouTube que explica cada etapa e fornece demonstrações para ajudá-lo a fazer isso sozinho; Clique no link acima para abrir o vídeo em uma nova guia / janela.
Observe que, para seguir este passo a passo, ou executar o banco de dados gratuito finalizado vinculado acima, você deve ter uma versão completa do Microsoft Access instalada no seu computador.
Pode parecer óbvio, mas um dos pontos mais importantes ao criar seu banco de dados de controle de estoque é decidir exatamente o que você precisa fazer e para que serve. Obter o design correto é muito mais fácil quando você entende a finalidade do banco de dados. Um banco de dados bem projetado será mais simples de manter e adaptar-se posteriormente se seus requisitos forem alterados.
Por exemplo, o banco de dados simples que estamos criando precisa ser capaz de:
Registrar pedidos de clientes Rastrear níveis de estoque Avisar quando as peças precisarem ser reordenadas.
Pense nos detalhes da maneira como sua empresa funciona. Cada cliente solicita um tipo de item de cada vez, ou seus clientes solicitam uma série de peças ou itens de você todos ao mesmo tempo? Você tem apenas um fornecedor para cada peça que você armazena? Você pede uma gama de itens de cada fornecedor ou cada fornecedor fornece apenas um tipo de item? Seu design também será diferente se você armazenar itens para fabricação em vez de vender. Mantenha as respostas a estas perguntas em mente quando entramos na próxima etapa.
Defina as tabelas necessárias.
Informações em um banco de dados são mantidas em tabelas. Nesse ponto, você deve ter alguma idéia das informações que o banco de dados precisa manter para atingir suas metas. Você precisa categorizar essas informações em um conjunto de tabelas. Para começar, você nem precisa fazer isso no Access, basta fazer uma lista manualmente ou em outro programa.
As tabelas em nosso banco de dados de exemplo são: Peças, Clientes, Pedidos, PartTypes, PurchaseOrders e Suppliers. Para simplificar, vamos supor que cada cliente pede apenas uma peça de cada vez e que encomendamos apenas uma peça de um fornecedor de cada vez. Claro que isso pode não ser verdade para você; seus clientes podem pedir uma seleção inteira de itens juntos, e você provavelmente comprará uma variedade de itens de uma só vez. Nesse caso, você precisará de uma tabela que contenha todas as partes vinculadas a cada pedido, provavelmente denominadas Itens do pedido.
Nós fizemos um tipo semelhante de suposição sobre os clientes, assumindo que eles são todos pessoas individuais ou pequenas empresas; para clientes de grandes empresas com vários endereços ou números de telefone para armazenar você talvez precisaria de um conjunto mais avançado de tabelas para armazenar todas as informações de forma consistente. Mas tudo isso é um tópico mais avançado, então vamos mostrar a maneira simples de usar tabelas com objetivos mais básicos.
Configure campos dentro das tabelas.
Dentro de uma tabela, as informações são mantidas nos campos "& # 8220; & # 8221 ;. Basicamente, um campo é a informação específica sobre a coisa pela qual a mesa é responsável. Campos típicos na tabela Parts, por exemplo, podem ser PartNumber, PartDescription, Supplier e StockLevel. Se você imaginar uma tabela como uma grade tabular, os campos serão os títulos das colunas, com cada linha representando uma entrada na tabela ou registro.
Todas as tabelas devem ter um campo de identificação exclusivo chamado de chave primária, que não pode ser o mesmo para nenhum registro ou estar vazio. Então, em nossa tabela de peças, o PartNumber é único para cada parte e cada parte tem uma, então podemos usá-la. Mas para outras tabelas onde isso pode não ser o caso, podemos inventar números de ID ou códigos para uso interno no sistema para garantir que ele possa identificar exclusivamente qualquer entrada em qualquer tabela. No Access, há algo chamado campo de numeração automática que você pode usar como chave primária, se não houver outra opção ou preferência óbvia, que apenas atribua um novo número sequencial a cada registro na tabela.
Para cada campo na tabela, você precisa escolher um tipo de dados para mostrar o tipo de dado que será mantido, como Número, Texto, Data / Hora ou Moeda. Dentro de cada tipo, você pode especificar a natureza exata dos dados, como o número de caracteres para um texto. Você já pode usar números de peça em sua empresa, e o formato usado provavelmente ajudará a decidir o tipo de dados para o campo Part Number. Seus números de peça podem ser algo como ACBD2222, caso em que você pode optar por usar uma cadeia de texto de 8 caracteres.
Agora vamos imaginar que o nosso negócio lida com um grande número de diferentes partes que classificamos em diferentes tipos. Temos uma tabela chamada PartTypes, que lista os diferentes tipos de partes. Queremos que nossa tabela de peças tenha um campo que possa ser vinculado às PartTypes para que cada parte possa ser atribuída a um tipo. O campo na tabela de peças precisa ser o mesmo que o campo de chave primária (a coisa que identifica o registro no sistema) na tabela PartTypes, na qual criamos um código de 1 caractere. A tabela de peças também seria relacionada de maneira semelhante à tabela Fornecedores, para que você possa descobrir quem fornece uma peça específica.
Fazendo nosso design no papel.
Pense em como você estará usando os campos e certifique-se de defini-los da maneira mais lógica para seus objetivos. Por exemplo, pode fazer sentido armazenar os nomes das pessoas como Primeiro Nome e Sobrenome separadamente, em vez de apenas um campo, para que você possa classificar e listar nomes em ordem alfabética (de sobrenome). Uma dica que achamos útil é manter os endereços postais como um campo, em vez de dividi-los em elementos individuais do endereço, como a Linha de Endereço 1, a Linha de Endereço 2, a Cidade, o Condado e o Código Postal. Isso torna muito mais fácil incorporar endereços em formulários e relatórios e facilita a entrada de dados, pois o Access fica feliz em armazenar as várias linhas em um campo.
Ao pensar em quais campos você precisa, verifique se todos eles têm nomes exclusivos, a menos que dois campos realmente contenham as mesmas informações. Só neste caso você deve dar a eles o mesmo nome, como no PartTypeCode anterior. Algo para manter em mente com seus nomes é que, se você quiser avançar para o uso de consultas SQL ou o código Visual Basic for Applications (VBA) com seu banco de dados, você encontrará a vida mais fácil se não houver espaços nos nomes de tabela ou de campo. É por isso que estamos escrevendo PartTypes como uma palavra, em vez de ter o espaço.
Outra dica a ter em mente é que é uma prática ruim dar a um campo um nome que já esteja sendo usado nos bastidores pelo Access para outra coisa. Essas chamadas "palavras reservadas" inclua itens como & # 8216; nome & # 8217 ;, & # 8216; data & # 8217 ;, & # 8216; nível & # 8217; e & # 8216; dinheiro & # 8217 ;, entre muitos outros. Você pode procurar uma lista completa de palavras reservadas do Access on-line para garantir que nenhum dos seus campos use um. Isso pode ajudar a evitar confusão no mecanismo de banco de dados entre palavras predefinidas e seus nomes de campo, que, se não forem verificados, poderão causar sérios erros.
Crie suas tabelas no Access.
Para criar uma tabela de peças e definir seus campos:
No MS Access 2013/2010/2007, clique na guia Criar na Faixa de Opções, em Design de Tabela. Isso abre uma nova tabela no modo de design. Cada linha na exibição de design representa um campo na tabela. (No Access 2003, clique em Tabelas na lista de Objetos e, em seguida, clique no botão Novo, que abre uma caixa de diálogo chamada Nova Tabela. Finalmente, selecione Exibição de Design e clique em OK.) Clique na primeira coluna, na linha superior. Digite o nome do primeiro campo (PartNo) Use a tecla Tab para ir para a próxima coluna onde definimos o tipo de dados. Clique no menu suspenso e selecione Texto. Use a tecla Tab para ir para a próxima coluna e insira uma descrição para o novo campo. Como esta será a chave primária da tabela, clique no botão da chave primária na barra de ferramentas. Na guia Geral, na parte inferior da janela, clique na linha Tamanho do campo e insira 10 para definir uma cadeia de texto com 10 caracteres. Na guia Geral, clique na linha Legenda e digite o rótulo desejado para esse campo na tela (por exemplo, Número da peça). Clique na segunda linha para definir o próximo campo na tabela. E assim por diante. Quando terminar de adicionar campos à tabela, feche-a clicando no X no canto superior direito. O Access pedirá que você nomeie a tabela. Digite "Peças" e "# 8221".
A tabela de peças do banco de dados de controle de estoque de exemplo contém os seguintes campos:
String de texto de 10 caracteres.
Número de peça exclusivo para definir cada parte.
Sequência de texto de 50 caracteres.
Nome / descrição desta parte.
String de texto de 20 caracteres.
A unidade de medida para esta parte, e. Kg, Metros, caixa de 10.
Seqüência de texto de 6 caracteres.
O fornecedor desta peça.
O número desta parte no estoque atual.
O número mínimo desta peça em estoque antes de você precisar reordenar.
O preço de custo desta peça.
O preço de venda desta peça.
String de texto de 1 caractere.
O tipo de parte disso é.
Cadeia de texto de 255 caracteres.
Dica: geralmente é útil incluir um campo do Notes para qualquer outra informação que você queira adicionar posteriormente.
A tabela de peças no modo Design (Access 2013)
A tabela Parts no modo Design (Access 2003)
As capturas de tela acima mostram a tabela Parts de nosso banco de dados de controle de estoque no modo Design. O uso da Visualização de design permite definir todos os campos da tabela, especificar seus tipos de dados, descrevê-los e definir seu formato.
Sugestão & # 8211; Complete a descrição do campo. Quando você usa o Assistente de Formulários para criar formulários para você mais tarde, essa descrição será exibida na barra de status para ajudar os usuários.
Sugestão & # 8211; Se o seu campo tiver um nome abreviado ou não tiver espaços, use a área Legenda para escrever seu nome em inglês simples. Essa legenda aparecerá em formulários produzidos pelo Assistente de formulário. Por exemplo, se o seu campo é chamado POQty, insira Quantidade na legenda.
A tabela Customers é a seguinte:
String de texto de 8 caracteres.
Referência exclusiva de oito caracteres para este cliente com base nas primeiras quatro letras do sobrenome (por exemplo, SMIT0001). Isso facilitará a localização de clientes individuais. Este campo é a chave primária.
String de texto de 20 caracteres.
O primeiro nome deste cliente.
Sequência de texto de 25 caracteres.
O sobrenome deste cliente.
Cadeia de texto de 255 caracteres.
O endereço deste cliente.
String de texto de 15 caracteres.
O número de telefone deste cliente.
A tabela de clientes acima é projetada para uma empresa cujos clientes são predominantemente indivíduos, conforme assumido anteriormente. Quando seus clientes são principalmente grandes empresas, e você pode ter vários contatos em cada negócio, ou cada empresa pode ter vários sites, então você precisará de uma solução mais complexa.
Depois de pegar o jeito, passe pelo restante das tabelas planejadas configurando-as também. Você verá suas novas tabelas aparecendo no navegador de objetos à esquerda à medida que você as faz (pressione F11 para ativar este navegador se não puder vê-lo).
Os relacionamentos são configurados no banco de dados, para mostrar a maneira como uma tabela se relaciona com outra. Um relacionamento um-para-muitos é o tipo mais comum de relacionamento. Nesse relacionamento, um registro em uma tabela pode ter mais de um registro correspondente em uma segunda tabela, mas cada registro na segunda tabela pode ter apenas um registro correspondente na primeira tabela. Por exemplo, cada parte pode ter apenas um tipo de peça, mas para cada tipo de peça provavelmente haverá muitas partes desse tipo.
Se cada parte tiver apenas um fornecedor, como no nosso exemplo, esse é outro relacionamento direto de um para muitos. Se cada peça puder ser fornecida por vários fornecedores diferentes, você precisará de um design diferente.
Em nosso banco de dados de exemplo, os seguintes relacionamentos entre tabelas são obrigatórios.
Fornecedores - Peças, para especificar o fornecedor de cada peça.
Parts - PurchaseOrders, mostrando a peça solicitada em um pedido.
Peças - Pedidos, mostrando a peça solicitada por um cliente.
Clientes - Pedidos, mostrando o cliente para cada pedido.
PartTypes - Partes, classificando cada parte em um tipo de peça específico.
Como exemplo, mostraremos como configurar o relacionamento entre as partes Parts e PartTypes. Antes de começar a fazer relacionamentos, é uma boa idéia escrever algumas informações de amostra em suas tabelas que apresentem entradas que sejam tão longas quanto você acha que você usará. Isso ajudará um pouco com algumas configurações que você precisará ajustar mais tarde.
Configure o campo PartTypeCode na tabela Part Types como uma cadeia de texto de um único caractere que define o tipo de peça. Tornar este campo a chave primária Abra a tabela Parts no modo Design. Adicione um campo PartTypeCode à tabela Parts. Certifique-se de que também seja uma cadeia de texto de caractere único. Agora clique na coluna Data Type do campo Part type para exibir uma seta para baixo. Clique aqui para exibir uma lista suspensa e selecione Assistente de pesquisa. Selecione "Eu quero que a coluna de pesquisa pesquise os valores em uma tabela ou consulta & # 8221 ;. Clique em Next. Na lista de tabelas exibidas, selecione a tabela PartTypes. Clique em Next. Clique nos campos que você deseja incluir na sua coluna de pesquisa. Neste caso, vamos selecionar os dois campos. Clique em Next. Uma ordem de classificação pode ser selecionada, se necessário. Selecione Descrição. Clique em Next. A próxima etapa permite definir a largura das colunas em sua coluna de pesquisa e especificar se você deseja que a coluna-chave (a coluna que contém a chave do campo principal) seja exibida. Por padrão, a coluna-chave não é exibida e, no nosso caso, apenas queremos visualizar a descrição, portanto, deixe o carrapato na caixa. Agora defina a largura da sua coluna de pesquisa, arrastando a borda para a posição desejada. Se você já tiver inserido alguns dados na tabela PartTypes, isso será exibido para ajudá-lo a ajustar a coluna à largura do conteúdo provável. Clique em Next. Agora selecione o rótulo da sua coluna de pesquisa. O rótulo sugerido geralmente estará correto. Clique em Concluir para concluir o Assistente de pesquisa. Você será perguntado se deseja salvar a tabela para que os relacionamentos possam ser criados. Clique em Sim Para concluir o relacionamento, selecione Ferramentas, Relacionamentos ou clique no botão Relacionamentos na barra de ferramentas para exibir a janela de relacionamentos. Você verá a tabela Parts e a tabela PartTypes com uma linha ligando o campo PartType em Parts com o campo PartTypeCode em PartTypes. Passe o mouse sobre essa linha e escolha Editar Relacionamento (ou clique duas vezes na linha). Marque a caixa Enforce Integrity Referential. Você deve sempre assinalar isso, caso contrário, o relacionamento tem pouco valor. Por exemplo, se você definiu três tipos de peças diferentes na tabela Tipos de peça: E & # 8211; Eletrônica, S & # 8211; Software, H & # 8211; Hardware, assinalando a caixa Enforce Integrity Referential (Integridade Referencial Reforçada), garantirá que você não será capaz de definir uma nova peça como qualquer outro tipo de peça. Além disso, se você tentar excluir um tipo de peça da tabela PartTypes, quando as peças na tabela Parts tiverem esse tipo de peça, o banco de dados o avisará. Marque a caixa Cascade Update Related Fields. Isso significa que você pode alterar a chave primária na tabela principal (por exemplo, a tabela PartTypes) e ela será atualizada automaticamente na tabela relacionada (Parts). A terceira caixa é Cascade Delete Related Fields. Assinalar isso significa que, se você excluir um registro, por exemplo Software, da tabela principal (por exemplo, PartTypes), todos os registros na tabela relacionada (Parts) com esse tipo de peça também serão excluídos. Normalmente você não iria querer que isso acontecesse & # 8211; Se você tivesse partes do tipo Software na tabela de peças, você não desejaria excluir esse tipo de peça, portanto, deixe a caixa desmarcada. Provavelmente haverá exemplos em seu banco de dados em que você deseja marcar a caixa Cascade Delete Related Records. Normalmente, aplica-se quando uma tabela forma informação suplementar para outra & # 8211; por exemplo, se você tivesse tabelas Orders e OrderItems (listando vários itens em um Pedido), você desejaria excluir todos os OrderItems se excluísse um Order inteiro.
A janela de relacionamentos no Access 2013.
A janela de relacionamentos no Access 2003.
Então, agora que você viu como estabelecer um relacionamento, você deve passar pelas tabelas que estabelecem os relacionamentos que você planejou em seu design. Uma vez que você fez todos eles, podemos passar para a parte final do nosso banco de dados.
Criando uma consulta de reordenação.
Em geral, as consultas são usadas para extrair dados e informações do banco de dados. Em nosso exemplo, queremos saber se temos menos do que o nível mínimo de estoque para todas as peças, para que saibamos quando você precisa pedir mais. Você pode extrair todos os tipos de outras informações com consultas. Você pode querer saber todas as peças fornecidas por um determinado fornecedor ou quantas vezes um determinado cliente solicitou no ano passado. Frequentemente, você extrairá as informações usando uma consulta e, em seguida, usará um relatório do Access para apresentar os dados de maneira clara, mas aqui estaremos fazendo a consulta.
Agora, vamos ver como configurar uma consulta para mostrar quais partes estão abaixo do nível mínimo de estoque e informar os fornecedores de quem elas devem ser reordenadas.
Para configurar uma consulta para mostrar quais partes estão abaixo do nível mínimo de estoque e os fornecedores de quem elas devem ser solicitadas:
Na guia Criar, clique em Design da Consulta (Access 2013/2010/2007). Ou, em Consultas, clique em Novo, selecione Design e clique em OK (Access 2003). Na caixa Mostrar Tabela, selecione Peças. Clique em Adicionar. Selecione fornecedores. Clique em Adicionar. Clique em Fechar. A grade de design de consulta agora é exibida com as tabelas escolhidas acima. Os campos a serem incluídos na consulta são adicionados arrastando-os da tabela para a grade ou clicando duas vezes sobre eles. Os campos que exigimos são PartNo e StockLevel da tabela Parts e SupplierName e Address da tabela Fornecedores, portanto, selecione-os. Queremos apenas exibir peças cujo nível de estoque seja menor que o nível mínimo de estoque para essa peça. Isso é feito definindo um critério para esse campo. Digite & lt; = [MinStockLevel] na linha de critérios do campo Nível de estoque (coluna). Clique no X no canto superior direito da janela para fechar a consulta. O Access perguntará se você deseja salvar alterações na consulta e solicitará um nome para a consulta (por exemplo, LowStockLevels). Agora, clique duas vezes na consulta que você acabou de criar para visualizar as peças com baixos níveis de estoque.
A grade de design da consulta no Access 2010.
A consulta deve estar visível no navegador de objetos à esquerda. Clique duas vezes na consulta para visualizar as peças com baixos níveis de estoque depois de ter alguns dados em funcionamento no sistema.
Mais uma coisa sobre a consulta: as linhas entre as tabelas no conjunto de dados da consulta são chamadas de Joins. As junções são criadas automaticamente entre tabelas quando existem campos que já possuem um relacionamento entre eles ou entre uma chave primária e outro campo com o mesmo nome. Normalmente, você gostaria de participar aqui, mas haverá casos em que você não deseja ingressar nesses campos por vários motivos, portanto, lembre-se de que talvez seja necessário verificar todas as associações depois que elas forem criadas.
As propriedades de associação nas consultas são muito importantes quando sua consulta usa mais de uma tabela. Se a consulta não lhe der os resultados esperados, verifique-os clicando com o botão direito do mouse na linha que une as duas tabelas no modo Design. Aqui, você pode escolher se deseja apenas ver as peças que têm um fornecedor ou todas as peças com baixo estoque, independentemente de terem um fornecedor (escolhendo "Incluir todos os registros de & # 8216; Peças" e somente esses registros de "Fornecedores", onde os campos unidos são iguais. & # 8221;). Você pode querer usar essa opção neste exemplo. A terceira opção é o contrário disso, portanto, mostre todos os fornecedores, mesmo que eles não forneçam peças de baixo estoque, o que, nesse caso, não faria sentido, portanto, ignore-o.
Então, agora nós completamos o banco de dados de acordo com o nosso design. Podemos inserir todos os dados de que precisamos e nos informará quando reordenar os produtos. É claro que os usos potenciais de um banco de dados são muitos, então agora vamos discutir brevemente algumas maneiras de expandir esse banco de dados para torná-lo mais útil e mais fácil de usar.
No MS Access, você usa formulários para exibir, inserir e editar dados e controlar o banco de dados. Quando você configura todas as tabelas e relacionamentos em seu banco de dados, o Assistente de Formulários é muito útil na configuração de formulários baseados em suas tabelas, para entrada de dados, visualização e edição. Você pode então fazer alterações no formulário produzido pelo Assistente de Formulários, adicionando e editando os recursos conforme necessário.
Formulários no MS Access também podem ser usados para exibir botões e links para fornecer acesso a todos os outros formulários e relatórios. Nós sempre configuramos uma forma desse tipo e a chamamos de tela frontal. A configuração de um formulário claro de nível superior facilita as pessoas a usar o sistema sem conhecimento do banco de dados.
Os relatórios do MS Access permitem exibir informações ao usuário de maneira conveniente, que podem ser visualizadas na tela e impressas, se necessário. Normalmente, as informações do relatório virão de uma consulta. O Assistente de Relatório ajudará a criar relatórios simples. Relatórios mais detalhados estão além do escopo deste artigo.
Você pode querer certificar-se de que ninguém que não é confiável possa adulterar seus dados. A maneira mais simples de proteger o banco de dados é definir uma senha.
Para definir ou alterar a senha, o banco de dados deve ser aberto para uso exclusivo. Para fazer isso, abra o MS Access, use Arquivo, Abrir para selecionar o banco de dados. Clique na caixa Abrir à direita do botão Abrir e selecione Abrir exclusivo. Selecione Ferramentas, Segurança, Definir Senha do Banco de Dados (Access 2003). Ou selecione a guia Database Tools na Ribbon e clique em Set Database Password (Access 2007). Ou vá para o menu Arquivo, selecione o submenu Informações e clique em Definir senha do banco de dados (Access 2010/2013) Digite a senha desejada e digite novamente para verificar. A senha está agora definida.
Ao criar um banco de dados de controle de estoque grande ou um que contenha informações confidenciais, você pode exigir segurança mais complexa. Por exemplo, você pode querer restringir o acesso a algumas das informações no banco de dados ou permitir que alguns usuários visualizem as informações no banco de dados, mas não alterá-las. O MS Access permite definir tipos de usuários e aplicar níveis de segurança, para que você possa especificar quais ações estão disponíveis para cada tipo de usuário. Isso está além do escopo deste artigo, mas é chamado de "segurança em nível de usuário" se você quiser pesquisá-lo mais.
O Access permite que você escreva um código personalizado em seu Visual Basic for Applications, conhecido como VBA. Você pode configurar um código para ser executado quando você executar determinadas ações ou apenas no comando. Isso permite que você automatize muitos processos. Por exemplo, você pode querer que o seu sistema ajuste automaticamente os níveis de estoque registrados sempre que uma entrega for recebida, ou você pode querer que o campo Referência do cliente seja criado automaticamente a partir do sobrenome do cliente. Usar o VBA para automatizar recursos pode tornar um banco de dados mais poderoso e fácil de usar, mas requer conhecimento de programação, por isso é um passo mais avançado para o desenvolvimento de seu banco de dados.
Então, isso é tudo para este artigo tutorial. Se você gostaria de continuar aprendendo sobre como criar bancos de dados de gerenciamento de estoque no MS Access, por favor clique aqui para o nosso artigo adicional sobre relacionamentos muitos-para-muitos.
Se você decidir que construir seu próprio banco de dados de controle de estoque não é para você, afinal, nós da Software-Matters estamos felizes em oferecer conselhos sobre alternativas através de nossa consulta inicial gratuita. Contacte-nos em 01747 822616 ou preencha um formulário de inquérito aqui e nós entraremos em contato com você. Obrigado pela leitura!
Se você gostou deste artigo ou achou útil, por que não contar aos outros sobre isso?
Design do banco de dados do sistema de negociação
Bem-vindo ao Home do Open Java Trading System.
O Open Java Trading System (OJTS) pretende ser uma infra-estrutura comum para desenvolver sistemas de negociação de ações. Consiste em quatro partes: a coleta de dados brutos pela internet, o reconhecimento de sinais de negociação, um módulo de visualização e módulos para conectar as interfaces programáticas de plataformas de negociação, como bancos. O objetivo do projeto é fornecer uma infra-estrutura comum Java independente (independente de plataforma) para desenvolvedores de sistemas de negociação. Alguns dos aspectos que devem ser abordados são fornecer um esquema de banco de dados compatível com SQL92 comum para armazenar dados financeiros, interfaces Java comuns para como trocar dados entre diferentes módulos, visualização de dados financeiros brutos e sinais de negociação e vários outros aspectos comuns necessários para criar um sistema final de negociação.
Por causa do meu trabalho e da minha família, não encontro mais tempo para melhorar a OJTS. Eu continuo atualizando a seção de links abaixo que irá guiá-lo para projetos java open source mais ativos nessa área, no entanto.
Na verdade, como consequência do meu interesse pela dinâmica dos mercados de ações, comecei uma jornada para os detalhes mais profundos da economia nacional, a fim de entender as taxas de câmbio. Este tópico finalmente me levou a um estudo mais profundo do dinheiro em si como a unidade métrica que usamos na economia para medir "valor", "sucesso" ou "utilidade". Este tópico acabou por ser extremamente interessante, mas ao mesmo tempo foi muito difícil encontrar qualquer informação sobre como funciona o nosso sistema monetário. Circule e pergunte às pessoas de onde vem o dinheiro, quem o cria e o que determina seu valor. Você vai notar que até mesmo as pessoas que têm um mestrado ou doutorado. em economia não vai saber esses detalhes. Ah, sim, eles responderão em termos técnicos enigmáticos, mas não conseguirão desenhar um diagrama simples que descreva o processo.
H. G. Wells é relatado para ter dito:
"Escrever de moeda é geralmente reconhecido como uma prática censurável, na verdade quase indecente. Os editores irão implorar ao escritor quase que em lágrimas para não escrever sobre dinheiro, não porque seja um assunto desinteressante, mas porque sempre foi profundamente perturbador. "
Sugiro a qualquer pessoa que viva em uma sociedade democrática que leia sobre esse assunto. Afeta nossas vidas todos os dias em uma extensão que não pode ser exagerada! Na minha opinião, todo cidadão de um país democrático daquele mundo deveria saber de onde vem o nosso dinheiro. O mais provável é que você tenha acessado este site para procurar ferramentas que o ajudem a aumentar sua riqueza monetária. Entender a unidade métrica "dinheiro" (não importa se dólar ou euro) será um ingrediente importante em seu kit de ferramentas para ganhar dinheiro.
Se você tem pouco tempo e só pode dar ao luxo de ler um único livro sobre esse assunto, então eu sugiro que você leia Riqueza, riqueza virtual e dívida por Frederick Soddy. Eu consegui comprar uma cópia usada via Amazon por US $ 23,48, mas também existe uma versão online. Você precisará do plugin DjVu para lê-lo. Este livro foi publicado originalmente em 1929, mas ainda descreve os fatos reais muito bem. Mesmo que eu não concorde com todas as conclusões de Frederick Soddy, seu trabalho é estimulante e fará com que você faça as perguntas certas.
Lançamentos, correções de bugs e documentação atualizada.
Estou investigando como tornar o OJTS mais compatível com outros esforços do sistema de negociação java.
Existe um novo wiki disponível na ITSdoc, focado na distribuição de conhecimento no domínio dos sistemas de investimento e negociação. A ideia por trás do ITSdoc é ter uma plataforma de colaboração semelhante à wikipedia, ajudando a comunidade a compartilhar conhecimento.
Ontem lancei a versão 0.13 da biblioteca OpenJavaTradingSystem. Entre as novidades estão: Recuperação de dados para ações, fundos e moedas da OnVista. Implementação de manipulação de moeda e conversões. Os portfólios são implementados e você pode trabalhar com portfólios da mesma forma que com itens de papel de segurança únicos. Adicionado um quadro geral para a aplicação de algoritmos para séries temporais do mercado de ações. Comutado do shell interativo SISC / Scheme para ABCL / CommonLisp mais seu editor chamado "J". Adicionado um mecanismo geral de armazenamento em cache de dados para armazenar em cache os dados que já foram recuperados pela Web no sistema de arquivos. Além disso, muitas outras pequenas melhorias Se você estiver interessado nesta nova versão, você deve começar na seção de início rápido / captura de tela. O manual ainda não está atualizado, mas pode fornecer informações valiosas, no entanto, se você quiser usar a biblioteca em seu projeto. A documentação deve ser atualizada em breve.
D a c u e n t a ç ã o.
Documentos descrevendo os componentes internos do projeto. Documentação do Java Data Objects and Interface.
& gt; & gt; HTML & gt; PDF Projeto de documentação do sistema de investimento e negociação.
T e h o o o g y.
Blocos de Construção de Terceiros usados neste projeto.
O HSQLDB é o mecanismo de banco de dados fornecido com o projeto para que você possa começar imediatamente a usar o OJTS sem instalar um banco de dados de terceiros. Mas se você planeja usar outro banco de dados compatível com SQL92, essa é uma opção de configuração. Castor (licença: a licença Exolab)
Castor é uma estrutura de ligação de dados de código aberto para Java [tm]. É o caminho mais curto entre objetos Java, documentos XML e tabelas relacionais. O Castor fornece ligação Java para XML, persistência de Java para SQL e muito mais. Castor Doclet (licença: GNU LGPL v2.1)
Java doclet para gerar mapeamento e arquivos DDL para Castor JDO e Castor XML. TestMaker (licença: Licença Open Source do TestMaker)
A partir do projeto TestMaker, apenas a implementação de protocolos como HTTP ou HTTPS é usada para coletar dados da web. jCookie (licença: GNU LGPL v2.1)
A biblioteca jCookie é necessária para que as bibliotecas do TestMaker funcionem. htmlparser (licença: GNU LGPL v2.1)
A biblioteca htmlparser é usada para extrair os dados dos recursos da web. ABCL / CommonLisp (licença: GNU GPL v2)
ABCL (Armed Bear Common Lisp) é usado para implementar o coração algorítmico do projeto na linguagem de programação ANSI Common Lisp. JFreeChart (licença: GNU LGPL v2.1)
JFreeChart é usado para a visualização de dados financeiros como gráficos. JSci (licença: GNU LGPL v2.1)
O Joda Time substitui as classes originais de Data e Hora do JDK.
Links para outros projetos.
O grupo JavaTraders do Google pode ser a melhor entrada para você descobrir sobre outros sistemas e ferramentas de negociação baseados em Java.
O código do projeto é licenciado sob os termos da LGPL e toda a documentação que você encontra neste projeto está licenciada sob os termos da FDL.
Bancos de Dados Securities Master para Negociação Algorítmica.
Bancos de Dados Securities Master para Negociação Algorítmica.
No comércio algorítmico, o centro das atenções geralmente brilha no componente de modelo alfa do sistema de negociação completo. Essa é a parte do sistema que gera os sinais de negociação, antes da filtragem por um sistema de gerenciamento de risco ou de construção de portfólio. Como tal, os comerciantes de algo geralmente gastam uma parte significativa de seu tempo de pesquisa refinando o modelo alfa para gerar o maior índice backpe de Sharpe antes de colocar seu sistema em produção.
No entanto, um modelo alfa é tão bom quanto os dados que estão sendo alimentados. Este conceito é bem resumido pelo velho ditado da ciência da computação de "lixo, lixo fora". É crucial que dados precisos e oportunos sejam usados para alimentar o modelo alfa. Caso contrário, os resultados serão, na melhor das hipóteses, ruins ou, na pior, completamente incorretos, levando a grandes perdas se o sistema for colocado em produção.
Neste artigo, quero discutir questões relacionadas à aquisição e fornecimento de dados precisos oportunos para um sistema de backtesting de estratégia algorítmica e, finalmente, um mecanismo de execução de negociação. Em particular, estudaremos como obter dados financeiros, como armazená-los, como limpá-los e como exportá-los. No setor financeiro, esse tipo de serviço de dados é conhecido como banco de dados mestre de títulos.
O que é um mestre de valores mobiliários?
Um mestre de títulos é um banco de dados de toda a organização que armazena dados fundamentais, de preços e transacionais para uma variedade de instrumentos financeiros em todas as classes de ativos. Ele fornece acesso a essas informações de maneira consistente para ser usado por outros departamentos, como gerenciamento de risco, compensação / liquidação e negociação proprietária.
Em grandes organizações, uma variedade de instrumentos e dados será armazenada. Aqui estão alguns dos instrumentos que podem ser de interesse para uma empresa:
Acções Equity Options Índices Taxas de Juros Cambiais Futuros Commodities Bonds - Derivativos do Governo e Societários - Caps, Floors, Swaps.
Bases de dados mestre de títulos geralmente têm equipes de desenvolvedores e especialistas em dados garantindo alta disponibilidade dentro de uma instituição financeira. Embora isso seja necessário em grandes empresas, no nível de varejo ou em um fundo pequeno, um mestre em títulos pode ser muito mais simples. Na verdade, embora os grandes mestres de valores mobiliários usem bancos de dados empresariais caros e sistemas de análise, é possível usar software de código aberto de commodity para fornecer o mesmo nível de funcionalidade, assumindo um sistema bem otimizado.
Quais conjuntos de dados são usados?
Para o comerciante algorítmico de varejo ou para o pequeno fundo quantitativo, os conjuntos de dados mais comuns são o preço de fim de dia e histórico intradiário para ações, índices, futuros (principalmente commodities ou renda fixa) e câmbio (forex). Para simplificar esta discussão, nos concentraremos exclusivamente nos dados de fim de dia (EOD) para ações, ETFs e índices de ações. Artigos posteriores discutirão a adição de dados de frequência mais alta, classes de ativos adicionais e dados de derivativos, que possuem requisitos mais avançados.
É fácil obter dados de EOD para ações. Há vários serviços que fornecem acesso gratuitamente por meio de APIs disponíveis na Web:
É fácil fazer o download manual de dados históricos para títulos individuais, mas isso consome tempo se muitas ações precisarem ser baixadas diariamente. Assim, um componente importante do nosso título de títulos atualizará automaticamente o conjunto de dados.
Outra questão é o período de lookback. Até que ponto no passado precisamos ir com nossos dados? Isso será específico para os requisitos da sua estratégia de negociação, mas há certos problemas que abrangem todas as estratégias. O mais comum é a mudança de regime, que é frequentemente caracterizada por um novo ambiente regulatório, períodos de maior / menor volatilidade ou mercados de tendência de longo prazo. Por exemplo, uma estratégia de curto prazo direcional / de tendência a longo prazo provavelmente teria um bom desempenho de 2000 a 2003 ou 2007-2009. No entanto, teria sido difícil para 2003-2007 ou 2009 até o presente.
Minha regra é obter o máximo de dados possível, especialmente para dados de EOD, onde o armazenamento é barato. Só porque os dados existem no seu mestre de segurança, isso não significa que deva ser utilizado. Há ressalvas em torno do desempenho, pois tabelas de banco de dados maiores significam tempos de consulta mais longos (veja abaixo), mas os benefícios de ter mais pontos de amostra geralmente superam quaisquer problemas de desempenho.
Como em todos os dados financeiros, é imperativo estar ciente dos erros, como preços altos / baixos incorretos ou viés de sobrevivência, que discuti longamente com o QuantStart (veja aqui).
O que é usado para armazenar dados?
Existem três maneiras principais de armazenar dados financeiros. Todos eles possuem diferentes graus de acesso, desempenho e capacidades estruturais. Vamos considerar cada um por sua vez.
Armazenamento de Arquivo Simples.
O armazenamento de dados mais simples para dados financeiros e a maneira como você provavelmente receberá os dados de qualquer fornecedor de dados é o formato de arquivo simples. Os arquivos simples geralmente usam o formato CSV (Comma-Separated Variable), que armazena uma matriz bidimensional de dados como uma série de linhas, com dados de coluna separados por um delimitador (geralmente uma vírgula, mas podem ser espaços em branco, como como um espaço ou tabulação). Para dados de precificação EOD, cada linha representa um dia de negociação através do paradigma OHLC (ou seja, os preços no aberto, alto, baixo e próximo do período de negociação).
A vantagem dos arquivos simples é sua simplicidade e capacidade de serem fortemente compactados para arquivamento ou download. As principais desvantagens residem na falta de capacidade de consulta e no baixo desempenho para iteração em grandes conjuntos de dados. O SQLite e o Excel atenuam alguns desses problemas, fornecendo certos recursos de consulta.
Armazenamento de documentos / NoSQL.
As bases de dados de armazenamento de documentos / NoSQL, embora certamente não sejam um conceito novo, ganharam proeminência significativa nos últimos anos devido ao seu uso em empresas "escala da web", como Google, Facebook e Twitter. Eles diferem substancialmente dos sistemas RDBMS, pois não há conceito de esquemas de tabelas. Em vez disso, há coleções e documentos, que são as analogias mais próximas das tabelas e registros, respectivamente. Existe uma ampla taxonomia de lojas de documentos, cuja discussão está bem fora deste artigo! No entanto, algumas das lojas mais populares incluem MongoDB, Cassandra e CouchDB.
As lojas de documentos, em aplicações financeiras, são mais adequadas a dados fundamentais ou metadados. Os dados fundamentais para ativos financeiros vêm em muitas formas, como ações corporativas, declarações de lucros, arquivamentos na SEC, etc. Assim, a natureza sem esquema dos bancos de dados NoSQL é bem adequada. No entanto, os bancos de dados NoSQL não são bem projetados para séries temporais, como dados de preços de alta resolução e, portanto, não os consideraremos mais neste artigo.
Sistemas de gerenciamento de banco de dados relacional.
Um sistema de gerenciamento de banco de dados relacional (RDBMS) faz uso do modelo relacional para armazenar dados. Esses bancos de dados são particularmente adequados aos dados financeiros porque diferentes "objetos" (como trocas, fontes de dados, preços) podem ser separados em tabelas com relacionamentos definidos entre eles.
O RDBMS faz uso da Linguagem de Consulta Estruturada (SQL) para realizar consultas de dados complexas em dados financeiros. Exemplos de RDBMS incluem Oracle, MySQL, SQLServer e PostgreSQL.
As principais vantagens do RDBMS são sua simplicidade de instalação, independência de plataforma, facilidade de consulta, facilidade de integração com os principais softwares de backtest e recursos de alto desempenho em larga escala (embora alguns argumentem que este último não é o caso!). Suas desvantagens costumam ser devidas à complexidade da customização e às dificuldades de alcançar o desempenho, sem o conhecimento subjacente de como os dados do RDBMS são armazenados. Além disso, eles possuem esquemas semi-rígidos e, portanto, os dados geralmente precisam ser modificados para se adequarem a esses projetos. Isso é diferente dos armazenamentos de dados NoSQL, em que não há esquema.
Para todos os artigos sobre implementação de precificação histórica futura no QuantStart, faremos uso do MySQL RDBMS. É livre, de código aberto, multiplataforma, altamente robusto e seu comportamento em escala é bem documentado, o que o torna uma escolha sensata para o trabalho quant.
Como os dados históricos são estruturados?
Existe um corpo significativo de teorias e pesquisas acadêmicas realizadas no campo da ciência da computação para o design ideal para armazenamentos de dados. No entanto, não vamos entrar em muitos detalhes, pois é fácil se perder em minúcias! Em vez disso, apresentarei um padrão comum para a construção de um mestre de segurança de ações, que você pode modificar conforme achar adequado para seus próprios aplicativos.
A primeira tarefa é definir nossas entidades, que são elementos dos dados financeiros que serão mapeados para as tabelas no banco de dados. Para um banco de dados mestre de ações, prevejo as seguintes entidades:
Trocas - Qual é a fonte original final dos dados? Fornecedor - De onde é obtido um determinado ponto de dados? Instrumento / Ticker - O ticker / símbolo para o patrimônio ou índice, juntamente com informações corporativas da empresa ou fundo subjacente. Preço - O preço real de um determinado título em um determinado dia. Ações corporativas - A lista de todos os desdobramentos ou ajustes de dividendos (isso pode levar a uma ou mais tabelas), necessários para ajustar os dados de precificação. Feriados Nacionais - Para evitar a classificação incorreta de feriados comerciais como erros de dados perdidos, pode ser útil armazenar feriados nacionais e referências cruzadas.
Existem problemas significativos no que diz respeito ao armazenamento de tickers canônicos. Eu posso atestar isso com experiência em primeira mão em um fundo de hedge lidando com esse problema exato! Diferentes fornecedores usam métodos diferentes para resolver tickers e, assim, combinar várias fontes de precisão. Além disso, as empresas tornam-se falidas, estão expostas a atividades de fusões e aquisições (ou seja, adquirem e mudam nomes / símbolos) e podem ter várias classes de ações negociadas publicamente. Muitos de vocês não terão que se preocupar com isso, porque seu universo de tickers estará limitado aos constituintes maiores do índice (como o S & P500 ou o FTSE350).
Como os dados são avaliados quanto à precisão?
Dados históricos de preços de fornecedores são propensos a muitas formas de erro:
Ações Corporativas - Tratamento incorreto de desdobramentos e ajustes de dividendos. É preciso ter absoluta certeza de que as fórmulas foram implementadas corretamente. Picos - Pontos de preços que excedem em muito determinados níveis históricos de volatilidade. É preciso ter cuidado aqui, pois esses picos ocorrem - veja o May Flash Crash para um exemplo assustador. Os picos também podem ser causados por não levar em conta os desdobramentos quando eles ocorrem. Os scripts de filtro de pico são usados para notificar os operadores sobre essas situações. Agregação do OHLC - Dados OHLC livres, como do Yahoo / Google, são particularmente propensos a situações de 'agregação de tick ruim', onde pequenas trocas processam pequenos negócios bem acima dos preços de troca 'principais' do dia, levando a máximas / mínimos inflacionados excessivamente uma vez agregado. Isso é menos um "erro" como tal, mas é mais um problema para ser cauteloso. Dados em falta - Os dados em falta podem ser causados por falta de negociações em um determinado período de tempo (comum em dados de resolução de segundo / minuto de small-caps sem liquidez), por feriados ou simplesmente por um erro no sistema de troca. Os dados em falta podem ser preenchidos (isto é, preenchidos com o valor anterior), interpolados (linearmente ou de outro modo) ou ignorados, dependendo do sistema de negociação.
Muitos desses erros dependem de julgamento manual para decidir como proceder. É possível automatizar a notificação de tais erros, mas é muito mais difícil automatizar sua solução. Por exemplo, é preciso escolher o limite para ser informado sobre picos - quantos desvios padrão usar e durante o período de lookback? Um stdev muito alto perderá alguns picos, mas muito baixo e muitos noticiários incomuns levarão a falsos positivos. Todas essas questões exigem um julgamento avançado do trader de quantificação.
Também é necessário decidir como corrigir erros. Os erros devem ser corrigidos assim que forem conhecidos e, em caso afirmativo, deve ser realizada uma trilha de auditoria? Isso exigirá uma tabela extra no banco de dados. Isso nos leva ao tópico de back-filling, que é uma questão particularmente insidiosa para o backtesting. Trata-se de correção automática de dados ruins a montante. Se o fornecedor de dados corrigir um erro histórico, mas uma estratégia de negociação com backtested estiver em produção com base em pesquisas de dados ruins anteriores, é necessário tomar decisões com relação à eficácia da estratégia. Isso pode ser um pouco mitigado por estar plenamente ciente de suas métricas de desempenho da estratégia (em particular, a variação em suas características de ganhos / perdas para cada negociação). Estratégias devem ser escolhidas ou projetadas de tal forma que um único ponto de dados não possa distorcer o desempenho da estratégia em grande medida.
Como esses processos são automatizados?
O benefício de escrever scripts de software para realizar o download, armazenamento e limpeza dos dados é que os scripts podem ser automatizados por meio de ferramentas fornecidas pelo sistema operacional. Em sistemas baseados em UNIX (como Mac OSX ou Linux), pode-se fazer uso do crontab, que é um processo em execução contínua que permite que scripts específicos sejam executados em horários definidos ou em períodos regulares. Existe um processo equivalente no MS Windows conhecido como o Agendador de Tarefas.
Um processo de produção, por exemplo, pode automatizar o download de todos os preços do final do dia do S & P500 assim que forem publicados por meio de um fornecedor de dados. Em seguida, executará automaticamente os scripts de filtragem de dados e spike em falta, alertando o profissional por email, SMS ou outra forma de notificação. Neste ponto, todas as ferramentas de backtesting terão automaticamente acesso a dados recentes, sem que o operador tenha que levantar um dedo! Dependendo se o seu sistema de negociação está localizado em um desktop ou em um servidor remoto, você pode escolher, no entanto, ter um processo semi-automatizado ou totalmente automatizado para essas tarefas.
Como os dados são fornecidos para software externo?
Quando os dados são atualizados automaticamente e residem no RDBMS, é necessário inseri-los no software de backtesting. Esse processo será altamente dependente de como o seu banco de dados está instalado e se o seu sistema de negociação é local (por exemplo, em um computador desktop) ou remoto (como em um servidor Exchange co-localizado).
Uma das considerações mais importantes é minimizar a entrada / saída excessiva (E / S), pois isso pode ser extremamente caro, tanto em termos de tempo quanto de dinheiro, assumindo conexões remotas onde a largura de banda é cara. A melhor maneira de abordar esse problema é mover somente os dados por uma conexão de rede que você precisa (via consulta seletiva) ou exportar e compactar os dados.
Muitos RDBMS suportam a tecnologia de replicação, que permite que um banco de dados seja clonado em outro sistema remoto, geralmente com um grau de latência. Dependendo da sua configuração e quantidade de dados, isso pode ser apenas da ordem de minutos ou segundos. Uma abordagem simples é replicar um banco de dados remoto em uma área de trabalho local. No entanto, esteja avisado que os problemas de sincronização são comuns e consomem muito tempo para serem corrigidos!
Tentarei discutir algumas situações de exemplo abaixo, mas há muitas maneiras de abordar esse problema e elas serão altamente específicas para sua configuração individual:
Se você estiver usando o MySQL, então você pode fazer uso de uma linguagem de script de código aberto, como o Python (através da biblioteca MySQLdb ou SQLAlchemy ORM) para se conectar ao banco de dados e executar consultas sobre ele.
Bibliotecas de análise de dados mais recentes, como pandas, permitem acesso direto ao MySQL (veja este tópico para um exemplo).
Você também pode usar seu idioma / ambiente favorito (C ++, C #, Matlab) e um link ODBC para se conectar a uma instância do MySQL.
MS SQLServer.
SQLServer é projetado para ser facilmente conectado a idiomas MS, como C # e Visual Basic via o LINQ ORM. Você também pode se conectar ao SQLServer com Python, via pyODBC.
Existem claramente muitas outras combinações de armazenamento de dados e ambiente de backtesting. No entanto, vou deixar a discussão dessas configurações para artigos posteriores!
Próximos passos.
Em artigos futuros, vamos discutir os detalhes técnicos de implementação para mestres de valores mobiliários. Em particular, vamos instalar o MySQL, configurá-lo para dados de preços e obter dados EOD do Yahoo / Google finance e explorá-los através da biblioteca de análise de dados do pandas.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.
Bem-vindo ao Home do Open Java Trading System.
O Open Java Trading System (OJTS) pretende ser uma infra-estrutura comum para desenvolver sistemas de negociação de ações. Consiste em quatro partes: a coleta de dados brutos pela internet, o reconhecimento de sinais de negociação, um módulo de visualização e módulos para conectar as interfaces programáticas de plataformas de negociação, como bancos. O objetivo do projeto é fornecer uma infra-estrutura comum Java independente (independente de plataforma) para desenvolvedores de sistemas de negociação. Alguns dos aspectos que devem ser abordados são fornecer um esquema de banco de dados compatível com SQL92 comum para armazenar dados financeiros, interfaces Java comuns para como trocar dados entre diferentes módulos, visualização de dados financeiros brutos e sinais de negociação e vários outros aspectos comuns necessários para criar um sistema final de negociação.
Por causa do meu trabalho e da minha família, não encontro mais tempo para melhorar a OJTS. Eu continuo atualizando a seção de links abaixo que irá guiá-lo para projetos java open source mais ativos nessa área, no entanto.
Na verdade, como consequência do meu interesse pela dinâmica dos mercados de ações, comecei uma jornada para os detalhes mais profundos da economia nacional, a fim de entender as taxas de câmbio. Este tópico finalmente me levou a um estudo mais profundo do dinheiro em si como a unidade métrica que usamos na economia para medir "valor", "sucesso" ou "utilidade". Este tópico acabou por ser extremamente interessante, mas ao mesmo tempo foi muito difícil encontrar qualquer informação sobre como funciona o nosso sistema monetário. Circule e pergunte às pessoas de onde vem o dinheiro, quem o cria e o que determina seu valor. Você vai notar que até mesmo as pessoas que têm um mestrado ou doutorado. em economia não vai saber esses detalhes. Ah, sim, eles responderão em termos técnicos enigmáticos, mas não conseguirão desenhar um diagrama simples que descreva o processo.
H. G. Wells é relatado para ter dito:
"Escrever de moeda é geralmente reconhecido como uma prática censurável, na verdade quase indecente. Os editores irão implorar ao escritor quase que em lágrimas para não escrever sobre dinheiro, não porque seja um assunto desinteressante, mas porque sempre foi profundamente perturbador. "
Sugiro a qualquer pessoa que viva em uma sociedade democrática que leia sobre esse assunto. Afeta nossas vidas todos os dias em uma extensão que não pode ser exagerada! Na minha opinião, todo cidadão de um país democrático daquele mundo deveria saber de onde vem o nosso dinheiro. O mais provável é que você tenha acessado este site para procurar ferramentas que o ajudem a aumentar sua riqueza monetária. Entender a unidade métrica "dinheiro" (não importa se dólar ou euro) será um ingrediente importante em seu kit de ferramentas para ganhar dinheiro.
Se você tem pouco tempo e só pode dar ao luxo de ler um único livro sobre esse assunto, então eu sugiro que você leia Riqueza, riqueza virtual e dívida por Frederick Soddy. Eu consegui comprar uma cópia usada via Amazon por US $ 23,48, mas também existe uma versão online. Você precisará do plugin DjVu para lê-lo. Este livro foi publicado originalmente em 1929, mas ainda descreve os fatos reais muito bem. Mesmo que eu não concorde com todas as conclusões de Frederick Soddy, seu trabalho é estimulante e fará com que você faça as perguntas certas.
Lançamentos, correções de bugs e documentação atualizada.
Estou investigando como tornar o OJTS mais compatível com outros esforços do sistema de negociação java.
Existe um novo wiki disponível na ITSdoc, focado na distribuição de conhecimento no domínio dos sistemas de investimento e negociação. A ideia por trás do ITSdoc é ter uma plataforma de colaboração semelhante à wikipedia, ajudando a comunidade a compartilhar conhecimento.
Ontem lancei a versão 0.13 da biblioteca OpenJavaTradingSystem. Entre as novidades estão: Recuperação de dados para ações, fundos e moedas da OnVista. Implementação de manipulação de moeda e conversões. Os portfólios são implementados e você pode trabalhar com portfólios da mesma forma que com itens de papel de segurança únicos. Adicionado um quadro geral para a aplicação de algoritmos para séries temporais do mercado de ações. Comutado do shell interativo SISC / Scheme para ABCL / CommonLisp mais seu editor chamado "J". Adicionado um mecanismo geral de armazenamento em cache de dados para armazenar em cache os dados que já foram recuperados pela Web no sistema de arquivos. Além disso, muitas outras pequenas melhorias Se você estiver interessado nesta nova versão, você deve começar na seção de início rápido / captura de tela. O manual ainda não está atualizado, mas pode fornecer informações valiosas, no entanto, se você quiser usar a biblioteca em seu projeto. A documentação deve ser atualizada em breve.
D a c u e n t a ç ã o.
Documentos descrevendo os componentes internos do projeto. Documentação do Java Data Objects and Interface.
& gt; & gt; HTML & gt; PDF Projeto de documentação do sistema de investimento e negociação.
T e h o o o g y.
Blocos de Construção de Terceiros usados neste projeto.
O HSQLDB é o mecanismo de banco de dados fornecido com o projeto para que você possa começar imediatamente a usar o OJTS sem instalar um banco de dados de terceiros. Mas se você planeja usar outro banco de dados compatível com SQL92, essa é uma opção de configuração. Castor (licença: a licença Exolab)
Castor é uma estrutura de ligação de dados de código aberto para Java [tm]. É o caminho mais curto entre objetos Java, documentos XML e tabelas relacionais. O Castor fornece ligação Java para XML, persistência de Java para SQL e muito mais. Castor Doclet (licença: GNU LGPL v2.1)
Java doclet para gerar mapeamento e arquivos DDL para Castor JDO e Castor XML. TestMaker (licença: Licença Open Source do TestMaker)
A partir do projeto TestMaker, apenas a implementação de protocolos como HTTP ou HTTPS é usada para coletar dados da web. jCookie (licença: GNU LGPL v2.1)
A biblioteca jCookie é necessária para que as bibliotecas do TestMaker funcionem. htmlparser (licença: GNU LGPL v2.1)
A biblioteca htmlparser é usada para extrair os dados dos recursos da web. ABCL / CommonLisp (licença: GNU GPL v2)
ABCL (Armed Bear Common Lisp) é usado para implementar o coração algorítmico do projeto na linguagem de programação ANSI Common Lisp. JFreeChart (licença: GNU LGPL v2.1)
JFreeChart é usado para a visualização de dados financeiros como gráficos. JSci (licença: GNU LGPL v2.1)
O Joda Time substitui as classes originais de Data e Hora do JDK.
Links para outros projetos.
O grupo JavaTraders do Google pode ser a melhor entrada para você descobrir sobre outros sistemas e ferramentas de negociação baseados em Java.
O código do projeto é licenciado sob os termos da LGPL e toda a documentação que você encontra neste projeto está licenciada sob os termos da FDL.
Bancos de Dados Securities Master para Negociação Algorítmica.
Bancos de Dados Securities Master para Negociação Algorítmica.
No comércio algorítmico, o centro das atenções geralmente brilha no componente de modelo alfa do sistema de negociação completo. Essa é a parte do sistema que gera os sinais de negociação, antes da filtragem por um sistema de gerenciamento de risco ou de construção de portfólio. Como tal, os comerciantes de algo geralmente gastam uma parte significativa de seu tempo de pesquisa refinando o modelo alfa para gerar o maior índice backpe de Sharpe antes de colocar seu sistema em produção.
No entanto, um modelo alfa é tão bom quanto os dados que estão sendo alimentados. Este conceito é bem resumido pelo velho ditado da ciência da computação de "lixo, lixo fora". É crucial que dados precisos e oportunos sejam usados para alimentar o modelo alfa. Caso contrário, os resultados serão, na melhor das hipóteses, ruins ou, na pior, completamente incorretos, levando a grandes perdas se o sistema for colocado em produção.
Neste artigo, quero discutir questões relacionadas à aquisição e fornecimento de dados precisos oportunos para um sistema de backtesting de estratégia algorítmica e, finalmente, um mecanismo de execução de negociação. Em particular, estudaremos como obter dados financeiros, como armazená-los, como limpá-los e como exportá-los. No setor financeiro, esse tipo de serviço de dados é conhecido como banco de dados mestre de títulos.
O que é um mestre de valores mobiliários?
Um mestre de títulos é um banco de dados de toda a organização que armazena dados fundamentais, de preços e transacionais para uma variedade de instrumentos financeiros em todas as classes de ativos. Ele fornece acesso a essas informações de maneira consistente para ser usado por outros departamentos, como gerenciamento de risco, compensação / liquidação e negociação proprietária.
Em grandes organizações, uma variedade de instrumentos e dados será armazenada. Aqui estão alguns dos instrumentos que podem ser de interesse para uma empresa:
Acções Equity Options Índices Taxas de Juros Cambiais Futuros Commodities Bonds - Derivativos do Governo e Societários - Caps, Floors, Swaps.
Bases de dados mestre de títulos geralmente têm equipes de desenvolvedores e especialistas em dados garantindo alta disponibilidade dentro de uma instituição financeira. Embora isso seja necessário em grandes empresas, no nível de varejo ou em um fundo pequeno, um mestre em títulos pode ser muito mais simples. Na verdade, embora os grandes mestres de valores mobiliários usem bancos de dados empresariais caros e sistemas de análise, é possível usar software de código aberto de commodity para fornecer o mesmo nível de funcionalidade, assumindo um sistema bem otimizado.
Quais conjuntos de dados são usados?
Para o comerciante algorítmico de varejo ou para o pequeno fundo quantitativo, os conjuntos de dados mais comuns são o preço de fim de dia e histórico intradiário para ações, índices, futuros (principalmente commodities ou renda fixa) e câmbio (forex). Para simplificar esta discussão, nos concentraremos exclusivamente nos dados de fim de dia (EOD) para ações, ETFs e índices de ações. Artigos posteriores discutirão a adição de dados de frequência mais alta, classes de ativos adicionais e dados de derivativos, que possuem requisitos mais avançados.
É fácil obter dados de EOD para ações. Há vários serviços que fornecem acesso gratuitamente por meio de APIs disponíveis na Web:
É fácil fazer o download manual de dados históricos para títulos individuais, mas isso consome tempo se muitas ações precisarem ser baixadas diariamente. Assim, um componente importante do nosso título de títulos atualizará automaticamente o conjunto de dados.
Outra questão é o período de lookback. Até que ponto no passado precisamos ir com nossos dados? Isso será específico para os requisitos da sua estratégia de negociação, mas há certos problemas que abrangem todas as estratégias. O mais comum é a mudança de regime, que é frequentemente caracterizada por um novo ambiente regulatório, períodos de maior / menor volatilidade ou mercados de tendência de longo prazo. Por exemplo, uma estratégia de curto prazo direcional / de tendência a longo prazo provavelmente teria um bom desempenho de 2000 a 2003 ou 2007-2009. No entanto, teria sido difícil para 2003-2007 ou 2009 até o presente.
Minha regra é obter o máximo de dados possível, especialmente para dados de EOD, onde o armazenamento é barato. Só porque os dados existem no seu mestre de segurança, isso não significa que deva ser utilizado. Há ressalvas em torno do desempenho, pois tabelas de banco de dados maiores significam tempos de consulta mais longos (veja abaixo), mas os benefícios de ter mais pontos de amostra geralmente superam quaisquer problemas de desempenho.
Como em todos os dados financeiros, é imperativo estar ciente dos erros, como preços altos / baixos incorretos ou viés de sobrevivência, que discuti longamente com o QuantStart (veja aqui).
O que é usado para armazenar dados?
Existem três maneiras principais de armazenar dados financeiros. Todos eles possuem diferentes graus de acesso, desempenho e capacidades estruturais. Vamos considerar cada um por sua vez.
Armazenamento de Arquivo Simples.
O armazenamento de dados mais simples para dados financeiros e a maneira como você provavelmente receberá os dados de qualquer fornecedor de dados é o formato de arquivo simples. Os arquivos simples geralmente usam o formato CSV (Comma-Separated Variable), que armazena uma matriz bidimensional de dados como uma série de linhas, com dados de coluna separados por um delimitador (geralmente uma vírgula, mas podem ser espaços em branco, como como um espaço ou tabulação). Para dados de precificação EOD, cada linha representa um dia de negociação através do paradigma OHLC (ou seja, os preços no aberto, alto, baixo e próximo do período de negociação).
A vantagem dos arquivos simples é sua simplicidade e capacidade de serem fortemente compactados para arquivamento ou download. As principais desvantagens residem na falta de capacidade de consulta e no baixo desempenho para iteração em grandes conjuntos de dados. O SQLite e o Excel atenuam alguns desses problemas, fornecendo certos recursos de consulta.
Armazenamento de documentos / NoSQL.
As bases de dados de armazenamento de documentos / NoSQL, embora certamente não sejam um conceito novo, ganharam proeminência significativa nos últimos anos devido ao seu uso em empresas "escala da web", como Google, Facebook e Twitter. Eles diferem substancialmente dos sistemas RDBMS, pois não há conceito de esquemas de tabelas. Em vez disso, há coleções e documentos, que são as analogias mais próximas das tabelas e registros, respectivamente. Existe uma ampla taxonomia de lojas de documentos, cuja discussão está bem fora deste artigo! No entanto, algumas das lojas mais populares incluem MongoDB, Cassandra e CouchDB.
As lojas de documentos, em aplicações financeiras, são mais adequadas a dados fundamentais ou metadados. Os dados fundamentais para ativos financeiros vêm em muitas formas, como ações corporativas, declarações de lucros, arquivamentos na SEC, etc. Assim, a natureza sem esquema dos bancos de dados NoSQL é bem adequada. No entanto, os bancos de dados NoSQL não são bem projetados para séries temporais, como dados de preços de alta resolução e, portanto, não os consideraremos mais neste artigo.
Sistemas de gerenciamento de banco de dados relacional.
Um sistema de gerenciamento de banco de dados relacional (RDBMS) faz uso do modelo relacional para armazenar dados. Esses bancos de dados são particularmente adequados aos dados financeiros porque diferentes "objetos" (como trocas, fontes de dados, preços) podem ser separados em tabelas com relacionamentos definidos entre eles.
O RDBMS faz uso da Linguagem de Consulta Estruturada (SQL) para realizar consultas de dados complexas em dados financeiros. Exemplos de RDBMS incluem Oracle, MySQL, SQLServer e PostgreSQL.
As principais vantagens do RDBMS são sua simplicidade de instalação, independência de plataforma, facilidade de consulta, facilidade de integração com os principais softwares de backtest e recursos de alto desempenho em larga escala (embora alguns argumentem que este último não é o caso!). Suas desvantagens costumam ser devidas à complexidade da customização e às dificuldades de alcançar o desempenho, sem o conhecimento subjacente de como os dados do RDBMS são armazenados. Além disso, eles possuem esquemas semi-rígidos e, portanto, os dados geralmente precisam ser modificados para se adequarem a esses projetos. Isso é diferente dos armazenamentos de dados NoSQL, em que não há esquema.
Para todos os artigos sobre implementação de precificação histórica futura no QuantStart, faremos uso do MySQL RDBMS. É livre, de código aberto, multiplataforma, altamente robusto e seu comportamento em escala é bem documentado, o que o torna uma escolha sensata para o trabalho quant.
Como os dados históricos são estruturados?
Existe um corpo significativo de teorias e pesquisas acadêmicas realizadas no campo da ciência da computação para o design ideal para armazenamentos de dados. No entanto, não vamos entrar em muitos detalhes, pois é fácil se perder em minúcias! Em vez disso, apresentarei um padrão comum para a construção de um mestre de segurança de ações, que você pode modificar conforme achar adequado para seus próprios aplicativos.
A primeira tarefa é definir nossas entidades, que são elementos dos dados financeiros que serão mapeados para as tabelas no banco de dados. Para um banco de dados mestre de ações, prevejo as seguintes entidades:
Trocas - Qual é a fonte original final dos dados? Fornecedor - De onde é obtido um determinado ponto de dados? Instrumento / Ticker - O ticker / símbolo para o patrimônio ou índice, juntamente com informações corporativas da empresa ou fundo subjacente. Preço - O preço real de um determinado título em um determinado dia. Ações corporativas - A lista de todos os desdobramentos ou ajustes de dividendos (isso pode levar a uma ou mais tabelas), necessários para ajustar os dados de precificação. Feriados Nacionais - Para evitar a classificação incorreta de feriados comerciais como erros de dados perdidos, pode ser útil armazenar feriados nacionais e referências cruzadas.
Existem problemas significativos no que diz respeito ao armazenamento de tickers canônicos. Eu posso atestar isso com experiência em primeira mão em um fundo de hedge lidando com esse problema exato! Diferentes fornecedores usam métodos diferentes para resolver tickers e, assim, combinar várias fontes de precisão. Além disso, as empresas tornam-se falidas, estão expostas a atividades de fusões e aquisições (ou seja, adquirem e mudam nomes / símbolos) e podem ter várias classes de ações negociadas publicamente. Muitos de vocês não terão que se preocupar com isso, porque seu universo de tickers estará limitado aos constituintes maiores do índice (como o S & P500 ou o FTSE350).
Como os dados são avaliados quanto à precisão?
Dados históricos de preços de fornecedores são propensos a muitas formas de erro:
Ações Corporativas - Tratamento incorreto de desdobramentos e ajustes de dividendos. É preciso ter absoluta certeza de que as fórmulas foram implementadas corretamente. Picos - Pontos de preços que excedem em muito determinados níveis históricos de volatilidade. É preciso ter cuidado aqui, pois esses picos ocorrem - veja o May Flash Crash para um exemplo assustador. Os picos também podem ser causados por não levar em conta os desdobramentos quando eles ocorrem. Os scripts de filtro de pico são usados para notificar os operadores sobre essas situações. Agregação do OHLC - Dados OHLC livres, como do Yahoo / Google, são particularmente propensos a situações de 'agregação de tick ruim', onde pequenas trocas processam pequenos negócios bem acima dos preços de troca 'principais' do dia, levando a máximas / mínimos inflacionados excessivamente uma vez agregado. Isso é menos um "erro" como tal, mas é mais um problema para ser cauteloso. Dados em falta - Os dados em falta podem ser causados por falta de negociações em um determinado período de tempo (comum em dados de resolução de segundo / minuto de small-caps sem liquidez), por feriados ou simplesmente por um erro no sistema de troca. Os dados em falta podem ser preenchidos (isto é, preenchidos com o valor anterior), interpolados (linearmente ou de outro modo) ou ignorados, dependendo do sistema de negociação.
Muitos desses erros dependem de julgamento manual para decidir como proceder. É possível automatizar a notificação de tais erros, mas é muito mais difícil automatizar sua solução. Por exemplo, é preciso escolher o limite para ser informado sobre picos - quantos desvios padrão usar e durante o período de lookback? Um stdev muito alto perderá alguns picos, mas muito baixo e muitos noticiários incomuns levarão a falsos positivos. Todas essas questões exigem um julgamento avançado do trader de quantificação.
Também é necessário decidir como corrigir erros. Os erros devem ser corrigidos assim que forem conhecidos e, em caso afirmativo, deve ser realizada uma trilha de auditoria? Isso exigirá uma tabela extra no banco de dados. Isso nos leva ao tópico de back-filling, que é uma questão particularmente insidiosa para o backtesting. Trata-se de correção automática de dados ruins a montante. Se o fornecedor de dados corrigir um erro histórico, mas uma estratégia de negociação com backtested estiver em produção com base em pesquisas de dados ruins anteriores, é necessário tomar decisões com relação à eficácia da estratégia. Isso pode ser um pouco mitigado por estar plenamente ciente de suas métricas de desempenho da estratégia (em particular, a variação em suas características de ganhos / perdas para cada negociação). Estratégias devem ser escolhidas ou projetadas de tal forma que um único ponto de dados não possa distorcer o desempenho da estratégia em grande medida.
Como esses processos são automatizados?
O benefício de escrever scripts de software para realizar o download, armazenamento e limpeza dos dados é que os scripts podem ser automatizados por meio de ferramentas fornecidas pelo sistema operacional. Em sistemas baseados em UNIX (como Mac OSX ou Linux), pode-se fazer uso do crontab, que é um processo em execução contínua que permite que scripts específicos sejam executados em horários definidos ou em períodos regulares. Existe um processo equivalente no MS Windows conhecido como o Agendador de Tarefas.
Um processo de produção, por exemplo, pode automatizar o download de todos os preços do final do dia do S & P500 assim que forem publicados por meio de um fornecedor de dados. Em seguida, executará automaticamente os scripts de filtragem de dados e spike em falta, alertando o profissional por email, SMS ou outra forma de notificação. Neste ponto, todas as ferramentas de backtesting terão automaticamente acesso a dados recentes, sem que o operador tenha que levantar um dedo! Dependendo se o seu sistema de negociação está localizado em um desktop ou em um servidor remoto, você pode escolher, no entanto, ter um processo semi-automatizado ou totalmente automatizado para essas tarefas.
Como os dados são fornecidos para software externo?
Quando os dados são atualizados automaticamente e residem no RDBMS, é necessário inseri-los no software de backtesting. Esse processo será altamente dependente de como o seu banco de dados está instalado e se o seu sistema de negociação é local (por exemplo, em um computador desktop) ou remoto (como em um servidor Exchange co-localizado).
Uma das considerações mais importantes é minimizar a entrada / saída excessiva (E / S), pois isso pode ser extremamente caro, tanto em termos de tempo quanto de dinheiro, assumindo conexões remotas onde a largura de banda é cara. A melhor maneira de abordar esse problema é mover somente os dados por uma conexão de rede que você precisa (via consulta seletiva) ou exportar e compactar os dados.
Muitos RDBMS suportam a tecnologia de replicação, que permite que um banco de dados seja clonado em outro sistema remoto, geralmente com um grau de latência. Dependendo da sua configuração e quantidade de dados, isso pode ser apenas da ordem de minutos ou segundos. Uma abordagem simples é replicar um banco de dados remoto em uma área de trabalho local. No entanto, esteja avisado que os problemas de sincronização são comuns e consomem muito tempo para serem corrigidos!
Tentarei discutir algumas situações de exemplo abaixo, mas há muitas maneiras de abordar esse problema e elas serão altamente específicas para sua configuração individual:
Se você estiver usando o MySQL, então você pode fazer uso de uma linguagem de script de código aberto, como o Python (através da biblioteca MySQLdb ou SQLAlchemy ORM) para se conectar ao banco de dados e executar consultas sobre ele.
Bibliotecas de análise de dados mais recentes, como pandas, permitem acesso direto ao MySQL (veja este tópico para um exemplo).
Você também pode usar seu idioma / ambiente favorito (C ++, C #, Matlab) e um link ODBC para se conectar a uma instância do MySQL.
MS SQLServer.
SQLServer é projetado para ser facilmente conectado a idiomas MS, como C # e Visual Basic via o LINQ ORM. Você também pode se conectar ao SQLServer com Python, via pyODBC.
Existem claramente muitas outras combinações de armazenamento de dados e ambiente de backtesting. No entanto, vou deixar a discussão dessas configurações para artigos posteriores!
Próximos passos.
Em artigos futuros, vamos discutir os detalhes técnicos de implementação para mestres de valores mobiliários. Em particular, vamos instalar o MySQL, configurá-lo para dados de preços e obter dados EOD do Yahoo / Google finance e explorá-los através da biblioteca de análise de dados do pandas.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.
Comments
Post a Comment