Construir sistema de negociação de alta frequência


Noções básicas de negociação algorítmica: conceitos e exemplos.


Um algoritmo é um conjunto específico de instruções claramente definidas destinadas a realizar uma tarefa ou processo.


O comércio algorítmico (negociação automatizada, negociação de caixa preta ou simplesmente negociação de algoritmos) é o processo de usar computadores programados para seguir um conjunto definido de instruções para fazer uma negociação, a fim de gerar lucros a uma velocidade e freqüência impossíveis para uma negociação. comerciante humano. Os conjuntos de regras definidos são baseados em tempo, preço, quantidade ou qualquer modelo matemático. Para além das oportunidades de lucro para o comerciante, a negociação de algoritmos torna os mercados mais líquidos e torna o comércio mais sistemático ao excluir os impactos humanos emocionais nas atividades de negociação. (Para mais, confira Escolhendo o Software de Negociação Algorítmica Certo.)


Suponha que um comerciante siga estes critérios comerciais simples:


Compre 50 ações de uma ação quando a média móvel de 50 dias ultrapassar a média móvel de 200 dias Venda ações da ação quando a média móvel de 50 dias ficar abaixo da média móvel de 200 dias.


Usando este conjunto de duas instruções simples, é fácil escrever um programa de computador que monitore automaticamente o preço das ações (e os indicadores de média móvel) e coloque as ordens de compra e venda quando as condições definidas forem atendidas. O comerciante não precisa mais ficar de olho nos preços e gráficos ao vivo, ou colocar os pedidos manualmente. O sistema de negociação algorítmica faz isso automaticamente, identificando corretamente a oportunidade de negociação. (Para mais informações sobre médias móveis, consulte Médias móveis simples Faça as tendências se destacarem.)


[Se você quiser aprender mais sobre as estratégias comprovadas e no ponto que podem, eventualmente, ser trabalhadas em um sistema de negociação alorítimo, confira o curso Torne-se um Day Trader da Investopedia Academy. ]


Benefícios do comércio algorítmico.


Algo-trading fornece os seguintes benefícios:


Negociações executadas com os melhores preços Possibilidade de colocação imediata e imediata de ordens (com altas chances de execução nos níveis desejados) Negociações cronometradas correta e instantaneamente, para evitar mudanças significativas nos preços Redução dos custos de transação (veja o exemplo de déficit de implementação abaixo) Verificações automatizadas simultâneas em múltiplos condições de mercado Risco reduzido de erros manuais na colocação dos negócios Backtest o algoritmo, com base em dados históricos e em tempo real disponíveis Reduzida possibilidade de erros por parte de comerciantes humanos com base em fatores emocionais e psicológicos.


A maior parte da negociação de algoritmos atuais é a negociação de alta frequência (HFT), que tenta capitalizar a colocação de um grande número de pedidos em velocidades muito rápidas em vários mercados e vários parâmetros de decisão, com base em instruções pré-programadas. (Para mais informações sobre negociação de alta frequência, consulte Estratégias e segredos de empresas de negociação de alta frequência (HFT).)


O comércio de algo é usado em muitas formas de atividades de negociação e investimento, incluindo:


Investidores de médio a longo prazo ou empresas compradoras (fundos de pensão, fundos mútuos, seguradoras) que compram em grandes quantidades, mas não querem influenciar os preços das ações com investimentos discretos e de grande volume. Comerciantes de curto prazo e participantes do lado da venda (formadores de mercado, especuladores e arbitradores) se beneficiam da execução automatizada do comércio; Além disso, o comércio de algo ajuda a criar liquidez suficiente para os vendedores no mercado. Comerciantes sistemáticos (seguidores de tendências, pares de traders, hedge funds, etc.) acham muito mais eficiente programar suas regras de negociação e permitir que o programa troque automaticamente.


O comércio algorítmico fornece uma abordagem mais sistemática ao comércio ativo do que métodos baseados na intuição ou instinto de um comerciante humano.


Estratégias de Negociação Algorítmica.


Qualquer estratégia para negociação algorítmica requer uma oportunidade identificada que seja lucrativa em termos de ganhos aprimorados ou redução de custos. A seguir estão as estratégias de negociação comuns usadas no comércio de algo:


As estratégias de negociação algorítmica mais comuns seguem as tendências de médias móveis, desvios de canal, movimentos de níveis de preços e indicadores técnicos relacionados. Essas são as estratégias mais fáceis e simples de implementar por meio do comércio algorítmico, porque essas estratégias não envolvem previsões nem previsões de preços. As negociações são iniciadas com base na ocorrência de tendências desejáveis, que são fáceis e diretas de implementar por meio de algoritmos, sem entrar na complexidade da análise preditiva. O exemplo acima mencionado de média móvel de 50 e 200 dias é uma tendência popular seguindo a estratégia. (Para mais informações sobre estratégias de negociação de tendências, consulte: Estratégias simples para capitalizar tendências.)


Comprar uma ação com cotação dupla a um preço menor em um mercado e, simultaneamente, vendê-la a um preço mais alto em outro mercado oferece o diferencial de preço como lucro ou arbitragem isenta de risco. A mesma operação pode ser replicada para ações versus instrumentos futuros, já que os diferenciais de preço existem de tempos em tempos. Implementar um algoritmo para identificar esses diferenciais de preço e colocar as ordens permite oportunidades lucrativas de maneira eficiente.


Os fundos de índices definiram períodos de reequilíbrio para aproximar seus investimentos aos seus respectivos índices de referência. Isso cria oportunidades lucrativas para os operadores algorítmicos, que capitalizam os negócios esperados que oferecem lucros de 20 a 80 pontos básicos, dependendo do número de ações no fundo de índice, imediatamente antes do rebalanceamento do fundo de índice. Tais negociações são iniciadas através de sistemas de negociação algorítmica para execução atempada e melhores preços.


Muitos modelos matemáticos comprovados, como a estratégia de negociação delta-neutral, que permitem negociar com combinação de opções e seu título subjacente, onde são feitas negociações para compensar deltas positivos e negativos, de modo que o delta do portfólio seja mantido em zero.


A estratégia de reversão à média baseia-se na ideia de que os preços altos e baixos de um ativo são um fenômeno temporário que revertem para o seu valor médio periodicamente. Identificar e definir uma faixa de preço e implementar um algoritmo com base nisso permite que os negócios sejam colocados automaticamente quando o preço do ativo entra e sai de seu intervalo definido.


A estratégia de preço médio ponderado por volume divide uma ordem grande e libera pedaços menores da ordem para o mercado, determinados dinamicamente, usando perfis de volume histórico específicos do estoque. O objetivo é executar o pedido próximo ao Preço Médio Ponderado pelo Volume (VWAP), beneficiando, assim, no preço médio.


A estratégia de preço médio ponderada pelo tempo quebra uma ordem grande e libera dinamicamente pedaços menores da ordem para o mercado usando intervalos de tempo divididos uniformemente entre um horário de início e de término. O objetivo é executar o pedido próximo ao preço médio entre os horários inicial e final, minimizando o impacto no mercado.


Até que a ordem de negociação esteja totalmente preenchida, este algoritmo continua enviando ordens parciais, de acordo com a taxa de participação definida e de acordo com o volume negociado nos mercados. A "estratégia de etapas" relacionada envia pedidos em uma porcentagem definida pelo usuário de volumes de mercado e aumenta ou diminui essa taxa de participação quando o preço da ação atinge níveis definidos pelo usuário.


A estratégia de déficit de implementação visa minimizar o custo de execução de um pedido negociando o mercado em tempo real, economizando assim no custo do pedido e se beneficiando do custo de oportunidade de execução atrasada. A estratégia aumentará a taxa de participação visada quando o preço das ações se mover favoravelmente e diminuirá quando o preço das ações se mover negativamente.


Existem algumas classes especiais de algoritmos que tentam identificar “acontecimentos” do outro lado. Esses "algoritmos de farejamento", usados, por exemplo, por um criador de mercado do lado da venda, têm a inteligência incorporada para identificar a existência de quaisquer algoritmos no lado da compra de uma ordem grande. Essa detecção por meio de algoritmos ajudará o criador de mercado a identificar grandes oportunidades de pedidos e possibilitará que ele se beneficie com o preenchimento dos pedidos a um preço mais alto. Às vezes, isso é identificado como front-running de alta tecnologia. (Para mais informações sobre comércio de alta frequência e práticas fraudulentas, consulte: Se você comprar ações on-line, você está envolvido em HFTs.)


Requisitos técnicos para negociação algorítmica.


Implementar o algoritmo usando um programa de computador é a última parte, batida com backtesting. O desafio é transformar a estratégia identificada em um processo informatizado integrado que tenha acesso a uma conta de negociação para fazer pedidos. Os seguintes são necessários:


Conhecimentos de programação de computadores para programar a estratégia de negociação necessária, programadores contratados ou software de negociação pré-fabricados. Conectividade de rede e acesso a plataformas de negociação para colocação de pedidos. Acesso a feeds de dados de mercado que serão monitorados pelo algoritmo para oportunidades de fazer pedidos. para backtest o sistema, uma vez construído, antes de ir viver em mercados reais Dados históricos disponíveis para backtesting, dependendo da complexidade das regras implementadas no algoritmo.


Aqui está um exemplo abrangente: A Royal Dutch Shell (RDS) está listada na Bolsa de Valores de Amsterdã (AEX) e na Bolsa de Valores de Londres (LSE). Vamos criar um algoritmo para identificar oportunidades de arbitragem. Aqui estão algumas observações interessantes:


AEX negocia em Euros, enquanto a LSE negocia em Libras Esterlinas Devido à diferença horária de uma hora, a AEX abre uma hora antes da LSE, seguida pelas duas bolsas sendo negociadas simultaneamente pelas próximas horas e negociando apenas na LSE durante a última hora conforme a AEX fecha .


Podemos explorar a possibilidade de negociação de arbitragem sobre as ações da Royal Dutch Shell listadas nesses dois mercados em duas moedas diferentes?


Um programa de computador que pode ler os preços de mercado atuais Feeds de preços de LSE e AEX Um feed de taxa de câmbio para taxa de câmbio de GBP-EUR Capacidade de colocação de pedidos que pode encaminhar o pedido para a capacidade correta de troca.


O programa de computador deve executar o seguinte:


Leia o feed de preço recebido do estoque RDS de ambas as trocas Usando as taxas de câmbio disponíveis, converta o preço de uma moeda para outra Se houver uma discrepância de preço suficiente (descontando os custos de corretagem) levando a uma oportunidade lucrativa, coloque a compra ordem em troca de preço mais baixo e ordem de venda em troca de preço mais alto Se as ordens forem executadas como desejado, o lucro da arbitragem seguirá.


Simples e fácil! No entanto, a prática de negociação algorítmica não é tão simples de manter e executar. Lembre-se, se você puder colocar uma negociação gerada por algoritmos, os outros participantes do mercado também poderão. Consequentemente, os preços flutuam em milissegundos e até microssegundos. No exemplo acima, o que acontece se a transação de compra for executada, mas o comércio de venda não é feito, pois os preços de venda mudam no momento em que seu pedido chega ao mercado? Você vai acabar sentado com uma posição aberta, fazendo com que sua estratégia de arbitragem seja inútil.


Existem riscos e desafios adicionais: por exemplo, riscos de falha do sistema, erros de conectividade de rede, atrasos entre ordens de negociação e execução e, o mais importante de tudo, algoritmos imperfeitos. Quanto mais complexo for um algoritmo, o backtesting mais rigoroso é necessário antes de ser colocado em ação.


The Bottom Line.


A análise quantitativa do desempenho de um algoritmo desempenha um papel importante e deve ser examinada criticamente. É emocionante usar a automação auxiliada por computadores com a noção de ganhar dinheiro sem esforço. Mas é preciso garantir que o sistema seja completamente testado e que os limites necessários sejam definidos. Comerciantes analíticos devem considerar aprender programação e construir sistemas por conta própria, para ter confiança em implementar as estratégias corretas de maneira infalível. Uso cauteloso e testes completos de negociação de algoritmos podem criar oportunidades lucrativas. (Para mais, veja Como codificar seu próprio robô de negociação da Algo.)


Jesse Spaulding.


Como ganhei $ 500k com aprendizado de máquina e HFT (negociação de alta frequência)


Este post irá detalhar o que eu fiz para fazer aprox. 500k de negociação de alta frequência de 2009 a 2010. Desde que eu estava negociando de forma totalmente independente e não estou mais executando o meu programa, estou feliz em dizer tudo. Minha negociação foi principalmente em contratos de futuros Russel 2000 e DAX.


A chave do meu sucesso, acredito, não estava em uma equação financeira sofisticada, mas sim no design geral do algoritmo, que unia muitos componentes simples e usava o aprendizado de máquina para otimizar a máxima lucratividade. Você não precisa conhecer nenhuma terminologia sofisticada aqui, porque quando eu configurei meu programa, tudo foi baseado na intuição. (O surpreendente curso de aprendizado de máquina de Andrew Ng ainda não estava disponível - se você clicar nesse link, você será levado ao meu projeto atual: CourseTalk, um site de revisão para MOOCs)


Primeiro, quero apenas demonstrar que meu sucesso não foi simplesmente o resultado da sorte. Meu programa fazia de 1000 a 4000 negociações por dia (meio longo, meio curto) e nunca ocupava posições de mais do que alguns contratos por vez. Isso significava que a sorte aleatória de qualquer negociação em particular era muito rápida. O resultado foi que eu nunca perdi mais de US $ 2000 em um dia e nunca tive um mês perdido:


(EDIT: Estes números são depois de pagar comissões)


E aqui está um gráfico para lhe dar uma noção da variação diária. Note que isso exclui os últimos 7 meses porque - à medida que os números pararam de subir - perdi minha motivação para entrar neles.


Antes de configurar o meu programa de negociação automatizado, eu tinha 2 anos de experiência como "manual" e "& rdquo; comerciante do dia. Isso foi em 2001 - eram os primeiros dias do comércio eletrônico e havia oportunidades para os "cambistas". fazer um bom dinheiro. Eu só posso descrever o que eu estava fazendo como se fosse jogar videogames / jogos de azar com uma suposta vantagem. Ser bem-sucedido significa ser rápido, ser disciplinado e ter uma boa capacidade intuitiva de reconhecimento de padrões. Consegui ganhar cerca de US $ 250 mil, pagar meus empréstimos estudantis e ter dinheiro sobrando. Ganhar!


Nos próximos cinco anos, eu lançaria duas startups, adquirindo algumas habilidades de programação ao longo do caminho. Não seria até o final de 2008 que eu voltaria a negociar. Com o dinheiro acabando com a venda da minha primeira startup, a negociação oferecia esperanças de algum dinheiro rápido enquanto eu descobria o meu próximo movimento.


Em 2008, eu era "manualmente" e "rdquo; dia negociando futuros usando software chamado T4. Eu estava querendo algumas teclas de atalho de entrada de pedidos personalizadas, então depois de descobrir que o T4 tinha uma API, aceitei o desafio de aprender C # (a linguagem de programação necessária para usar a API) e fui em frente e desenvolvi algumas teclas de atalho.


Depois de molhar os pés com a API, logo tive aspirações maiores: queria ensinar o computador a trocar por mim. A API forneceu um fluxo de dados de mercado e uma maneira fácil de enviar pedidos para a troca - tudo o que eu tinha que fazer era criar a lógica no meio.


Abaixo está uma imagem de uma janela de negociação T4. O que foi legal é que quando eu comecei meu programa trabalhando eu pude assistir o comércio de computador exatamente nesta mesma interface. Assistir ordens reais entrando e saindo (por conta própria com meu dinheiro real) era ao mesmo tempo emocionante e assustador.


O design do meu algoritmo.


Desde o início, meu objetivo era configurar um sistema de modo que eu pudesse estar razoavelmente confiante de que ganharia dinheiro antes de fazer qualquer negociação ao vivo. Para conseguir isso, eu precisava construir uma estrutura de simulação de negociação que simulasse a negociação ao vivo, com a maior precisão possível.


Enquanto a negociação no modo ao vivo exigia atualizações do mercado de processamento transmitidas pela API, o modo de simulação exigia a leitura das atualizações do mercado a partir de um arquivo de dados. Para coletar esses dados, configurei a primeira versão do meu programa para simplesmente conectar-me à API e registrar as atualizações do mercado com registros de data e hora. Acabei usando 4 semanas de dados de mercado recentes para treinar e testar meu sistema.


Com uma estrutura básica em vigor, ainda tinha a tarefa de descobrir como criar um sistema comercial lucrativo. Acontece que meu algoritmo se dividiria em dois componentes distintos, que eu explorarei por sua vez:


Previsão de movimentos de preços; e Fazendo negócios lucrativos.


Previsão de movimentos de preços.


Talvez um componente óbvio de qualquer sistema de negociação seja a capacidade de prever onde os preços irão se mover. E o meu não foi exceção. Eu defini o preço atual como a média do lance interno e da oferta interna e estabeleci a meta de prever onde o preço estaria nos próximos 10 segundos. Meu algoritmo precisaria apresentar essa previsão momento a momento ao longo do dia de negociação.


Criando & amp; otimização de indicadores.


Eu criei um punhado de indicadores que provaram ter uma capacidade significativa de prever movimentos de preços de curto prazo. Cada indicador produziu um número que foi positivo ou negativo. Um indicador era útil se, na maior parte dos casos, um número positivo correspondesse ao aumento do mercado e um número negativo correspondesse à queda do mercado.


Meu sistema me permitiu determinar rapidamente a capacidade preditiva de qualquer indicador, por isso pude experimentar muitos indicadores diferentes para ver o que funcionava. Muitos dos indicadores tinham variáveis ​​nas fórmulas que os produziam e eu consegui encontrar os valores ideais para essas variáveis ​​fazendo comparações lado a lado dos resultados obtidos com valores variáveis.


Os indicadores que foram mais úteis foram todos relativamente simples e foram baseados em eventos recentes no mercado em que eu estava negociando, bem como nos mercados de títulos correlacionados.


Fazendo previsões precisas de movimentação de preços.


Ter indicadores que simplesmente previam uma alta ou baixa no preço não era suficiente. Eu precisava saber exatamente quanto movimento de preço era previsto por cada valor possível de cada indicador. Eu precisava de uma fórmula que convertesse um valor de indicador em uma previsão de preço.


Para conseguir isso, acompanhei as movimentações de preço previstas em 50 buckets que dependiam do intervalo em que o valor do indicador caiu. Isso gerou previsões exclusivas para cada bucket que eu era capaz de representar graficamente no Excel. Como você pode ver, a mudança de preço esperada aumenta à medida que o valor do indicador aumenta.


Com base em um gráfico como esse, consegui fazer uma fórmula para ajustar a curva. No começo eu fiz isso "ajuste de curva". manualmente, mas logo escrevi algum código para automatizar esse processo.


Note que nem todas as curvas do indicador tinham a mesma forma. Observe também que os buckets foram distribuídos logaritmicamente para distribuir os dados de maneira uniforme. Por fim, observe que os valores dos indicadores negativos (e suas previsões de preços descendentes correspondentes) foram invertidos e combinados com os valores positivos. (Meu algoritmo tratado para cima e para baixo exatamente o mesmo.)


Combinando indicadores para uma única previsão.


Uma coisa importante a considerar era que cada indicador não era totalmente independente. Eu não poderia simplesmente somar todas as previsões que cada indicador fez individualmente. A chave era descobrir o valor preditivo adicional que cada indicador tinha além do que já estava previsto. Isso não era difícil de implementar, mas significava que se eu estivesse "ajustando a curva", vários indicadores ao mesmo tempo, tive que ser cuidadoso; a mudança de um efetuaria as previsões de outro.


Para ajustar a curva & rdquo; Todos os indicadores ao mesmo tempo eu configurei o otimizador para pisar apenas 30% do caminho para as novas curvas de previsão com cada passagem. Com esse salto de 30%, descobri que as curvas de previsão se estabilizariam em poucas passagens.


Com cada indicador nos dando agora a previsão adicional de preço, eu poderia simplesmente adicioná-los para produzir uma única previsão de onde o mercado estaria em 10 segundos.


Por que prever preços não é suficiente.


Você pode pensar que com essa vantagem no mercado eu era de ouro. Mas você precisa ter em mente que o mercado é composto de ofertas e ofertas - não é apenas um preço de mercado. Sucesso na negociação de alta freqüência se resume a obter bons preços e não é assim tão fácil.


Os fatores a seguir dificultam a criação de um sistema lucrativo:


Com cada negócio eu tive que pagar comissões ao meu corretor e à bolsa. O spread (diferença entre oferta mais alta e oferta mais baixa) significava que se eu simplesmente comprasse e vendesse aleatoriamente, estaria perdendo uma tonelada de dinheiro. A maior parte do volume do mercado era de outros bots que só fariam uma troca comigo se achassem que tinham alguma vantagem estatística. Vendo uma oferta não garante que eu poderia comprá-lo. No momento em que minha ordem de compra chegou à bolsa, era muito possível que essa oferta tivesse sido cancelada. Como um pequeno participante do mercado, não havia como competir sozinho com a velocidade.


Construindo uma simulação de negociação completa.


Então eu tive uma estrutura que me permitiu backtest e otimizar os indicadores. Mas eu tive que ir além disso - eu precisava de um framework que me permitisse fazer backtest e otimizar um sistema de negociação completo; aquele em que eu estava mandando pedidos e ficando em posições. Neste caso, eu estaria otimizando para P & amp; L total e, em certa medida, P & amp; L médio por negociação.


Isso seria mais complicado e, de certa forma, impossível modelar exatamente, mas eu fiz o melhor que pude. Aqui estão alguns dos problemas que eu tive que lidar:


Quando um pedido foi enviado ao mercado na simulação, tive que modelar o tempo de atraso. O fato de meu sistema ter visto uma oferta não significa que ela poderia comprá-la imediatamente. O sistema enviaria o pedido, aguardaria aproximadamente 20 milissegundos e somente se a oferta ainda estivesse lá era considerado como um negócio executado. Isso era inexato porque o tempo real de atraso era inconsistente e não relatado. Quando eu fiz lances ou ofertas, tive que olhar para o fluxo de execução de negociação (fornecido pela API) e usá-los para avaliar quando meu pedido seria executado. Para fazer isso direito eu tive que rastrear a posição do meu pedido na fila. (É um sistema first-in first-out). Novamente, eu não pude fazer isso perfeitamente, mas fiz uma melhor aproximação.


Para refinar minha simulação de execução de pedidos, o que fiz foi extrair meus arquivos de log da negociação ao vivo pela API e compará-los aos arquivos de log produzidos pela negociação simulada no mesmo período de tempo. Consegui obter minha simulação ao ponto de ser bastante precisa e, para as partes que eram impossíveis de modelar exatamente, certifiquei-me de, pelo menos, produzir resultados que fossem estatisticamente semelhantes (nas métricas que julguei importantes).


Fazendo negócios lucrativos.


Com um modelo de simulação de pedidos, agora eu poderia enviar pedidos no modo de simulação e ver um P & amp; Mas como meu sistema saberia quando e onde comprar e vender?


As previsões do movimento de preços foram um ponto de partida, mas não toda a história. O que eu fiz foi criar um sistema de pontuação para cada um dos 5 níveis de preço na oferta e oferta. Estes incluíram um nível acima da oferta interna (para uma ordem de compra) e um nível abaixo da oferta interna (para uma ordem de venda).


Se a pontuação em qualquer nível de preço estiver acima de um certo limite, isso significa que o meu sistema deve ter um lance / oferta ativa - abaixo do limite, então qualquer pedido ativo deve ser cancelado. Com base nisso, não era incomum que meu sistema exibisse um lance no mercado e o cancelasse imediatamente. (Embora eu tentei minimizar isso, é irritante para quem olha para a tela com olhos humanos - inclusive eu.)


As pontuações do nível de preços foram calculadas com base nos seguintes fatores:


A previsão do movimento de preços (que discutimos anteriormente). O nível de preços em questão. (Níveis internos significavam que grandes previsões de movimentação de preço eram necessárias.) O número de contratos na frente do meu pedido na fila. (Menos foi melhor.) O número de contratos por trás do meu pedido na fila. (Mais foi melhor.)


Essencialmente, esses fatores serviram para identificar "seguro". lugares para licitar / oferecer. A previsão do movimento de preços, por si só, não era adequada porque não levava em conta o fato de que, ao fazer uma oferta, eu não era preenchido automaticamente - só fui preenchido se alguém me vendesse lá. A realidade era que o simples fato de alguém me vender a um certo preço mudava as probabilidades estatísticas do negócio.


As variáveis ​​usadas nesta etapa foram todas sujeitas a otimização. Isso foi feito exatamente da mesma maneira que eu otimizei as variáveis ​​nos indicadores de preço, exceto neste caso eu estava otimizando para a linha de fundo P & amp; L.


Quando negociamos como seres humanos, muitas vezes temos emoções e vieses poderosos que podem levar a decisões menos que ótimas. Obviamente, não queria codificar esses vieses. Aqui estão alguns fatores que meu sistema ignorou:


O preço que uma posição foi inserida - Em um escritório comercial, é muito comum ouvir conversas sobre o preço em que alguém é comprido ou baixo, como se isso pudesse afetar sua futura tomada de decisão. Embora isso tenha alguma validade como parte de uma estratégia de redução de riscos, ela realmente não tem relação com o curso futuro dos eventos no mercado. Portanto, meu programa ignorou completamente essa informação. É o mesmo conceito que ignorar os custos irrecuperáveis. Indo curto vs. saindo de uma posição longa - Tipicamente um trader teria critérios diferentes que determinam onde vender uma posição comprada versus onde ir short. No entanto, da minha perspectiva de algoritmos, não havia razão para fazer uma distinção. Se meu algoritmo esperava um movimento descendente, a venda era uma boa ideia, independentemente de ser atualmente longa, curta ou plana. A & ldquo; dobrando & rdquo; estratégia - Esta é uma estratégia comum, onde os comerciantes vão comprar mais ações no caso de que o comércio original vai contra eles. Isso faz com que o preço médio de compra seja menor e isso significa que quando (ou se) a ação girar, você estará pronto para recuperar seu dinheiro rapidamente. Na minha opinião, esta é realmente uma estratégia horrível, a menos que você esteja Warren Buffet. Você é levado a pensar que está indo bem porque a maioria de seus negócios será vencedores. O problema é quando você perde você perde grande. O outro efeito é que torna difícil julgar se você realmente tem uma vantagem no mercado ou está apenas tendo sorte. Ser capaz de monitorar e confirmar que meu programa realmente tinha uma vantagem era um objetivo importante.


Como meu algoritmo tomava decisões da mesma forma, independentemente de onde ele entrasse em uma negociação ou se era atualmente longo ou curto, ocasionalmente ele fazia parte (e tomava) de algumas grandes negociações perdedoras (além de algumas grandes negociações vencedoras). Mas, você não deve pensar que não houve nenhum gerenciamento de risco.


Para gerenciar o risco, impus um tamanho máximo de posição de dois contratos por vez, ocasionalmente aumentado em dias de alto volume. Eu também tinha um limite máximo de perda diária para proteger contra condições inesperadas de mercado ou um bug no meu software. Esses limites foram aplicados no meu código, mas também no backend por meio do meu corretor. Aconteceu que nunca encontrei problemas significativos.


A partir do momento em que comecei a trabalhar no meu programa, demorei cerca de 6 meses até atingir o ponto de rentabilidade e comecei a executá-lo ao vivo. Embora, para ser justo, uma quantidade significativa de tempo foi aprender uma nova linguagem de programação. Enquanto trabalhei para melhorar o programa, vi um aumento nos lucros para cada um dos próximos quatro meses.


Toda semana eu reciclaria meu sistema com base nas 4 semanas anteriores de dados. Descobri que isso estabelecia o equilíbrio certo entre captar tendências comportamentais recentes do mercado e garantir que meu algoritmo tivesse dados suficientes para estabelecer padrões significativos. Como o treinamento começou a tomar mais e mais tempo, eu o dividi para que pudesse ser executado por 8 máquinas virtuais usando o amazon EC2. Os resultados foram então reunidos na minha máquina local.


O ponto alto da minha negociação foi em outubro de 2009, quando fiz quase 100k. Depois disso, continuei a passar os próximos quatro meses tentando melhorar meu programa, apesar do lucro reduzido a cada mês. Infelizmente, a essa altura, acho que implementei todas as minhas melhores ideias, porque nada do que tentei parecia ajudar muito.


Com a frustração de não poder fazer melhorias e não ter senso de crescimento, comecei a pensar em uma nova direção. Eu enviei um e-mail para 6 diferentes empresas de negociação de alta frequência para ver se eles estariam interessados ​​em comprar meu software e me contratar para trabalhar para eles. Ninguém respondeu. Eu tive algumas novas idéias de inicialização que eu queria trabalhar, então eu nunca dei continuidade.


ATUALIZAÇÃO - Eu postei isso no Hacker News e tem recebido muita atenção. Eu só quero dizer que eu não defendo ninguém tentando fazer algo assim agora. Você precisaria de uma equipe de pessoas realmente inteligentes com uma variedade de experiências para ter qualquer esperança de competir. Mesmo quando eu estava fazendo isso, acredito que era muito raro para as pessoas alcançarem o sucesso (embora eu tivesse ouvido falar de outras pessoas).


Há um comentário no topo da página que menciona "estatísticas manipuladas" e se refere a mim como um investidor de varejo & rdquo; que quants iria "alegremente escolher". Este é um comentário bastante infeliz que simplesmente não se baseia na realidade. Deixando isso de lado, há alguns comentários interessantes: news. ycombinator / item? Id = 4748624.


ATUALIZAÇÃO # 2 - Fiz uma FAQ de acompanhamento que responde a algumas perguntas comuns que recebi de traders sobre essa postagem.


Veja como você configura sua própria operação de negociação de alta frequência.


Na semana passada, tivemos o privilégio de conversar com Mike Felix e o "doutor" Lawrence Hansen, da Lime Brokerage, corretora de agência sediada em Nova York especializada em negociações de alta frequência e baixa latência. O principal takeaway :. Aqueles que acham que as velocidades são inaceitáveis, melhor se acostumar com isso, porque eles estão aqui para ficar e só vai ficar mais rápido a partir daqui. Perguntamos a eles como seria possível configurar sua própria operação de negociação de alta frequência em um nível amador / varejo. Depois de definir exatamente qual é a definição de negociação de alta frequência, analisamos os passos necessários para que isso aconteça.


Começar apresentação de slides "


1. Primeiro venha com um plano de negociação. O que você quer fazer?


Existem várias estratégias quando se trata de negociação de alta frequência. Alguns deles incluem, mas obviamente não se limitam ao seguinte:


Captura de bônus de liquidez (obtenção de dinheiro para fornecer liquidez na troca) Arbitragem de latência: Exponha os atrasos nos pedidos que passam por uma troca Criação automática de mercado: Usando algoritmos de baixa latência (programas realmente rápidos), você pode comprar todas as ações disponíveis em um mercado. uma fração de segundo e fazer um mercado / fornecer liquidez em um determinado título. Rastreamento automático de índice (benchmarking): Um algoritmo básico correlacionará automaticamente uma posição a um índice, como o S & P 500.


2. Levante o capital em conformidade.


Acredite ou não, você não precisa de milhões de dólares para fazer negociações de alta frequência. Alguns clientes começam com, digamos, US $ 20.000 e trabalham a partir daí. Outros têm milhões disponíveis e, em seguida, os grandes participantes - os bancos, fundos de hedge e investidores institucionais - têm centenas de milhões prontamente disponíveis à sua disposição.


3. Em seguida, encontre uma câmara de compensação que o aprove como contraparte.


Esta é uma parte integrante da sua operação. Sem uma parte de compensação adequada, que pode ser um jogador pequeno para alguém como o Barclays (na foto), seu modus operandi não funcionará corretamente. Você precisa ter 100% de certeza de que seus negócios serão liquidados no final do dia do mercado.


4. Determine quem será seu principal corretor ou "mini prime", que agrega jogadores menores juntos.


Você deve estar familiarizado com o termo principal corretor, o banco de investimento ou agente de serviços que faz todas as coisas que você não precisa lidar. Liquidar negócios, fornecer alavancagem e emprestar valores mobiliários são parte integrante da negociação e, é claro, da negociação de alta frequência. Se você é um jogador pequeno demais para ir para os grandes cães como o Goldman Sachs, o Fortis e o JP Morgan, há corretores "mini prime" que são como um consórcio de jogadores menores.


5. Inicie o seu back office e as operações de contabilidade.


A menos que você queira que a SEC chegue depois que você e FINRA enviarem multas por semana, é melhor que você tenha uma operação de backoffice bem definida. O back office cuida das tarefas administrativas associadas à negociação e garante que todas as negociações sejam liquidadas. Se a sua operação não for eficiente, espere muitas dores de cabeça ao tentar resolver uma discrepância em uma negociação de 4 milhões de blocos de ações.


6. Colocar seus servidores perto das trocas através de um centro de dados. Configure servidores para especificação.


Bem. Essa é a grande parte aqui. Co-location - obtendo seus servidores o mais próximo possível da troca.


As bolsas têm data centers, assim como firmas como a Lime Brokerage. Pense sobre isso: suas ordens dependem da velocidade da luz e da latência entre dois computadores (o tempo que leva um pedido para ir do Computador A para o Computador B). Há uma diferença enorme entre milissegundos (1/1000 de segundo) e microssegundos (1 / 1.000.000 de segundo), então cada bit conta. Você precisará pagar uma taxa para colocar seu servidor no data center e precisará certificar-se de que ele tenha o poder de suportar sua operação.


7. Pregue a estratégia de negociação e implemente-a.


Quando seu servidor estiver no data center, é hora de revisar:


Você estabeleceu uma estratégia de negociação clara, como discutido no primeiro slide? O seu servidor está funcionando corretamente? Você testou os tempos de ping e a latência? Você estabeleceu um escritório totalmente funcional completo com os requisitos mencionados acima (limpeza, back office, etc.)? Se você estiver usando algos, seus algoritmos funcionam corretamente? Você não quer que eles fiquem malucos. Você tem capital adequado para começar sua operação?


8. Configure os algoritmos, se aplicável. Nem todos os HFT são de comércio algorítmico.


Lembre-se: HFT NÃO SIGNIFICA NEGOCIAÇÃO ALGORITÍMICA!


É tudo sobre a velocidade. Mas se você estiver usando algoritmos, certifique-se de configurá-los adequadamente, pois, se uma coisa pequena estiver errada, você poderá perder todo o seu dinheiro em questão de segundos. Ou talvez seus pedidos não sejam executados corretamente. Seja qual for o motivo, leve o seu departamento de informática / TI / nerd sobre isso e faça com que mostrem que você está pronto para rodar.


9. Certifique-se de ter um cliente front-end com uma interface decente para que você possa acessar e configurar seus servidores e estratégias de negociação de longe.


É impraticável ir ao data center toda vez que você quiser fazer alguma coisa ou reconfigurar seu servidor. Um cliente front-end decente para fazer mudanças é essencial para se ater ao seu plano. Alguns serviços vêm com uma GUI (interface gráfica do usuário) que você pode usar, mas outros podem exigir um conhecimento mais complexo de coisas como o UNIX.


10. Teste sua configuração e certifique-se de que tudo esteja funcionando corretamente - no seu lado e no final de qualquer fornecedor de software / hardware.


ESTÁ BEM. Você já fez tudo. Você configurou o negócio, instalou os servidores, configurou os algos, pagou a equipe, comeu a hora do almoço para uma verificação final antes de decolar. Afinal, você precisa ter certeza de que sua estratégia funcionará corretamente quando você "ligar as máquinas".


Alguns serviços oferecem a capacidade de testar uma configuração usando dinheiro engraçado, semelhante ao sistema de negociação PaperMoney da thinkorswim. Certifique-se de fazer isso antes de começar a usar o capital da sua empresa.


11. Entre nos mercados e comece a negociar!


Flickr do Steve Preço.


Ligue tudo e chute de volta. Deixe os comerciantes ou os algos fazer o trabalho para você e parabenize-se por um trabalho bem feito. Você finalmente começou sua própria trading de alta frequência.


Compreender exatamente o que é a negociação de alta frequência.


É muito importante que você entenda que a negociação de alta frequência não é negociação de caixa preta ou negociação algorítmica. Ele pode implementar essas duas coisas em uma estratégia de HFT, mas, novamente, elas não são estratégias específicas de HFT. Negociação de alta frequência é tudo sobre uma coisa: velocidade. Você precisa de co-location (colocando o seu servidor o mais próximo possível da troca) para fazê-lo funcionar e quanto mais milli / micro / nano-seconds você eliminar, melhor. Baixa latência (o tempo que leva para o seu pedido chegar à troca) é fundamental, especialmente quando se trata de execução.


O pessoal da Lime Brokerage sabe uma ou duas coisas sobre velocidade, já que eles vêm fazendo essas coisas há anos, muito antes de a buzzphrase conhecida como "trading de alta frequência" existir. Para eles, a velocidade é a única coisa que é fundamental e deve permanecer fundamental.


Guia do Heretic para Finanças Globais: Hacking the Future of Money.


Aventuras Anárquicas nas Artes, Ativismo, Antropologia e Economia Alternativa.


Quarta-feira, 17 de junho de 2015.


Surrealismo algorítmico: um guia em câmera lenta para negociação de alta frequência.


PARTE 1 (3500 Palavras)


Uma cartilha de 900 milhões de microssegundos em negociação de alta frequência.


No tempo que você leva para ler esta frase, um algoritmo de negociação de alta frequência (HFT), conectado a uma bolsa de valores via "baixa latência" & # 8221; infra-estrutura de negociação, poderia fazer, talvez, 1.000 trades.


1.1: Colocando o HFT no contexto.


Houve um tempo, no passado distante dos anos 1970, quando os negócios nas bolsas de valores eram basicamente o domínio exclusivo dos atores humanos. Quer fosse o investidor prudente e de longo prazo que comprava uma carteira de ações para um fundo de aposentadoria ou o especulador de vaqueiros comprando e vendendo em rápida sucessão, o processo era sempre limitado pela velocidade da mente humana, e o tempo gasto para realmente pegar um telefone e fazer um pedido. Mesmo o especulador mais rápido ainda levaria alguns minutos para concluir as negociações.


1.2: Como devo me sentir sobre isso?


1.3: Negociação, negociação técnica, negociação de algoritmos, HFT.


Vamos dar um passo atrás e tentar colocar essa atividade em contexto. Os mercados financeiros, como um mercado de ações, facilitam a compra e venda de instrumentos financeiros, que são contratos que lhe dão direitos para receber retornos ao longo do tempo. Eles tendem a hospedar diferentes jogadores com diferentes horizontes de tempo. Nos anéis externos, você recebe os grandes investidores institucionais, como os fundos de pensão. Eles chegam ao mercado ocasionalmente e fazem grandes investimentos, comprando um grande número de ações, muitas vezes com o objetivo de mantê-los por vários anos. Então, nos anéis internos, você fica mais rápido, mais volúvel, os jogadores & # 8211; podemos chamá-los de comerciantes & # 8211; que ganham dinheiro entrando e saindo de mercados, como tubarões ágeis nadando entre as vagens mais lentas de enormes baleias.


Comece entendendo o conceito geral de negociação: os operadores financeiros compram e vendem instrumentos financeiros, como ações de empresas. Eles esperam comprar a um preço menor do que vendem, obtendo lucro. Agora entenda Technical Trading: Traders têm diferentes técnicas de especulação. Eles podem, por exemplo, passar horas pesquisando os registros de uma determinada empresa para fazer avaliações, uma prática chamada negociação fundamental. Alternativamente, eles podem analisar as atividades de outros comerciantes em um mercado para tomar decisões. Esta 'análise técnica' de dados de preço, ordem e volume gerados por outros traders leva à negociação técnica. Agora imagine que automatizado em Algorithmic Trading: pode-se decidir automatizar o processo de negociação técnica, de tal forma que um algoritmo analisa um fluxo de entrada de dados de preço, ordem e volume e faz operações sob certas condições. Nós chamamos isso de negociação algorítmica. (note: é possível fazer uma distinção entre negociação algorítmica e automatizada, mas, para facilitar, vamos supor que são os mesmos). Então, imagine isso acelerado na negociação de alta frequência: se você acelerar esse processo de negociação algorítmica automatizada para velocidades extremas, você está fazendo negociação de alta frequência. Portanto, a HFT é melhor inicialmente pensada como uma negociação algorítmica muito rápida, que em si é uma negociação técnica automatizada, que em si é uma sub-ramificação da negociação mais ampla. Pode ser contrastado, por exemplo, com negociações mais lentas e fundamentais, que é o que pessoas como George Soros fazem (ele e seus analistas, na verdade, sentam-se em uma sala, observam o mundo e fazem grandes apostas nele). Finalmente, lembre-se de que podemos novamente contrastar todo esse mundo de negociação com o mundo dos investimentos de longo prazo, que é o que os grandes e lentos fundos de pensão fazem. Para retornar à analogia do ecossistema anterior, as empresas de HFT são como piranhas entre os tubarões entre as baleias.


1.4: Como configurar uma empresa de HFT.


Organizações comerciais diferentes podem ter razões ligeiramente diferentes para se engajar na HFT. Alguns grandes bancos, por exemplo, usam-no como uma ferramenta para fazer um grande pedido e fragmentá-lo em pequenos pedidos, como usar um bico de dispersão para transformar um jato de mangueira de incêndio em uma fina névoa de mercado que as pessoas não usam. observe prontamente. Muitos jogadores de HFT, no entanto, são puros especuladores de curto prazo, firmas especializadas de trading proprietárias e fundos de hedge. Se você quisesse configurar um desses, aqui estão algumas coisas que você faria.


Este não é um artigo técnico pedante sobre a natureza exata da tecnologia HFT. Há enormes quantidades de discussões carregadas de jargão e nerds na internet, se você estiver realmente interessado na tecnologia, mas a essência do que você precisa fazer é: você deve fazer algum tipo de acordo com uma corretora. empresa e uma bolsa de valores para obter o seu algoritmo impressionante o mais próximo possível da bolsa de valores! Você deve minimizar a distância física entre o computador em que seu algoritmo está e o computador em que o sistema de correspondência de ordens da troca está, de modo que os dois possam entrar em um intenso diálogo de velocidade da luz um com o outro.


Como construir um sistema de negociação HFT para FX ($ EURUSD $ EURGBP)


Construir um ambiente sólido de negociação de alta frequência FX é um exercício extremamente desafiador. Um mecanismo de HFT geralmente contém os seguintes componentes: agregação de liquidez, gerente de estratégias de negociação, gerente de estratégias de execução e análise de risco. A agregação de liquidez envolve a utilização da rede avançada e das tecnologias de informática atuais para estender as conexões para o maior número possível de participantes do mercado e locais de liquidez. Agregando liquidez de diferentes fontes, um mecanismo de HFT terá uma excelente visão dos movimentos do mercado de FX em uma latência muito baixa. Informações sobre mudanças de preço, volume e volatilidade, etc., chegam em microssegundos. E, como resultado, melhores decisões de negociação e resultados de execução podem ser alcançados com melhor agregação de liquidez. Assim, o acesso ao pool de liquidez é muito crucial na negociação de FX.


O gerente de estratégias de negociação é o cérebro central de um mecanismo de negociação de alta frequência, que contém as estratégias desenvolvidas por traders e modeladores quantitativos. Essas estratégias são geralmente construídas com base na análise de dados estatísticos, experiências de negociação anteriores e pesquisa alfa, etc. São as estratégias de negociação que conduzem todas as análises de dados de mercado em tempo real e tomam decisões comerciais ao comprar ou vender determinados valores de pares de moedas. a determinados preços. O gerente de estratégias de execução é projetado para gerenciar diferentes tipos de pedidos (por exemplo, IOC e GTC, etc.) e colocar pedidos no mercado de maneira inteligente e eficiente para obter uma alta taxa de sucesso em sua execução. É muito importante que um mecanismo de HFT seja capaz de capturar o melhor tempo para sua execução nesta competição de microssegundos. O Risk analítico calcula as exposições ao risco em tempo real e as medidas das atividades de negociação de alta frequência. É a ferramenta para os comerciantes monitorarem os processos de negociação automática que são iniciados pelas estratégias de hedge. Os operadores confiam no risco analítico em termos de execução de intervenção humana para o mecanismo de negociação de alta frequência.


Compartilhe se você gosta!


Palavras-chave: #forex #fx #risco $ EURUSD $ EURGBP $ EURJPY.

Comments