Design de sistema de negociação de alta freqüência


Mais um passo.
Complete a verificação de segurança para acessar a velocidade da luz.
Por que eu tenho que completar um CAPTCHA?
Concluir o CAPTCHA prova que você é humano e dá acesso temporário à propriedade da web.
O que posso fazer para evitar isso no futuro?
Se você estiver em uma conexão pessoal, como em casa, você pode executar uma verificação antivírus em seu dispositivo para se certificar de que não está infectado com malware.
Se você estiver em um escritório ou rede compartilhada, você pode pedir ao administrador da rede para executar uma varredura na rede procurando dispositivos mal configurados ou infectados.
Cloudflare Ray ID: 3d28a65a670b59c6 & bull; Seu IP: 78.109.24.111 & bull; Performance & amp; segurança por Cloudflare.

College Kids são agora alta freqüência de troca de dormitórios.
O estudante universitário Spencer Singleton está entre uma crescente banda de amadores voltando-se para a negociação automatizada de ações automatizadas por computador - até agora a reserva de hedge funds e mega corretores - e diz que está batendo o mercado.
Singleton, com sede em Texas, venceu um concurso em julho passado por um site de investimento algorítmico para escrever programas de negociação. O site, Quantopian, deu-lhe US $ 100.000 para colocar seu modelo em ação por seis meses e disse-lhe para manter lucros.
O jogador de 21 anos diz que seu portfólio cresceu cerca de 1,5% neste ano, contra uma queda de 8% no índice de ações S & amp; P 500. Da mesma forma, ele fez cerca de 2,5% desde meados de setembro, enquanto o índice dos EUA perdeu mais de 7% no período.
Outros amadores tentaram o mesmo jogo de seus quartos da frente ou galpões de jardim e acabaram ficando queimados, concluindo que isso é uma caçada ao "ouro & # 8217; s # 8221; melhor para os grandes jogadores, a menos que você seja um ex-profissional ou um garoto do computador.
Singleton não é - ele é um estudante de terceiro ano de gerenciamento da cadeia de suprimentos -, mas diz que a competição deu sua grande chance. Como estudante universitário, não teria conseguido US $ 100.000 em um milhão de anos para negociar, e # 8221; ele disse à Reuters. & # 8220; Teria facilmente levado 10 anos para eu desenvolver uma plataforma de algo complicada como a oferecida por Quantopian. & # 8221;
As plataformas de negociação on-line orientadas por programas, como a Quantpian e a QuantConnect e a base britânica Cloud9trader, com sede nos Estados Unidos, que têm clientes em todo o mundo, não existiram no auge da crise financeira de 2008.
No entanto, Singleton disse que testou seu modelo contra dados históricos do ano de crise, obtendo um retorno de 16% contra uma queda de 38% no índice S & amp; P.
Um grande número de amadores agora está tentando atingi-lo rico nos mercados globais, com o mercado global de comércio no varejo no valor de US $ 3 trilhões nos Estados Unidos.
Mas enquanto a negociação automatizada representa cerca de 75 por cento de todo o volume de mercado financeiro, apenas uma pequena fração de comerciantes independentes ou amadores os usam devido à tecnologia complexa, necessidade de dados históricos maciços e altos custos.
No entanto, as empresas que fornecem plataformas para o aluguel de casas & # 8220; algues & # 8221; Dizem que a popularidade está crescendo entre todos, desde executivos de publicidade e engenheiros de telecomunicações para empreiteiros de defesa.
O fundador e executivo-chefe da Aspian, John Fawcett, disse que a sua adesão aumentou para 60 000 desde 35 mil menos do que um ano atrás, enquanto o fundador e CEO da QuantConnect, Jared Broad, viu um salto em sua participação em 17 mil em comparação com 6.000 no ano anterior .
Broad disse que as estratégias automatizadas tendem a fazer bem quando os mercados são voláteis ou diminuindo acentuadamente, acrescentando que os volumes de negociação em uma de suas corretoras cresceram 300% em apenas três semanas em 2018.
O seu rápido crescimento aumenta o risco de manipulação de mercado ou fraude, mas a Aspian disse que criou muitas salvaguardas, incluindo limites no número de negócios que os clientes podem fazer.
Navinder Singh Sarao, com sede em Londres, foi preso no ano passado, com as autoridades dos EUA ligando seus negócios de computador automáticos para o flash crash do & # 8220; # 8221; em 2018, que secou brevemente US $ 1 trilhão dos mercados de ações dos EUA.
Sarao, que trocou de seus pais & # 8217; perto do aeroporto de Heathrow, em um subúrbio de Londres, está lutando contra os EUA tentando extraditá-lo. Um tribunal britânico deve ouvir o caso em 4 de fevereiro.
Essencialmente, as plataformas de negociação on-line baseadas em regras fornecem ferramentas e tutoriais para as pessoas escreverem algoritmos em navegadores da Web e testar seus modelos com anos de dados históricos. Eles também ajudam as pessoas a abrir contas com corretores aprovados.
É difícil verificar de forma independente as reivindicações de comerciantes de varejo que dizem ter feito muito dinheiro este ano, quando as preocupações com uma economia chinesa em desaceleração e o preço do petróleo em queda acabaram com US $ 8 trilhões dos mercados de ações mundiais apenas em janeiro.
Algumas pessoas como Jason Roberts perderam e saíram. Ele passou cerca de seis anos, de aproximadamente 1999 a 2004 e novamente em 2008, construindo software de negociação automatizado antes de sair para ajudar projetos de inicialização na web e celular.
Roberts disse que cada vez que ele se juntou com comerciantes em um empreendimento comercial automatizado, suas estratégias e idéias perderam a marca, mesmo que anteriormente tenham sido bem-sucedidas como profissionais do mercado.
Como as corretoras, esses sites de negociação ganham dinheiro quando as pessoas usam suas plataformas, por isso está interessado em convencê-lo de que você pode vencer o mercado, e # 8221; disse Roberts, que agora é consultor do serviço de viagem Uber.
Não estou totalmente convencido de que é possível vencer o mercado de forma consistente, quer você seja negociado manualmente, guiado por experiência e intuição ou algorítmica, o que equivale a seguir um conjunto codificado de regras & # 8230; É fácil perder dinheiro com negociação algorítmica, assim como com qualquer investimento. & # 8221;
Julien Turc, chefe da estratégia quantitativa de ativos cruzados da Societe Generale, disse que a construção de uma estratégia de negociação sistemática é muito difícil. É fácil encontrar estratégias que teriam feito bem no passado, mas mais difícil ganhar dinheiro com elas no futuro.
& # 8220; No entanto, o comércio de algoritmos está ficando mais popular agora, pois você obteve melhores tecnologias, os reguladores empurram para negociações transparentes e eletrônicas e cada vez mais se torna difícil ganhar dinheiro usando ferramentas de negociação tradicionais. # 8221;
Singleton e Michael Van Kleeck, outro vencedor do concurso mensal de escrita de código da Quespian & # 8217; em junho passado, estão entre milhares de entusiastas que, desconsiderados pelas críticas, acreditam que têm uma vantagem sobre os métodos comerciais tradicionais.
& # 8220; Os seres humanos são consistentemente menos performantes porque têm interferência emocional. O comércio de Algo formaliza a sua estratégia por conta própria e define limites claros na sua exposição ao risco, & # 8221; disse Jon Kafton, fundador da Cloud9Trader, um site de negociação online automatizado sendo julgado.
Para Kleeck, os sites de algo e as plataformas de negociação atraem aqueles que, como ele, têm um apetite voraz por ler qualquer coisa relacionada a ganhar dinheiro nos mercados financeiros.
Não é uma ciência do foguete, embora possa haver alguns cientistas de foguete no fórum. Isso é parte da disseminação geral da tecnologia em vidas cotidianas. & # 8221; (Reportagem de Atul Prakash, edição de Sudip Kar-Gupta e David Stamp)
CONTEÚDO FINANCEIRO PATROCINADO.
Você pode gostar.
Histórias de.
Assine nossa newsletter.
Inscreva-se & amp; Salve .
Assine nossa newsletter.
A Fortune pode receber compensação por alguns links para produtos e serviços neste site. As ofertas podem estar sujeitas a alterações sem aviso prévio.
Cotações atrasadas pelo menos 15 minutos. Dados de mercado fornecidos pela Interactive Data. ETF e fundos mútuos fornecidos pela Morningstar, Inc. Termos e condições da Dow Jones: djindexes / mdsidx / html / tandc / indexestandcs. html.
Os dados do índice S & P são propriedade da Chicago Mercantile Exchange Inc. e seus licenciadores. Todos os direitos reservados. Termos e Condições. Alimentado e implementado por soluções interativas de gerenciamento de dados.

1 Parte I - Antecedentes.
Tradicionalmente, a negociação é feita por operação manual, o que exige que um comerciante abra ou feche a posição manualmente, ou pelo menos convocando um corretor para fazê-lo. Benjamin Graham mencionou uma vez que muitos grandes investidores com registros de investimento pendentes sempre repetem o maior inimigo do investidor. Warren Buffett também disse que um investidor bem sucedido é aquele que tem o temperamento certo e a psicologia certa. Como todos sabemos, o comércio manual não é apenas vulnerável à flutuação psicológica e emocional dos comerciantes, mas também muito ineficiente em termos de velocidade de negociação e conveniência.
Devido ao avanço da tecnologia de computação, agora quase todos os ativos financeiros podem ser negociados eletronicamente. O sistema automatizado de negociação aproveita os computadores para desenvolver e testar estratégias e negociar recursos financeiros automaticamente. Pode ajudar os comerciantes novatos a evitar o comércio emocional e também ajudar comerciantes experientes a tornar a negociação mais eficiente e sistemática. Tem sido amplamente utilizado no setor financeiro e tornou-se indispensável para muitos investidores. Por outro lado, o comércio automático torna o mercado mais líquido e reduz os custos de negociação em conformidade.
Nos últimos anos, a plataforma de negociação on-line também se torna um ponto quente da inovação em engenharia financeira. Muitas empresas de tecnologia financeira, como a Quantopian, Quantconnect, Motif Investing, arrecadaram fundos consideráveis ​​de Wall Street. Os fundos Hedge como o WorldQuant também fornecem simulação on-line e ambiente de negociação para comerciantes individuais. Algumas dessas plataformas são lindamente projetadas e muito amigáveis. Mas quando você faz o teste de suas estratégias, eles realmente estão funcionando nos servidores, portanto, totalmente transparentes para a empresa. Para evitar o risco de expor as estratégias, é mais seguro fazer pesquisas em máquinas e trocas locais através de corretores confiáveis ​​ou DMA. Além disso, nas plataformas on-line, os dados são transferidos na Internet com o protocolo HTTP, o que pode ser OK para negociação de baixa freqüência, mas não é eficiente ou viável para o comércio de alta freqüência.
Sentosa tem o nome da ilha mais popular de Singapura. Os idiomas que eu usei para escrever Sentosa incluem C ++, Python, R, Go e Javascript. O projeto está hospedado em Quant365, onde você pode baixar o código-fonte e seguir todas as atualizações.
Existem três subprojetos no Sentosa:
O sistema de negociação da Sentosa é um sistema de negociação automática de alta freqüência, altamente escalável e multi-thread. A latência pode ser tão baixa quanto 100 milissegundos, dependendo da distância entre você e os servidores do local de negociação. Atualmente, o local de negociação é IB, então é necessária uma conta IB. Com o design modular, pode ser ampliado facilmente para suportar outros locais de negociação. O módulo de algoritmo pode ser escrito com qualquer idioma que suporte o protocolo nanomig ou websocket. Eu implementei a ligação de linguagem para Python, R para uma finalidade de ilustração. É muito fácil adicionar outros idiomas como Java, MATLAB, Haskell, Go, C #, etc. O módulo de dados de mercado se inscreve nos dados de comércio e cotação (TAQ), portanto, em alguma literatura ou livro, o sistema de negociação da Sentosa deve ser categorizado como técnico sistema de negociação automática, em contraste com o sistema de comércio automático fundamental, onde o sistema usa principalmente os fundamentos como sinal de negociação. Eu não acho que essa categorização tenha muito sentido porque o sinal é apenas um resultado do módulo de algoritmo e qualquer coisa pode ser um sinal: indicador técnico, relação fundamental, índice macroeconômico, notícias de mídia social, tendências do Google etc.
A plataforma de pesquisa Sentosa é essencialmente um ambiente computacional interativo baseado em Jupyter. Vou demonstrar como usar R e Python para fazer pesquisas de volatilidade na plataforma mais tarde.
Além disso, desenvolvi também uma plataforma web para o Sentosa com o Django e o Tornado, através da qual você pode monitorar o Sentosa e enviar ordens usando a interface da web.
Eu usei Sentosa para fazer pesquisas e negociação para mim. Embora possa ser usado para negociação real, aqui eu renuncio a todas as responsabilidades de qualquer perda de qualquer transação através do Sentosa. Mas se isso ajudasse você a ganhar dinheiro, não me importaria de receber uma xícara de café. Sentosa é um projeto em andamento e mais recursos serão adicionados no futuro. Também discutirei a direção futura de cada subprojeto.
2 Parte II - Sentosa Trading System.
2.1 Visão geral do projeto.
Ao projetar o sistema de negociação da Sentosa, minha ênfase está em sua configuração, modularidade e escalabilidade. Na pasta.
/.sentosa, existe um arquivo de configuração de formato YAML chamado sentosa. yml, que você pode usar para personalizar o sistema. O único requisito é que você precise configurar sua própria conta do IB na seção global para o papel ou negociação real.
O sistema de negociação da Sentosa é composto principalmente de cinco módulos: módulo de dados de mercado, módulo OMS, módulo de algoritmo, módulo de registro e módulo de simulação. Esses módulos são propositadamente desacoplados e as comunicações são através do sistema de mensagens. O sistema de comércio também possui quatro modos de execução: registro, comércio, simulação e merlion, que representam uma combinação diferente dos cinco módulos.
A Figura 1 é o gráfico de fluxo de trabalho do programa do sistema de negociação Sentosa.
Fluxo de trabalho do Sentosa Trading System.
2.1.1 Modo de execução.
Sentosa pode ser executado em quatro modos que é definido da seguinte maneira:
Não troque, apenas para gravar todas as informações do mercado em um arquivo de simulação para uso futuro.
Inicie todos os módulos e trocas do Sentosa.
Replay cenário histórico. Isto é para acompanhar o seu algoritmo em um ambiente de simulação.
O modo merlion é o mesmo que o modo comercial, exceto que ele não gera um arquivo de simulação. Você não pode reproduzir a sessão de negociação atual, pois não possui nenhum arquivo de simulação gerado.
O modo de execução pode ser configurado na seção global em sentosa. yml.
2.1.2 Multithreads e sistema de mensagens.
O Sentosa é um aplicativo multithread implementado com threads C ++ 14. Todos os tópicos são criados em heap e os ponteiros são armazenados em um vetor. Inicialmente, desenvolvi Sentosa na plataforma Windows e usei o ZMQ como protocolo de mensagens interno. Mas quando eu tentava portá-lo para o Linux, o ZMQ não funcionava bem com os tópicos no Linux. O ZMQ criou mais de dez threads automaticamente e confundiu com os tópicos do IB de alguma forma. Eu arquivei um relatório de erro do ZMQ e até agora ele ainda foi resolvido.
Nanomsg é criado como uma alternativa melhor ao ZMQ pelo mesmo autor. É mais fácil de usar e não tem esse problema no ambiente multithread. Substitui todo o código ZMQ por nanomsg e escolhi nanomsg como meu protocolo de mensagens interno.
2.1.3 Módulos.
Com nanomsg como protocolo de mensagens internas, desacoplar o sistema em cinco módulos básicos: módulo de dados de mercado, módulo de sistema de gerenciamento de pedidos, módulo de algoritmo, módulo de registro e módulo de simulação. Esses módulos coexistem em um processo, mas em tópicos diferentes. Eles se comunicam com o sistema de mensagens e podem ser desligados e ligados de acordo com os quatro modos de execução descritos acima. O design modular torna o sistema escalável e mais fácil para o desenvolvimento futuro.
Os três primeiros módulos representam os três componentes mais básicos de um sistema de troca automática. Nas seções a seguir, descreverei esses três módulos, um a um.
2.2 Módulo de dados de mercado.
2.2.1 Introdução de dados de mercado.
O módulo de dados de mercado é um dos componentes mais importantes de um sistema comercial. Geralmente, os dados do mercado incluem informações de nível de tiques sobre os preços e o tamanho da oferta, pedido, negociações completas. Diferentes fornecedores de dados às vezes fornecem informações extras como tag, nome de troca. Existem dois níveis de dados de mercado de acordo com as informações fornecidas.
Os dados do mercado de nível 1 fornecem a informação mais básica, que inclui o preço e o tamanho do lance / pedido, e o último preço e tamanho negociado. Do ponto de vista do livro de pedidos, essas informações são do topo do livro, de modo que os dados do mercado de nível 1 também são conhecidos como dados de topo.
Os dados do mercado de nível 2, também denominados livro de pedidos ou profundidade de mercado, fornecem informações adicionais de livro de pedidos parcial ou inteiro. O livro de pedidos tem duas longas filas de licitação e solicitação de pedidos, respectivamente. As filas se cancelam no topo e crescem quando a nova ordem do limite entra. O comprimento da fila é chamado de profundidade do livro de pedidos. O livro de pedidos muda muito rápido para estoques líquidos, de modo que a informação pode ser grandemente enorme.
A maioria dos comerciantes individuais usa dados de mercado de Nível 1. Os dados do mercado de nível 2 são cruciais para os comerciantes do dia, especialmente os comerciantes de alta freqüência de baixa latência. Existem muitas pesquisas acadêmicas sobre os dados do mercado de nível 2 nos últimos anos.
O IB tem sua própria maneira de fornecer dados de mercado. Freqüentemente, o IB fornece dados de mercado de nível 1 e de nível 2. reqMktData é solicitar dados de mercado de nível 1. reqMktDepth é solicitar dados de mercado de nível 2. Além dos dados brutos, o IB também fornece dados de barras em tempo real através da função reqRealTimeBars. Os dados da barra em tempo real, como os dados históricos da barra, também oferecem preços abertos, altos, próximos, baixos (OHCL), preço médio ponderado em volume (VWAP) e informações de contagem de negócios.
Note-se que o IB não fornece dados de nível de autenticação. Os dados de mercado são consolidados a cada 300 milissegundos ou mais e enviados de volta ao cliente mediante solicitação. Como não estamos fazendo negociações de latência ultra-baixa e não considerando a dinâmica do nível do tiquetaque, uma combinação de dados de nível 1 e dados de barra em tempo real de 5 segundos deve ser suficiente.
2.2.2 Tópicos.
No sistema de troca do Sentosa, o módulo de dados do mercado envolve os seguintes tópicos:
2.2.2.1 Thread_MKDataTick.
Thread_MKDataTick conecta-se ao IB para solicitar dois tipos de dados:
Dados de mercado em tempo real do nível de tiques do IB (por reqMktData) Dados da barra de TRADE em tempo real de 5 segundos do IB (por reqRealTimeBars)
Após dados enviados de volta do IB, os dados são enviados para o thread Thread_UpdateSboard para atualizar o painel de avaliação, uma estrutura de dados global implementada como singleton em scoreboard. h / cpp.
2.2.2.2 Thread_MKDepth.
Obtenha dados de mercado de nível 2 ao chamar IB API ReqMkDepth (). O TWS atualmente limita os usuários a um máximo de 3 solicitações de profundidade de mercado distintas. Esta mesma restrição aplica-se aos clientes API, no entanto, os clientes API podem fazer vários pedidos de profundidade de mercado para a mesma segurança. Devido a essa limitação, muitos algoritmos que envolvem a dinâmica do livro de pedidos não podem ser usados.
2.2.2.3 Thread_UpdateSboard.
Este tópico é atualizar o painel de avaliação na mensagem de dados de mercado.
Quando o sistema de negociação da Sentosa está sendo executado no modo de simulação, os dados do mercado podem ser de um arquivo de simulação, também conhecido como arquivo de repetição.
2.3 Módulo Algoritmo.
O sistema de negociação Sentosa fornece uma estrutura para os comerciantes para escrever suas estratégias. Essa estrutura é chamada de módulo de algoritmo. Este módulo se comunica com o módulo OMS através do sistema de mensagens. Nem muitos comerciantes são especialistas em programação, mas para implementar suas estratégias, eles sabem como usar linguagens de programação para escrever algoritmos de negociação. As línguas mais utilizadas pelos comerciantes incluem R, Matlab, Python e VBA (Excel). O sistema de negociação da Sentosa é um sistema orientado por mensagens e projetado com o suporte a vários idiomas em mente. Enquanto um idioma suportar nanomsg ou websocket, ele pode ser usado para escrever algoritmo de negociação.
Atualmente, o Senotsa suporta um módulo de algoritmo escrito em três idiomas, incluindo C ++, Python e R. Esses três idiomas representam três maneiras de como o módulo de algoritmo funciona no Sentosa.
Os comerciantes que usam o C ++ têm principalmente habilidades de programação fortes e maior exigência com o desempenho e a velocidade do sistema comercial. No sistema de negociação da Sentosa, o módulo de algoritmo é incorporado em uma biblioteca estática e, em seguida, usado para gerar o binário executável final.
Todos os algoritmos no sistema de negociação da Sentosa herdam de uma classe base abstrata AlgoEngine. O padrão de fábrica é usado para criar objetos de algoritmo:
No arquivo de configuração Sentosa. yml, existe uma seção de estratégia para especificar o nome da estratégia e o universo comercial. Faça o seguinte como exemplo:
Isso significa que existe uma estratégia chamada ta_indicator_raffles e o universo comercial inclui 10 ações / ETFs (SINA, ATHM ... FXI).
Eu nomeo a estratégia ta_indicator_raffles para uma finalidade de ilustração para que você possa ver esta é uma estratégia usando a Análise Técnica. Na negociação real, os comerciantes normalmente dão a suas estratégias nomes totalmente irrelevantes.
Os indicadores de análise técnica (TA) são extremamente populares entre os comerciantes individuais. Eles normalmente usam isso na negociação de baixa freqüência. Existem muitas regras para os indicadores de TA, que são aplicáveis ​​apenas ao ambiente de negociação de baixa freqüência. Para a negociação de alta freqüência, talvez seja necessário fazer algum ajuste. Tome RSI (Índice de Força Relativa), um indicador extremamente popular desenvolvido por J. Welles Wilder Jr., como exemplo:
RSI é definido como.
\ [RSI = 100 - 100 / (1 + RS) \] onde \ [RS = Ganho Médio / Perda Média \]
De acordo com Wilder, o RSI é considerado sobrecompra quando acima de 70 e sobrevendido quando abaixo de 30. Se usar dados de barra de 15 segundos, o estoque de ações não é tão freqüente, o RSI pode se tornar muito alto ou baixo porque há muitos períodos sem mudança de preço. Existem duas soluções. O primeiro é usar mais períodos de tempo para que o Ganho médio ou perda média não seja igual a 0. Outra solução é estabelecer RSI igual a 50 se as mudanças de preços forem muito poucas. Em outras palavras, o impulso não é óbvio quando não há informações de mudança de preço, então nós apenas damos um valor de 50. O seguinte é uma implementação C ++ da segunda idéia - se o número de mudanças de preços for inferior a 10, apenas configurado RSI para 50.
Alguns indicadores de TA que funcionam bem na negociação de baixa freqüência não funcionam de forma alguma na negociação de alta freqüência. Um dos motivos são os dados de mercado, como o TAQ, não são suficientes em alta freqüência, especialmente para ativos com baixa liquidez. Outra razão é que o ruído do mercado é significativo, às vezes dominante, na negociação de alta freqüência. Demasiados fatores imprevisíveis tornam a tendência do preço real não clara. Neste caso, são necessárias mais pesquisas e backtesting para descobrir qual é o valor real do recurso de negociação e depois de quanto tempo o ruído irá desaparecer.
Existe uma biblioteca de TA chamada ta-lib escrita em C ++ e também disponível em outras linguas como Python, Go. Sentosa inclui uma versão de desenvolvimento de ta-lib versão 0.6.0dev. Você também pode baixar ta-lib versão 0.4 de ta-lib, que é mais estável, mas com menos indicadores TA.
2.3.2 Python.
Os comerciantes que usam o Python não possuem exigências muito altas na velocidade de execução e no desempenho do sistema. Desenvolvi um pacote Python chamado Pysentosa que usa o protocolo nanomsg para se conectar ao módulo de dados de mercado e ao protocolo websocket para se conectar à OMS. Um código de demonstração é como o seguinte:
Este código demonstra um algoritmo simples:
Defina uma faixa de preço com limite inferior igual a 220 e limite superior igual a 250. Se o preço de pedido da SPY for inferior a 220, tente comprar 50 ações. Se o pedido BUY for preenchido, reduza o limite inferior por 20, e espere para comprar 50 ações até o preço de venda atingir abaixo de 200. Mas se o preço da oferta for maior que o valor do limite superior, envie uma ordem de VENDA de 100 ações SPY. Se for preenchido, aumente o limite superior em 20 e espere vender até que o preço da oferta venha além do novo valor do limite superior 270. Esse algoritmo pode ser usado para dividir grande ordem para os comerciantes institucionais.
Não é apenas o Pysentosa uma interface de mensagem do Sentosa, que inclui um tempo de execução do sistema de negociação da Sentosa. Eu uso boost. python para envolver o sistema de troca do Sentosa em uma biblioteca dinâmica e será executado como um daemon quando você criar um objeto Merlion. Em outras palavras, a Pysentosa é um completo sistema de negociação completo.
Em contraste com Pysentosa, desenvolvi também rsentosa com linguagem R, que é demonstrar outra maneira de usar Sentosa. rsentosa é para comerciantes que usam linguagem R, que normalmente possuem um sólido histórico de estatísticas. rsentosa usa protocolo nanomsg para se comunicar com OMS e módulo de dados de mercado. O código de demonstração é o seguinte:
O algoritmo é quase o mesmo que a versão python, exceto que não vende SPY, não importa o preço do lance.
2.4 Sistema de gerenciamento de pedidos.
OMS (sistemas de gerenciamento de pedidos) é um sistema de software para facilitar e gerenciar a execução da ordem, normalmente através do protocolo FIX. No Sentosa, o módulo OMS recebe ordens do Módulo de Algoritmo e envia-os para o IB. O IB recebe ordem da Sentosa OMS e executa-a usando sua tecnologia de roteamento inteligente. A API IB suporta dois tipos básicos de pedidos: Ordem Limitada e Ordem de Mercado.
O pedido de limite tem um limite de preço que garante que o preço de execução não pode ser pior do que ele. Para cada estoque, o intercâmbio mantém um livro de pedidos limitado, incluindo todos os preços de oferta / oferta, volumes e informações do carimbo de data / hora. Por favor, note que o preço do comércio pode ser favorável do que o preço da ordem limite. Por exemplo, se você enviar uma ordem limitada de vender ações da Google por 1 dólar por ação, o sistema irá preenchê-lo com o preço da oferta no topo do livro, que será superior a 1 dólar.
Um pedido de mercado em si não possui informações de preços. Quando um pedido de mercado é enviado para uma troca, o mecanismo de correspondência de pedidos encontrará o melhor preço atualmente disponível para executá-lo. O pedido de mercado normalmente será preenchido imediatamente, combinando outra ordem de limite na parte superior do livro de pedidos. Você não pode combinar duas ordens de mercado porque não há informações de preços em pedidos de mercado.
2.4.1 Projeto de design e mensagens da OMS.
A OMS aceita dois tipos de protocolos: nanomsg e websocket.
Thread Thread_API_NN irá monitorar e manipular qualquer mensagem de nanomigas recebidas na porta especificada como NN_MON_PORT em sentosa. yml.
Thread Thread_API_WS irá monitorar e lidar com qualquer mensagem de entrada do Websocket na porta especificada como WS_MON_PORT em sentosa. yml.
O WHO lida com dois protocolos diferentes, mas com a mesma lógica. Eu uso a sobrecarga de função C ++ para lidar com a diferença. A definição da interface está em api_core. cpp e a implementação está em api_nn. cpp para nanomsg e api_ws. cpp para websocket, respectivamente.
Sentosa é um aplicativo multithread onde existem quatro tópicos no módulo OMS:
Em Sentosa, para consideração de desempenho, o sistema irá pré-alocar uma matriz estática de pedidos com comprimento de 283 para cada instrumento. Em outras palavras, um instrumento pode enviar no máximo 283 ordens com identificação de ordem diferente (a substituição da ordem não é contada como o id da ordem é o mesmo). Este número deve ser suficiente para os comerciantes individuais. O Sentosa OMS usa nanomsg como o protocolo de comunicação e recebe o texto nanomigg como a instrução.
O Sentosa OMS abriu um soquete NN_PAIR no seguinte ponto final:
Você pode personalizar a porta alterando ALGO_TO_OMS_PORT em sentosa. yml.
A especificação do protocolo também é personalizável através do sendosa. yml. Tome a configuração padrão 'sentosa. yml' como exemplo:
Para fechar toda a sua posição atual com a ordem do mercado quando um texto nanomgg que começa com "e" é recebido.
Para fechar a posição de um instrumento o mais rápido possível. O formato nanomsg é f | SYMBOL. Por exemplo, "f | IBM" significa fechar a posição atual de manutenção da IBM com uma ordem de mercado.
Para cancelar todas as suas ordens pendentes atuais de um instrumento. O formato nanomsg é g | SYMOBL.
Para enviar uma ordem limite.
O formato é l | SYMBOL | Quantidade | Preço | AllowedMove | OID, onde:
Quantidade é um inteiro assinado. Signo positivo significa COMPRAR e negativo significa VENDER.
O preço é o preço limite.
AllowedMove é o intervalo de preços em que a ordem ainda é considerada válida. Na Sentosa OMS, se o preço do mercado se afastar muito do preço limite, a ordem será cancelada pela OMS. A lógica pode ser expressa com o seguinte pseudo-código:
OID é o ID da ordem.
Para enviar uma ordem de mercado. O formato é m | SYMBOL | Quantidade | OID.
Para verificar o status de um pedido por pedido id. O formato da mensagem é i | OID. Por exemplo, "i | 1634223" significa uma solicitação de OMS para retornar o status da ordem com id igual a 1634223. A OMS enviará um dos seguintes status da ordem ao cliente com o formato de "i | OID | ORDERSTATUS". Caso o pedido não exista, OMS enviará de volta -1. Se OMS enviar "i | 1634223 | 4" de volta, significa que a ordem com id igual a 1634223 tem um status de SUBMIT.
O status do pedido é definido como o seguinte:
Você pode consultar o documento do IB para obter detalhes sobre o status do pedido:
2.5 Direção futura.
O sistema de negociação Sentosa pode ser ampliado de várias maneiras:
De multithread para multiprocesso.
De máquina única para cluster.
Do IB para outros locais de negociação, ou acesso directo ao mercado (DMA), se possível.
Mais suporte de idiomas.
Mais suporte de módulos - módulo de gerenciamento de riscos, módulo de gerenciamento de portfólio.
3 Parte III - Plataforma de pesquisa Sentosa.
3.1 Introdução.
Pesquisa Research Platform é uma plataforma de computação interativa baseada na web baseada em Jupyter com suporte para Python e R. Você pode configurá-lo em sua máquina local e pesquisar com seus dados. O seguinte é uma captura de tela:
Plataforma de pesquisa Sentosa.
Nas seções a seguir, discutirei a seleção, coleta e gerenciamento de dados financeiros. Então, vou mostrar duas tarefas de pesquisa usando R e Python, respectivamente. O primeiro é o estudo comparativo da volatilidade da família GARCH com dados de baixa freqüência e o segundo é o verdadeiro cálculo da volatilidade com dados de alta freqüência.
3.2 Seleção, Recolha e Gerenciamento de Dados.
Em primeiro lugar, a negociação bem sucedida começa com dados de boa qualidade. Com dados de boa qualidade, particularmente dados quantitativos, o comerciante pode fazer pesquisas significativas. Para o comércio de equidade, alguns tipos de dados comumente usados ​​incluem dados comerciais, dados de cotação, dados fundamentais, dados macroeconômicos, dados de fatores de risco, dados de notícias, dados de redes sociais e dados de opções. Os dados de comércio diários da OHLC e alguns dados macroeconômicos estão normalmente disponíveis gratuitamente. Outros na maioria não são gratuitos, alguns dos quais são caros devido à informação que os comerciantes podem obter com eles.
Para os serviços de dados pagos, você precisa optar por pagar dados processados ​​ou dados brutos, ou ambos. Os dados processados ​​(por exemplo, relação PE / PB) são mais convenientes e prontos para serem usados ​​diretamente. Quanto aos dados brutos (por exemplo, dados de seleção e cotação), você precisa escrever um programa para limpá-los, calcular o indicador ou os fatores de risco com seu próprio algoritmo. Alguns podem precisar de computação fortemente intensa. Mas a coisa boa para dados em bruto é a sua flexibilidade e potencial para fornecer um comerciante com mais informações.
Os dados podem ser armazenados no sistema de arquivos em formato de texto simples. Muitos dados de séries temporais são apenas alguns arquivos csv, que podem ser muito convenientemente usados ​​por vários idiomas. Para grandes séries de dados, pode-se usar banco de dados como MSSQL, MySQL e MongoDB. Os dados são armazenados em tabelas ou documentos e os índices são criados para velocidade de consulta mais rápida. Para o processamento de dados de séries temporais de maior desempenho, você pode escolher banco de dados comercial como KDB +, One Tick ou eXtremeDB.
Existem muitos fornecedores de dados comerciais lá fora, como Thomson Reuters, Bloomberg, mas a maioria deles é proibitiva para os indivíduos. Neste projeto, usando o MySQL como armazenamento de dados e IB como fonte de dados, desenvolvi uma ferramenta histórica de coleta de dados chamada histData, que descreverei abaixo.
3.2.1 Ferramenta de coleta de dados históricos - histData.
Neste projeto, uso quatro tabelas para armazenar quatro dados da série temporal:
A estrutura da tabela é a mesma para cada tabela. Por exemplo, o seguinte é a estrutura da tabela bar1d:
A seguir estão três linhas na tabela bar15s:
A primeira linha significa durante 2018-Dez-06 09:30:00 a 2018-Dez-06 09:30:15, existem 8 transações para o BITA com WAP igual a 30,21, volume comercial igual a 25K, preço aberto igual a 30,27, preço mais alto igual a 30,27, preço mais baixo igual a 30,16 e preço de fechamento igual a 30,25.
Para estoques, as solicitações de dados históricos que usam um tamanho de barra de "30 segundos" ou menos só podem voltar seis meses. O IB também tem uma limitação na taxa de solicitação, que exige não mais de 60 solicitações de dados históricos em qualquer período de 10 minutos. Considerando essa limitação, acho que o IB deveria ter usado o algoritmo de controle de tráfego como o balde token do lado do servidor. No lado do cliente, para evitar causar violações de estimulação, nosso coletor de dados dorme por 1 minuto após o envio de 6 pedidos. Isso é personalizável no arquivo de configuração sentosa. yml. O seguinte é o que usei no meu arquivo de configuração:
Se histDataSleepT é igual a 30000, histDataReqNum deve ser igual a 3, o que significa dormir 30 segundos por 3 solicitações. HistDataBackMN significa quantos meses a partir de agora para trás você deseja coletar dados. No exemplo acima, se hoje for 2018-dez-31, significa que queremos coletar dados no período de 2018-jul-01 a 2018-dec-31.
Da seguinte forma, vou mostrar como usar a Sentosa Research Platform para fazer pesquisas quantitativas sobre a volatilidade. O caso 1 é sobre modelos paramétricos de volatilidade usando dados de baixa freqüência. Caso 2, trata-se de modelos não paramétricos que utilizam dados de alta freqüência com o ruído da microestrutura do mercado.
3.3 Caso 1: Estudo Comparativo de Previsão de Volatilidade (R)
A volatilidade é tão importante que é amplamente utilizada na negociação, nos preços e na gestão de riscos. Christian Brownlees, Rob Engle e Bryan Kelly publicaram um artigo chamado A Guia Prático de Previsão de Volatilidade Através de Calma e Tempestade, que conclui que os rankings modelo são insensíveis ao horizonte de previsão.
Para verificar a conclusão deste artigo, planejo usar a biblioteca Quandl para obter dados do índice S & amp; P 500 de 1950 a 03 de janeiro de 2018 a 18 de março e usar o programa R para comparar 5 modelos GARCH: GARCH, NGARCH, TGARCH, APARCH, eGARCH.
Nos 5 modelos, o modelo GARCH não explica a assimetria da distribuição de erros e o efeito de alavanca. eGARCH e TGARCH são capazes de lidar com efeito de alavanca onde o retorno tem negatividade negativa. NGARCH e APARCH são capazes de lidar com o efeito de alavanca tanto para a negatividade negativa como positiva.
O código está escrito no idioma R da seguinte maneira:
O código acima define uma função de perda de quasi-verossimilhança (QL) proposta pelo documento original, através da qual podemos comparar a previsibilidade do modelo. Em seguida, obtém dados de Quandl, define as especificações do modelo, ajusta modelos e prediz com cada modelo e, finalmente, desenha um gráfico com um valor de perda de quase-verossimilhança (QL). O comprimento da amostra fora é de 50 dias. Os horizontes de previsão que eu escolhi são 1, 10, 20, 30, 40, 50 dias. Compararei a previsibilidade dos cinco modelos nesses horizontes de previsão.
Supondo que a distribuição de retorno é normal, execute o código acima e eu acho que quando o horizonte de previsão é igual ou inferior a 30:
Quando o horizonte de previsão é maior que 30, nenhum padrão de classificação é observado.
O resultado é na Figura 3.
Modelos de família GARCH com distribuição normal.
Como sabemos, a distribuição do retorno do preço das ações está mais alinhada com a distribuição de estudantes t do que o normal. Agora, assumindo que a distribuição de retorno é a distribuição de estudantes t, no código, precisamos alterar a especificação do modelo de norma para std:
Execute o código acima e acho que quando o horizonte de previsão é igual ou inferior a 30:
Quando o horizonte de previsão é maior que 30, nenhum padrão de classificação é observado.
O resultado pode ser visto a partir da figura 4:
Modelos familiares GARCH com distribuição de alunos.
O resultado verifica que o ranking do modelo não muda à medida que o horizonte de previsão muda, desde que o horizonte não seja muito grande. Isso pode ser explicado pelas características de cada modelo. Por exemplo, tanto TARCH como eGARCH consideram efeito de alavanca de inclinação positiva, então eles têm quase o mesmo valor de perda de função. NGARCH e APARCH podem explicar a afinidade positiva e negativa, e é por isso que ele tem um valor de função de perda maior do que TARCH e eGARCH.
O resultado também verifica outro conhecimento empírico que, em comparação com outros modelos da família GARCH, o modelo GARCH é bom o suficiente. Quando usamos a distribuição do aluno como distribuição do modelo, o modelo GARCH classifica o número 1. Ao usar a distribuição normal, o GARCH classifica o número 2. Este é outro exemplo de que o modelo mais simples é o modelo mais poderoso.
3.4 Caso 2: volatilidade com dados de alta freqüência (Python)
3.4.1 Teoria e conceito.
Suponha que o preço das ações segue o movimento geométrico browniano: \ [S_t = S_0 \ cdot exp (\ sigma W_t + (\ mu - \ frac) \ cdot t) \]
Em seguida, o retorno de estoque \ (R_i = log (S_) - log (S_) \) é uma distribuição normal. Em uma unidade de tempo \ (0 = t_0 & lt; t_1 & lt; t_2. & Lt; t_i = 1 \), a soma de retorno quadrado \ (R_i \) (também conhecido como variação quadrática de \ (R_i \)) é:
Portanto, a definição de volatilidade em forma matemática é: \ [\ begin \ sigma = \ sqrt ^ \ infty [log (S_ / S_>)] ^ 2> \ label \ end \]
Essa volatilidade \ (\ sigma \) se chama verdadeira volatilidade. \ (\ sigma ^ 2 \) é chamado de variância verdadeira.
3.4.2 Efeitos da microestrutura do mercado.
Os dados de alta freqüência possuem características únicas que não aparecem em freqüências mais baixas. Existem vários fenômenos bem conhecidos como o comércio assíncrono, o salto de oferta e as regras mínimas de tiques, que são chamados de Efeitos da Microstrução do Mercado em literaturas de finanças.
A figura é gerada a partir de séries de tempo de retorno composto BITA com diferentes intervalos de amostragem: 1 minuto, 1 hora e 1 dia. Nas subparcelas de distribuição, a linha tracejada vermelha é a distribuição normal correspondente. Quando o comprimento do intervalo é de 1 dia, a distribuição é uma curva de sino leptokurtic direita inclinada. No entanto, à medida que a frequência de amostragem aumenta, a aspereza diminui e a curtose aumenta. Quando o comprimento do intervalo é de 1 minuto, a aspereza torna-se negativa e a curtose atinge até 45,5.
Efeitos da microestrutura do mercado no retorno do registro.
Isso significa que a propriedade estatística de dados foi alterada quando a freqüência de amostragem aumenta. Em dados de alta freqüência, o preço observado não é mais o preço intrínseco do estoque, mas um preço comercial fortemente distorcido pelos efeitos da microestrutura do mercado. Suponha que o logaritmo de um preço intrínseco / verdadeiro da empresa é um processo estocástico \ (P_t \) e o preço do comércio observado é \ (Q_t \).
Eu uso \ (P_t \) para representar um processo estocástico que é desconhecido e igual ao logaritmo de um preço intrínseco ou verdadeiro, e \ (Q_t \) é outro processo estocástico que é igual ao logaritmo do preço de negociação de um estoque.
Onde \ (\ epsilon_ \) é um i. i.d. Processo de ruído com \ [\ begin E [\ epsilon_] & amp; = 0 \\ Var [\ epsilon_] & amp; = E [\ epsilon_ ^ 2] = c \\ \ end \]
Variância de ruído \ (c \) é uma constante neste modelo. Não é necessariamente normal, mas deve ser simétrico e fraco imobilizado. Além disso, \ (\ epsilon_ \) é independente com \ (P_t \) e \ (Q_t \).
3.4.3 Proxies de Volatilidade e Volatilidade Realizadas.
Embora tenhamos uma fórmula matemática para a verdadeira volatilidade, nunca obteremos seu valor preciso. Primeiro, é uma equação de forma de cálculo contínua, mas no mundo real, o preço é sempre discreto. Em segundo lugar, os efeitos da microestrutura do mercado, conforme descrito na seção anterior, também distorcem o preço, tornando o preço do comércio não exatamente o mesmo que o preço intrínseco do estoque conforme definido em nosso modelo. Para tornar os dados de retorno próximos à distribuição normal, que é uma suposição básica em muitos modelos financeiros, é preciso provar o preço do comércio em um intervalo suficientemente grande para evitar os efeitos da microestrutura de mercado e, por sua vez, isso tornará o preço mais discreto.
Então, temos que apresentar outro conceito chamado volatilidade percebida. É essencialmente uma versão discreta da verdadeira volatilidade definida na equação \ (\ eqref \). Se dividirmos a unidade de tempo \ (T \) igualmente em intervalos de tempo \ (N \) mais pequenos \ (t \) com igual comprimento, temos a frequência de amostragem \ (N \):
e percebeu que a volatilidade é definida como:
e a variância realizada é, portanto, definida como:
Por favor, note aqui \ (Q \) é o preço observado, não o preço verdadeiro \ (S \).
A volatilidade alcançada (também conhecido como volatilidade integrada) é um estimador de tendência de volatilidade real devido aos efeitos da microestrutura do mercado. I will prove this theoretically and empirically later. Correspondingly, the square of realized volatility is called realized variance , or integrated variance , or sometimes realized quadratic variation .
Please be noted, in some literatures, realized volatility and realized variance sometimes are used interchangeably. In addition, there are two other volatilities often seen in literatures. (1.) Implied volatility is just a numeric calculated from the option price according to Black-Scholes formula, assuming all the assumptions of Black-Scholes model are correct. (2.) Historical volatility normally means the past daily volatility calculated with historical data according to parametric conditional volatility models like GARCH, EWMA, or stochastic volatility models.
Because true volatility is not known, one can use volatility proxies when specifying and evaluating volatility models. We can consider proxy as a mapping of original variable in another space through a proxy function. In statistics, proxy is used for a variable not of prime interest itself, but is closely connected to an object of interest. One uses proxy to replace latent variables of interest, so the absolute correlation of proxy variable and original variable should be close to 1. Please be noted that one can use estimator, either biased or unbiased, as a proxy, but it is probably wrong to use a proxy as an estimator.
3.4.4 Market Microstructure Effects and Volatility Proxies.
Realized variance is often used as a volatility proxy when high frequency data are available. But surprisingly, due to market microstructure effects, we may get worse result when we have higher frequency data.
For the noise process, we have \[ E[\epsilon_ ]E[\epsilon_ ] = 0 \] because \(\epsilon_ \) and \(\epsilon_ \) are independent. And then.
The expectation is: \[\begin \begin E[\hat\sigma^2] &= E[\sum\limits_ ^N [ R_ > + ( \epsilon_ > - \epsilon_ >)] ^2 ] \\ &= E[\sum\limits_ ^N [ R_ > ^2 + 2R_ >( \epsilon_ > - \epsilon_ >) +( \epsilon_ > - \epsilon_ >)^2] ] \\ &= E[\sigma^2] + 2Nc \label \end \end \] The variance is: \[\begin \begin Var[\hat\sigma^2] &= 4 N E[\epsilon ^4] + O_p(1) \label \end \end \] This proves realized variance is a biased estimator of true volatility . The higher the sampling frequency is, the bigger N is, and the bigger the bias is. When N goes to infinity, the bias and realized variance go to infinity too. Zhang proposed that, when \(N\) is large enough, \(\sigma\) will become negligible, we can get the value of c, the variance of noise process with this formula: \[\begin c = \frac \label \end \]
Once we get the value of \(c\) , we can use the same equation to get \(E[\sigma^2]\) .
But how to decide if N is large enough? I am proposing another method. Resample the raw data with two steps \(N_1\) and \(N_2\) , and get two expectation of realized variance \(\hat E_1[\hat\sigma^2]\) and \(\hat E_2[\hat\sigma^2]\) . We have: \[ \hat E_1[\hat\sigma^2] = E[\sigma^2] + 2N_1c \\ \] \[ \hat E_2[\hat\sigma^2] = E[\sigma^2] + 2N_2c \]
3.4.5 Other Volatility Proxies.
Price range is a good volatility proxy which is free from the market microstructure effects. One definition is as simple as \(PR = Q_h - Q_l\) , where \(Q_h\) is the highest trade price in one time unit, \(Q_l\) is the lowest price accordingly.
The expectation of price range is: \[ \begin E[PR] &= E[Q_h - Q_l] \\ &= E[P_h - P_l + ( \epsilon_ - \epsilon_l)]\\ &= E[P_h - P_l] \end \]
We can see it is related to spread of true price in one time unit, but has nothing to do with \(\epsilon_t\) .
Another method to construct price range using high frequency data is to sum all subinterval price spreads in one time unit. To avoid confusion, if necessary, I will use price range(H-L) for the first definition and price range(sum of H-L) for the second one. By default, price range means the first definition.
In addition, people sometimes also use absolute return as volatility proxy. It is very similar to price range, but because the log return only consider the last close price and current close prices, it will miss information between the two time points, so it has a downward bias.
3.4.6 Realized Variance and Other Volatility Proxies.
Realized variance is a biased estimator, also a proxy, of real variance. First, let’s compare it with another well known volatility proxy price range. The raw data is 15 seconds OHLC bar data of BITA from IB. I choose 5 minutes as the time unit, so according to equation \(\eqref \) , with sampling interval number \(N\) equal to 20, we can get the value of realized variance. It is noteworthy that, for price range, I use the highest price in 5 minutes minus the lowest price, not sum of high minus low in 20 15-seconds-OHLC bars.
I randomly choose one day and compare these two variance proxies. The result is figure .
Realized Variance VS. Price Range(H-L) in one day.
The upper graph is the absolute value comparison. Because the value of realized variance is so small that it becomes a straight line closely above x axis. After multiplying a scale-up factor 180.6 to every number in realized variance series, I get the lower graph. It looks much better than the upper one. It is easy to see the two time series have the same trend. There is only very minor difference between them.
Figure verifies that price range is a good proxy for stock variance and volatility. The proxy function in this case is just a multiplication to a constant 180.6.
Now, let’s add two more proxies absolute return and price range(sum of H-L) . As described in previous section, absolute return is calculated as log return of the time unit. price range(sum of H-L) is calculated by adding all high low difference in 15-seconds-OHLC bars in one time unit. In my program and graphs, I use rvar for realized variance , prange for price range (H-L) , srange for price range(sum of H-L) and absr for absolute return .
Then I choose 13 time units from 2 minutes to 1 day:
Still using 15-seconds-OHLC bar data of BITA , I calculate volatility proxy for every time unit above. After getting the results, I check the statistics characteristics to verify the model \(\eqref \) .
From and , we can get the variation coefficient \(k\) :
Suppose N is large enough, if the time unit increases by m times ( \(m>1\) ), according to volatility time square root rule , we have:
This means, if the sampling interval is fixed and N is large enough, variation coefficient \(k\) of realized variance will decrease exponentially \(O(m^ )\) as length of time unit increases.
To verify this conclusion, I check the relation of variation coefficient and time units and get figure \(\ref \) :
Market Microstructure Effects on Volatility Proxies.
We can see market microstructure effects has a big impact on realized variance . When length of time unit decreases, the variation coefficient increases dramatically. Robin and Marcel proved that smaller variance corresponds to better volatility proxy. We can see the realized variance becomes stable and close to the other proxies when the time unit increases to 1.5 Hours.
For the other three proxies, there is no obvious change of variation coefficient, which means they do not suffer from market microstructure effects. Also it is well known that measurements that are log-normally distributed exhibit stationary variation coefficient , which is \(exp(\sigma^2 -1)\) , figure \(\ref \) also implies true variance is log-normally distributed.
A good proxy should have a close correlation with the original and other good proxies too. Figure displays the correlation coefficient changes with the time units. We can see the correlation of realized variance and price range increases dramatically as length of time unit increases. This means realized variance becomes a better proxy when the unit time is large enough, say 1.5 hours.
Bias and Consistency of Volatility Proxies.
3.4.7 Daily Realized Variance and Noise Process.
In previous section, we fix the length of time interval \(t\) , increase the time unit \(T\) and find that market microstructure effects has an exponential impact on realized variance . In this section, I am going to fix the time unit \(T\) as 1 day and change the length of time interval \(t\) . I will show how market microstructure noise process affects daily realized volatility when changing sampling time interval and investigate two ways to get the variance of noise process.
Still using BITA 15 seconds OHLC bar data and equation \(\eqref \) but choosing three different time intervals 15 seconds, 10 minutes and 2 hours, I get three daily realized variance time series and display them in figure .
Daily Realized Variance at Different Sampling Intervals.
In figure , rvar_1 means sampling interval is 15 seconds, rvar_40 means 10 minutes, and rvar_480 means 2 hours. We can see the trend is almost the same, but red dots(rvar_480) are distributed closer to x axis, blue dots(rvar_1) are the farthest, and green dots(rvar_40) are in between. This means when sampling interval increases, or when sampling frequency \(N\) decrease, expectation of daily realized variance decreases accordingly. This is an expected result according to equation .
Now let’s try more different sampling intervals. I choose 7 intervals as follows:
Correspondingly, the time intervals are 15 seconds, 1 minutes, 2 minutes, 5 minutes, 10 minutes, 20 minutes and 40 minutes.
Expectation of Daily Realized Variance at Different Sampling Intervals.
The x axis represents the sampling intervals and y axis represents expectation of daily realized variance, which is asymptotically equal to sample mean. We can see as sampling interval increases, which corresponds to a smaller N, the expectation of daily realized variance decreases. This is in line with equation .
When the interval is 15 seconds, N is equal to 1560 because the trading hour is 6 hours and a half. This is the highest frequency data I can get. Assume N is large enough (1.) to ignore \(E[\sigma^2]\) in and (2.) to get population expectation \(E[\sigma^2]\) , using the method proposed by Zhang , we can get that the noise process variance \(c\) equals to 7.5347758757e-07.
Alternatively, I tried to use equation too. Assuming the first two intervals \(N_1\) (1560) and \(N_2\) (390) are large enough for population expectation \(E[\sigma^2]\) , using equation , I get the noise process variance \(c\) equal to 1.30248047255e-07.
The reason why the two results are different is 15 seconds time interval is too long.
In another words, the data frequency \(N\) is not high enough to ignore \(E[\sigma^2]\) . According to the formula:
when true variance is not negligible, if one uses , one will overestimate the denominator and then overestimate the noise process variance \(c\) .
Fortunately, equation doesn’t require N is large enough to ignore \(E[\sigma ^2]\) . Assuming equation is correct applied here, \(c\) equals to 1.30248047255e-07 when \(N = 1560\) , in turn we can get expectation of true variance : \[ \begin E[\sigma ^2] &= E[\hat \sigma ^2] - 2Nc \\ &= 0.0023508500732184 - 2* 1560 * 1.30248047255e-07 \\ &= 0.00194447616578 \end \]
Both equations and require higher frequency data. But the latter only affected by accuracy of expectation calculation. With the same frequency data, equation is better because it doesn’t require \(N\) is large enough to ignore \(E[\sigma ^2]\) .
3.4.8 Three Schemes for Realized Variance Calculation.
In previous section, although we always use equation \(\eqref \) to calculate daily realized variance, we have actually used two schemes.
Scheme 1 calculates squared return for every adjacent pair of prices sequentially in one unit of time \(T\) , and then sum all squared returns. Figure illustrates how the calculation goes on. I call it classical scheme as it is exactly from equation \(\eqref \) . In previous section, I verified classical scheme is most seriously affected by market microstructure effects because high frequency data are contaminated by the noise process. When sampling frequency is high, it demonstrates a strong upward bias, making the result totally useless. In realized variance time series calculated from this scheme, you can see many spikes, which corresponds to high variation coefficient.
Classical Scheme to Calculate Realized Variance.
Scheme 2 splits one time unit into multiple grids. Grid is a new sample interval in between \(t\) and \(T\) . Scheme 2 uses only one point of data in one grid, ignoring all other data, so I call it sparse sampling scheme . In my program to generate figure and figure , I use the first price to represent price of the new sampling time interval, and calculate rvar_40 and rvar_80 . Figure illustrates how the calculation goes on.
Sparse Sampling Scheme to Calculate Realized Variance.
According to theoretical and empirical analysis in previous section, we see that sparse sampling scheme has a better performance than classical scheme . This is very surprising as it uses much less data. In figure , if one cell represents a 15-seconds-OHLC bar, we have 1560 cells for one day. If the new sampling time interval is 1 minute, according to sparse sampling , we need to throw away 1170 = 1560/4*3 price data. But when we use the remaining 390 price data to calculate, we get a even better result. This sounds counterintuitive but can be perfectly explained by model \(\eqref \) . Please be noted there are two intervals in sparse sampling , the original interval is 15 seconds, and the new interval after sparse sampling becomes 1 minutes. To avoid confusion, I will use word grid for the latter in the future, which is how Zhang names it in the original paper.
Can we take advantage of all data and throw away only the noise part in trade price?
Here scheme 3 comes into play. It is a natural expansion of scheme 2. It uses all data but also robust to market microstructure effects. As displayed in figure , we apply the same calculation of return, like sparse sampling , for not only the first cell in that grid, but all the other data. In figure , there are four cells in one grid. So we will get four results, the final result will be the average of them. This method is proposed by Lan Zhang(2003). I call it averaging scheme because it is improved by averaging based on sparse sampling scheme .
Averaging Scheme to Calculate Realized Variance.
In theory, averaging scheme should be better than the other two. I am going to verify this as below.
Averaging Scheme vs Classical Scheme.
Still using BITA 15-seconds-OHLC data, I get a comparison of classical scheme and averaging scheme in figure :
Classical Scheme VS Averaging Scheme.
The purple dots are realized variance result from classical scheme and the green ones from averaging scheme with grid length equal to 1 hour(240*15 seconds). We can see the green dots are distributed at the bottom, closer to x axis, which corresponds to the overestimation issue of classical scheme . This proved averaging scheme is better than classical scheme .
Averaging Scheme vs Sparse Sampling Scheme.
Now let’s compare sparse sampling scheme and averaging scheme . I choose 8 grid lengths as follows.
Using two schemes to calculate daily realized variance, and then the expectation \(E[\hat \sigma^2]\) under each grid.
Display it as figure below:
Sparse Sampling Scheme VS Averaging Scheme.
We can see averaging scheme has a lower \(E[\hat \sigma^2]\) than sparse sampling scheme . This means the former suffers less from market microstructure noise, so it is better. Please be noted if grid length becomes the same as sampling time interval, sparse sampling scheme and averaging scheme are degraded to classical scheme . This is why when grid length equals to 15 seconds, the purple dot and green dot becomes the same.
We have seen averaging scheme is the best of the three schemes. We also see the grid length affects the results of averaging scheme . Let me increase grid from 15 seconds to 40 minutes and draw the realized variance time series at figure .
Averaging Scheme and Different Grid Length.
We can see the best result is the one with grid length equal to 40 minutes. We can display \(E[\hat \sigma^2]\) with grid length in figure .
Expectation of Realized Variance with Averaging Scheme and Different Grid Length.
We can see the expectation curve is a smooth convex hull. It decreases exponentially as grid Length increases. But after 20 minutes, \(E[\hat \sigma^2]\) doesn’t decrease any more. This is because if grid length is too long, we cannot use all the data any more, averaging scheme becomes more like sparse sampling scheme . For instance, when grid length is the same as time unit \(T\) , which is 1 day in our case, averaging scheme is degraded to sparse sampling scheme .
To verify this, I choose 13 grid lengths ‘30seconds’, ‘1min’, ‘2min’, ‘5min’, ‘10min’, ‘20min’, ‘40min’, ‘1H’, ‘1.25H’, ‘1.5H’, ‘1.75H’, ‘2H’, ‘2.25H’, and draw \(E[\hat \sigma^2]\) in figure .
Averaging Scheme and Different Grid Length.
Green curve is sparse sampling scheme and blue curve is averaging scheme . x axis is grid length and y axis is \(E[\hat \sigma^2]\) .
We can see, for averaging scheme , after 40mins, \(E[\hat \sigma^2]\) keep increasing in very slow speed. Also, because averaging scheme is actually an average of many equally reasonable results, it is smoother than sparse sampling scheme . After 40mins, sparse sampling scheme curve jumps up and down around averaging scheme curve. This means there is an optimal value for grid length between sampling time interval \(t\) and time unit \(T\) . In this case, it is around 40 minutes. When grid length equals to \(t\) , averaging scheme becomes classical scheme ; when it equals to \(T\) , averaging scheme becomes sparse sampling scheme .
3.4.9 True Variance and Volatility.
In previous sections, I got the variance \(c\) of noise process \(\epsilon_t\) . I also found that averaging scheme is the best way to calculate realized variance with grid length equal to 40 minutes in this case. I have reached my goal. I am ready to calculate true variance and true volatility now!
See figure for true volatility series I created using the information above.
I can also get the statistics of true variance time series. Take Logarithm of true variance and we can get the distribution at figure .
Logarithmic True Variance Distribution.
The dashed blue line is the normal distribution curve fitted with the same mean and standard deviation as above. We can see the distribution is close to normal. We know variance has properties like clustering and mean reversion, and now we know logarithm of variance is Gaussian distribution, or variance is lognormal distribution. This also supports the conclusion I get from figure that stationary variation coefficient of volatility proxies implies they are log-normally distributed.
True volatility is the square root of true variance . I checked the distribution and it is also lognormal.
Previously we use price range as a proxy of true variance . Now we can check the distribution of price range and see if it has the same distribution as true variance . Figure is the daily price range series and distribution I get from our BITA dataset.
Logarithmic Price Range Distribution.
The red dashed line is normal distribution curve fitted with corresponding mean and standard deviation. The distribution is very similar with figure . This is in line with our knowledge that price range is a good proxy for true variance .
3.4.10 Data Selection and Conclusion Generality.
To take a new nonparametric approach to calculate volatility, I need high frequency data. The data I use in this case study is BITA 15 seconds OHLC bar data from 2018-12-06 9:30AM to 2018-12-31 16:00PM . I got the data with the histData tool which I have described in section Historical Data Collection Tool - histData . There are 806,880 bars in the dataset, stored as a CSV format file named BITA_2018-12-06_2018-12-31.csv . You can download it from quant365/post/99/.
I also want to emphasize that the BITA data are picked from the database randomly. It has no special importance itself. The conclusion drawn from previous sections should also apply to other stocks.
It is noteworthy that, for two adjacent OHLC bars, close price of the first bar is not necessarily equal to open price of the second bar. When we calculate return, we have to use two bars to calculate close-to-close return. But when we calculate price range, we can use high price minus low price in the same bar.
3.5 Future Direction.
Consider relation between noise process and trading frequency in the noise process model More programming languages support Cluster for faster computing (Spark - Lightning-fast cluster computing) for Monte Carlo simulation and big matrix calculation Integration with Sentosa trading system and web platform.
4 Part IV – Sentosa Web Platform.
Initially, Sentosa web platform is a Django blog website called qblog that I developed to write trading diary, which features markdown and mathematical formula support. Later I added a sentosaapp module to monitor and debug Sentosa trading system. Finally I extended it to be able to interact with Sentosa trading system completely. It uses javascript websocket to communicate with Sentosa trading system and displays internal status at webpage using jQuery. It can also be used to send orders to Sentosa trading system.
Although this is a very important part of Sentosa, it is not directly related to any Finance knowledge so I just introduce it very briefly in one page. For more details, please check Sentosa website.
The following is the screenshot of Sentosa web platform:
Sentosa Web Platform in Backtesting Mode with Real Historical Data.
As for future development, this web platform can be extended to do online trading.
5 Reference.
Christian Brownlees, Robert Engle and Bryan Kelly, (2018), A Practical Guide to Volatility Forecasting through Calm and Storm.
Zhang, Lan, Per A. Mykland and Yacine Ait-Sahalia. “A Tale Of Two Time Scales: Determining Integrated Volatility With Noisy High-Frequency Data,” Journal of the American Statistical Association, 2005, v100(472,Dec), 1394-1411.
Alizadeh, S., Brandt, M., and Diebold, F. X. (2002). Range-based estimation of stochastic volatility models. Journal of Finance 57: 1047–1092.
Andre Christoer Andersen, Stian Mikelsen, (2018), A Novel Algorithmic Trading Framework Applying Evolution and Machine Learning for Portfolio Optimization.
Stoll, H. and Whaley, R. (1990). Stock market structure and volatility. Review of Financial Studies 3: 37–71.
Andersen, T. G. and Bollerslev, T. (1998). Answering the skeptics: Yes, standard volatility models do provide accurate forecasts. International Economic Review 39: 885–905.
Andersen, T. G., Bollerslev, T., Diebold, F. X., and Labys, P. (2001b). The distribution of realized stock return volatility. Journal of Financial Economics 61: 43–76.
Bai, X., Russell, J. R., and Tiao, G. C. (2003). Kurtosis of GARCH and stochastic volatility models with non-normal innovations. Journal of Econometrics 114: 349–360.
Barndorff-Nielsen, O. E. and Shephard, N. (2004). Power and bi-power variations with stochastic volatility and jumps (with discussion).Journal of Financial Econometrics 2: 1–48.
Bollerslev, T. (1986). Generalized autoregressive conditional heteroskedasticity. Journal of Econometrics 31: 307–327.
Bollerslev, T. and Jubinski, D. (1999). Equality trading volume and volatility: Latent information arrivals and common long-run dependencies. Journal of Business & Economic Statistics 17: 9–21.
Bollerslev, T., Chou, R. Y., and Kroner, K. F. (1992). ARCH modeling in finance. Journal of Econometrics 52: 5–59.
Cao, C. and Tsay, R. S. (1992). Nonlinear time series analysis of stock volatilities. Journal of Applied Econometrics 7: s165–s185.
Visser, Marcel P., 2008. “Forecasting S&P 500 Daily Volatility using a Proxy for Downward Price Pressure,” MPRA Paper 11100, University Library of Munich, Germany.
Robin De Vilder & Marcel P. Visser, 2007. “Proxies for daily volatility,” PSE Working Papers halshs-00588307, HAL.
John C. Hull (2018). Opções, Futuros e Outros Derivados, 8ª Edição.
Ruey S. Tsay (2018). Analysis of Financial Time Series, 2nd Edition.
David Ruppert (2018). Statistics and Data Analysis for Financial Engineering, 1st Edition.
Alexios Ghalanos (2018). rugarch: Univariate GARCH models. R package version 1.3-6.

High frequency trading system design


Obter através da App Store Leia esta publicação em nosso aplicativo!
How are HFT systems implemented on FPGA nowadays?
I have read about different implementations of HFT systems on FPGAs.
My question is, what part of HFT systems are mostly implemented on FPGAs nowadays? Are FPGAs still very popular? Is only the feed handler implemented on the FPGAs? Because some of these systems described above only have a feed handler implemented on the FPGA, because the strategy changes too much, or is too hard to implement on FPGAs. Others claim that they have also implemented trading strategies on FPGAs or using high performance NICs instead of FPGAs to build HFT systems. I've read about different approaches but I find it hard to compare as most of the results are tested on different input sets.
Here's a way to think about it: imagine you can do something in an ASIC (i. e. directly in hardware). However, the process of fabrication is in itself expensive, and you get a design that you cannot change afterwards. ASICs make sense for predefined tasks such as Bitcoin mining, well-known data processing algorithms, etc.
On the other hand we have ordinary CPUs (as well as coprocessor CPUs and GPUs) which are general-purpose, but process a small (in terms of concurrent instructions) set of instructions at a very high speed.
FPGAs are the middle ground. They are 'hardware emulators' and as such can be considered to be 10x slower than actual hardware, but still way more performant for concurrent operations than CPUs provided you are able to utilize the die to spread your logic accordingly.
Some uses of FPGAs are:
Video transcoding (e. g. HD video decoding in TVs) as well as various data acquisition boards Fixed data structure parsing (Regex parsing) Discrete system simulation (for example, simulating the outcome of a card game) Lots of 'properly embedded' applications such as e. g. in aerospace or scientific research.
The problem with FPGAs for quant uses is that it's not so good for floating-point calculations, particularly since ordinary CPUs are already optimized for that with things like SIMD. However, for anything fixed-point or fixed-size data structures, FPGA design allows you to configure the device to do a lot of processing at the same time.
Some things done in trading are using FPGA for feed handlers (parsing directly from the network stream) as well as building certain parts of the trading structure (e. g. order books) in hardware in order to be able to deal with the rapidly changing data structure without loading the CPU.
FPGAs mainly aim to address the concern of quickly processing data without paying the propagation costs. This is particularly in contrast with devices such as GPGPU (or any PCI-dwelling card, such as Xeon Phi) which pay performance penalties for getting data to/from the device. That said, DMA options are improving in this regard, too.
FPGA's are really nothing more than the same logic blocks repeated again and again throughout the silicon, with configurable switches to connect the logic blocks together. This makes FPGA's very good--and fast--at dealing with repetitive problems that can be described in a hardware circuit that does not change during operation. And you can have literally thousands or tens of thousands of these circuits, all working in parallel at the same time, in just one FPGA.
CPU's on the other hand are based around the ALU, which loads instructions, loads data, operates on the data, maybe stores the results, and then does it all over again. CPU's then are very good--and fast--at dealing with problems that are continually changing--both in size and in scope and at switching between different tasks. Today's CPU or core will have tens to hundreds of ALU's with parallel pipelines for data and instructions, which makes them very fast at complex problems that can be worked on in parallel.
These designs make FPGA's faster at simpler problems that can be attacked with a vast parallel architecture--such as condensing down multiple data feeds in less than micro-second, wire-to-wire, or triggering a pre-calculated buy, sell or cancel on a price that matches a particular pattern. CPU's are faster at more complex problems that require less parallelism, such as calculating the basket of buys, sells and cancels needed to keep a portfolio risk-adjusted or integrating a number of price and news sources of varying age and quality into trading indicators used by traders and management to decide what adjustments they will make to the trading system.
Where FPGA's are used in HFT depends a lot on the architecture of particular shop. They are best used performing simple, repetitive, wide tasks and performing them quickly. CPU's are a Swiss knife that can do most anything, especially where the requirements are changing and the dimensions of the problem are not fully understood at the outset.
Your question really makes not much sense. It's like asking how much of the wiring in trading infrastructure uses optic fiber and how much of it uses copper. The best answer that we can give to you is that an FPGA is not a magic bullet.
This is an incorrect interpretation of Cisco's white paper. There's very little overlap between the use cases of switching fabric and those of a FPGA.
what part of HFT systems are mostly implemented on FPGAs nowadays?
Currently, FPGAs are often used in our printers and TV set-top boxes.
I want to highlight the “digital signal processing” (DSP) block with ALUs. Today’s FPGAs have hundreds of programmable DSP blocks – the very largest having thousands.
Now, suddenly, you have thousands of small processors at your disposal, all able to perform calculations in parallel. This is vastly in excess of parallelism provided by the Xeon Phi or GPUs. In fact, if you’re doing options price modelling or stochastic risk modelling on FPGA, you can get more than 100-fold increase in performance compared to the latest GPUs and even more compared to the latest CPUs.
Along with the DSP blocks, the other major factor in this performance gain is the memory cache. FPGA has built-in distributed RAM that is extremely fast, allowing bandwidth of 100TB/s to be achieved at datapath level.
Using today’s FPGAs for algo strategies gives large and massively concurrent compute resource that is able to give 100 to 1000 fold increase in performance compared to GPUs or CPUs. The main caveat is that you would have to become proficient in writing in Verilog or VHDL :)
Sanjay Shah CTO Nanospeed.
A variety of powerful, many-core processors are beginning to make their way into the the hardware acceleration space that was previously completely "owned" by FPGAs. Companies like Tilera, Adapteva, and Coherent Logix all provide these processors here in the US, with Enyx from France also making inroads.
The true measure of effectiveness of these massively parallel processors lies in the maturity of their software tools. That's where the prospective user should focus their attention. Nobody wants to program or debug tens or hundreds of cores using manual techniques. Of course, it goes without saying that I/O bandwidth is as important.
In my personal experience in this space I'm seeing customer adoption of Coherent Logix processors as co-processors or hardware accelerators for C-language algo acceleration. By enjoying the rapid design cycle of a C based environment, algo programmers can tweak code to their hearts content and not worry about costly and time intensive HDL coding for FPGAs.
The optimal partitioning is to have FPGAs do what they do best - fixed repetitive operations - and have many-core processors do what they do best: accelerate algo developers productivity and execution speed.
John Irza, Business Development Manager, Coherent Logix, Inc.
Nearly all HFT shops use FPGA architecture. These devices need to be replaced frequently as the quickly are outpaced by the latest improvements in speed, pipelines, parallelism, etc. Unless you are ready to invest $2M a year, figure out another strategy. Lot of guys doing daily price moves with pen and paper are making billions in Omaha, NB.

High frequency trading system design


Obter através da App Store Leia esta publicação em nosso aplicativo!
Quão rápido são os sistemas de negociação HFT de última geração hoje?
Todo o tempo que você ouve sobre comércio de alta freqüência (HFT) e quão rápido são os algoritmos. Mas estou pensando - o que é rápido nos dias de hoje?
Não estou pensando na latência causada pela distância física entre uma troca e o servidor que executa um aplicativo comercial, mas a latência introduzida pelo próprio programa.
Para ser mais específico: qual é o tempo decorrido dos eventos que chegam no fio em um aplicativo para esse aplicativo, emite um pedido / preço no fio? Isto é, hora do tic-to-trade.
Estamos falando sub-milissegundo? Ou sub-microssegundo?
Como as pessoas conseguem essas latências? Codificação em montagem? FPGAs? Código de C ++ bom e antigo?
Foi recentemente publicado um artigo interessante sobre o ACM, fornecendo muitos detalhes sobre a tecnologia HFT de hoje, que é uma excelente leitura:
Você recebeu excelentes respostas. Há um problema, porém - a maioria das algotrading é um segredo. Você simplesmente não sabe o quão rápido é. Isso vai nos dois sentidos - alguns podem não dizer o quão rápido eles funcionam, porque eles não querem. Outros podem, digamos, "exagerar", por muitas razões (atraindo investidores ou clientes, por um).
Os rumores sobre picossegundos, por exemplo, são bastante escandalosos. 10 nanosegundos e 0,1 nanosegundos são exatamente a mesma coisa, porque o tempo necessário para que a ordem atinja o servidor de negociação seja muito mais do que isso.
E, o mais importante, embora não seja o que você perguntou, se você tentar negociar algorítmicamente, não tente ser mais rápido, tente ser mais inteligente. Eu vi algoritmos muito bons que podem lidar com segundos de latência e ganhar muito dinheiro.
Eu sou o CTO de uma pequena empresa que fabrica e vende sistemas HFT baseados em FPGA. Construindo nossos sistemas no topo do Solarflare Application Onload Engine (AOE), estamos constantemente oferecendo latência de um evento de mercado "interessante" no fio (10Gb / S UDP market data feed de ICE ou CME) para o primeiro byte do mensagem de ordem resultante atingindo o fio na faixa de 750 a 800 nanosegundos (sim, submicosegundo). Nós antecipamos que nossos sistemas de próxima versão estarão na faixa de 704 a 710 nanosegundos. Algumas pessoas reivindicaram um pouco menos, mas isso é em um ambiente de laboratório e na verdade não está sentado em uma COLO em Chicago e limpa as ordens.
Os comentários sobre física e "velocidade da luz" são válidos, mas não relevantes. Todo mundo que é sério sobre a HFT tem seus servidores em um COLO na sala ao lado do servidor da troca.
Para entrar neste domínio sub-microsegundo, você não pode fazer muito na CPU do host, exceto os comandos de implementação da estratégia de alimentação para o FPGA, mesmo com tecnologias como o bypass do kernel você tem 1.5 microssegundos de despesas gerais inevitáveis. então neste domínio tudo está jogando com FPGAs.
Uma das outras respostas é muito honesta ao dizer que, neste mercado altamente secreto, poucas pessoas falam sobre as ferramentas que eles usam ou seu desempenho. Cada um de nossos clientes exige que nem digamos a ninguém que eles usem nossas ferramentas nem divulguem nada sobre como elas as usam. Isso não só dificulta o marketing, mas também evita o bom fluxo de conhecimento técnico entre colegas.
Devido a esta necessidade de entrar em sistemas exóticos para a parte do mercado "wicked fast", você descobrirá que os Quants (as pessoas que aparecem nos algoritmos que fazemos rápido) estão dividindo seus algos em eventos-a - camadas de tempo de resposta. No topo da tecnologia, o heap é o sistema de microsecondos secundários (como o nosso). A próxima camada são os sistemas C ++ personalizados que fazem uso intenso do bypass do kernel e estão na faixa de 3-5 microsegundos. A próxima camada são as pessoas que não podem se dar ao luxo de estar em um fio de 10Gb / S apenas um roteador de lúpulo da "troca", eles podem estar ainda em COLO, mas por causa de um jogo desagradável que chamamos de "roleta de porta" eles estão no dezenas de centenas de microsecondos. Uma vez que você entra em milissegundos, quase não é HFT.
"sub-40 microssegundos", se você quiser acompanhar a Nasdaq. Esta figura é publicada aqui nasdaqomx / technology /
Um bom artigo que descreve o estado do HFT (em 2018) e oferece algumas amostras de soluções de hardware que tornam possível o uso de nanosegundos: as ruas de parede precisam de velocidade de negociação: a era de nanosegundos.
Com a corrida pela menor "latência" continuando, alguns participantes do mercado estão falando sobre picossegundos - trilhões de segundo.
EDIT: Como Nicholas mencionou gentilmente:
O link menciona uma empresa, a Fixnetix, que pode "preparar um comércio" em 740ns (ou seja, o tempo de um evento de entrada ocorre a uma ordem que está sendo enviada).
Para o que vale a pena, o produto de mensagens FTL da TIBCO é sub-500 ns para dentro de uma máquina (memória compartilhada) e alguns micro segundos usando RDMA (Remote Direct Memory Access) dentro de um data center. Depois disso, a física se torna a principal parte da equação.
Então, essa é a velocidade com que os dados podem ser obtidos a partir do feed para o aplicativo que toma decisões.
Pelo menos um sistema reivindicou.
30ns mensagens interthread, que provavelmente é um benchmark tweaked up, então qualquer um que fala sobre números mais baixos está usando algum tipo de CPU mágica.
Uma vez que você está no aplicativo, é apenas uma questão de quão rápido o programa pode tomar decisões.
Hoje em dia, o tic-to-trade de um dígito em microssegundos é a barra para empresas HFT competitivas. Você deve poder fazer dígitos únicos altos usando apenas o software. Então & lt; 5 usec com hardware adicional.
O comércio de alta freqüência ocorreu pelo menos desde 1999, depois que a Bolsa de Valores dos EUA (SEC) autorizou as trocas eletrônicas em 1998. Na virada do século 21, os negócios da HFT tiveram um tempo de execução de vários segundos, enquanto que até 2018 isso diminuiu em milissegundos e até mesmo em microssegundos.
Nunca será inferior a alguns microsegundos, devido ao limite de velocidade de em-w / luz, e apenas um número sortudo, que deve estar em menos de um quilômetro de distância, pode até sonhar em aproximar-se disso.
Além disso, não há codificação, para alcançar essa velocidade, você deve se tornar físico ... (o cara com o artigo com o interruptor 300ns, que é apenas a latência adicional desse switch!, Igual a 90m de viagem através de um óptico e um pouco menos em cobre)

Comments

Popular posts from this blog

Definição da estratégia de diversificação concêntrica

Estratégia forex hunter v8

Dhanraj forex khar