пятница, 8 июня 2018 г.

Sistema automatizado de comércio de alta frequência


Mais um passo.


Por favor, complete a verificação de segurança para acessar lightspeed.


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: 3e4d3879adf68b04 & bull; Seu IP: 78.109.24.111 & bull; Performance & amp; segurança por Cloudflare.


Algorithmic Trading System Design & amp; Implementação.


AlgorithmicTrading é um desenvolvedor de sistemas de negociação de terceiros especializado em sistemas de negociação automatizada, estratégias de negociação algorítmica e análise de negociação quantitativa. Oferecemos dois algoritmos de negociação distintos aos comerciantes de varejo e investidores profissionais.


Assista ao nosso blog de video trading algorítmico, onde nosso desenvolvedor principal analisa o desempenho de 6/10/17 & ndash; 8/8/17 usando nosso sistema de negociação automatizado. Visite nosso Algorithmic Trading Blog para ver todos os vídeos de desempenho para 2016-2018 YTD. A negociação de futuros e opções envolve um risco substancial de perda e não é adequado para todos os investidores.


Comece em Algorithmic Trading hoje.


Os Destaques do Swing Trader.


Nossa Estratégia de Negociação Swing comercializa os S & amp; P 500 Emini Futures (ES) e Ten Year Note (TY). Este é um sistema de negociação 100% automatizado que pode ser executado automaticamente com os melhores esforços por vários corretores registrados da NFA. Também pode ser instalado e carregado na plataforma Tradestation. Os seguintes dados abrangem o período de caminhada para frente (fora da amostra) abrangendo 10/1 / 15-1 / 4/18. Futures Trading envolve um risco substancial de perda e não é apropriado para todos os investidores. O desempenho passado não é indicativo de desempenho futuro. Esses dados assumem que 1 unidade (US $ 15.000) foi negociada durante todo o período em análise (não composto).


* As perdas podem exceder a redução máxima. Isso é medido de um ponto para o outro, fechando o comércio para fechar o comércio. O desempenho passado não é indicativo de desempenho futuro.


O Swing Trader Monthly P / L.


As negociações que começam em outubro de 2015 são consideradas Walk-Forward / Out-of-Sample, enquanto os negócios anteriores a outubro de 2015 são considerados testados novamente. O lucro / perda dado é baseado em uma conta de US $ 15.000 que vende uma unidade no Swing Trader. Estes dados não são compostos.


* As perdas podem exceder a redução máxima. Isso é medido de um ponto para o outro, fechando o comércio para fechar o comércio. O desempenho passado não é indicativo de desempenho futuro.


REGRA CFTC 4.41: Os resultados são baseados em resultados de desempenho simulados ou hipotéticos que possuem certas limitações inerentes. Ao contrário dos resultados apresentados em um registro de desempenho real, esses resultados não representam a negociação real. Além disso, como esses negócios não foram efetivamente executados, esses resultados podem ter uma compensação menor ou excessiva do impacto, se houver, de certos fatores do mercado, como a falta de liquidez. Programas de negociação simulados ou hipotéticos em geral também estão sujeitos ao fato de serem projetados com o benefício de retrospectiva. Nenhuma representação está sendo feita que qualquer conta será ou será capaz de alcançar lucros ou perdas semelhantes às exibidas.


Noções básicas de negociação algorítmica.


Algorithmic Trading, também conhecido como Quant Trading é um estilo de negociação que utiliza algoritmos de previsão de mercado para encontrar negociações potenciais. Existem várias sub-categorias de negociação quantitativa para incluir High Frequency Trading (HFT), Arbitrage Estatístico e Market Prediction Analysis. Na AlgorithmicTrading, nos concentramos no desenvolvimento de sistemas de negociação automatizados que colocam negociações de swing, dia e opções para aproveitar as várias ineficiências do mercado.


Atualmente oferecemos dois Futures Trading Systems que comercializam o ES & amp; Futuros de TY. Continue lendo para ver por si mesmo como implementar um sistema de comércio de algo projetado profissionalmente pode ser benéfico para seus objetivos de investimento. Nós não somos consultores de negociação de commodities registrados e, portanto, não controlamos diretamente contas de clientes e ndash; No entanto, negociamos ambos os sistemas de negociação com nosso próprio capital utilizando um dos corretores de execução comercial automatizada.


Exemplo de troca algorítmica.


Estratégia de negociação de futuros: o pacote Swing Trader.


Este pacote utiliza nossos algoritmos de melhor desempenho desde o início. Visite a página do negociante de swing para ver os preços, as estatísticas de comércio, a lista de comércio completo e muito mais. Este pacote é ideal para os céticos que desejam trocar um sistema robusto que tenha feito o bem no comércio cego de troca / saída de amostras. Cansado de modelos otimistas back-testados que nunca parecem funcionar quando comercializados ao vivo? Em caso afirmativo, considere este sistema comercial de caixa preta. Este é o nosso algoritmo de negociação mais popular para venda.


Detalhes no Swing Trader System.


Futuros & amp; Estratégia de negociação de opções: o pacote S & amp; P Crusher v2.


Este pacote utiliza sete estratégias de negociação na tentativa de diversificar melhor sua conta. Este pacote utiliza rotas de swing, jornadas, condores de ferro e chamadas cobertas para aproveitar as várias condições do mercado. Este pacote é negociado em tamanhos de unidades de US $ 30.000 e foi lançado ao público em outubro de 2016. Visite a página do produto S & amp; P Crusher para ver os resultados testados com base em relatórios de tradição.


Detalhes sobre o S & amp; P Crusher.


Cobrindo os Essentials of Automated Trading System Design.


Vários sistemas de negociação algorítmica estão disponíveis.


Escolha de um dos nossos sistemas de negociação e ndash; The Swing Trader ou o S & amp; P Crusher. Cada página mostra a lista de comércio completo, incluindo otimização de postagem, resultados avançados. Estes sistemas de negociação informatizados de caixa preta são totalmente automatizados para gerar alfa enquanto tentam minimizar o risco.


Algoritmos de negociação múltipla trabalhando juntos.


Nossa metodologia de troca de quantias nos utiliza empregando várias estratégias de negociação de algo para diversificar melhor sua conta de negociação de automóveis. Saiba mais visitando nossa página de metodologia de design de estratégias comerciais.


Negociações durante Bear & amp; Bull Markets.


Em nossa opinião, a chave para o desenvolvimento de um sistema de negociação algorítmico que realmente funciona, é dar conta de múltiplas condições de mercado. A qualquer momento, o mercado poderia passar de um mercado de touro para urso. Ao assumir uma posição agnóstica de direção do mercado, estamos tentando superar em Bull e amp; Condições do mercado de urso.


Sistemas de negociação totalmente automatizados.


Você pode negociar automaticamente nosso software algorítmico usando um corretor de auto-execução (com os melhores esforços). Temos vários corretores para você escolher. Remova decisões emocionais baseadas em sua negociação usando nosso sistema de negociação automatizado.


O Algorithmic Trading funciona?


Acompanhe o progresso diário de nossos algoritmos de negociação quantitativos com o aplicativo intermediário OEC. Você também receberá declarações diárias da firma de compensação registrada da NFA. Você pode comparar cada uma das suas negociações com a lista comercial que publicamos no final de cada dia. Os exemplos completos de negociação algorítmica são publicados para todos verem. A lista de comércio completo pode ser vista visitando a página de negociação algorítmica para o sistema que você está negociando. Deseja ver algumas declarações das contas ao vivo? Visite os retornos ao vivo e amp; página de declarações.


Estratégias de negociação múltiplas.


Nossos sistemas de negociação quantitativos têm expectativas diferentes com base nos algoritmos de previsão empregados. Nossos Sistemas Automatizados de Negociação colocam negociações swing, day trade, condors de ferro e amp; chamadas cobertas. Essas estratégias 100% Quant são baseadas puramente em indicadores técnicos e algoritmos de reconhecimento de padrões.


Nosso software de negociação automatizado ajuda a remover suas emoções da negociação.


Algoritmos de negociação múltipla são negociados como parte de um sistema de comércio algorítmico maior.


Cada estratégia de negociação algorítmica oferecida possui vários pontos fortes e fracos. Seus pontos fortes e fracos são identificados com base em três estados de mercado potenciais: Strong Up, Sideways & amp; Down movendo mercados. A estratégia de negociação do condor de ferro supera os mercados de tendências laterais e ascendentes, enquanto o algoritmo de notas de tesouraria se destaca em mercados em movimento descendente. Com base nos testes de back-testing, espera-se que o algoritmo de momentum funcione bem durante os mercados em movimento. Marque a seguinte coleção de vídeos, onde cada algoritmo de negociação oferecido é revisado pelo desenvolvedor principal. Os pontos fortes de cada troco comercial são revisados ​​juntamente com os fracos daqueles.


Diversos tipos de estratégias de negociação são usados ​​em nosso software de negociação automatizado.


Negociações diárias são inseridas & amp; saíram no mesmo dia, enquanto os negócios de balanço terão um comércio de longo prazo com base nas expectativas para o S & amp; P 500 a tendência maior ou menor no termo intermediário. As negociações de opções são colocadas nas opções S & P 500 Weekly em futuros, geralmente entrando em uma segunda-feira e mantendo até a expiração de sexta-feira.


Estratégias de negociação Swing.


As seguintes Estratégias de Negociação Swing colocam negociações de swing direcional no S & amp; P 500 Emini Futures (ES) e no Ten Year Note (TY). Eles são usados ​​em ambos os sistemas de negociação automatizados que oferecemos para aproveitar as tendências de longo prazo que nossos algoritmos de previsão de mercado esperam.


Futures Swing Trading Strategy # 1: Momentum Swing Trading Algorithm.


A Estratégia de Negociação do Momentum Swing coloca negociações de swing no Emini S & amp; P Futures, aproveitando as condições do mercado que sugerem que um termo intermediário se mova mais alto. Este algoritmo de negociação é usado em ambos os nossos sistemas de negociação automatizados: o S & amp; P Crusher v2 & amp; O Swing Trader.


Futures Swing Trading Strategy # 2: Algoritmo de dez anos de Tesouro.


A Estratégia de Negociação do Tesouro (TY) coloca negociações de swing na Nota de dez anos (TY). Uma vez que o TY normalmente se move inverso para os mercados mais amplos, esta estratégia cria um comércio de swing que é semelhante ao curto-circuito do S & amp; P 500. Este T-Note algo tem expectativas positivas para condições de mercado em baixa. Este algoritmo de negociação é usado em ambos os nossos sistemas de negociação automatizados: o S & amp; P Crusher v2 & amp; O Swing Trader.


Estratégias de negociação diária.


No dia seguinte, as estratégias de negociação colocam negociações diárias no S & amp; P 500 Emini Futures (ES). Eles quase sempre entram em negociações durante os primeiros 20 minutos após a abertura dos mercados de ações e sairão antes do fechamento dos mercados. Paradas apertadas são utilizadas em todos os momentos.


Futures Day Trading Strategy # 1: Day Trading Short Algorithm.


A Estratégia de Negociação de Curto Prazo coloca negociações diárias no Emini S & amp; P Futures quando o mercado mostra fraqueza pela manhã (prefere uma grande diferença). Esta estratégia de negociação é utilizada no sistema de negociação automatizado S & amp; P Crusher v2.


Futures Day Trading Strategy # 2: Algoritmo de negociação Day Breakout.


A estratégia de negociação Breakout Day coloca negócios diários nos Emini-S & P Futures quando o mercado mostra força na parte da manhã. Esta estratégia de negociação de futuros é utilizada no sistema de negociação automatizado S & amp; P Crusher v2.


Futures Day Trading Strategy # 3: Morning Gap Day Trading Algorithm.


A Estratégia de Negociação do Morning Gap Day coloca transações de dia curtas nos Emini S & amp; P Futures quando o mercado tem uma grande lacuna, seguido por um curto período de fraqueza. Esta estratégia de negociação é utilizada no sistema de negociação automatizado S & amp; P Crusher v2.


Estratégias de negociação de opções.


As seguintes estratégias de negociação de opções coletam premium nas opções semanais S & amp; P 500 Emini (ES). Eles são usados ​​em nosso S & amp; P Crusher v2 para aproveitar de lado, baixo e amp; up moving market conditions. Um benefício para as opções de negociação com nossas estratégias de negociação algorítmica é que eles são suportados em um ambiente de negociação automatizado usando um dos corretores de auto-execução.


Estratégia de Negociação de Opções nº 1: Algoritmo de Negociação Ferro Condor.


A Estratégia de Negociação de Opções de Condor de Ferro é perfeita para o indivíduo que quer uma taxa de vitoria comercial mais vendida por devolução ou que simplesmente quer receber prémio no S & amp; P 500 Emini Futures vendendo Iron Condors. Quando nossos algoritmos esperam uma condição de mercado à margem ou para cima, este sistema criará um comércio Iron Condor. Esta estratégia é usada em um dos nossos Sistemas Automatizados de Negociação: The S & amp; P Crusher v2.


Estratégia de Negociação de Opções # 2: Algoritmo de Opções de Chamadas Cobertas.


A Estratégia de Negociação de Opções de Chamada Coberta se vende de chamadas cobertas de dinheiro contra os algoritmos de momentum Long ES swing trades, para coletar premium e ajudar a minimizar as perdas se o mercado se mover contra nossa posição de algoritmo de momentum. Quando negociado com o Momentum Swing Trading Algorithm - como é o caso no S & amp; P Crusher & amp; amp; ES / TY Futures Trading Systems, isso cria uma posição de chamada coberta. Quando negociados no Bearish Trader Trading System, as chamadas são vendidas sem serem cobertas e, portanto, são nulas. Em ambos os casos & ndash; como um suporte ao longo do algoritmo & ndash; Ele funciona bem em condições de mercado de lado e para baixo. Esta estratégia é usada em um dos nossos Sistemas Automatizados de Negociação: The S & amp; P Crusher v2.


Embora cada uma dessas estratégias de negociação possa ser negociada sozinha, elas são negociadas melhor em uma coleção mais ampla de algoritmos de negociação e ndash; como visto em um dos nossos Sistemas Automatizados de Negociação, como The Swing Trader.


Algoritmos de negociação que realmente funcionam?


Esta série de vídeos de negociação algorítmica é feita para que nossos clientes possam ver os detalhes de cada comércio semanalmente. Assista a cada um dos seguintes vídeos de negociação algorítmica para ver em tempo real, como nossos algoritmos de negociação funcionam. Sinta-se livre para visitar nossos comentários e ampères de AlgorithmicTrading; Página de imprensa para ver o que os outros estão falando sobre nós.


Inscrição na newsletter.


Obtenha atualizações de desempenho da AlgorithmicTrading juntando-se a nossa newsletter.


O que separa o comércio algorítmico de outras técnicas técnicas de negociação?


Hoje em dia, parece que todos têm uma opinião sobre as técnicas de negociação técnica. Cabeça e amp; Padrões de ombros, MACD Bullish Crosses, VWAP Divergences, a lista continua e continua. Nesses blogs de vídeo, nosso engenheiro de design líder analisa alguns exemplos de estratégias de negociação encontradas on-line. Ele toma suas Dicas de negociação, codifica e executa um teste de back-back simples para ver o quão eficaz eles realmente são. Depois de analisar seus resultados iniciais, ele otimiza o código para ver se uma abordagem quantitativa para negociação pode melhorar as descobertas iniciais. Se você é novo na negociação algorítmica, esses blogs de vídeo serão bastante interessantes. Nosso designer utiliza máquinas de estados finitos para codificar estas dicas comerciais básicas. Como o Algorithmic Trading é diferente do comércio técnico tradicional? Simplificando, Algorithmic Trading exige precisão e dá uma janela em um potencial de algoritmos com base em back-testing que tem limitações.


Procurando por Tutorial de Negociação Algorítmica Gratuita e amp; Como fazer vídeos?


Assista múltiplas apresentações de vídeo educacional por nosso designer principal em negociação algorítmica para incluir um vídeo que cobre nossa Metodologia de Design de Quant Trading e um Tutorial de Negociação Algorítmica. Esses vídeos de estratégia comercial fornecem exemplos de codificação de algoritmos de negociação e apresentamos a nossa abordagem de negociação de mercados usando análise quantitativa. Nesses vídeos, você verá muitas razões pelas quais a negociação automática está decolando para incluir ajudar a remover suas emoções da negociação. Visite nossa página de Vídeos de Comércio Educacional para ver uma lista completa de mídia educacional.


Comece a usar um dos nossos sistemas de negociação automatizada hoje.


Don & rsquo; T saudades. Junte-se aos que já estão negociando com AlgorithmicTrading. Comece hoje com um dos nossos pacotes de negociação algorítmica.


Várias opções de Execução de Comércio Automatizado estão disponíveis.


Nossos algoritmos de negociação podem ser executados automaticamente usando um dos corretores de auto-execução registrados da NFA (com os melhores esforços) ou podem ser comercializados em seu próprio PC usando MultiCharts ou Tradestation.


O FOX Group é uma empresa de corretagem independente que se encontra no icônico edifício da Câmara de Comércio de Chicago, no coração do distrito financeiro da cidade. Eles estão registrados no NFA e são capazes de executar automaticamente nossos algoritmos com os melhores esforços.


Interactive brokers é um corretor registrado NFA que pode executar automaticamente nossos algoritmos com os melhores esforços. Além disso, eles apóiam clientes canadenses.


Se você preferir executar os algoritmos em seu próprio PC, o MultiCharts é a plataforma preferencial de software de negociação para execução automática. Oferece benefícios consideráveis ​​aos comerciantes e oferece vantagens significativas em relação às plataformas concorrentes. Ele vem com gráficos de alta definição, suporte para mais de 20 feeds de dados e mais de 10 corretores, testes dinâmicos de estratégia de nível de portfólio, suporte EasyLanguage, relatórios interativos de desempenho, otimização genética, scanner de mercado e repetição de dados.


O TradeStation é mais conhecido pelo software de análise e plataforma de negociação eletrônica que fornece ao comerciante ativo e certos mercados de comerciantes institucionais que permitem aos clientes projetar, testar, otimizar, monitorar e automatizar suas próprias ações personalizadas, opções e opções; estratégias de negociação de futuros. Tradestation é outra opção para indivíduos que desejam negociar automaticamente nossos algoritmos em seu próprio PC.


Fundamentos do comércio algorítmico: 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 em caixa preta ou simplesmente algo-trading) é o processo de uso de computadores programados para seguir um conjunto definido de instruções para colocar um comércio para gerar lucros a uma velocidade e freqüência impossíveis para um comerciante humano. Os conjuntos definidos de regras são baseados em tempo, preço, quantidade ou qualquer modelo matemático. Além das oportunidades de lucro para o comerciante, o algo-trading torna os mercados mais líquidos e torna a negociação mais sistemática descartando impactos emocionais humanos nas atividades comerciais. (Para mais, consulte Picking the Right Algorithmic Trading Software.)


Suponha que um comerciante siga esses critérios de comércio simples:


Compre 50 ações de uma ação quando sua média móvel de 50 dias excede a média móvel de 200 dias. Vende ações da ação quando sua média móvel de 50 dias está 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 monitorará automaticamente o preço das ações (e os indicadores de média móvel) e colocará as ordens de compra e venda quando as condições definidas forem atendidas. O comerciante não precisa mais manter um relógio para preços e gráficos ao vivo, ou colocar as ordens manualmente. O sistema de negociação algorítmica automaticamente faz isso para ele, identificando corretamente a oportunidade comercial. (Para mais informações sobre as médias móveis, consulte Médias móveis simples, faça as tendências se destacarem.)


[Se você quiser saber mais sobre as estratégias comprovadas e pontuais que podem eventualmente ser trabalhadas em um sistema de comércio alorítico, confira o Curso de Torneio de Dia de Torneio da Invastopedia Academy. ]


Benefícios da negociação algorítmica.


A Algo-trading oferece os seguintes benefícios:


Negociações executadas com os melhores preços Posicionamento instantâneo e preciso da ordem comercial (com altas chances de execução nos níveis desejados) Negociações cronometradas corretamente e instantaneamente, para evitar mudanças de preços significativas Custos de transação reduzidos (veja o exemplo de falta de implementação abaixo) Verificações automatizadas simultâneas em múltiplos condições de mercado Reduziu o risco de erros manuais na colocação dos negócios Backtest o algoritmo, com base nos dados históricos e em tempo real disponíveis Reduzida a possibilidade de erros por comerciantes humanos com base em fatores emocionais e psicológicos.


A maior parte do dia-a-dia é a negociação de alta freqüência (HFT), que tenta capitalizar a colocação de um grande número de pedidos em velocidades muito rápidas em múltiplos mercados e múltiplos parâmetros de decisão, com base em instruções pré-programadas. (Para obter mais informações sobre o comércio de alta freqüência, consulte Estratégias e Segredos de Empresas de Negociação de Alta Freqüência (HFT).)


O Algo-trading é usado em muitas formas de atividades de comércio e investimento, incluindo:


Investidores de médio a longo prazo ou empresas de compra (fundos de pensão, fundos de investimento, companhias de seguros) que adquirem ações em grandes quantidades, mas não querem influenciar os preços das ações com investimentos discretos e de grande porte. Os comerciantes de curto prazo e os participantes do lado da venda (fabricantes de mercado, especuladores e arbitragentes) se beneficiam da execução comercial automatizada; Além disso, ajudas de algo-trading na criação de liquidez suficiente para os vendedores no mercado. Os comerciantes sistemáticos (seguidores de tendências, comerciantes de pares, hedge funds, etc.) acham muito mais eficiente programar suas regras comerciais e permitir que o programa seja comercializado automaticamente.


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


Estratégias de negociação algorítmica.


Qualquer estratégia de negociação algorítmica exige uma oportunidade identificada que seja rentável em termos de melhoria de ganhos ou redução de custos. As seguintes são estratégias de negociação comuns usadas em algo-trading:


As estratégias de negociação algorítmicas mais comuns seguem as tendências em médias móveis, fuga de canais, movimentos no nível de preços e indicadores técnicos relacionados. Estas são as estratégias mais fáceis e simples de implementar através de negociação algorítmica porque essas estratégias não envolvem fazer previsões ou previsões de preços. Os negócios são iniciados com base na ocorrência de tendências desejáveis, que são fáceis e direitas de implementar através 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 as estratégias de negociação de tendências, consulte: Estratégias simples para capitalizar as tendências.)


Comprar um estoque cotado duplo a um preço mais baixo em um mercado e simultaneamente vendê-lo a um preço mais alto em outro mercado oferece o diferencial de preço como lucro ou arbitragem sem risco. A mesma operação pode ser replicada para ações versus instrumentos de futuros, pois os diferenciais de preços existem de tempos em tempos. Implementar um algoritmo para identificar esses diferenciais de preços e colocar as ordens permite oportunidades lucrativas de forma eficiente.


Os fundos do índice definiram períodos de reequilíbrio para que suas participações fossem compatíveis com seus respectivos índices de referência. Isso cria oportunidades rentáveis ​​para comerciantes algorítmicos, que capitalizam os negócios esperados que oferecem lucros de 20 a 80 pontos base, dependendo do número de ações no fundo do índice, apenas antes do reequilíbrio do fundo do índice. Essas 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 neutra do delta, que permitem a negociação de combinações de opções e sua segurança subjacente, onde os negócios são colocados para compensar deltas positivos e negativos, de modo que o portfólio delta 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 bem são um fenômeno temporário que retorna periodicamente ao seu valor médio. Identificar e definir uma faixa de preço e implementar algoritmos com base em isso permite que os negócios sejam colocados automaticamente quando o preço do recurso entra e sai do seu alcance definido.


A estratégia de preços médios ponderados por volume quebra uma grande ordem e libera pedaços menores determinados dinamicamente da ordem para o mercado usando perfis de volume histórico específicos de estoque. O objetivo é executar a ordem perto do preço médio ponderado do volume (VWAP), beneficiando assim o preço médio.


A estratégia de preço médio ponderado no tempo quebra uma grande ordem e libera dinamicamente determinados pedaços menores da ordem para o mercado usando intervalos de tempo uniformemente divididos entre o início e o fim do tempo. O objetivo é executar a ordem perto do preço médio entre os horários de início e término, minimizando assim o impacto no mercado.


Até que a ordem comercial seja totalmente preenchida, este algoritmo continua enviando ordens parciais, de acordo com o índice de participação definido e de acordo com o volume negociado nos mercados. A "estratégia de etapas" relacionada envia ordens a 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 os níveis definidos pelo usuário.


A estratégia de falta de implementação visa minimizar o custo de execução de uma ordem através da negociação do mercado em tempo real, economizando assim o custo da ordem e beneficiando do custo de oportunidade da execução atrasada. A estratégia aumentará a taxa de participação direcionada quando o preço das ações se mover de forma favorável e diminuí-lo quando o preço das ações se mover de forma adversa.


Existem algumas classes especiais de algoritmos que tentam identificar "acontecimentos" do outro lado. Esses "algoritmos de sniffing", usados, por exemplo, por um market maker market market têm a inteligência interna para identificar a existência de qualquer algoritmo no lado da compra de uma grande ordem. Essa detecção através de algoritmos ajudará o fabricante de mercado a identificar grandes oportunidades de ordem e permitir que ele se beneficie ao preencher os pedidos a um preço mais alto. Isso às vezes é identificado como front-running de alta tecnologia. (Para obter mais informações sobre negociação de alta freqüê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. São necessários os seguintes:


Conhecimento de programação de computador para programar a estratégia de negociação necessária, programadores contratados ou software de negociação pré-fabricado Conectividade de rede e acesso a plataformas de negociação para colocar os pedidos Acesso a feeds de dados de mercado que serão monitorados pelo algoritmo para oportunidades de colocar pedidos A capacidade e infra-estrutura para voltar a testar o sistema uma vez construído, antes de entrar em operação em mercados reais Dados históricos disponíveis para backtesting, dependendo da complexidade das regras implementadas no algoritmo.


Aqui está um exemplo abrangente: o Royal Dutch Shell (RDS) está listado na Amsterdam Stock Exchange (AEX) e London Stock Exchange (LSE). Vamos construir 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, seguido de ambas as trocas comerciais simultaneamente durante as próximas horas e depois de negociar apenas na LSE durante a última hora à medida que o AEX fecha .


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


Um programa de computador que pode ler os preços atuais do mercado Os feeds de preços de LSE e AEX A taxa de câmbio para a taxa de câmbio GBP-EUR Capacidade de colocação de pedidos que podem rotear a ordem para a troca correta do recurso Back-testing em feeds históricos de preços.


O programa de computador deve executar o seguinte:


Leia o preço de entrada do estoque RDS de ambas as bolsas 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 suficientemente grande (descontando os custos de corretagem) levando a uma oportunidade rentável, então coloque a compra ordem em troca de preços mais baixos e ordem de venda em troca de preços mais elevados Se as ordens forem executadas conforme desejado, o lucro de arbitragem seguirá.


Simples e fácil! No entanto, a prática de negociação algorítmica não é simples de manter e executar. Lembre-se, se você pode colocar um comércio gerado por algo, os outros participantes do mercado podem também. Conseqüentemente, os preços flutuam em milissegundos e até mesmo em microssegundos. No exemplo acima, o que acontece se o seu comércio de compras for executado, mas o comércio de vendas não acontece à medida que os preços de venda mudam quando o seu pedido atinge o mercado? Você vai acabar sentado com uma posição aberta, tornando sua estratégia de arbitragem inútil.


Existem riscos e desafios adicionais: por exemplo, riscos de falha do sistema, erros de conectividade de rede, atrasos de tempo entre ordens comerciais e execução e, o mais importante de tudo, algoritmos imperfeitos. O algoritmo mais complexo é o backtesting mais rigoroso antes de ser posto em ação.


The Bottom Line.


A análise quantitativa do desempenho de um algoritmo desempenha um papel importante e deve ser examinada criticamente. É excitante ir pela automação auxiliada por computadores com a noção de ganhar dinheiro sem esforço. Mas é preciso certificar-se de que o sistema está completamente testado e os limites exigidos são definidos. Os comerciantes analíticos devem considerar a aprendizagem de sistemas de programação e construção por conta própria, ter confiança em implementar as estratégias certas de forma infalível. O uso cauteloso eo teste completo de algo-trading podem criar oportunidades rentáveis. (Para mais informações, consulte Como codificar seu próprio robô Algo Trading.)


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 2013-dez-06 09:30:00 a 2013-dez-06 09:30:15, existem 8 transações para BITA com WAP igual a 30,21, volume de negócios 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 é de 2015 a 31 de dezembro, significa que queremos coletar dados no período de 2015-jul-01 a 2015-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 2011 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 \). If we split the time unit \(T\) equally into \(N\) smaller time intervals \(t\) with equal length, we have the sampling frequency \(N\) :


and realized volatility is defined as:


and the realized variance is accordingly defined as:


Please be noted here \(Q\) is observed price, not true price \(S\) .


Realized volatility (aka integrated volatility ) is a bias estimator of true volatility due to market microstructure effects. 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 2013-12-06 9:30AM to 2015-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_2013-12-06_2015-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, (2011), 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, (2012), 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 (2012). Options, Futures, and Other Derivatives, 8th Edition.


Ruey S. Tsay (2010). Analysis of Financial Time Series, 2nd Edition.


David Ruppert (2010). Statistics and Data Analysis for Financial Engineering, 1st Edition.


Alexios Ghalanos (2015). rugarch: Univariate GARCH models. R package version 1.3-6.


Dr. Ash Booth.


Data Scientist, Algo Trader, Machine Learning Aficionado.


A diferença entre o comércio automatizado, algorítmico e de alta frequência.


Ao dizer às pessoas que eu trabalho em sistemas de negociação automatizados e algorítmicos, uma resposta comum tende a ser:


Oh, esse material comercial de alta frequência? & # 8221;


E eu acho que é por causa do hype atual (principalmente negativo) em torno do comércio de alta freqüência. Uma resposta verdadeira à sua pergunta é, às vezes, nem sempre, & # 8221 ;. Para explicar, permitam-me revisar rapidamente o processo de negociação (por razões de brevidade, fico no ponto de vista do buy-side).


O diagrama acima mostra o processamento de uma ordem da decisão de investimento até a execução de uma negociação. Neste exemplo, o processo começa com a idéia de um analista que leva a uma decisão de negociação. A idéia é avaliada e aprovada pelo gerente de portfólio que gera instruções para comprar ou vender uma determinada quantidade de ativos # 8216; abc & # 8217 ;. A ordem é então transferida para um comerciante cujo trabalho é decidir a melhor abordagem / corretor para usar.


O acesso ao mercado direto (DMA) representa a capacidade do cliente de acessar a infra-estrutura de roteamento de pedidos dos corretores, permitindo que eles emitam suas ordens quase diretamente às trocas. O acesso patrocinado é um passo acima do DMA, tendem a ser latência ultra baixa, conexões diretas ao mercado. Nessa situação, o cliente usa sua própria infraestrutura, mas com o identificador comercial do corretor. O acesso patrocinado é (predominantemente) utilizado por clientes que exploram estratégias de negociação de alta freqüência.


A negociação algorítmica refere-se a estratégias de execução comercial que normalmente são usadas pelos gestores de fundos para comprar ou vender grandes quantidades de ativos. Eles visam minimizar o custo dessas transações sob certas restrições de risco e tempo. Esses sistemas seguem regras predefinidas para determinar como executar cada ordem. Muitas vezes, as pessoas pensam em esses sistemas como comprando baixo e vendendo alto. tomando decisões de investimento # 8211; mas este não é o caso. Os sistemas de negociação algorítmica são oferecidos por muitos corretores e simplesmente executam as ordens que são dadas. Seu trabalho é obter um bom preço (em comparação com vários benchmarks) e minimizar o impacto da negociação. Isso é feito cortando pedidos e reagindo dinamicamente a eventos de mercado.


Claro que existem algoritmos que lidam com a tomada de decisões de investimento e é aí que vem a negociação automatizada.


O comércio automatizado, muitas vezes confundido com o comércio algorítmico, é a automação completa do processo de negociação quantitativa. Assim, o comércio automatizado deve encapsular: modelagem quantitativa e rastreamento de indicadores para determinar a iniciação comercial e a liquidação; monitoramento do risco de carteira; bem como o comércio algorítmico. Este tipo de negociação tende a ser feito por fundos hedge quantitativos que usam algoritmos de execução de propriedade e comércio via DMA ou acesso patrocinado.


O comércio de alta freqüência (HFT) é um subconjunto de negociação automatizada. Aqui, as oportunidades são buscadas e aproveitadas em intervalos de tempo muito pequenos de milissegundos até horas. Algumas estratégias de alta frequência adotam um papel de tipo de criador de mercado, tentando manter uma posição relativamente neutra e provar liquidez (na maioria das vezes), aproveitando as discrepâncias de preços. Outras estratégias invocam métodos de análise de séries temporais, aprendizado de máquinas e inteligência artificial para prever movimentos e isolar tendências entre as massas de dados. Específicos da estratégia de lado, para HFT, monitorar o risco geral de inventário e incorporar essa informação em decisões de preços / negociação é sempre vital.


Apenas lembre-se, o comércio algorítmico deveria ter sido chamado de "execução algorítmica" # 8221 ;; O comércio automatizado faz o que diz na lata; e HFT é um tipo específico de negociação automatizada ultra-rápida.


Pós-navegação.


4 pensamentos sobre & ldquo; A diferença entre comércio automatizado, algorítmico e de alta frequência & rdquo;


Publicação muito útil! obrigado.


Na sua experiência, então, como classificaria esses três formatos comerciais em termos de latência comercial?


Bom post, útil.


Você pode elaborar a diferença entre o & # 8220; Automated Trading & # 8221; e HFT? Na sua definição, parece que a única diferença é o tamanho (nocional ou real?) Dos negócios?


Automated Trading Engine.


O TIGER tem o prazer de apresentar o serviço de desenvolvimento de software baseado em tarefas mais inovador. Muitos anos de resolução de desafios de desenvolvimento de software nos deram uma idéia para levar o serviço de desenvolvimento de software baseado em tarefas.


The unique features of our products are.


Implementação de entrega de tempo econômica Flexibilidade e personalização extremas Capacidades de integração ampla.


Execution Management System.


O ATE é uma ferramenta inestimável para o comerciante e os fundos do buy-side, que quer assumir o controle de um pedido. ATE oferece a possibilidade de negociar estratégias complexas em várias classes de ativos com diversos corretores diferentes em mercados em todo o mundo, o mecanismo de negociação automatizado TIGER é uma solução perfeita que permite negociar um número ilimitado de estratégias. Os sistemas de negociação automáticos da TIGER são construídos para velocidade, processa processos de grandes quantidades de dados gerados por algoritmos no mercado fragmentado de hoje.


Reconhecendo a necessidade de uma tecnologia inteiramente nova de tecnologia de negociação para atender a demanda por um sistema de negociação ultra-rápido, multi-corretor, equipe de desenvolvimento de sistemas de negociação montados pela TIGER e os recursos financeiros para desenvolver o TIGER ATE. A functionality-rich high frequency trading platform engineered from the ground up to address market requirements. Design e arquitetura centraram-se no fornecimento de desempenho, confiabilidade, flexibilidade e escalabilidade de alta velocidade exigidos pelos comerciantes atuais.

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

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