воскресенье, 27 мая 2018 г.

Sistema de negociação java


Sistema de negociação java
Se houvesse um concurso entre C ++ e Java, então Java ganhou. Infelizmente, muitas pessoas que desenvolvem software para sistemas de mercado e modelos não receberam as novidades e ainda usam C ++.
C ++ será sempre o idioma escolhido para a classe estreita de aplicativos de software que estão "perto do metal" do sistema informático. Essas aplicações incluem drivers de dispositivos, sistemas operacionais e sistemas de banco de dados de alto desempenho. Para além desta classe estreita, o Java é atualmente a única escolha razoável para implementação de aplicativos.
A razão pela qual Java é o idioma escolhido tem menos a ver com a própria linguagem do que com a enorme base de software que sai para Java. O Java permite que o desenvolvedor de aplicativos faça uso do maior conjunto de software reutilizável que já foi implementado. Durante décadas, as pessoas escreveram na literatura de ciência da computação sobre software portátil e reutilizável. Em Java, isso finalmente foi realizado.
Esta página fornece links para recursos para construir um sistema comercial intra-dia em Java. Esse sistema comercial consiste nos seguintes componentes:
Um servidor de aplicativos Java (por exemplo, Tomcat) baseado no sistema de comércio intra-dia.
Um feed de dados intra-dia para dados de transações de mercado.
Um banco de dados para registrar informações comerciais.
Uma GUI baseada na Web para fornecer controle e informações sobre o sistema de negociação.
Uma infra-estrutura para suportar testes ("back testing") de algoritmos de negociação com histórico de dados de mercado intra-dia.

Sistema de negociação java
Essas páginas da Web vêm de algum trabalho que fiz em um sistema comercial intra-dia, implementado em Java. Este software é executado no servidor de aplicativos Tomcat Java e oferece suporte a modelos comerciais que lêem um fluxo de dados do mercado em tempo real. Com base neste fluxo de dados, o software gera pedidos de compra e venda e rastreia sua posição no mercado.
Por favor, não me envie e-mail perguntando quais técnicas de negociação irá torná-lo rico. Conheço muito sobre a implementação de sistemas de software complexos e sei algo sobre a construção de sistemas de comércio de mercado. No entanto, ainda estou trabalhando para viver, então parece que não descobri o molho secreto. Eu não tenho nenhum juju de mercado notável para lhe transmitir.
Sob certas condições, considerarei projetos de consultoria externa. Um projeto de consultoria deve ser aprovado pelo meu empregador, então há alguns gastos gerais para começar (a última vez que fiz um desses projetos, demorou um mês para obter aprovação). Eu só posso trabalhar com cidadãos dos EUA, cidadãos da Commonwealth britânica ou aliados da OTAN. A primeira regra para aqueles que trabalham para taxas horárias é receber o pagamento, por isso, não me escreva sugerindo que eu trabalho de graça para compartilhar seu empreendimento. Eu sou um engenheiro de software muito experiente e cientista da computação e minhas taxas horárias refletem isso.
trade_engine. tar. gz Este é o sistema de negociação que desenvolvi. Eu possuo direitos autorais para este software e você não pode usá-lo para nenhum propósito comercial sem permissão. Além disso, você não pode usar este software sem permissão para qualquer tipo de negociação no mercado. Uma vez que você não tem permissão para usar este software para qualquer outra coisa que não seja referência, você não pode me responsabilizar por nenhum erro neste software ou problemas encontrados em seu uso.
Este software está ficando um pouco datado. Existem muitos mais recursos Java disponíveis agora. Embora isso mostre a arquitetura central, um sistema muito melhor poderia ser implementado usando recursos Java atuais.
O sistema de negociação foi projetado para trabalhar com o sistema de negociação Interactive Brokers através da interface Java.
Essas páginas da web consistem em notas sobre o design do sistema de negociação que desenvolvi. Há também notas sobre os experimentos com alguns modelos de análise de estilo de análise intra-dia.
Um sistema de negociação Java é suportado por uma infra-estrutura de software complexa. Isso inclui o servidor web Apache Tomcat (aplicação sever), feeds de dados em tempo real e software para suportar a interação baseada no navegador da Web com o usuário. Ao pesquisar o software que eu precisaria para suportar o sistema de negociação, criei essas notas.

Sistema de negociação java
Bem-vindo ao Home of the Open Java Trading System.
O Open Java Trading System (OJTS) é 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 da negociação marca um módulo de visualização e módulos para se conectar às interfaces programáticas das plataformas de negociação, como os bancos. O objetivo do projeto é fornecer uma infra-estrutura comum independente (independente de plataforma) autônoma para desenvolvedores de sistemas de negociação. Alguns dos aspectos que devem ser abordados são fornecer um esquema comum de banco de dados compatível com SQL92 para armazenar dados financeiros, interfaces Java comuns para como trocar dados entre diferentes módulos, visualização de dados financeiros brutos e sinais comerciais e vários outros aspectos comuns necessários para criar um sistema comercial final.
Por causa do meu trabalho e da minha família, não consigo mais tempo para melhorar o OJTS. Estou continuando a atualizar a seção de links abaixo que irá orientá-lo para projetos mais ativos de código aberto java nessa área, no entanto.
Na verdade, como consequência do meu interesse pela dinâmica dos mercados de ações, comecei uma jornada nos detalhes mais profundos da economia nacional para entender as taxas de câmbio. Este tópico finalmente me leva a um estudo mais profundo do dinheiro em si como a unidade métrica que usamos em economia para medir "valor", "sucesso" ou "utilidade". Este tópico revelou-se extremamente interessante, mas ao mesmo tempo era muito difícil encontrar informações sobre o funcionamento do nosso sistema monetário. Vá ao redor e pergunte às pessoas de onde vem o dinheiro, quem o cria e o que determina seu valor. Você notará que mesmo as pessoas que têm um mestrado ou um doutorado. na economia não conhecerá esses detalhes. Oh, sim, eles responderão em termos técnicos crípticos, mas não poderão desenhar um diagrama simples que descreva o processo.
H. G. Wells disse ter dito:
"Escrever a moeda é geralmente reconhecido como uma prática censurável, de fato quase indecente. Os editores imploram ao escritor quase lágrima não escrever sobre dinheiro, não porque seja um assunto desinteressante, mas porque sempre foi profundamente perturbador ".
Eu sugiro a qualquer pessoa que viva em uma sociedade democrática para ler sobre este assunto. Isso afeta nossas vidas todos os dias até certo ponto que não pode ser exagerado! Na minha opinião, todos os cidadãos de um país democrático nesse mundo devem saber de onde o nosso dinheiro vem. Provavelmente você veio a este site para procurar ferramentas que o ajudem a aumentar sua riqueza monetária. Para entender a unidade métrica "dinheiro" (não importa se Dollar ou Euro) será um ingrediente importante no seu toolkit para ganhar dinheiro.
Se você tem pouco tempo e só pode dar ao luxo de ler um único livro sobre esse assunto, então 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 existe também 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 é provável e provoca que você faça as perguntas corretas.
Lançamentos, Bugfixes e Documentação atualizada.
Estou investigando como tornar a OJTS mais compatível com outros esforços do sistema de comércio java.
Existe um novo wiki disponível no ITSdoc com foco na distribuição de conhecimento no domínio dos sistemas de investimento e comercialização. A idéia por trás do ITSdoc é ter uma plataforma de colaboração semelhante à wikipedia, ajudando a comunidade a compartilhar conhecimento.
Ontem eu publiquei a Versão 0.13 da biblioteca do OpenJavaTradingSystem. Entre os novos recursos estão: Recuperação de dados para ações, fundos e moedas da OnVista. Implementação de movimentação de moeda e conversões. As carteiras são implementadas e você pode trabalhar com Portfolios da mesma forma que com itens de papel de segurança simples. Adicionado uma estrutura geral para a aplicação de algoritmos para as séries temporárias do mercado de ações. Alternou do shell interativo SISC / Scheme para ABCL / CommonLisp plus seu editor chamado "J". Adicionado um mecanismo geral de cache de dados para armazenar dados que já foram recuperados na web no sistema de arquivos. Além de mais algumas melhorias menores Se você estiver interessado nesta nova versão, você deve começar na seção quickstart / screenshot. O manual ainda não está atualizado, mas pode dar-lhe, no entanto, algumas informações de fundo valiosas se você deseja usar a biblioteca em seu projeto. A documentação deve ser atualizada em breve.
D o c u m e n t a t i o n.
Documentos que descrevem os internos do projeto. Java Data Objects e documentação da interface.
& gt; & gt; HTML & gt; & gt; PDF Investment and Trading System Documentation Project.
T e c h n o l o g y.
Blocos de construção de terceiros utilizados 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, então esta é 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. A Castor fornece ligação Java-to-XML, a persistência Java-to-SQL e muito mais. Castor Doclet (licença: GNU LGPL v2.1)
Doclet de Java para gerar mapeamento e arquivos DDL para Castor JDO e Castor XML. TestMaker (licença: TestMaker Open-Source License)
Do projeto TestMaker, apenas a implementação dos 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 comum ANSI Common Lisp. JFreeChart (licença: GNU LGPL v2.1)
O 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 JDK Data e Time originais.
Links para outros projetos.
O grupo Google JavaTraders pode ser a melhor entrada para você descobrir mais sobre outros sistemas e ferramentas comerciais com base em Java.
O código do projeto está licenciado nos termos da LGPL e toda a documentação que você encontra neste projeto está licenciada nos termos da FDL.

Senior Trading Systems Java Software Engineer.
Trading Systems Java Development.
A BlackRock é líder global em gerenciamento de investimentos, gerenciamento de riscos e serviços de consultoria para clientes institucionais e de varejo. Em 31 de dezembro de 2018, o AUM da BlackRock era de US $ 5,1 trilhões. A BlackRock ajuda os clientes em todo o mundo a atingir seus objetivos e superar desafios com uma variedade de produtos que incluem contas separadas, fundos mútuos, iShares® (fundos negociados em bolsa) e outros veículos de investimento em comum. A BlackRock também oferece serviços de gerenciamento de riscos, assessoria e sistema de investimento empresarial a uma ampla base de investidores institucionais através da BlackRock Solutions®. Em 31 de dezembro de 2018, a empresa possuía aproximadamente 13 mil funcionários em mais de 30 países e uma presença importante nos mercados globais, incluindo América do Norte e do Sul, Europa, Ásia, Austrália e Oriente Médio e África. Para obter informações adicionais, visite o site da empresa na Blackrock | Twitter: @blackrock_news | Blog: blackrockblog | LinkedIn: linkedin / company / blackrockA equipe do Core Software Infrastructure (CSI) é um grupo global do Aladdin Product Group, representado por mais de 70 engenheiros de software localizados em 7 escritórios em todo o mundo. A equipe global de engenheiros dedica-se ao desenvolvimento e aprimoramento dos componentes mais críticos da infraestrutura de software da BlackRock. As ferramentas e os sistemas criados pela equipe são usados ​​por cada produto Aladdin em todas as equipes da Aladdin.
A equipe comercial da Aladdin Product Group é responsável por projetar e construir software usado pelos clientes da BlackRock e da BlackRock Solution para gerenciamento de portfólio e negociação.
Esta posição é para um VP na plataforma de negociação da Aladdin. O Aladdin Trading System é um dos componentes mais críticos da pilha de tecnologia BlackRock e foi projetado para lidar com várias classes de ativos em uma plataforma unificada. O sistema é projetado para lidar com bilhões de transações por dia com latência de milissegundos. O sistema está sempre disponível e não possui um único ponto de falha. O sistema de negociação Aladdin consiste em aplicações criadas usando uma arquitetura de micro-serviços e aproveita tecnologias como Apache Cassandra, um banco de dados NoSQL altamente disponível, Apache Zookeeper, um coordenador distribuído e Spark Streaming para seu mecanismo de regras. Os principais componentes do sistema comercial incluem o sistema de gerenciamento de pedidos, os componentes de passagem de pedidos, roteamento de pedidos inteligentes, conectividade FIX e sistema de gerenciamento de execução.
Gerencie prioridades de projetos individuais, prazos e entregáveis ​​usando metodologias AGILE.
Forneça sistemas de software de alto rendimento, alta disponibilidade, tolerância a falhas e concorrentes. Contribui significativamente para o desenvolvimento da plataforma global de negociação multi-ativos da Aladdin.
Contribua como contribuinte individual sênior na construção de várias capacidades do OEMS (Order & Execution Management System), como pipelines de dados de mercado em tempo real, negociação algorítmica, análise comercial, pré e pós-comércio TCA, listas de vigilância, roteamento de pedidos inteligentes e notícias e ampères integrados feeds do Twitter.
Desenvolva e mentore outros membros da equipe para construir uma equipe altamente performante.
Gerencie implantações e lançamentos em grande escala com ênfase na mitigação de riscos Trabalhe com gerenciamento de produtos e usuários empresariais para definir o roteiro para o produto. Desenhe e desenvolva soluções inovadoras para problemas complexos, identificando problemas e barreiras. Seja um líder de pensamento e um parceiro em soluções de brainstorming para a produtividade da equipe, treinando e motivando os desenvolvedores e contratando novos desenvolvedores.
Licenciatura ou mestrado em Ciência da Computação ou engenharia necessária. 8 + anos de experiência prática em Java. A experiência no uso de metodologias de gerenciamento de projetos, como Agile / Scrum, é necessária. Experiência na construção de Gerenciamento de Ordem e Execução, sistemas de negociação são necessários Uma compreensão profunda da programação concorrente e experiência na concepção de alta distribuição, alta disponibilidade, aplicações distribuídas tolerantes a falhas é uma obrigação. A experiência na construção de aplicativos distribuídos usando tecnologias NOSQL como Cassandra, serviços de coordenação como Zookeeper e arquitetura de serviços micro / SOA é necessária. É necessária experiência em arquitetura de middleware orientada a mensagens. A experiência na construção de componentes UI usando swing, tecnologias web é necessária. A compreensão dos bancos de dados relacionais é uma forte capacidade de desenvolvimento de arquitetura analítica e de software forte, com ênfase no desenvolvimento orientado por teste. A experiência em linguagens de programação como Scala, python seria uma vantagem. A experiência no uso de tecnologias de transmissão, como stream streaming ou tempestade, seria uma vantagem. Espera-se impulsionar o crescimento da plataforma de negociação através do desempenho, estabilidade, usabilidade e novas capacidades de produtos de investimento São necessárias habilidades efetivas de comunicação e apresentação (escritas e verbais).
A BlackRock orgulha-se de ser um Empregador de Igualdade de Oportunidades e Ações Afirmativas. Nós avaliamos candidatos qualificados, independentemente da raça, cor, origem nacional, religião, sexo, deficiência, status de veterano e outros estatutos protegidos por lei.
Detalhes do contato.
Recrutador ref: 172640.
Mais trabalhos como este.
Europa, Oriente Médio e África.
Ásia-Pacífico.
eFinancialCareers.
Contate-Nos.
Informação legal.
eFinancialCareers é um serviço DHI. A DHI é uma empresa de capital aberto listada na Bolsa de Valores de Nova York. (Ticker: DHX)
© Copyright 2000-2017 eFinancialCareers Ltd.
Nossos termos e condições foram atualizados; Clique aqui para lê-los.
Usamos cookies para garantir que lhe damos a melhor experiência em nossos sites. Se você continuar, assumiremos que você está feliz em receber todos os cookies em nossos sites. Saiba mais sobre nossa política de cookies.
Você está usando nossa nova pesquisa beta.
É um trabalho em andamento, e confiamos em seus comentários para melhorar.
Descubra o que está mudando.
É fácil desativar o beta se quiser configurar um alerta de emprego e você pode retornar a qualquer momento.

Simplificando o sistema de negociação com Akka.
Junte-se à comunidade DZone e obtenha a experiência dos membros completos.
Meus colegas estão desenvolvendo um sistema de negociação que processa um fluxo bastante pesado de transações recebidas. Cada transação abrange um Instrumento (pensar vínculo ou estoque) e tem algumas (agora) propriedades sem importância. Eles estão presos com Java (& lt; 8), então vamos cumpri-lo:
O instrumento será usado mais tarde como uma chave no HashMap, então, para o futuro, implementamos pró-ativamente & lt; Instrument & gt; . Este é o nosso domínio, agora os requisitos:
As transações entram no sistema e precisam ser processadas (seja o que for que isso signifique), o mais rápido possível. É possível processá-las gratuitamente em qualquer ordem. No entanto, as transações para o mesmo instrumento precisam ser processadas sequencialmente na mesma ordem que elas vieram.
A implementação inicial foi direta - coloque todas as transações recebidas em uma fila (por exemplo, ArrayBlockingQueue) com um único consumidor. Isso satisfaz o último requisito, uma vez que a fila preserva o pedido de FIFO rigoroso em todas as transações. Mas essa arquitetura impede o processamento simultâneo de transações não relacionadas para diferentes instrumentos, desperdiçando assim uma melhoria da taxa de transferência. Não surpreendentemente, esta implementação, sem dúvida simples, tornou-se um gargalo.
Que nojo! Mas o pior ainda está por vir. Como você certifica-se de que, no máximo, um segmento processa cada fila por vez? Afinal, de outra forma, dois segmentos poderiam pegar itens de uma fila (um instrumento) e processá-los em ordem inversa, o que não é permitido. O caso mais simples é ter um Thread por fila - isso não será dimensionado, pois esperamos dezenas de milhares de instrumentos diferentes. Então, podemos dizer N threads e permitir que cada um deles manipule um subconjunto de filas, p. Ex. instrument. hashCode ()% N nos informa qual tópico cuida da fila dada. Mas ainda não é perfeito por três razões:
Um segmento deve "observar" muitas filas, muito provavelmente ocupadas, aguardando, iterando sobre elas o tempo todo. Alternativamente, a fila pode despertar o seu thread pai de alguma forma. No pior dos casos, todos os instrumentos terão códigos de hash conflitantes, visando apenas um tópico - o que efetivamente é o mesmo que a nossa solução inicial. O código bonito não é complexo!
Implementar esta monstruosidade é possível, mas difícil e propenso a erros. Além disso, há outro requisito não funcional: os instrumentos vão e vem e há centenas de milhares deles ao longo do tempo. Depois de um tempo, devemos remover entradas no nosso mapa que representam instrumentos que não foram vistos ultimamente. Caso contrário, obteremos um vazamento de memória.
Isso é simples. Uma vez que nosso ator Dispatcher é efetivamente unido, nenhuma sincronização é necessária. Nós quase não recebemos Transações, pesquisa ou criamos Processador e passamos a Transação ainda mais. É assim que a implementação do processador pode ser:
É isso aí! Curiosamente, a nossa implementação Akka é quase idêntica à nossa primeira idéia com o mapa das filas. Afinal, um ator é apenas uma fila e um tópico (lógico) que processa itens nessa fila. A diferença é: Akka gerencia pool de threads limitado e compartilha entre talvez centenas de milhares de atores. E porque cada instrumento tem seu próprio ator dedicado (e "single-threaded"), o processamento seqüencial de transações por instrumento é garantido.
Claramente, quando o Processador não recebeu nenhuma mensagem por um período de uma hora, ele sintetiza atentamente isso para o pai (Dispatcher). Mas o ator ainda está vivo e pode lidar com as transações se elas acontecem precisamente após uma hora. O que Dispatcher faz é que ele mata determinado processador e o remove de um mapa:
Houve uma leve inconveniência. instrumentProcessors costumava ser um Map & lt; Instrument, ActorRef & gt; . Isso provou ser insuficiente, já que de repente temos que remover uma entrada neste mapa por valor. Em outras palavras, precisamos encontrar uma chave (Instrumento) que mapeie para um determinado ActorRef (Processor). Existem diferentes maneiras de lidar com isso (por exemplo, o processador ocioso pode enviar um Instrumnt ele lida), mas, em vez disso, usei o BiMap & lt; K, V & gt; da goiaba. Isso funciona porque os Instrumentos e Atores são apontados como únicos (ator por instrumento). Tendo BiMap eu poderia simplesmente inverter () o mapa (do BiMap & lt; Instrument, ActorRef & gt; to BiMap & lt; ActorRef, Instrument & gt; e tratar o ActorRef como chave.
Construa vs Compre uma solução de qualidade de dados: qual é o melhor para você? A manutenção de dados de alta qualidade é essencial para a eficiência operacional, análises significativas e boas relações com clientes de longo prazo. Mas, ao lidar com múltiplas fontes de dados, a qualidade dos dados torna-se complexa, então você precisa saber quando você deve construir um esforço personalizado de ferramentas de qualidade de dados em soluções enlatadas. Baixe nosso whitepaper para obter mais informações sobre uma abordagem híbrida.
Como esse artigo? Leia mais do DZone.
Free DZone Refcard.
Começando com Scala.
Publicado em DZone com permissão de Tomasz Nurkiewicz, DZone MVB. Veja o artigo original aqui.
As opiniões expressas pelos contribuidores da DZone são próprias.

Комментариев нет:

Отправить комментарий