Sunday 15 October 2017

Construindo Uma Plataforma De Negociação On Line


Construindo uma plataforma de negociação Forex usando Kafka, Storm e Cassandra


Janusz Slawek


22 de outubro de 2014


Janusz Slawek


Engenheiro de Dados


Insight Fellow, 2014 Janusz Slawek, atualmente é engenheiro de dados e foi Insight Data Engineering Fellow na sessão inaugural de junho de 2014. Aqui, ele dá uma visão geral de alto nível do pipeline de dados que ele construiu no Insight para lidar com dados de Forex para negociação algorítmica, visualização e trabalhos de agregação em lote.


O mercado de câmbio, ou forex, é o serviço de câmbio maior e mais líquido do mundo, com mais de US $ 4 trilhões de negócios feitos todos os dias. É um mercado verdadeiramente global que só dorme nos fins de semana. Como um negócio fascinante que tem suas raízes da história antiga, forex tem avançado continuamente com a tecnologia ao longo dos anos. No entanto, assim como nos velhos tempos, ser bem sucedido na negociação tem uma mente analítica e uma alma jogador, uma vez que exige o comerciante para gerenciar uma grande quantidade de risco e estresse. Embora as instituições financeiras estabelecidas usem sistemas dispendiosos para executar os negócios, p. Software de acesso direto ao mercado de latência ultra-baixa. Os investidores individuais têm apenas algumas ferramentas simples à sua disposição, p. Trader Meta ou Trader Ninja. Software acessível existe e se integra bem com os serviços de corretagem. Muitas vezes, permite executar algoritmos de negociação personalizados. No entanto, não permite a análise de dados financeiros ricos, o que é crucial para tomar decisões de negociação informadas ou construir algoritmos de negociação.


Para resolver este problema, eu criei uma plataforma de negociação forex chamada Wolf. Com Wolf, podemos agora visualizar dados financeiros em tempo real. Executar ordens de negociação com pouca latência. E analisar eventos históricos off-line. É simples de usar e se integra perfeitamente com os intermediários externos e provedores de dados.


Eu compus Wolf de um grupo de serviços que são mostrados na Figura 1.


Figura 1. Arquitetura de Lobo.


As entradas Lobo processa dois tipos de entradas: atualizações para as taxas de conversão de sete principais pares de moedas e ordens de negociação de investidores. Na Figura 1, as entradas do primeiro tipo originam-se de um "fornecedor de dados" Serviço na parte inferior. Entradas do segundo tipo são servidas ao sistema de "Rule API", um módulo localizado no canto superior direito. O primeiro fluxo de informação é essencial para a operação de Wolf. É extraído dos dados agregados pelo site da HistData. São servidos para o sistema com uma resolução de até um & quot; carrapato & quot; Por milisegundo, isto é, uma taxa de conversão de cada par de moedas é actualizada no máximo uma vez por milissegundo. Ao mesmo tempo, os usuários do sistema fornecem o segundo fluxo de eventos, enviando ordens de negociação através de uma interface web ou uma API RESTful. Ambos os tipos de entradas entram em um multiplexador, veja a Figura 1. O multiplexador é implementado usando Kafka. Uma fila persistente, que é resiliente a falhas de hardware, tem uma capacidade ajustável e permite buffering de dados durante um período de tempo especificado.


Roteamento de dados com velocidades diferentes com o Kafka I criou três classes de consumidores para eventos do multiplexador: um mecanismo de regras, um serviço de visualização em tempo real e um serviço de agregação em lote. Eles estão localizados diretamente acima do multiplexador na Figura 1. O mecanismo de regra é capaz de puxar cada milissegundo não interromper uma camada de visualização em tempo real, que consome cada quinhentos milissegundos. Ao mesmo tempo, o serviço de agregação consome ordens de grandeza mais lentamente, a cada quinze minutos. Estes três consumidores processam dados em taxas muito diferentes, porque representam três casos de uso diferentes de Wolf. O mecanismo de regras deve executar ordens de negociação de investidores com muito pouca latência. A camada de visualização, ou um gráfico, deve aparecer interativa para os usuários, mas não saturar a rede. A camada de agregação deve processar eventos em grandes quantidades. Estes três são capazes de comércio de alta taxa de transferência para um tempo de resposta de baixa, ou vice-versa, graças ao Kafka39; s grupos de consumidores exclusivamente concebidos.


Pipeline de dados para o mecanismo de regras: muito rápido As ordens de negociação são expressas em termos de "se, em seguida," & quot; regras. Um exemplo de tal regra poderia ser a seguinte declaração: "Se uma taxa de conversão de EUR para USD for inferior a 1,2, então compre 100 unidades." Um mecanismo de regras deve rapidamente corresponder a um grande volume dessas regras com o mercado em constante mudança. Em outras palavras, um investidor quer o comércio acima executado direito quando a taxa de conversão cai abaixo do limite especificado. É um problema desafiador porque as taxas de conversão flutuam dinâmicamente. O módulo do Wolf responsável pela execução de ordens de negociação é chamado de mecanismo de regras. Eu a implementei em cima de um processador de evento Storm. Storm é uma solução testada no campo de batalha que se integra muito bem com Kafka. Permite criar um fluxo de processamento personalizado, isto é, uma topologia. Abaixo está uma visualização em tempo de execução da topologia que é executada no cluster Storm:


A Storm cuida de serializar, encaminhar e repetir eventos da fonte em caso de falhas. Permite construir topologias distribuídas e injetar lógica de negócios definida pelo usuário. Eu deleguei a ação real de compra e venda de moeda para um serviço de corretagem externo.


Pipeline de dados para o serviço de visualização em tempo real: rápido O segundo consumidor de eventos de Kafka é um serviço de visualização em tempo real. Ele agrega as últimas atualizações para o mercado por quatro horas. Porque os eventos vêm classificados por um carimbo de data / hora, eu decidi aproveitar ainda outra muito bem conhecida solução open-source, o banco de dados Cassandra. Ele é projetado para armazenar eficientemente séries de dados ordenados. A Cassandra associa chaves com listas classificadas e armazena-as efetivamente usando tabelas de cadeias classificadas. Eles são replicados entre servidores que formam um anel lógico sem mestres designados ou escravos. Por design, a Cassandra é resistente a falhas e replica dados em vários centros de dados, o que o torna um armazenamento de dados distribuído altamente disponível. Ele permite ajustar a consistência com os níveis de leitura / gravação. É uma solução muito capaz derivada das bases de dados DynamoDB e LevelDB. No entanto, é um sistema muito complexo que oferece contadores globais, transações leves e muito mais.


Pipeline de dados para o serviço de agregação de lote: lento O último consumidor de eventos do Kafka é um serviço de agregação de lote. Ele é projetado para armazenar todos os eventos históricos, centenas de terabytes de dados. Decidi usar Camus para coletar dados de Kafka e persisti-los em um cluster Hadoop. Eu usei o Hive para calcular visualizações agregadas, p. Transformei os dados em uma resolução mais baixa, calculando a média das taxas de conversão ao longo do tempo e enviando essas visualizações para o serviço de visualização em tempo real. Esta abordagem permite visualizar dados em diferentes escalas. Dessa forma, eu poderia gráfico o último minuto de dados com uma resolução de um milissegundo ea última hora de dados com uma resolução de um minuto para evitar o envio de uma quantidade excessiva de pontos de tempo para um cliente.


Colocando tudo junto No topo do serviço de visualização em tempo real, eu construí uma camada de serviço que impede que os usuários de consultas armazenamentos de dados diretamente e melhora o tempo de resposta do Wolf. É representado como o @Cache @ Na Figura 1. Um código do lado do cliente periodicamente consulta a camada de serviço para os dados mais recentes. Para representar graficamente os dados, usei a biblioteca Flot JavaScript que suporta plotar séries em tempo real em um navegador da Web.


Para resumir, do ponto de vista técnico, a parte mais desafiadora da construção de uma plataforma de negociação era adequadamente encaixar algumas partes móveis e permitir o processamento de um grande volume de eventos com pouca latência, bem como visualizá-los e persisti-los para uma solução confiável armazenamento. Para resolver este problema complexo, eu criei um protótipo primeiro e só depois substituí-lo com uma gama de soluções testadas no campo de batalha. Para ter o Lobo trabalhando de ponta a ponta e para colar junto um wireframe inicial de serviços distribuídos, eu usei um microframework Flask e um par de scripts de shell. Isso me permitiu implementar rapidamente uma prova de conceito, substituir sucessivamente os serviços simulados e melhorar iterativamente o design do sistema. Acredito que essa metodologia foi realmente a chave para o sucesso deste projeto.


Sinta-se livre para conferir o repositório Wolf no Github para saber mais.


Interessado em transição para carreira em engenharia de dados?


Saiba mais sobre o Insight Data Engineering Fellows Program em Nova York e no Vale do Silício, inscreva-se hoje ou inscreva-se para atualizações de programas.


Já é cientista de dados ou engenheiro?


Alcance o comércio em tempo real em linha através de seu PC.


DIY Trading é uma maneira em que você pode fazer o seu dinheiro trabalhar para você.


Se você entender o conceito de comprar uma casa e vendê-la mais tarde, quando os preços da habitação subir, você já está no seu caminho para se tornar um comerciante:


O dinheiro que você faz quando vende essa casa por um preço mais alto é seu lucro.160 Você não precisa trabalhar para ganhar esse lucro; Você apenas tem que possuir a casa.160;


O mesmo princípio se aplica à negociação: Você compra um ativo e vende-o com lucro quando o tempo está certo.160;


Você pode negociar através de seu PC usando nossas Plataformas de Negociação, colocando você no controle de suas finanças

No comments:

Post a Comment