вторник, 24 апреля 2018 г.

Sistema de negociação java


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.

Sistema de negociação java
Pegue os pedidos 1.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
Parity é uma plataforma de software de código aberto para locais de negociação. Ele pode ser usado para executar um mercado financeiro, desenvolver agentes comerciais algorítmicos ou microestrutura do mercado de pesquisa.
Paridade requer Java Runtime Environment (JRE) 8 ou posterior.
Paridade contém as seguintes aplicações:
O Parity Trading System é um aplicativo de servidor para executar uma troca financeira.
O Parity FIX Gateway é um aplicativo de servidor que adiciona suporte ao Financial Information Exchange (FIX) ao sistema de negociação.
Parity Terminal Client é um aplicativo de console simples para inserir pedidos no sistema de negociação.
O Parity Stock Ticker é um aplicativo de console simples que exibe os melhores preços e os mais recentes negócios no sistema de negociação.
O Parity Trade Reporter é um aplicativo de console simples que exibe todos os negócios ocorridos no sistema de negociação.
Veja o Wiki para obter aplicativos adicionais.
Paridade contém as seguintes bibliotecas:
Parity Order Book implementa reconstrução de livro de pedidos de alto desempenho na JVM.
Parity Network Protocols especifica e implementa protocolos de rede usados ​​pelo sistema comercial.
Os formatos de arquivo Parity especificam e implementam os formatos de arquivo usados ​​pelo sistema comercial.
Parity Matching Algorithm implementa o algoritmo de correspondência usado pelo sistema de negociação.
Parity Utilities contém funções de suporte usadas pelo sistema de negociação.
Paridade contém os seguintes aplicativos de teste:
Construa paridade com Maven:
Para obter mais informações sobre Parity:
Siga @paritytrading no Twitter para novidades e anúncios Participe do paritytrading / chat no Gitter para discussões.
Copyright 2018 Jussi Virtanen e colaboradores.
Lançado sob a Licença Apache, Versão 2.0. Consulte LICENSE. txt para obter detalhes.
&cópia de; 2018 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.

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.

Começando: Construindo um Sistema de Negociação Totalmente Automatizado.
Nos últimos 6 meses, fiquei focado no processo de construção da pilha de tecnologia completa de um sistema de negociação automatizado. Eu encontrei muitos desafios e aprendi muito sobre os dois métodos diferentes de backtesting (Vectorizado e Evento conduzido). Na minha jornada de construção de um backtester dirigido por um evento, surpreendi que o que você acabasse fosse perto da pilha de tecnologia completa necessária para construir uma estratégia, testá-la e executar a execução ao vivo.
O meu maior problema ao abordar o problema foi a falta de conhecimento. Olhei em muitos lugares para uma introdução à construção da tecnologia ou um blog que me guiaria. Encontrei alguns recursos que vou compartilhar com você hoje.
Para iniciantes:
Para os leitores novos para negociação quantitativa, eu recomendaria o livro de Ernie P. Chan intitulado: Negociação Quantitativa: como construir seu próprio negócio de negociação algorítmica. Este livro é o básico. Na verdade, é o primeiro livro que eu li em negociação quantitativa e, mesmo assim, achei muito básico, mas há algumas notas que você deveria 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-automáticas e totalmente automatizadas.
Um sistema semi-automatizado é adequado se você deseja fazer alguns negócios por semana. Ernie recomenda o uso de Matlab, R ou mesmo do Excel. Utilizei todas as 3 plataformas e este é o meu conselho:
Saltei Matlab, custou muito dinheiro e eu só consegui acesso aos laboratórios universitários. Não há muito material de treinamento como blogs ou livros que irão ensinar-lhe como codificar uma estratégia usando o Matlab. R tem toneladas de recursos que você pode usar para aprender a construir uma estratégia. Meu blog favorito abordando o tópico é: QuantStratTradeR executado por Ilya Kipnis. O Microsoft Excel é provavelmente o local onde você iniciará se você não tiver experiência de programação. Você pode usar o Excel para negociação semi-automatizada, mas não vai fazer o truque quando se trata de construir a pilha de tecnologia completa.
Quadro semi-automático pg 81.
Sistemas de negociação totalmente automatizados são para quando você deseja colocar negócios automaticamente com base em um feed de dados ao vivo. Eu codifiquei o meu em C #, QuantConnect também usa C #, QuantStart anda pelo leitor através da construção dele em Python, Quantopian usa Python, HFT provavelmente usará C ++. Java também é popular.
Estrutura de negociação totalmente automatizada pg 84.
Passo 1: Obter uma vantagem.
Faça o Programa Executivo em Negociação Algorítmica oferecido pela QuantInsti. Acabei de começar o curso e o primeiro conjunto de palestras foi na arquitetura do sistema. Isso me salvaria cerca de 3 meses de pesquisa se eu tivesse começado aqui. As palestras me acompanharam por cada componente que eu precisaria, bem como uma descrição detalhada do que cada componente precisa fazer. Abaixo está uma captura de tela de uma das suas lâminas utilizadas na apresentação:
Você também pode usar esse quadro geral ao avaliar outros sistemas de negociação automática.
No momento da escrita, estou apenas na terceira semana de palestras, mas estou confiante de que um profissional poderá construir uma estratégia de negociação totalmente automatizada que, com um pouco de polonês, possa ser transformada em um hedge fund 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.
O blog de Michael Hallsmore e o quantstart & amp; livro "Negociação Algorítmica de Sucesso"
Este livro possui seções dedicadas à construção de um backtester dirigido por eventos robustos. Ele dirige o leitor através de uma série de capítulos que irão explicar sua escolha de linguagem, os diferentes tipos de backtesting, a importância do backtesting dirigido a eventos e como codificar o backtester.
Michael apresenta o leitor às diferentes classes necessárias em um design orientado a objetos. Ele também ensina o leitor a construir um banco de dados mestre de valores mobiliários. É aqui que você verá como a arquitetura do sistema da QuantInsti se encaixa.
Nota: Você precisará comprar seu livro: "Successful Algorithmic Trading", seu blog deixa para fora muita informação.
Passo 3: Vire a TuringFinance.
O programa EPAT Leitura "Successful Algorithmic Trading" & amp; codificando um backtester em um idioma diferente da sua escolha.
Você deve se mudar para um blog chamado TuringFinance e ler o artigo intitulado "Algorithmic Trading System Architecture" Por: Stuart Gordon Reid. Em sua publicação, ele descreve a arquitetura seguindo as diretrizes dos padrões ISO / IEC / IEEE 42018 e padrão de descrição de arquitetura de engenharia de software.
Eu achei esta publicação muito técnica e tem algumas ótimas idéias que você deve incorporar na sua própria arquitetura.
Uma captura de tela de sua postagem.
Passo 4: Estudar sistemas de comércio aberto.
4.1) Quantopian.
Escusado será dizer que Quantopian deve ser adicionado a esta lista e estou com vergonha de dizer que não passei muito tempo usando sua plataforma (devido à minha escolha de linguagem). Quantopian tem muitas vantagens, mas as que melhoram 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 adoro como eles hospedam QuantCon!
Quantopian é líder de mercado neste campo e é amado por quants por toda parte! Seu projeto de código aberto está sob o nome de código Zipline e isso é um pouco sobre isso:
"Zipline é o nosso motor de código aberto que alimenta o backtester no IDE. Você pode ver o repositório de códigos no Github e contribuir com solicitações de envio para o projeto. Existe um grupo do Google disponível para procurar ajuda e facilitar discussões ".
Aqui está um link para sua documentação:
4.2) QuantConnect.
Para aqueles que não estão familiarizados com a QuantConnect, eles fornecem um mecanismo de troca algorítmica de código aberto completo. Aqui está um link.
Você deve dar uma olhada em seu código, estudá-lo, & amp; dar-lhes elogios. Eles são competição de Quantopians.
Gostaria de aproveitar esta oportunidade para agradecer a equipe da QuantConnect por me deixar escolher seu cérebro e pelo brilhante serviço que eles fornecem.
Aqui está um link para sua documentação:
Observações finais:
Espero que este guia ajude os membros da comunidade. Eu queria ter essa visão 6 meses atrás, quando comecei a codificar nosso sistema.
Gostaria de chegar à comunidade e perguntar: "Quais bons cursos de negociação algorítmica você conhece?" Eu gostaria de escrever uma publicação que analisa o tópico e fornece uma classificação. Existem recomendações para a construção de um sistema de negociação totalmente automatizado que você gostaria de adicionar a esta publicação?
Compartilhar isso:
Compartilhe essa entrada.
Você pode gostar também.
Bom artigo. Eu gostaria de ter tido cerca de 6 meses atrás. Eu uso QuantConnect porque sou um programador C #. Achei muito conveniente poder fazer o download do teste Lean e back test localmente. Rummaging através do seu código também é valioso. Além disso, eles cortaram um acordo com a Trader por negócios de US $ 1. Isso ajuda muito. Não sou tão saliente sobre spreads e execução da Trader. O IB pode ser melhor para isso.
Vou dar uma olhada no curso que você mencionou.
Você não mencionou a Quantocracy ou RBloggers. Ambos são recursos muito valiosos.
O que você usa para traçar resultados de testes de volta? Eu logro os valores do OHLC e do indicador para csv do evento OnData e estou realmente cansado de usar o Excel para traçar os resultados. Gostaria de apontar um pacote de gráficos para um arquivo de dados e simplesmente ir.
Você ainda possui um fornecedor de caixas de seleção?
Tenho um pensamento sobre os sistemas dirigidos 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ê obtém uma corretora envolvida, então eu tenho sonhado com um sistema de streaming mais seguindo os princípios da programação funcional.
& # 8211; Injeste um fluxo de tiquetaque ou barra.
& # 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; Retornar um sinal.
& # 8211; Envie-o para o corretor para executar.
Em seguida, em um fluxo separado.
& # 8211; Receba uma resposta do corretor.
O problema, é claro, é o estado. Tenho margem suficiente para fazer o comércio? O que está no meu portfólio? Como está funcionando? Normalmente, o corretor api pode ser consultado para descobrir essas coisas, mas leva tempo e é assíncrono. Eu também estou olhando extensões Rx. Dessa forma, o sistema pode reagir às mudanças no sistema através do padrão observável.
Os eventos são ótimos para cliques no mouse. Não é tão bom para processamento transacional de alto volume.
Esta é exatamente a abordagem que tomei com minhas próprias coisas. Essencialmente, eu tenho um & # 8216; normal & # 8217; programa que envolve uma pequena parte que é conduzida a eventos para falar com o corretor (IB API). Agora, para o problema do estado. Você tem duas escolhas; obter o estado do corretor, ou armazená-lo internamente, atualizando-o quando você receber um preenchimento. 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 ruins ou atrasos). Parte disso depende da rapidez com que você troca. A menos que você esteja negociando com muita rapidez, então, pausando se você tiver um conflito de estado, ou você está incerto de estado, é melhor do que prosseguir sem saber o seu estado. Eu uso um banco de dados & # 8216; lock & # 8217; paradigma para lidar com isso.
Quanto a quase tudo o que você pediu, você está perto da resposta em Reactive Extension (Rx).
Com Rx indo de tiques para velas é trivial.
Passar de Velas para Indicadores é trivial.
Indicadores de composição de outros indicadores é trivial.
Escrever Posições de Indicadores é trivial.
Composição de Portfolios (como realizada ao longo do tempo) das Posições é trivial.
Simular o modelo de risco é trivial.
Back testing ou trading live é simplesmente decidir entre uma transmissão ao vivo de dados ou uma repetição simulada de dados do banco de dados.
Executar é trivial.
A implementação é possível em tudo, desde C # até F # para JavaScript para C ++ em código quase idêntico.
A otimização é feita rapidamente porque o Rx puramente funcional é massivamente paralisável ao GPU.
É certo que a otimização e a alimentação do efeito da otimização contínua de volta ao teste de back-back não é trivial, mas dado que não é trivial de qualquer maneira, eu irei deixar esse slide 😉
Puramente funcional (ou perto dela) A Rx é, na minha opinião, a única maneira de abordar a infraestrutura desse problema.
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 levar o sistema que eu quero usar e automatizá-lo. Por automatizar isso, quero dizer, eu não quero olhar para ele. Eu vou olhar os resultados uma vez por semana e os negócios serão executados sem a minha atenção. Parece estranho para mim que, em 2018, tanto esforço precisa tomar um conjunto de regras e ter essas regras executadas no meu corretor.
Eu sugeriria inscrever-se com o Quantopian e depois encontrar alguém dentro da comunidade lá para construir a estratégia para você. Eles serão capazes de construí-lo para você dentro da plataforma IB Brokers e ser totalmente automatizado.
Deixe-me dizer, porém, que acho que você deve monitorá-lo de perto, e não apenas "esqueça-o para" # 8221 ;.

Sistema de negociação java
Obter através da App Store Leia esta publicação em nosso aplicativo!
Sistema de negociação Bitcoin.
Recentemente, fiz um exercício para uma pré-seleção de entrevista, mas não foi selecionado. Eles não deram um feedback muito detalhado além de "o código não dependia do que eles queriam".
Seria realmente útil entender se o código escrito depende dos padrões de produção e do que eu poderia estar perdendo.
Aqui estão os requisitos:
Nosso negócio quer mover-se no mercado bitcoin e nos pediram para implementar o primeiro corte de um serviço simples de RFQ (pedido por cotação). A API parece assim e não pode ser alterada.
O trabalho do nosso motor é responder com uma oferta (o preço em que compramos) e pedir (o preço que vendemos) ao encontrar uma oferta de cliente exata para combinar em cada lado. Para isso, nosso serviço tem acesso ao quadro de pedidos ao vivo da empresa, que possui uma única moeda de pagamento (por exemplo, USD) retornará uma lista de pedidos pendentes dos clientes.
A resposta do nosso serviço deve ser uma única cotação de oferta / consulta. Se o pedido não puder ser cumprido em ambos os lados pelo nosso serviço RFQ interno, a resposta deve estar vazia.
A diferença entre a ordem do cliente e nossa cotação (ou seja, a quantidade X) é como ganhamos dinheiro. X é 0,02 independentemente da moeda.
Exemplos trabalhados.
RFQ para 200 bitcoins que pagam em USD deve retornar:
O RFQ para 500 bitcoins não pode ser cumprido porque não há nenhuma ordem de venda correspondente.
A solução.
Forneça uma implementação do mecanismo RFQ em Java, que permitirá que a empresa entre no mercado bitcoin. Não é necessária UI ou persistência, mas sua solução deve ser capaz de demonstrar as regras comerciais de RFQ, com algumas amostras de insumos de sua escolha. Não exigimos uma implementação do painel de pedidos ao vivo. Se você achar os requisitos pouco claros, você é livre para fazer qualquer suposição ao longo do caminho, mas indique-os explicitamente em um arquivo readme dentro da sua solução. Ele deve conter tudo o que você normalmente verificaria no seu sistema de gerenciamento de código-fonte e o código deveria ser de qualidade de produção.
Nessas situações de triagem, você só obtém alguns segundos para fazer uma boa primeira impressão. Infelizmente, esta linha já faz uma impressão ruim:
A capitalização inconsistente mostra uma falta de atenção aos detalhes. Se o problema indicar explicitamente que você precisa implementar exatamente a interface RfqService fornecida, você não pode escrever implementa RfQService. E a classe deve ser chamada RfqServiceEngine.
O LiveOrderBoard deve ser passado assim:
Marcando o LiveOrderBoard como um campo final, deixa claro que ele não pode ser trocado após o construtor. Não creio que seja sensato permitir que seja nulo, e é ainda menos sensato recusar todas as futuras citações devido ao fato de ser nulo. (A última coisa que uma empresa financeira quer é perder milhões de dólares devido a um erro oculto. Se algo está errado, basta fazer com que ele falhe rapidamente.)
Não escreva comentários sem valor como este - é uma oferta morta de que você é iniciante.
Provavelmente é bom que você tenha usado o BigDecimal para representar o dinheiro, para evitar a imprecisão de ponto flutuante. Você não precisava fazê-lo, uma vez que a interface especificada possui s duplo. Pessoalmente, se eu tivesse esse problema para uma entrevista, eu simplesmente iria com o dobro, mas escrevesse um grande comentário como esse em protesto:
No entanto, tendo escolhido o BigDecimal, você o estragou escrevendo novo BigDecimal (0.02) em vez de novo BigDecimal ("0.02"). O JavaDoc avisa que o BigDecimal (duplo) construtor é imprevisível, mas você deve descobrir que escrever 0,02 já corre o risco de perder a precisão.
Aqui também // Nossa comissão é um comentário supérfluo.
A questão simplesmente representava moedas como cordas. Qual é essa classe TradeCurrency?
Você inclui a classe TradeCurrency com sua submissão? Por que você inventou algo para complicar um problema simples?
Você calculou os preços de oferta e solicitação, mas você realmente verificou se o spread produz um lucro positivo? Essa pode ser a falha lógica que abalou suas chances com a empresa - imagine quanto dinheiro a empresa poderia perder, fazendo com que os negócios sejam desprovistos de forma acidental!
Uso do comparador.
Em Java 8, você pode usar Comparatorparing (Function) para fornecer um Comparador no método Order. getPrice (), quando você o usa como uma referência de método:
Desduplicação de código.
Ambos getHighestBuyOrder e getLowestSellOrder são semelhantes, exceto para uma das condições de predicado e a operação do terminal (máximo (Comparador) vs min (Comparador), respectivamente).
Como tal, você pode considerar a seguinte refatoração:
Manipulação de exceção.
Evite capturar uma Exceção genérica, pois pode causar confusão a longo prazo. Para iniciantes, afeta negativamente o controle lógico no momento em que você encontrar algum tipo de exceção - verificado ou tempo de execução, menor ou maior.
Ele também esconde erros mais novos quando você altera seu código: talvez seja necessário preocupar-se com uma nova exceção verificada, que pode retomar o currículo com segurança, mas devido a essa ampla condição de captura, você ficará pensando por que você às vezes / sempre termina com um opcional vazio.
Além disso, os tiros. A declaração é para exceções verificadas, então você ainda pode lançar exceções de tempo de execução, se for suficientemente grave.
volte cedo.
Se você inverter sua verificação de condição if no LiveOrderBoard e o montante para retornar antecipadamente, você pode reduzir um nível de aninhamento.
Uma vez que o RfqService é fornecido em camelCasing apropriado (para alguma definição de "apropriado"), você pode querer manter essa convenção e chamar sua classe RfqServiceEngine.
Eu notei que, em seus métodos getHighestBuyOrder e getLowestSellOrder, o ponto (.) É separado da chamada do método ao atravessar as linhas. Eu acho que isso é pouco convencional, a menos que já seja sua convenção. :)
Além disso, você deve usar em vez de no seu Javadoc para que a fonte monospaced seja usada e processada corretamente.
Colocando-o completamente.
O código refatorado para quoteFor (String, int) pode parecer algo como:
Sua classe possui uma dependência do liveOrderBoard. Confira em seu construtor e lance uma exceção se for nulo, não adie o cheque até você usá-lo. É melhor não permitir que sua classe seja construída em um estado inconsistente do que ter que verificá-lo para cada método público.
Um dos requisitos era que você envia tudo o que você normalmente verificaria no controle de origem. Eu esperaria pelo menos ver testes que cobriam os exemplos de casos fornecidos (você pode ter escrito, mas não adicionado aqui para revisão). Os estilos de teste variam e podem ser a fonte de muitas opiniões de cadeias de modo que vale a pena considerá-los tanto quanto o código de "produção".
É muito tentador sobre o código de comentários ao enviá-lo para uma entrevista. Eu tentaria evitá-lo, o código deveria ser tão parecido com seu código real quanto possível. Escreva seu código para que o que você está fazendo e porque é tão óbvio quanto você pode e reserve comentários para explicações mais complexas. Eu sei que você salva a placa de pedidos ao vivo em seu construtor porque você tem uma dependência, você não precisa me dizer.

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

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