Tuesday 25 July 2017

Forex Trading Machine Rar


Forex Trading Machine Review Avi Frister039s Forex Trading Machine é essencialmente um pacote de ebook composto por três sistemas de negociação de forex rentáveis ​​que o autor usa para um grande sucesso e, o melhor de tudo, são todos orientados a preços, o que significa que nenhuma análise técnica é necessária. Parece impressionante, mas você pode realmente ser um comerciante de forex lucrativo usando apenas o preço como seu indicador principal. Bem, Avi Frister passou muitos anos estudando centenas de indicadores técnicos, sistemas e estratégias e, finalmente, chegou a esta conclusão exata, que o único indicador que você realmente A necessidade é o preço. O pacote de Forex Trading Machine de 180 páginas é basicamente o resultado de seus estudos e inclui três estratégias únicas que você pode usar para trocar trocas com sucesso. Então, quais são essas estratégias de negociação Bem, sem querer dar muito longe, eles são os seguintes: 1) Forex Cash Cow Strategy Esta é uma ótima estratégia para comerciantes menos experientes e aqueles que têm empregos em tempo integral, porque isso não requer que você seja Constantemente assistindo o mercado o dia todo e é completamente mecânico. Basicamente, requer alguns minutos do seu tempo no final do dia de negociação para procurar possíveis configurações e, em seguida, coloque suas ordens se os critérios forem atendidos. Esta é mais uma estratégia a longo prazo, pois você terá que ser paciente e aguardar entradas adequadas (você só pode obter um punhado de configurações por mês), mas quando você obtém boas configurações, os Estados Unidos provaram ser um Método muito lucrativo, obtendo lucro de 100 pips, e é bastante baixo risco também. 2) Estratégia Forex Runner Se o dia de negociação for mais sua coisa, então você pode achar esse método (e o próximo) mais adequado. Este é outro sistema mecânico que novamente não usa indicadores técnicos, mas essa estratégia produz muito mais configurações. Na verdade, eu realmente tive um grande sucesso usando esse método, apenas negociando o par GBPUSD durante o dia e, embora não seja perfeito (o que é sistema), é um sistema lucrativo porque ele mantém suas perdas no mínimo e visa produzir um lucro muito maior com cada um comércio. 3) Forex Flip And Go Strategy Outro método de troca do dia, esta é indiscutivelmente minha estratégia favorita, pois visa produzir ganhos consistentes de cerca de 40 pips e limita suas perdas a cerca de 15 pontos ou menos. Ele se concentra no par EURUSD e gera lucros, tomando uma fatia da faixa de negociação diária desse par e aproveita o comportamento único do par039s. Então, para concluir esta revisão, devo afirmar que este pacote de ebook que detalha três estratégias de negociação forex lucrativas, é claro que não é o Santo Graal que tantos estão procurando (isso não existe) e você ainda sofrerá perdas ocasionais, qualquer método que você use. No entanto, a longo prazo, com as perdas deliberadamente mantidas pequenas, cada uma dessas estratégias deve produzir lucros consistentes ao longo do tempo, e o melhor é que você não precisa usar nenhuma análise técnica. O preço é o único indicador que você precisará. Em geral, posso recomendar este produto, pois cada estratégia é fácil de seguir e implementar e, o mais importante, é capaz de produzir lucros regulares. Sinais de Forex automatizados: serviço de negociação automatizado gratuito que permite trocar os sinais de mais de 100.000 provedores de sinais diferentes. Uma vez que você escolheu seus provedores, os sinais são então executados automaticamente em sua conta. Contas de demonstração gratuitas estão disponíveis para fins de teste. Este serviço fornece sinais de negociação ao vivo nos prazos diários, semanais e mensais de mais de 320.000 símbolos, incluindo todos os pares de divisas, bem como ações, índices, moedas e commodities. Uma versão gratuita de 2 semanas está disponível por tempo limitado. Avisos recentes Isenção de responsabilidade As informações contidas neste site devem ser usadas apenas para fins educacionais e não constituem conselhos financeiros. O comércio de Forex tem um risco substancial e pode não ser adequado para todos. Se usar alavancagem, você pode perder mais do que o depósito inicial. Divulgação de ganhos O ​​autor deste site pode ter uma relação de afiliado com certas empresas, e pode receber uma comissão para vincular a determinados produtos que subsequentemente resultam em uma venda. Comprei uma boa Cash Machine EA na internet que chegou como um documento RAR. Depois eu tentei extrair isso para meu metatrader pessoal, quatro fichas do Cash Machine EA, que não vai preencher. Pode haver porque ambiente eu tenho que alterar para permitir esse tipo de documento. Depois de eu tentar, para reduzir, bem como inserir isso não levaria um bom documento exe. O mesmo aconteceu com um sinal. SISTEMA OPERATIVO é realmente XP Clique aqui para baixar uma NOVA Ferramenta e estratégia de negociação GRATUITAMENTE No caso de it8217s um bom documento exe depois disso, você deve clicar duas vezes, isso também pode configurar os documentos reais, ao longo da configuração, você pode ser Solicitou a rota MT4 real No caso de esta ser uma edição do documento agachado com um. Rar fechando, portanto, you8217ll precisa do winzip. Rar edição para descompactar isso. Simplesmente especulando neste momento em relação à sua condição. Consultas populares: indicador forex tpl torrent Estatisticamente Aprendizagem de máquina de som para negociação algorítmica de instrumentos financeiros Avaliações recentes Atualmente, clientes na China que estão negociando em Bitcoin têm uma vantagem maior. Isso ocorre porque o BTC China começou a aceitar depósitos bancários para facilitar a transação. Isso é possível usando a conta bancária corporativa que dá presentes aos clientes. Os clientes comprarão facilmente e trocarão bitcoins diretamente fazendo seus depósitos na conta comercial. Nos dias anteriores, a BTC China considerou esse processo inválido, mas depois de uma análise cuidadosa, a empresa mudou sua posição, fazendo com que os comerciantes comprassem fazendo depósitos diretos. Uma vez retratado como o melhor e maior volume de negócios em termos de Bitcoin, a BTC China encontrou uma nova maneira para os clientes fazerem seus depósitos. Com essa aceitação, o valor dos bitcoins aumentaria porque muitas pessoas podem trocar facilmente. Leia o resto desta entrada raquo Encontrar o corretor certo é uma das etapas mais importantes no processo de investimento. Às vezes, no entanto, mesmo a devida diligência não é suficiente para evitar profissionais não éticos ou ineptos. A busca de avaliações positivas e a evidência de um esforço para responder aos comentários negativos são duas etapas altamente recomendadas no processo de triagem padrão. Também é importante avaliar a localização do corretor, saber mais sobre a plataforma que eles estão usando e determinar se o provedor está ou não registrado com o registrador nacional apropriado. É importante notar, no entanto, que, mesmo depois de ter feito todas essas coisas, ainda existe a chance de seu corretor não estar certo para você. Leia o resto desta entrada. O raquo Bitcoin é, é claro, um sistema de pagamento digital e de ponto a ponto que foi introduzido em 2009 como software de código aberto. Faz uso da criptografia no controle da criação e transferência de dinheiro. It8217s teve um forte ano em 2013, com seu preço de espreitadela atingindo a marca de mil e recebendo uma grande atenção. 2014 é provável que seja justo até melhor para bitcoin e aqui por favor. Seu sucesso depende em grande parte de quantos comerciantes estão realmente aceitando isso para pagamentos. Em 2013, observamos mais e mais comerciantes de todo o mundo aceitando o uso de bitcoin. Aqui está apenas um punhado de coisas que você pode fazer com seu bitcoin. Leia o resto desta entrada raquo Se você está interessado em investir em moedas emergentes, talvez isso ajude você. A maioria dos comerciantes de Forex geralmente vem com oito grandes moedas. Estes são USD, EUR, GBP, JPY, CAD, CHF e AUD. Mas para as maiores recompensas, eles vão com moedas emergentes. As moedas emergentes são basicamente aquelas que estão associadas a países que são considerados mercados emergentes. Esses países estão em transição para a economia transparente e aberta. Esta categorização se aplica a grandes potências, como o Brasil e a China, como acontece com países pequenos. Leia o resto desta entrada raquo

Sunday 23 July 2017

Fx Trading System Architecture


Sistemas de negociação: Design do sistema - Parte 1 13 A seção anterior deste tutorial analisou os elementos que compõem um sistema de negociação e discutiu as vantagens e desvantagens de usar esse sistema em um ambiente comercial real. Nesta seção, construímos esse conhecimento examinando quais mercados são especialmente adequados para o comércio de sistemas. Em seguida, analisaremos mais detalhadamente os diferentes gêneros dos sistemas de negociação. Negociação em Mercados de Mercados de Mercados Diferentes O mercado de ações é provavelmente o mercado mais comum para o comércio, especialmente entre os novatos. Nesta arena, grandes jogadores como Warren Buffett e Merrill Lynch dominam, e as estratégias tradicionais de investimento em crescimento e valor são, de longe, as mais comuns. No entanto, muitas instituições investiram significativamente na concepção, desenvolvimento e implementação de sistemas de negociação. Investidores individuais estão se juntando a essa tendência, embora lentamente. Aqui estão alguns fatores importantes a ter em mente ao usar sistemas de negociação em mercados de ações: 13 A grande quantidade de ações disponíveis permite que os comerciantes testem sistemas em vários tipos de ações diferentes - tudo, desde estoques extraterrestre extremamente voláteis (OTC) até Chips azuis não voláteis. A eficácia dos sistemas de negociação pode ser limitada pela baixa liquidez de algumas ações, especialmente questões de OTC e folhas cor-de-rosa. As comissões podem comer em lucros gerados por negócios bem-sucedidos e podem aumentar as perdas. As ações de folha de balcão OTC e rosa geralmente incorrem em taxas de comissão adicionais. Os principais sistemas de negociação utilizados são aqueles que procuram valor - isto é, sistemas que usam parâmetros diferentes para determinar se uma segurança está subavaliada em comparação com o desempenho passado, seus pares ou o mercado em geral. Mercado de câmbio O mercado de câmbio, ou forex. É o maior e mais líquido mercado do mundo. Os governos mundiais, bancos e outras grandes instituições trocam trilhões de dólares no mercado forex todos os dias. A maioria dos comerciantes institucionais no forex conta com sistemas de negociação. O mesmo vale para os indivíduos no forex, mas alguns comerciais com base em relatórios econômicos ou pagamentos de juros. Há alguns fatores importantes a ter em mente ao usar sistemas de negociação no mercado cambial: a liquidez neste mercado - devido ao enorme volume - Torna os sistemas de negociação mais precisos e eficazes. Não há comissões neste mercado, apenas se espalha. Portanto, é muito mais fácil fazer muitas transações sem aumentar os custos. Em comparação com o valor das ações ou commodities disponíveis, o número de moedas para o comércio é limitado. Mas, devido à disponibilidade de pares de moedas exóticas - ou seja, moedas de países mais pequenos - o alcance em termos de volatilidade não é necessariamente limitado. Os principais sistemas de negociação utilizados no forex são aqueles que seguem as tendências (um ditado popular no mercado é a tendência é o seu amigo), ou sistemas que compram ou vendem em breakouts. Isso ocorre porque os indicadores econômicos geralmente causam grandes movimentos de preços ao mesmo tempo. Futures Equity, Forex e mercados de commodities oferecem negociação de futuros. Este é um veículo popular para o comércio de sistemas devido ao maior valor de alavancagem disponível e ao aumento da liquidez e da volatilidade. No entanto, esses fatores podem cortar as duas formas: podem amplificar seus ganhos ou amplificar suas perdas. Por esta razão, o uso de futuros é geralmente reservado para comerciantes avançados de sistemas individuais e institucionais. Isso ocorre porque os sistemas de negociação capazes de capitalizar o mercado de futuros exigem uma personalização muito maior, usam indicadores mais avançados e levam muito mais tempo para desenvolver. Então, o que é melhor é o investidor individual para decidir qual mercado é mais adequado ao comércio de sistemas - cada um tem suas próprias vantagens e desvantagens. A maioria das pessoas está mais familiarizada com os mercados de ações, e essa familiaridade facilita o desenvolvimento de um sistema de negociação. No entanto, forex é normalmente pensado para ser a plataforma superior para operar sistemas de negociação - especialmente entre os comerciantes mais experientes. Além disso, se um comerciante decide capitalizar o aumento de alavancagem e volatilidade, a alternativa de futuros está sempre aberta. Em última análise, a escolha está nas mãos do desenvolvedor do sistema. Tipos de Sistemas de Negociação Trend-Following Systems O método mais comum de negociação de sistema é o sistema de seguimento de tendência. Na sua forma mais fundamental, este sistema simplesmente espera um movimento de preço significativo, então compra ou vende nessa direção. Este tipo de bancos de sistemas na esperança de que esses movimentos de preços mantenham a tendência. Sistemas médios móveis Usado com freqüência na análise técnica. Uma média móvel é um indicador que mostra simplesmente o preço médio de uma ação em um período de tempo. A essência das tendências é derivada dessa medida. A maneira mais comum de determinar a entrada e a saída é um cruzamento. A lógica por trás disso é simples: uma nova tendência é estabelecida quando o preço cai acima ou abaixo da média do preço histórico (tendência). Aqui está um gráfico que traça tanto o preço (linha azul) quanto o Mestre de 20 dias (linha vermelha) da IBM: Breakout Systems O conceito fundamental por trás desse tipo de sistema é semelhante ao de um sistema de média móvel. A idéia é que quando um novo alto ou baixo é estabelecido, o movimento do preço provavelmente continuará na direção do breakout. Um indicador que pode ser usado na determinação de breakouts é uma simples sobreposição da Bollinger Band. Bandas de Bollinger mostram médias de preços altos e baixos, e os breakouts ocorrem quando o preço encontra as bordas das bandas. Aqui está um gráfico que traça o preço (linha azul) e as Bandas de Bollinger (linhas cinza) da Microsoft: Desvantagens dos sistemas de tendências: Requisição de decisão empírica necessária - Ao determinar as tendências, há sempre um elemento empírico a considerar: a duração de A tendência histórica. Por exemplo, a média móvel pode ser nos últimos 20 dias ou nos últimos cinco anos, então o desenvolvedor deve determinar qual é o melhor para o sistema. Outros fatores a serem determinados são os altos e baixos médios em sistemas de breakout. Lagging Nature - As médias móveis e os sistemas de breakout estarão sempre atrasados. Em outras palavras, eles nunca podem atingir o topo ou a parte inferior de uma tendência. Isso inevitavelmente resulta em uma perda de lucros potenciais, o que às vezes pode ser significativo. Efeito Whipsaw - Entre as forças de mercado que são prejudiciais ao sucesso dos sistemas de tendência, este é um dos mais comuns. O efeito whipsaw ocorre quando a média móvel gera um sinal falso - isto é, quando a média cai apenas para o alcance, de repente, reverte a direção. Isso pode levar a perdas maciças, a menos que sejam utilizadas efetivas perdas e técnicas de gerenciamento de risco. Sideways Markets - Os sistemas que seguem a tendência são, por natureza, capazes de ganhar dinheiro apenas em mercados que realmente fazem tendências. No entanto, os mercados também se movem para os lados. Permanecendo dentro de um certo intervalo por um longo período de tempo. Pode ocorrer volatilidade extrema - Ocasionalmente, os sistemas que seguem a tendência podem experimentar alguma volatilidade extrema, mas o comerciante deve manter seu sistema. A incapacidade de fazê-lo resultará em falhas garantidas. Countertrend Systems Basicamente, o objetivo com o sistema contra-tendência é comprar no menor baixo e vender ao mais alto. A principal diferença entre este e o sistema de tendência seguinte é que o sistema contra-tendência não é auto-corretivo. Em outras palavras, não há tempo definido para sair de posições, e isso resulta em um potencial de downside ilimitado. Tipos de sistemas contratrarrescentes Muitos tipos diferentes de sistemas são considerados sistemas de contra-tendência. A idéia aqui é comprar quando o impulso em uma direção começa a desaparecer. Isso geralmente é calculado usando osciladores. Por exemplo, um sinal pode ser gerado quando os estocásticos ou outros indicadores de força relativa caem abaixo de certos pontos. Existem outros tipos de sistemas de negociação contra tendência, mas todos eles compartilham o mesmo objetivo fundamental - comprar baixo e vender alto. Desvantagens dos Sistemas de Contra-Tendência: Requisição de Decisão Míbrica - Por exemplo, um dos fatores que o desenvolvedor do sistema deve decidir é os pontos nos quais os indicadores de força relativa se desvanecem. Pode ocorrer volatilidade extrema - esses sistemas também podem experimentar alguma volatilidade extrema e uma incapacidade de manter o sistema apesar dessa volatilidade resultará em falhas garantidas. Desvantagem ilimitada - Como mencionado anteriormente, há potencial de downside ilimitado porque o sistema não é auto-corretivo (não há tempo definido para sair de posições). Conclusão Os principais mercados para os quais os sistemas de negociação são adequados são os mercados de ações, divisas e futuros. Cada um desses mercados tem suas vantagens e desvantagens. Os dois principais gêneros dos sistemas de negociação são os sistemas de tendência e de contra-tendência. Apesar de suas diferenças, ambos os tipos de sistemas, em seus estágios de desenvolvimento, requerem uma tomada de decisão empírica por parte do desenvolvedor. Além disso, esses sistemas estão sujeitos a extrema volatilidade e isso pode exigir algum vigor - é essencial que o comerciante do sistema fique com seu sistema durante esses tempos. Na próxima parcela, considere bem como projetar um sistema comercial e discutir alguns dos softwares que os comerciantes do sistema usam para facilitar sua vida. Sistemas de negociação: projetando seu sistema - Parte 2 Arquitetura de piso de arquitetura Comércio de piso Arquitetura Visão geral do executivo O aumento da concorrência, o maior volume de dados do mercado e as novas demandas regulatórias são algumas das forças motrizes por trás das mudanças na indústria. As empresas estão tentando manter sua vantagem competitiva mudando constantemente suas estratégias de negociação e aumentando a velocidade de negociação. Uma arquitetura viável deve incluir as tecnologias mais recentes dos domínios de rede e de aplicativos. Tem que ser modular para fornecer um caminho gerenciável para evoluir cada componente com uma interrupção mínima no sistema geral. Portanto, a arquitetura proposta por este artigo é baseada em uma estrutura de serviços. Examinamos serviços como mensagens de latência ultra-baixa, monitoramento de latência, multicast, computação, armazenamento, virtualização de dados e aplicativos, resiliência comercial, mobilidade comercial e thin client. A solução para os requisitos complexos da plataforma de negociação da próxima geração deve ser construída com uma mentalidade holística, cruzando os limites dos silos tradicionais, como negócios e tecnologia ou aplicativos e redes. Este documento, principal objetivo, é fornecer diretrizes para a construção de uma plataforma de negociação de latência ultra baixa, ao mesmo tempo em que otimizamos a taxa de transferência e taxa de mensagens em bruto, tanto para os dados do mercado quanto para os pedidos de negociação FIX. Para conseguir isso, estamos propondo as seguintes tecnologias de redução de latência: conectividade entre conexões de alta velocidade ou 10 Gbps para o cluster de negociação Buscador de mensagens de alta velocidade Aceleração de aplicativos via RDMA sem re-código de aplicativos Monitoramento de latência em tempo real e re-direção de Tráfego comercial para o caminho com menor latência Tendências e desafios do setor As arquiteturas de negociação de próxima geração têm que responder ao aumento das demandas de velocidade, volume e eficiência. Por exemplo, espera-se que o volume de opções de dados de mercado dobre após a introdução das opções de negociação de penny em 2007. Também há demandas regulatórias para a melhor execução, que exigem o manuseio de atualizações de preços a taxas que se aproximam de 1 msgs. Para trocas. Eles também exigem visibilidade sobre o frescor dos dados e prova de que o cliente obteve a melhor execução possível. No curto prazo, a velocidade de negociação e inovação são diferenciadores-chave. Um número crescente de negociações é tratada por aplicativos de negociação algorítmica colocados o mais próximo possível do local de execução comercial. Um desafio com esses mecanismos de negociação quotblack-boxquot é que eles compõem o aumento de volume ao emitir ordens apenas para cancelá-los e enviá-los novamente. A causa desse comportamento é a falta de visibilidade em que local oferece melhor execução. O comerciante humano é agora um engenheiro financeiro quot, quotquantquot (analista quantitativo) com habilidades de programação, que pode ajustar os modelos comerciais sobre a marcha. As empresas desenvolvem novos instrumentos financeiros, como derivados do tempo ou transações de classe de ativos cruzados, e precisam implementar os novos aplicativos de forma rápida e escalável. A longo prazo, a diferenciação competitiva deve ser feita a partir da análise, não apenas do conhecimento. Os comerciantes de estrelas de amanhã assumem riscos, conseguem uma verdadeira visão do cliente e sempre superam o mercado (fonte IBM: www-935.ibmservicesusimcpdfge510-6270-trader. pdf). A resiliência empresarial tem sido uma das principais preocupações das empresas comerciais desde 11 de setembro de 2001. As soluções nesta área variam de centros de dados redundantes situados em diferentes regiões geográficas e conectados a vários locais de negociação para soluções de comerciantes virtuais que oferecem aos comerciantes de energia a maior parte da funcionalidade de um piso comercial Em um local remoto. O setor de serviços financeiros é um dos mais exigentes em termos de requisitos de TI. A indústria está passando por uma mudança arquitetônica para Arquitetura orientada a serviços (SOA), serviços da Web e virtualização de recursos de TI. A SOA aproveita o aumento da velocidade da rede para permitir a ligação dinâmica e a virtualização de componentes de software. Isso permite a criação de novas aplicações sem perder o investimento em sistemas e infraestrutura existentes. O conceito tem o potencial de revolucionar a forma como a integração é feita, permitindo reduções significativas na complexidade e custo dessa integração (gigaspacesdownloadMerrilLynchGigaSpacesWP. pdf). Outra tendência é a consolidação de servidores em fazendas de servidores de centros de dados, enquanto as mesas comerciais possuem apenas extensões KVM e clientes ultrafinos (por exemplo, soluções de lâminas SunRay e HP). As redes de área metropolitana de alta velocidade permitem que os dados de mercado sejam multicast entre diferentes locais, possibilitando a virtualização do piso comercial. Arquitetura de alto nível A Figura 1 descreve a arquitetura de alto nível de um ambiente comercial. A planta ticker e os mecanismos de negociação algorítmica estão localizados no cluster de negócios de alto desempenho no centro de dados das empresas ou na troca. Os comerciantes humanos estão localizados na área de aplicativos do usuário final. Funcionalmente, existem dois componentes de aplicativos no ambiente comercial, editores e assinantes da empresa. O ônibus de mensagens fornece o caminho de comunicação entre editores e assinantes. Existem dois tipos de tráfego específicos para um ambiente comercial: informações de preços do Market DataCarries para instrumentos financeiros, notícias e outras informações de valor agregado, como a análise. É unidirecional e muito sensível à latência, tipicamente entregue ao multicast UDP. É medido em updatessec. E em Mbps. Os fluxos de dados de mercado de um ou vários feeds externos, provenientes de provedores de dados de mercado, como bolsas de valores, agregadores de dados e ECNs. Cada provedor tem seu próprio formato de dados de mercado. Os dados são recebidos por manipuladores de alimentação, aplicativos especializados que normalizam e limpam os dados e enviam-no aos consumidores de dados, como motores de preços, aplicativos de negociação algorítmica ou comerciantes humanos. As empresas que vendem também enviam os dados do mercado para seus clientes, empresas de compra como fundos de investimento, hedge funds e outros gerentes de ativos. Algumas empresas compradoras podem optar por receber feeds diretos dos intercâmbios, reduzindo a latência. Figura 1 Arquitetura de negociação para uma empresa SideSell Side Firm Não existe um padrão industrial para formatos de dados de mercado. Cada troca tem seu formato proprietário. Os provedores de conteúdo financeiro, como a Reuters e Bloomberg, agregam diferentes fontes de dados de mercado, normalizam e adicionam notícias ou análises. Exemplos de feeds consolidados são RDF (Reuters Data Feed), RWF (Reuters Wire Format) e Bloomberg Professional Services Data. Para entregar dados de mercado de baixa latência, ambos os fornecedores lançaram feeds de dados de mercado em tempo real que são menos processados ​​e têm menos análises: Bloomberg B-PipeWith B-Pipe, Bloomberg deslocam o feed de dados de mercado de sua plataforma de distribuição porque um terminal Bloomberg Não é necessário para obter B-Pipe. Wombat e Reuters Feed Handlers anunciaram apoio para a B-Pipe. Uma empresa pode decidir receber feeds diretamente de uma troca para reduzir a latência. Os ganhos na velocidade de transmissão podem variar entre 150 milissegundos e 500 milissegundos. Esses feeds são mais complexos e mais caros e a empresa tem que construir e manter sua própria planta de ticker (financetechfeaturedshowArticle. jhtmlarticleID60404306). Ordens de troca Esse tipo de tráfego traz os negócios reais. É bidirecional e muito sensível à latência. É medido em messagessec. E Mbps. Os pedidos originam-se de uma empresa compradora ou comercial e são enviados para locais de negociação como um Exchange ou ECN para execução. O formato mais comum para o transporte de pedidos é FIX (Informações Financeiras eXchangefixprotocol. org). As aplicações que manipulam mensagens FIX são chamadas de motores FIX e eles se interagem com sistemas de gerenciamento de pedidos (OMS). Uma otimização para FIX é denominada FAST (Fix Adapted for Streaming), que usa um esquema de compressão para reduzir o comprimento da mensagem e, de fato, reduzir a latência. FAST é direcionado mais para a entrega de dados de mercado e tem potencial para se tornar um padrão. FAST também pode ser usado como um esquema de compressão para formatos de dados de mercado proprietários. Para reduzir a latência, as empresas podem optar por estabelecer acesso direto ao mercado (DMA). DMA é o processo automatizado de rotear uma ordem de valores mobiliários diretamente para um local de execução, evitando assim a intervenção de um terceiro (towergroupresearchcontentglossary. jsppage1ampglossaryId383). O DMA requer uma conexão direta com o local de execução. O barramento de mensagens é um software de middleware de fornecedores, como Tibco, 29West, Reuters RMDS, ou uma plataforma de código aberto como o AMQP. O barramento de mensagens usa um mecanismo confiável para entregar mensagens. O transporte pode ser feito através de TCPIP (TibcoEMS, 29West, RMDS e AMQP) ou UDPmulticast (TibcoRV, 29West e RMDS). Um conceito importante na distribuição de mensagens é o fluxo quotópico, que é um subconjunto de dados de mercado definidos por critérios como o símbolo do ticker, a indústria ou uma determinada cesta de instrumentos financeiros. Os assinantes se juntam a grupos de tópicos mapeados para um ou vários sub-tópicos para receber apenas as informações relevantes. No passado, todos os comerciantes receberam todos os dados do mercado. Nos atuais volumes de tráfego, isso seria sub-ótimo. A rede desempenha um papel crítico no ambiente comercial. Os dados do mercado são levados ao balcão onde os comerciantes humanos estão localizados através de uma rede de alta velocidade Campus ou Metro Area. Alta disponibilidade e baixa latência, bem como alto rendimento, são as métricas mais importantes. O ambiente de negociação de alto desempenho tem a maioria de seus componentes no farm de servidores do Data Center. Para minimizar a latência, os mecanismos de negociação algorítmica precisam estar localizados na proximidade dos manipuladores de alimentação, dos motores FIX e dos sistemas de gerenciamento de pedidos. Um modelo de implantação alternativo possui os sistemas de negociação algorítmica localizados em uma troca ou um provedor de serviços com conectividade rápida para trocas múltiplas. Modelos de implantação Existem dois modelos de implantação para uma plataforma de negociação de alto desempenho. As empresas podem escolher ter uma combinação dos dois: Centro de dados da empresa comercial (Figura 2) Este é o modelo tradicional, onde uma plataforma de negociação de pleno direito é desenvolvida e mantida pela empresa com links de comunicação para todos os locais de negociação. A latência varia com a velocidade dos links e o número de lúpulos entre a empresa e os locais. Figura 2 Modelo de implantação tradicional Co-localização no local de negociação (trocas, provedores de serviços financeiros (FSP)) (Figura 3) A empresa comercial implementa sua plataforma de negociação automatizada o mais próximo possível dos locais de execução para minimizar a latência. Figura 3 Arquitetura de negociação orientada para serviços modelo de implantação hospedada Proponemos uma estrutura orientada a serviços para a construção da arquitetura comercial de próxima geração. Esta abordagem fornece uma estrutura conceitual e um caminho de implementação baseado em modularização e minimização de interdependências. Esta estrutura fornece às empresas uma metodologia para: Avaliar seu estado atual em termos de serviços Priorizar os serviços com base no seu valor para o negócio Evoluir a plataforma de negociação para o estado desejado usando uma abordagem modular A arquitetura de negociação de alto desempenho depende dos seguintes serviços, como Definido pelo quadro de arquitetura de serviços representado na Figura 4. Figura 4 Estrutura de Arquitetura de Serviços para Negociação de Alto Desempenho Serviço de Mensagens de Latência Ultra-Baixa Este serviço é fornecido pelo barramento de mensagens, que é um sistema de software que resolva o problema de conectar muitos-a - Muitas aplicações. O sistema consiste em: Um conjunto de esquemas de mensagens pré-definidos Um conjunto de mensagens de comando comuns Uma infra-estrutura de aplicativos compartilhados para enviar as mensagens aos destinatários. A infra-estrutura compartilhada pode ser baseada em um corretor de mensagens ou em um modelo de cancelamento de publicação. Os principais requisitos para o barramento de mensagens de próxima geração são (fonte 29West): menor latência possível (por exemplo, menos de 100 microssegundos) Estabilidade sob carga pesada (por exemplo, mais de 1,4 milhões de msgsec.) Controle e flexibilidade (controle de taxa e transportes configuráveis) São esforços na indústria para padronizar o ônibus de mensagens. O Advanced Message Queuing Protocol (AMQP) é um exemplo de um padrão aberto defendido por J. P. Morgan Chase e apoiado por um grupo de fornecedores, tais como Cisco, Envoy Technologies, Red Hat, TWIST Process Innovations, Iona, 29West e iMatix. Dois dos principais objetivos são fornecer um caminho mais simples para a interoperabilidade para aplicações escritas em diferentes plataformas e modularidade para que o middleware possa ser facilmente desenvolvido. Em termos muito gerais, um servidor AMQP é análogo a um servidor de E-mail com cada troca atuando como um agente de transferência de mensagens e cada fila de mensagens como caixa de correio. As ligações definem as tabelas de roteamento em cada agente de transferência. Os editores enviam mensagens para agentes de transferência individuais, que então roteiam as mensagens para as caixas de correio. Os consumidores tomam mensagens de caixas de correio, o que cria um modelo poderoso e flexível que é simples (fonte: amqp. orgtikiwikitiki-index. phppageOpenApproachWhyAMQP). Serviço de Monitoramento de Latência Os principais requisitos para este serviço são: Granularidade de milissegundos de medidas Visibilidade em tempo real sem adicionar latência ao tráfego comercial Capacidade de diferenciar latência de processamento de aplicativos de latência de trânsito de rede Capacidade de lidar com altas taxas de mensagens Fornecer uma interface programática para Negociação de aplicativos para receber dados de latência, permitindo que os mecanismos de negociação algorítmica se adaptem às condições de mudança. Correla eventos de rede com eventos de aplicativos para fins de solução de problemas. A latência pode ser definida como o intervalo de tempo entre quando uma ordem comercial é enviada e quando a mesma ordem é reconhecida e agendada Sobre a parte receptora. Abordar o problema de latência é um problema complexo, que requer uma abordagem holística que identifique todas as fontes de latência e aplique diferentes tecnologias em diferentes camadas do sistema. A Figura 5 mostra a variedade de componentes que podem introduzir latência em cada camada da pilha OSI. Ele também mapeia cada fonte de latência com uma solução possível e uma solução de monitoramento. Esta abordagem em camadas pode dar às empresas uma maneira mais estruturada de atacar a questão da latência, pelo qual cada componente pode ser considerado como um serviço e tratado de forma consistente em toda a empresa. Manter uma medida precisa do estado dinâmico desse intervalo de tempo em rotas alternativas e destinos pode ser de grande ajuda nas decisões táticas de negociação. A capacidade de identificar a localização exata dos atrasos, seja na rede de ponta dos clientes, no centro central de processamento ou no nível de aplicação da transação, determina significativamente a capacidade dos prestadores de serviços de atender aos acordos de nível de serviço comercial (SLA). Para os formulários do lado da compra e do lado da venda, bem como para os comerciantes de dados de mercado, a rápida identificação e remoção de estrangulamentos se traduz diretamente em oportunidades comerciais e receitas melhoradas. Figura 5 Arquitetura de gerenciamento de latência Ferramentas de monitoramento de baixa latência da Cisco As ferramentas tradicionais de monitoramento de rede operam com granularidade de minutos ou segundos. As plataformas de negociação de próxima geração, especialmente as que oferecem suporte à negociação algorítmica, exigem latências inferiores a 5 ms e níveis extremamente baixos de perda de pacotes. Em uma LAN Gigabit, um microburst de 100 ms pode causar perda de 10.000 transtornos ou atraso excessivo. A Cisco oferece aos seus clientes uma escolha de ferramentas para medir a latência em um ambiente comercial: Gerenciador de Qualidade de Banda Larga (BQM) (OEM da Corvil) Gerenciador de Qualidade de Banda Larga (BQM) 4.0 Um produto de gerenciamento de desempenho de aplicativos de rede de próxima geração que permite aos clientes monitorar e provisionar sua rede para níveis controlados de latência e desempenho de perdas. Embora o BQM não seja exclusivamente alvo de redes comerciais, sua visibilidade por microsecondes combinada com características de provisionamento de banda larga inteligentes o torna ideal para esses ambientes exigentes. O Cisco BQM 4.0 implementa um amplo conjunto de tecnologias de análise de tráfego e de medição de tráfego patenteadas e pendentes de patente que proporcionam ao usuário uma visibilidade e uma compreensão sem precedentes de como otimizar a rede para o máximo desempenho da aplicação. O Cisco BQM agora é suportado na família de produtos do Cisco Application Deployment Engine (ADE). A família de produtos Cisco ADE é a plataforma de escolha para aplicativos de gerenciamento de rede da Cisco. Benefícios da BQM A micro-visibilidade do Cisco BQM é a capacidade de detectar, medir e analisar eventos de transição de latência, jitter e perda de indução para níveis microscópios de granularidade por resolução de pacotes. Isso permite que o Cisco BQM detecte e determine o impacto dos eventos de trânsito na latência, jitter e perda da rede. Critical para ambientes de negociação é que o BQM pode suportar medições de latência, perda e jitter de uma via para o tráfego TCP e UDP (multicast). Isso significa que ele informa perfeitamente tanto para o tráfego comercial quanto para os feeds de dados do mercado. O BQM permite ao usuário especificar um conjunto abrangente de limiares (contra atividade de microburst, latência, perda, jitter, utilização, etc.) em todas as interfaces. BQM, em seguida, opera uma captura de pacote de rolagem de fundo. Sempre que ocorre uma violação de limite ou outro evento de degradação de desempenho potencial, ele desencadeia o Cisco BQM para armazenar a captura de pacotes no disco para análise posterior. Isso permite ao usuário examinar detalhadamente o tráfego de aplicativos que foi afetado pela degradação do desempenho (quotthe victimsquot) e o tráfego que causou a degradação do desempenho (quotthe culpritsquot). Isso pode reduzir significativamente o tempo gasto no diagnóstico e na resolução de problemas de desempenho da rede. O BQM também é capaz de fornecer recomendações detalhadas de aprovisionamento de políticas de largura de banda e qualidade de serviço (QoS), que o usuário pode aplicar diretamente para alcançar o desempenho da rede desejado. Medidas BQM ilustradas Para entender a diferença entre algumas das técnicas de medição mais convencionais e a visibilidade fornecida pela BQM, podemos observar alguns gráficos de comparação. No primeiro conjunto de gráficos (Figura 6 e Figura 7), vemos a diferença entre a latência medida pelo Monitor de Qualidade de Rede Passiva do BQM (PNQM) e a latência medida pela injeção de pacotes de ping a cada 1 segundo no fluxo de tráfego. Na Figura 6., vemos a latência reportada por pacotes de ping ICMP de 1 segundo para tráfego de rede real (é dividido por 2 para dar uma estimativa para o atraso de ida). Ele mostra o atraso confortavelmente abaixo de cerca de 5ms por quase todo o tempo. Figura 6 Latência relatada por pacotes de ping ICMP de 1 segundo para tráfego de rede real Na Figura 7. vemos a latência relatada pelo PNQM pelo mesmo tráfego ao mesmo tempo. Aqui vemos que ao medir a latência unidirecional dos pacotes de aplicativos reais, obtemos uma imagem radicalmente diferente. Aqui, a latência está pairando em torno de 20 ms, com rajadas ocasionais muito maiores. A explicação é que, como o ping está enviando pacotes apenas a cada segundo, está perdendo a maior parte da latência do tráfego do aplicativo. Na verdade, os resultados do ping normalmente indicam apenas um atraso de propagação de ida e volta em vez de uma latência de aplicação realista em toda a rede. Figura 7 Latência relatada pelo PNQM para o tráfego de rede real No segundo exemplo (Figura 8), vemos a diferença nos níveis de carga ou saturação de link relatados entre uma visão média de 5 minutos e uma visão de microburst de 5 ms (BQM pode informar sobre microbursos para baixo Para uma precisão de 10-100 nanosegundos). A linha verde mostra a utilização média em médias de 5 minutos para ser baixa, talvez até 5 Mbits. O gráfico azul escuro mostra a atividade de microburst de 5ms que atinge entre 75 Mbits e 100 Mbits, a velocidade da LAN efetivamente. O BQM mostra esse nível de granularidade para todas as aplicações e também fornece regras de provisionamento claras para permitir ao usuário controlar ou neutralizar essas microbursas. Figura 8 Diferença na carga do link relatado entre uma visão média de 5 minutos e uma implantação BQM de Microburst de 5 ms na rede de negociação A Figura 9 mostra uma implantação BQM típica em uma rede comercial. Figura 9 Implantação típica de BQM em uma rede de negociação O BQM pode então ser usado para responder a esses tipos de perguntas: Algum dos meus links principais Gigabit LAN está saturado por mais de milissegundos X Isso está causando perda Quais links mais se beneficiarão de uma atualização para o Etherchannel ou 10 velocidades de Gigabit O tráfego de aplicativos está causando a saturação de meus links de 1 Gigabit Algum dos dados do mercado que experimentam perda de ponta a ponta Quanto latencia adicional o centro de dados de failover experimenta Este link está dimensionado corretamente para lidar com microbursts Meus comerciantes Obtendo baixas atualizações de latência da camada de distribuição de dados do mercado Eles estão vendo atrasos maiores que X milissegundos. Ser capaz de responder a essas perguntas de forma simples e efetivamente economiza tempo e dinheiro na execução da rede comercial. O BQM é uma ferramenta essencial para obter visibilidade nos dados de mercado e nos ambientes de negociação. Fornece medições granulométricas de latência de ponta a ponta em infraestruturas complexas que experimentam movimentos de dados de alto volume. Detectar eficazmente microbursts em níveis de sub-milissegundos e receber análises de especialistas em um evento específico é inestimável para os arquitetos do comércio. Recomendações de aprovisionamento de largura de banda inteligente, como dimensionamento e análise do que é necessário, proporcionam maior agilidade para responder a condições de mercado voláteis. À medida que a explosão do comércio algorítmico e o aumento das taxas de mensagens continuam, o BQM, combinado com sua ferramenta QoS, fornece a capacidade de implementar políticas de QoS que podem proteger aplicativos comerciais importantes. Solução de monitoramento de latência do Cisco Financial Services Cisco e Trading Metrics colaboraram em soluções de monitoramento de latência para fluxo de pedidos FIX e monitoramento de dados de mercado. A tecnologia Cisco AON é a base para uma nova classe de produtos e soluções integradas na rede que ajudam a mesclar redes inteligentes com infra-estrutura de aplicativos, com base em arquiteturas orientadas para serviços ou tradicionais. A Trading Metrics é um fornecedor líder de software de análise para infra-estrutura de rede e aplicativos de monitoramento de latência de aplicativos (trademetrics). A Solução de Monitoramento de Latência de Serviços Financeiros (FSMS) da Cisco AON correlacionou dois tipos de eventos no ponto de observação: Eventos de rede correlacionados diretamente com a manipulação de mensagens de aplicativos coincidentes. Fluxo de ordem comercial e eventos de atualização de mercado correspondentes Usando selos de tempo afirmaram no ponto de captura no A análise em rede, em tempo real, desses fluxos de dados correlacionados permite a identificação precisa dos pontos de estrangulamento em toda a infra-estrutura enquanto um comércio está sendo executado ou os dados do mercado estão sendo distribuídos. Ao monitorar e medir a latência no início do ciclo, as empresas financeiras podem tomar melhores decisões sobre qual serviço de rede e qual intermediário, mercado ou contraparte selecionar para rotear ordens comerciais. Do mesmo modo, esse conhecimento permite um acesso mais simplificado aos dados de mercado atualizados (cotações de ações, notícias econômicas, etc.), que é uma base importante para iniciar, retirar ou buscar oportunidades de mercado. Os componentes da solução são: hardware AON em três fatores de forma: módulo de rede AON para roteadores Cisco 2600280037003800 AON Blade para a série Cisco Catalyst 6500 AON 8340 Appliance Trading Metrics O software MampA 2.0, que fornece o aplicativo de monitoramento e alerta, exibe gráficos de latência em Um painel, e emite alertas quando ocorrem desacelerações (trademetricsTMbrochure. pdf). Figura 10 Monitoramento de latência FIX baseado em AON Cisco IP SLA O Cisco IP SLA é uma ferramenta de gerenciamento de rede incorporada no Cisco IOS que permite roteadores e switches para gerar fluxos de tráfego sintéticos que podem ser medidos por latência, jitter, perda de pacotes e outros critérios (ciscogoipsla ). Dois conceitos-chave são a fonte do tráfego gerado e do alvo. Ambos executam um quotresponder IP SLA, que tem a responsabilidade de registrar o tráfego de controle de tempo antes de ser obtido e retornado pelo alvo (para uma medida de ida e volta). Diversos tipos de tráfego podem ser obtidos dentro do IP SLA e visam métricas diferentes e direcionam diferentes serviços e aplicativos. A operação de jitter UDP é usada para medir o atraso de ida e volta e as variações do relatório. Como o tráfego é marcado com tempo em dispositivos de envio e destino usando a capacidade de resposta, o atraso de ida e volta é caracterizado como o delta entre os dois timestamps. Um novo recurso foi introduzido no IOS 12.3 (14) T, IP SLA Sub Millisecond Reporting, que permite que os marcadores de tempo sejam exibidos com uma resolução em microssegundos, proporcionando assim um nível de granularidade não disponível anteriormente. Este novo recurso tornou IP SLA relevante para redes de campus onde a latência da rede geralmente está na faixa de 300-800 microssegundos e a capacidade de detectar tendências e espinhas (tendências breves) com base em balcões de granularidade com microssegundos é um requisito para os clientes envolvidos no tempo - ambientes de negociação eletrônica sensíveis. Como resultado, o IP SLA agora está sendo considerado por números significativos de organizações financeiras, pois todos eles enfrentam os requisitos para: Relatar a latência da linha de base para seus usuários. Tendência da latência da linha de base ao longo do tempo. Responda rapidamente às explosões de tráfego que causam alterações na latência relatada Sub - O relatório de milissegundos é necessário para esses clientes, uma vez que muitos campus e backbones estão atualmente entregando em um segundo de latência em vários lúpulos alternativos. Os ambientes de negociação eletrônica geralmente funcionaram para eliminar ou minimizar todas as áreas de latência de dispositivos e redes para fornecer uma rápida realização de pedidos para o negócio. Informar que os tempos de resposta da rede são menores a um milissegundo que já não é suficiente. A granularidade das medições de latência relatadas em um segmento de rede ou backbone precisa ser mais próxima de 300-800 micro-segundos com um grau de resolução de 100 segundos de igrave. O IP SLA recentemente adicionou suporte para fluxos de teste de multicast IP, que podem medir latência de dados de mercado. Uma topologia de rede típica é mostrada na Figura 11 com os roteadores de sombra IP SLA, fontes e respondedores. Figura 11 IP SLA Deployment Computing Services Os serviços de computação cobrem uma ampla gama de tecnologias com o objetivo de eliminar a memória e os estrangulamentos da CPU criados pelo processamento de pacotes de rede. As aplicações de comércio consomem altos volumes de dados de mercado e os servidores precisam dedicar recursos ao processamento de tráfego de rede em vez de processamento de aplicativos. Processamento de transporte Em altas velocidades, o processamento de pacotes de rede pode consumir uma quantidade significativa de ciclos e memória do CPU do servidor. Uma regra de padrão estabelecida indica que 1Gbps de largura de banda de rede requer 1 GHz de capacidade do processador (fonte de papel branco da Intel sobre aceleração IO inteltechnologyioacceleration306517.pdf). Copiagem intermédia de buffer Em uma implementação de pilha de rede convencional, os dados precisam ser copiados pela CPU entre buffers de rede e buffers de aplicativos. Esta sobrecarga é agravada pelo fato de que as velocidades da memória não acompanharam os aumentos nas velocidades da CPU. Por exemplo, processadores como o Intel Xeon estão se aproximando de 4 GHz, enquanto os chips de RAM passam por 400MHz (para a memória DDR 3200) (fonte Intel Inteltechnologyioacceleration306517.pdf). Comutação de contexto Cada vez que um pacote individual precisa ser processado, a CPU executa uma mudança de contexto do contexto do aplicativo para o contexto de tráfego da rede. Esta sobrecarga poderia ser reduzida se o interruptor ocorresse apenas quando o buffer de aplicação completo estiver completo. Figura 12 Fontes de Sobrecarga nos Servidores do Centro de Dados TCP Offload Engine (TOE) Desloca os ciclos do processador de transporte para a NIC. Move as cópias do buffer de pilha de protocolos TCPIP da memória do sistema para a memória NIC. Remote Direct Memory Access (RDMA) Permite que um adaptador de rede transfira dados diretamente do aplicativo para o aplicativo sem envolver o sistema operacional. Elimina cópias intermédias e de buffer de aplicativos (consumo de largura de banda de memória). Kernel bypass Acesso direto ao nível do usuário ao hardware. Diminui drasticamente os switches do contexto do aplicativo. Figura 13 RDMA e Kernel Bypass InfiniBand é um link de comunicação serial bidirecional ponto-a-ponto (tecido comutado) que implementa RDMA, entre outros recursos. A Cisco oferece um switch InfiniBand, o Server Fabric Switch (SFS): ciscoapplicationpdfenusguestnetsolns500c643cdccont0900aecd804c35cb. pdf. Figura 14 Aplicações típicas de implantação do SFS Os aplicativos de negociação se beneficiam da redução da latência e da variabilidade de latência, como comprovado por um teste realizado com o Cisco SFS e Wombat Feed Handlers por Stac Research: Application Virtualization Service Desacoplando o aplicativo do SO subjacente e do hardware do servidor Permite que eles funcionem como serviços de rede. Um aplicativo pode ser executado em paralelo em vários servidores, ou vários aplicativos podem ser executados no mesmo servidor, como dita a melhor alocação de recursos. Essa dissociação permite um melhor balanceamento de carga e recuperação de desastres para estratégias de continuidade de negócios. O processo de reatribuição de recursos de computação a um aplicativo é dinâmico. Usando um sistema de virtualização de aplicativos como o Data Synapses GridServer, os aplicativos podem migrar, usando políticas pré-configuradas, para servidores subutilizados em um processo de fornecimento-correspondência-demanda (networkworldsupp2005ndc1022105virtual. htmlpage2). Existem muitas vantagens comerciais para as empresas financeiras que adotam a virtualização de aplicativos: um tempo mais rápido para o mercado de novos produtos e serviços. Integração mais rápida das empresas após a operação de fusão e aquisição. Maior disponibilidade de aplicativos. Maior distribuição de carga de trabalho, o que cria mais espaço para processar picos no volume comercial. Eficiência e controle Redução na complexidade de TI Atualmente, a virtualização de aplicativos não é usada no front-office de negociação. Um caso de uso é modelagem de risco, como simulações de Monte Carlo. À medida que a tecnologia evolui, é concebível que algumas plataformas de negociação o adotem. Serviço de Virtualização de Dados Para efetivamente compartilhar recursos em aplicativos empresariais distribuídos, as empresas devem ser capazes de aproveitar dados em várias fontes em tempo real, garantindo a integridade dos dados. Com soluções de fornecedores de software de virtualização de dados, como Gemstone ou Tangosol (agora Oracle), as empresas financeiras podem acessar fontes heterogêneas de dados como uma única imagem de sistema que permite a conectividade entre os processos de negócios e o acesso irrestrito às aplicações ao armazenamento em cache distribuído. O resultado líquido é que todos os usuários têm acesso instantâneo a esses recursos de dados em uma rede distribuída (gridtoday030210101061.html). This is called a data grid and is the first step in the process of creating what Gartner calls Extreme Transaction Processing (XTP) (gartnerDisplayDocumentrefgsearchampid500947 ). Technologies such as data and applications virtualization enable financial firms to perform real-time complex analytics, event-driven applications, and dynamic resource allocation. One example of data virtualization in action is a global order book application. An order book is the repository of active orders that is published by the exchange or other market makers. A global order book aggregates orders from around the world from markets that operate independently. The biggest challenge for the application is scalability over WAN connectivity because it has to maintain state. Todays data grids are localized in data centers connected by Metro Area Networks (MAN). This is mainly because the applications themselves have limitsthey have been developed without the WAN in mind. Figure 15 GemStone GemFire Distributed Caching Before data virtualization, applications used database clustering for failover and scalability. This solution is limited by the performance of the underlying database. Failover is slower because the data is committed to disc. With data grids, the data which is part of the active state is cached in memory, which reduces drastically the failover time. Scaling the data grid means just adding more distributed resources, providing a more deterministic performance compared to a database cluster. Multicast Service Market data delivery is a perfect example of an application that needs to deliver the same data stream to hundreds and potentially thousands of end users. Market data services have been implemented with TCP or UDP broadcast as the network layer, but those implementations have limited scalability. Using TCP requires a separate socket and sliding window on the server for each recipient. UDP broadcast requires a separate copy of the stream for each destination subnet. Both of these methods exhaust the resources of the servers and the network. The server side must transmit and service each of the streams individually, which requires larger and larger server farms. On the network side, the required bandwidth for the application increases in a linear fashion. For example, to send a 1 Mbps stream to 1000recipients using TCP requires 1 Gbps of bandwidth. IP multicast is the only way to scale market data delivery. To deliver a 1 Mbps stream to 1000 recipients, IP multicast would require 1 Mbps. The stream can be delivered by as few as two serversone primary and one backup for redundancy. There are two main phases of market data delivery to the end user. In the first phase, the data stream must be brought from the exchange into the brokerages network. Typically the feeds are terminated in a data center on the customer premise. The feeds are then processed by a feed handler, which may normalize the data stream into a common format and then republish into the application messaging servers in the data center. The second phase involves injecting the data stream into the application messaging bus which feeds the core infrastructure of the trading applications. The large brokerage houses have thousands of applications that use the market data streams for various purposes, such as live trades, long term trending, arbitrage, etc. Many of these applications listen to the feeds and then republish their own analytical and derivative information. For example, a brokerage may compare the prices of CSCO to the option prices of CSCO on another exchange and then publish ratings which a different application may monitor to determine how much they are out of synchronization. Figure 16 Market Data Distribution Players The delivery of these data streams is typically over a reliable multicast transport protocol, traditionally Tibco Rendezvous. Tibco RV operates in a publish and subscribe environment. Each financial instrument is given a subject name, such as CSCO. last. Each application server can request the individual instruments of interest by their subject name and receive just a that subset of the information. This is called subject-based forwarding or filtering. Subject-based filtering is patented by Tibco. A distinction should be made between the first and second phases of market data delivery. The delivery of market data from the exchange to the brokerage is mostly a one-to-many application. The only exception to the unidirectional nature of market data may be retransmission requests, which are usually sent using unicast. The trading applications, however, are definitely many-to-many applications and may interact with the exchanges to place orders. Figure 17 Market Data Architecture Design Issues Number of GroupsChannels to Use Many application developers consider using thousand of multicast groups to give them the ability to divide up products or instruments into small buckets. Normally these applications send many small messages as part of their information bus. Usually several messages are sent in each packet that are received by many users. Sending fewer messages in each packet increases the overhead necessary for each message. In the extreme case, sending only one message in each packet quickly reaches the point of diminishing returnsthere is more overhead sent than actual data. Application developers must find a reasonable compromise between the number of groups and breaking up their products into logical buckets. Consider, for example, the Nasdaq Quotation Dissemination Service (NQDS). The instruments are broken up alphabetically: This approach allows for straight forward networkapplication management, but does not necessarily allow for optimized bandwidth utilization for most users. A user of NQDS that is interested in technology stocks, and would like to subscribe to just CSCO and INTL, would have to pull down all the data for the first two groups of NQDS. Understanding the way users pull down the data and then organize it into appropriate logical groups optimizes the bandwidth for each user. In many market data applications, optimizing the data organization would be of limited value. Typically customers bring in all data into a few machines and filter the instruments. Using more groups is just more overhead for the stack and does not help the customers conserve bandwidth. Another approach might be to keep the groups down to a minimum level and use UDP port numbers to further differentiate if necessary. The other extreme would be to use just one multicast group for the entire application and then have the end user filter the data. In some situations this may be sufficient. Intermittent Sources A common issue with market data applications are servers that send data to a multicast group and then go silent for more than 3.5 minutes. These intermittent sources may cause trashing of state on the network and can introduce packet loss during the window of time when soft state and then hardware shorts are being created. PIM-Bidir or PIM-SSM The first and best solution for intermittent sources is to use PIM-Bidir for many-to-many applications and PIM-SSM for one-to-many applications. Both of these optimizations of the PIM protocol do not have any data-driven events in creating forwarding state. That means that as long as the receivers are subscribed to the streams, the network has the forwarding state created in the hardware switching path. Intermittent sources are not an issue with PIM-Bidir and PIM-SSM. Null Packets In PIM-SM environments a common method to make sure forwarding state is created is to send a burst of null packets to the multicast group before the actual data stream. The application must efficiently ignore these null data packets to ensure it does not affect performance. The sources must only send the burst of packets if they have been silent for more than 3 minutes. A good practice is to send the burst if the source is silent for more than a minute. Many financials send out an initial burst of traffic in the morning and then all well-behaved sources do not have problems. Periodic Keepalives or Heartbeats An alternative approach for PIM-SM environments is for sources to send periodic heartbeat messages to the multicast groups. This is a similar approach to the null packets, but the packets can be sent on a regular timer so that the forwarding state never expires. S, G Expiry Timer Finally, Cisco has made a modification to the operation of the S, G expiry timer in IOS. There is now a CLI knob to allow the state for a S, G to stay alive for hours without any traffic being sent. The (S, G) expiry timer is configurable. This approach should be considered a workaround until PIM-Bidir or PIM-SSM is deployed or the application is fixed. RTCP Feedback A common issue with real time voice and video applications that use RTP is the use of RTCP feedback traffic. Unnecessary use of the feedback option can create excessive multicast state in the network. If the RTCP traffic is not required by the application it should be avoided. Fast Producers and Slow Consumers Today many servers providing market data are attached at Gigabit speeds, while the receivers are attached at different speeds, usually 100Mbps. This creates the potential for receivers to drop packets and request re-transmissions, which creates more traffic that the slowest consumers cannot handle, continuing the vicious circle. The solution needs to be some type of access control in the application that limits the amount of data that one host can request. QoS and other network functions can mitigate the problem, but ultimately the subscriptions need to be managed in the application. Tibco Heartbeats TibcoRV has had the ability to use IP multicast for the heartbeat between the TICs for many years. However, there are some brokerage houses that are still using very old versions of TibcoRV that use UDP broadcast support for the resiliency. This limitation is often cited as a reason to maintain a Layer 2 infrastructure between TICs located in different data centers. These older versions of TibcoRV should be phased out in favor of the IP multicast supported versions. Multicast Forwarding Options PIM Sparse Mode The standard IP multicast forwarding protocol used today for market data delivery is PIM Sparse Mode. It is supported on all Cisco routers and switches and is well understood. PIM-SM can be used in all the network components from the exchange, FSP, and brokerage. There are, however, some long-standing issues and unnecessary complexity associated with a PIM-SM deployment that could be avoided by using PIM-Bidir and PIM-SSM. These are covered in the next sections. The main components of the PIM-SM implementation are: PIM Sparse Mode v2 Shared Tree (spt-threshold infinity) A design option in the brokerage or in the exchange. Best Programming Language for Algorithmic Trading Systems One of the most frequent questions I receive in the QS mailbag is What is the best programming language for algorithmic trading. The short answer is that there is no best language. Strategy parameters, performance, modularity, development, resiliency and cost must all be considered. This article will outline the necessary components of an algorithmic trading system architecture and how decisions regarding implementation affect the choice of language. Firstly, the major components of an algorithmic trading system will be considered, such as the research tools, portfolio optimiser, risk manager and execution engine. Subsequently, different trading strategies will be examined and how they affect the design of the system. In particular the frequency of trading and the likely trading volume will both be discussed. Once the trading strategy has been selected, it is necessary to architect the entire system. This includes choice of hardware, the operating system(s) and system resiliency against rare, potentially catastrophic events. While the architecture is being considered, due regard must be paid to performance - both to the research tools as well as the live execution environment. What Is The Trading System Trying To Do Before deciding on the best language with which to write an automated trading system it is necessary to define the requirements. Is the system going to be purely execution based Will the system require a risk management or portfolio construction module Will the system require a high-performance backtester For most strategies the trading system can be partitioned into two categories: Research and signal generation. Research is concerned with evaluation of a strategy performance over historical data. The process of evaluating a trading strategy over prior market data is known as backtesting . The data size and algorithmic complexity will have a big impact on the computational intensity of the backtester. CPU speed and concurrency are often the limiting factors in optimising research execution speed. Signal generation is concerned with generating a set of trading signals from an algorithm and sending such orders to the market, usually via a brokerage. For certain strategies a high level of performance is required. IO issues such as network bandwidth and latency are often the limiting factor in optimising execution systems. Thus the choice of languages for each component of your entire system may be quite different. Type, Frequency and Volume of Strategy The type of algorithmic strategy employed will have a substantial impact on the design of the system. It will be necessary to consider the markets being traded, the connectivity to external data vendors, the frequency and volume of the strategy, the trade-off between ease of development and performance optimisation, as well as any custom hardware, including co-located custom servers, GPUs or FPGAs that might be necessary. The technology choices for a low-frequency US equities strategy will be vastly different from those of a high-frequency statistical arbitrage strategy trading on the futures market. Prior to the choice of language many data vendors must be evaluated that pertain to a the strategy at hand. It will be necessary to consider connectivity to the vendor, structure of any APIs, timeliness of the data, storage requirements and resiliency in the face of a vendor going offline. It is also wise to possess rapid access to multiple vendors Various instruments all have their own storage quirks, examples of which include multiple ticker symbols for equities and expiration dates for futures (not to mention any specific OTC data). This needs to be factored in to the platform design. Frequency of strategy is likely to be one of the biggest drivers of how the technology stack will be defined. Strategies employing data more frequently than minutely or secondly bars require significant consideration with regards to performance. A strategy exceeding secondly bars (i. e. tick data) leads to a performance driven design as the primary requirement. For high frequency strategies a substantial amount of market data will need to be stored and evaluated. Software such as HDF5 or kdb are commonly used for these roles. In order to process the extensive volumes of data needed for HFT applications, an extensively optimised backtester and execution system must be used. CC (possibly with some assembler) is likely to the strongest language candidate. Ultra-high frequency strategies will almost certainly require custom hardware such as FPGAs, exchange co-location and kernalnetwork interface tuning. Research Systems Research systems typically involve a mixture of interactive development and automated scripting. The former often takes place within an IDE such as Visual Studio, MatLab or R Studio. The latter involves extensive numerical calculations over numerous parameters and data points. This leads to a language choice providing a straightforward environment to test code, but also provides sufficient performance to evaluate strategies over multiple parameter dimensions. Typical IDEs in this space include Microsoft Visual CC, which contains extensive debugging utilities, code completion capabilities (via Intellisense) and straightforward overviews of the entire project stack (via the database ORM, LINQ ) MatLab. which is designed for extensive numerical linear algebra and vectorised operations, but in an interactive console manner R Studio. which wraps the R statistical language console in a fully-fledged IDE Eclipse IDE for Linux Java and C and semi-proprietary IDEs such as Enthought Canopy for Python, which include data analysis libraries such as NumPy. SciPy. scikit-learn and pandas in a single interactive (console) environment. For numerical backtesting, all of the above languages are suitable, although it is not necessary to utilise a GUIIDE as the code will be executed in the background. The prime consideration at this stage is that of execution speed. A compiled language (such as C) is often useful if the backtesting parameter dimensions are large. Remember that it is necessary to be wary of such systems if that is the case Interpreted languages such as Python often make use of high-performance libraries such as NumPypandas for the backtesting step, in order to maintain a reasonable degree of competitiveness with compiled equivalents. Ultimately the language chosen for the backtesting will be determined by specific algorithmic needs as well as the range of libraries available in the language (more on that below). However, the language used for the backtester and research environments can be completely independent of those used in the portfolio construction, risk management and execution components, as will be seen. Portfolio Construction and Risk Management The portfolio construction and risk management components are often overlooked by retail algorithmic traders. This is almost always a mistake. These tools provide the mechanism by which capital will be preserved. They not only attempt to alleviate the number of risky bets, but also minimise churn of the trades themselves, reducing transaction costs. Sophisticated versions of these components can have a significant effect on the quality and consistentcy of profitability. It is straightforward to create a stable of strategies as the portfolio construction mechanism and risk manager can easily be modified to handle multiple systems. Thus they should be considered essential components at the outset of the design of an algorithmic trading system. The job of the portfolio construction system is to take a set of desired trades and produce the set of actual trades that minimise churn, maintain exposures to various factors (such as sectors, asset classes, volatility etc) and optimise the allocation of capital to various strategies in a portfolio. Portfolio construction often reduces to a linear algebra problem (such as a matrix factorisation) and hence performance is highly dependent upon the effectiveness of the numerical linear algebra implementation available. Common libraries include uBLAS. LAPACK and NAG for C. MatLab also possesses extensively optimised matrix operations. Python utilises NumPySciPy for such computations. A frequently rebalanced portfolio will require a compiled (and well optimised) matrix library to carry this step out, so as not to bottleneck the trading system. Risk management is another extremely important part of an algorithmic trading system. Risk can come in many forms: Increased volatility (although this may be seen as desirable for certain strategies), increased correlations between asset classes, counter-party default, server outages, black swan events and undetected bugs in the trading code, to name a few. Risk management components try and anticipate the effects of excessive volatility and correlation between asset classes and their subsequent effect(s) on trading capital. Often this reduces to a set of statistical computations such as Monte Carlo stress tests. This is very similar to the computational needs of a derivatives pricing engine and as such will be CPU-bound. These simulations are highly parallelisable (see below) and, to a certain degree, it is possible to throw hardware at the problem. Execution Systems The job of the execution system is to receive filtered trading signals from the portfolio construction and risk management components and send them on to a brokerage or other means of market access. For the majority of retail algorithmic trading strategies this involves an API or FIX connection to a brokerage such as Interactive Brokers. The primary considerations when deciding upon a language include quality of the API, language-wrapper availability for an API, execution frequency and the anticipated slippage. The quality of the API refers to how well documented it is, what sort of performance it provides, whether it needs standalone software to be accessed or whether a gateway can be established in a headless fashion (i. e. no GUI). In the case of Interactive Brokers, the Trader WorkStation tool needs to be running in a GUI environment in order to access their API. I once had to install a Desktop Ubuntu edition onto an Amazon cloud server to access Interactive Brokers remotely, purely for this reason Most APIs will provide a C andor Java interface. It is usually up to the community to develop language-specific wrappers for C, Python, R, Excel and MatLab. Note that with every additional plugin utilised (especially API wrappers) there is scope for bugs to creep into the system. Always test plugins of this sort and ensure they are actively maintained. A worthwhile gauge is to see how many new updates to a codebase have been made in recent months. Execution frequency is of the utmost importance in the execution algorithm. Note that hundreds of orders may be sent every minute and as such performance is critical. Slippage will be incurred through a badly-performing execution system and this will have a dramatic impact on profitability. Statically-typed languages (see below) such as CJava are generally optimal for execution but there is a trade-off in development time, testing and ease of maintenance. Dynamically-typed languages, such as Python and Perl are now generally fast enough. Always make sure the components are designed in a modular fashion (see below) so that they can be swapped out out as the system scales. Architectural Planning and Development Process The components of a trading system, its frequency and volume requirements have been discussed above, but system infrastructure has yet to be covered. Those acting as a retail trader or working in a small fund will likely be wearing many hats. It will be necessary to be covering the alpha model, risk management and execution parameters, and also the final implementation of the system. Before delving into specific languages the design of an optimal system architecture will be discussed. Separation of Concerns One of the most important decisions that must be made at the outset is how to separate the concerns of a trading system. In software development, this essentially means how to break up the different aspects of the trading system into separate modular components. By exposing interfaces at each of the components it is easy to swap out parts of the system for other versions that aid performance, reliability or maintenance, without modifying any external dependency code. This is the best practice for such systems. For strategies at lower frequencies such practices are advised. For ultra high frequency trading the rulebook might have to be ignored at the expense of tweaking the system for even more performance. A more tightly coupled system may be desirable. Creating a component map of an algorithmic trading system is worth an article in itself. However, an optimal approach is to make sure there are separate components for the historical and real-time market data inputs, data storage, data access API, backtester, strategy parameters, portfolio construction, risk management and automated execution systems. For instance, if the data store being used is currently underperforming, even at significant levels of optimisation, it can be swapped out with minimal rewrites to the data ingestion or data access API. As far the as the backtester and subsequent components are concerned, there is no difference. Another benefit of separated components is that it allows a variety of programming languages to be used in the overall system. There is no need to be restricted to a single language if the communication method of the components is language independent. This will be the case if they are communicating via TCPIP, ZeroMQ or some other language-independent protocol. As a concrete example, consider the case of a backtesting system being written in C for number crunching performance, while the portfolio manager and execution systems are written in Python using SciPy and IBPy . Performance Considerations Performance is a significant consideration for most trading strategies. For higher frequency strategies it is the most important factor. Performance covers a wide range of issues, such as algorithmic execution speed, network latency, bandwidth, data IO, concurrencyparallelism and scaling. Each of these areas are individually covered by large textbooks, so this article will only scratch the surface of each topic. Architecture and language choice will now be discussed in terms of their effects on performance. The prevailing wisdom as stated by Donald Knuth. one of the fathers of Computer Science, is that premature optimisation is the root of all evil. This is almost always the case - except when building a high frequency trading algorithm For those who are interested in lower frequency strategies, a common approach is to build a system in the simplest way possible and only optimise as bottlenecks begin to appear. Profiling tools are used to determine where bottlenecks arise. Profiles can be made for all of the factors listed above, either in a MS Windows or Linux environment. There are many operating system and language tools available to do so, as well as third party utilities. Language choice will now be discussed in the context of performance. C, Java, Python, R and MatLab all contain high-performance libraries (either as part of their standard or externally) for basic data structure and algorithmic work. C ships with the Standard Template Library, while Python contains NumPySciPy. Common mathematical tasks are to be found in these libraries and it is rarely beneficial to write a new implementation. One exception is if highly customised hardware architecture is required and an algorithm is making extensive use of proprietary extensions (such as custom caches). However, often reinvention of the wheel wastes time that could be better spent developing and optimising other parts of the trading infrastructure. Development time is extremely precious especially in the context of sole developers. Latency is often an issue of the execution system as the research tools are usually situated on the same machine. For the former, latency can occur at multiple points along the execution path. Databases must be consulted (disknetwork latency), signals must be generated (operating syste, kernal messaging latency), trade signals sent (NIC latency) and orders processed (exchange systems internal latency). For higher frequency operations it is necessary to become intimately familiar with kernal optimisation as well as optimisation of network transmission. This is a deep area and is significantly beyond the scope of the article but if an UHFT algorithm is desired then be aware of the depth of knowledge required Caching is very useful in the toolkit of a quantitative trading developer. Caching refers to the concept of storing frequently accessed data in a manner which allows higher-performance access, at the expense of potential staleness of the data. A common use case occurs in web development when taking data from a disk-backed relational database and putting it into memory. Any subsequent requests for the data do not have to hit the database and so performance gains can be significant. For trading situations caching can be extremely beneficial. For instance, the current state of a strategy portfolio can be stored in a cache until it is rebalanced, such that the list doesnt need to be regenerated upon each loop of the trading algorithm. Such regeneration is likely to be a high CPU or disk IO operation. However, caching is not without its own issues. Regeneration of cache data all at once, due to the volatilie nature of cache storage, can place significant demand on infrastructure. Another issue is dog-piling . where multiple generations of a new cache copy are carried out under extremely high load, which leads to cascade failure. Dynamic memory allocation is an expensive operation in software execution. Thus it is imperative for higher performance trading applications to be well-aware how memory is being allocated and deallocated during program flow. Newer language standards such as Java, C and Python all perform automatic garbage collection . which refers to deallocation of dynamically allocated memory when objects go out of scope . Garbage collection is extremely useful during development as it reduces errors and aids readability. However, it is often sub-optimal for certain high frequency trading strategies. Custom garbage collection is often desired for these cases. In Java, for instance, by tuning the garbage collector and heap configuration, it is possible to obtain high performance for HFT strategies. C doesnt provide a native garbage collector and so it is necessary to handle all memory allocationdeallocation as part of an objects implementation. While potentially error prone (potentially leading to dangling pointers) it is extremely useful to have fine-grained control of how objects appear on the heap for certain applications. When choosing a language make sure to study how the garbage collector works and whether it can be modified to optimise for a particular use case. Many operations in algorithmic trading systems are amenable to parallelisation . This refers to the concept of carrying out multiple programmatic operations at the same time, i. e in parallel. So-called embarassingly parallel algorithms include steps that can be computed fully independently of other steps. Certain statistical operations, such as Monte Carlo simulations, are a good example of embarassingly parallel algorithms as each random draw and subsequent path operation can be computed without knowledge of other paths. Other algorithms are only partially parallelisable. Fluid dynamics simulations are such an example, where the domain of computation can be subdivided, but ultimately these domains must communicate with each other and thus the operations are partially sequential. Parallelisable algorithms are subject to Amdahls Law. which provides a theoretical upper limit to the performance increase of a parallelised algorithm when subject to N separate processes (e. g. on a CPU core or thread ). Parallelisation has become increasingly important as a means of optimisation since processor clock-speeds have stagnated, as newer processors contain many cores with which to perform parallel calculations. The rise of consumer graphics hardware (predominently for video games) has lead to the development of Graphical Processing Units (GPUs), which contain hundreds of cores for highly concurrent operations. Such GPUs are now very affordable. High-level frameworks, such as Nvidias CUDA have lead to widespread adoption in academia and finance. Such GPU hardware is generally only suitable for the research aspect of quantitative finance, whereas other more specialised hardware (including Field-Programmable Gate Arrays - FPGAs) are used for (U)HFT. Nowadays, most modern langauges support a degree of concurrencymultithreading. Thus it is straightforward to optimise a backtester, since all calculations are generally independent of the others. Scaling in software engineering and operations refers to the ability of the system to handle consistently increasing loads in the form of greater requests, higher processor usage and more memory allocation. In algorithmic trading a strategy is able to scale if it can accept larger quantities of capital and still produce consistent returns. The trading technology stack scales if it can endure larger trade volumes and increased latency, without bottlenecking . While systems must be designed to scale, it is often hard to predict beforehand where a bottleneck will occur. Rigourous logging, testing, profiling and monitoring will aid greatly in allowing a system to scale. Languages themselves are often described as unscalable. This is usually the result of misinformation, rather than hard fact. It is the total technology stack that should be ascertained for scalability, not the language. Clearly certain languages have greater performance than others in particular use cases, but one language is never better than another in every sense. One means of managing scale is to separate concerns, as stated above. In order to further introduce the ability to handle spikes in the system (i. e. sudden volatility which triggers a raft of trades), it is useful to create a message queuing architecture. This simply means placing a message queue system between components so that orders are stacked up if a certain component is unable to process many requests. Rather than requests being lost they are simply kept in a stack until the message is handled. This is particularly useful for sending trades to an execution engine. If the engine is suffering under heavy latency then it will back up trades. A queue between the trade signal generator and the execution API will alleviate this issue at the expense of potential trade slippage. A well-respected open source message queue broker is RabbitMQ . Hardware and Operating Systems The hardware running your strategy can have a significant impact on the profitability of your algorithm. This is not an issue restricted to high frequency traders either. A poor choice in hardware and operating system can lead to a machine crash or reboot at the most inopportune moment. Thus it is necessary to consider where your application will reside. The choice is generally between a personal desktop machine, a remote server, a cloud provider or an exchange co-located server. Desktop machines are simple to install and administer, especially with newer user friendly operating systems such as Windows 78, Mac OSX and Ubuntu. Desktop systems do possess some significant drawbacks, however. The foremost is that the versions of operating systems designed for desktop machines are likely to require rebootspatching (and often at the worst of times). They also use up more computational resources by the virtue of requiring a graphical user interface (GUI). Utilising hardware in a home (or local office) environment can lead to internet connectivity and power uptime problems. The main benefit of a desktop system is that significant computational horsepower can be purchased for the fraction of the cost of a remote dedicated server (or cloud based system) of comparable speed. A dedicated server or cloud-based machine, while often more expensive than a desktop option, allows for more significant redundancy infrastructure, such as automated data backups, the ability to more straightforwardly ensure uptime and remote monitoring. They are harder to administer since they require the ability to use remote login capabilities of the operating system. In Windows this is generally via the GUI Remote Desktop Protocol (RDP). In Unix-based systems the command-line Secure SHell (SSH) is used. Unix-based server infrastructure is almost always command-line based which immediately renders GUI-based programming tools (such as MatLab or Excel) to be unusable. A co-located server, as the phrase is used in the capital markets, is simply a dedicated server that resides within an exchange in order to reduce latency of the trading algorithm. This is absolutely necessary for certain high frequency trading strategies, which rely on low latency in order to generate alpha. The final aspect to hardware choice and the choice of programming language is platform-independence. Is there a need for the code to run across multiple different operating systems Is the code designed to be run on a particular type of processor architecture, such as the Intel x86x64 or will it be possible to execute on RISC processors such as those manufactured by ARM These issues will be highly dependent upon the frequency and type of strategy being implemented. Resilience and Testing One of the best ways to lose a lot of money on algorithmic trading is to create a system with no resiliency . This refers to the durability of the sytem when subject to rare events, such as brokerage bankruptcies, sudden excess volatility, region-wide downtime for a cloud server provider or the accidental deletion of an entire trading database. Years of profits can be eliminated within seconds with a poorly-designed architecture. It is absolutely essential to consider issues such as debuggng, testing, logging, backups, high-availability and monitoring as core components of your system. It is likely that in any reasonably complicated custom quantitative trading application at least 50 of development time will be spent on debugging, testing and maintenance. Nearly all programming languages either ship with an associated debugger or possess well-respected third-party alternatives. In essence, a debugger allows execution of a program with insertion of arbitrary break points in the code path, which temporarily halt execution in order to investigate the state of the system. The main benefit of debugging is that it is possible to investigate the behaviour of code prior to a known crash point . Debugging is an essential component in the toolbox for analysing programming errors. However, they are more widely used in compiled languages such as C or Java, as interpreted languages such as Python are often easier to debug due to fewer LOC and less verbose statements. Despite this tendency Python does ship with the pdb. which is a sophisticated debugging tool. The Microsoft Visual C IDE possesses extensive GUI debugging utilities, while for the command line Linux C programmer, the gdb debugger exists. Testing in software development refers to the process of applying known parameters and results to specific functions, methods and objects within a codebase, in order to simulate behaviour and evaluate multiple code-paths, helping to ensure that a system behaves as it should. A more recent paradigm is known as Test Driven Development (TDD), where test code is developed against a specified interface with no implementation. Antes da conclusão da base de código real, todos os testes falharão. As code is written to fill in the blanks, the tests will eventually all pass, at which point development should cease. TDD requires extensive upfront specification design as well as a healthy degree of discipline in order to carry out successfully. In C, Boost provides a unit testing framework. In Java, the JUnit library exists to fulfill the same purpose. Python also has the unittest module as part of the standard library. Many other languages possess unit testing frameworks and often there are multiple options. In a production environment, sophisticated logging is absolutely essential. Logging refers to the process of outputting messages, with various degrees of severity, regarding execution behaviour of a system to a flat file or database. Logs are a first line of attack when hunting for unexpected program runtime behaviour. Unfortunately the shortcomings of a logging system tend only to be discovered after the fact As with backups discussed below, a logging system should be given due consideration BEFORE a system is designed. Both Microsoft Windows and Linux come with extensive system logging capability and programming languages tend to ship with standard logging libraries that cover most use cases. It is often wise to centralise logging information in order to analyse it at a later date, since it can often lead to ideas about improving performance or error reduction, which will almost certainly have a positive impact on your trading returns. While logging of a system will provide information about what has transpired in the past, monitoring of an application will provide insight into what is happening right now . All aspects of the system should be considered for monitoring. System level metrics such as disk usage, available memory, network bandwidth and CPU usage provide basic load information. Trading metrics such as abnormal pricesvolume, sudden rapid drawdowns and account exposure for different sectorsmarkets should also be continuously monitored. Further, a threshold system should be instigated that provides notification when certain metrics are breached, elevating the notification method (email, SMS, automated phone call) depending upon the severity of the metric. System monitoring is often the domain of the system administrator or operations manager. However, as a sole trading developer, these metrics must be established as part of the larger design. Many solutions for monitoring exist: proprietary, hosted and open source, which allow extensive customisation of metrics for a particular use case. Backups and high availability should be prime concerns of a trading system. Consider the following two questions: 1) If an entire production database of market data and trading history was deleted (without backups) how would the research and execution algorithm be affected 2) If the trading system suffers an outage for an extended period (with open positions) how would account equity and ongoing profitability be affected The answers to both of these questions are often sobering It is imperative to put in place a system for backing up data and also for testing the restoration of such data. Many individuals do not test a restore strategy. If recovery from a crash has not been tested in a safe environment, what guarantees exist that restoration will be available at the worst possible moment Similarly, high availability needs to be baked in from the start. Redundant infrastructure (even at additional expense) must always be considered, as the cost of downtime is likely to far outweigh the ongoing maintenance cost of such systems. I wont delve too deeply into this topic as it is a large area, but make sure it is one of the first considerations given to your trading system. Choosing a Language Considerable detail has now been provided on the various factors that arise when developing a custom high-performance algorithmic trading system. The next stage is to discuss how programming languages are generally categorised. Type Systems When choosing a language for a trading stack it is necessary to consider the type system . The languages which are of interest for algorithmic trading are either statically - or dynamically-typed . A statically-typed language performs checks of the types (e. g. integers, floats, custom classes etc) during the compilation process. Such languages include C and Java. A dynamically-typed language performs the majority of its type-checking at runtime. Such languages include Python, Perl and JavaScript. For a highly numerical system such as an algorithmic trading engine, type-checking at compile time can be extremely beneficial, as it can eliminate many bugs that would otherwise lead to numerical errors. However, type-checking doesnt catch everything, and this is where exception handling comes in due to the necessity of having to handle unexpected operations. Dynamic languages (i. e. those that are dynamically-typed) can often lead to run-time errors that would otherwise be caught with a compilation-time type-check. For this reason, the concept of TDD (see above) and unit testing arose which, when carried out correctly, often provides more safety than compile-time checking alone. Another benefit of statically-typed languages is that the compiler is able to make many optimisations that are otherwise unavailable to the dynamically - typed language, simply because the type (and thus memory requirements) are known at compile-time. In fact, part of the inefficiency of many dynamically-typed languages stems from the fact that certain objects must be type-inspected at run-time and this carries a performance hit. Libraries for dynamic languages, such as NumPySciPy alleviate this issue due to enforcing a type within arrays. Open Source or Proprietary One of the biggest choices available to an algorithmic trading developer is whether to use proprietary (commercial) or open source technologies. There are advantages and disadvantages to both approaches. It is necessary to consider how well a language is supported, the activity of the community surrounding a language, ease of installation and maintenance, quality of the documentation and any licensingmaintenance costs. The Microsoft. NET stack (including Visual C, Visual C) and MathWorks MatLab are two of the larger proprietary choices for developing custom algorithmic trading software. Both tools have had significant battle testing in the financial space, with the former making up the predominant software stack for investment banking trading infrastructure and the latter being heavily used for quantitative trading research within investment funds. Microsoft and MathWorks both provide extensive high quality documentation for their products. Further, the communities surrounding each tool are very large with active web forums for both. The. NET software allows cohesive integration with multiple languages such as C, C and VB, as well as easy linkage to other Microsoft products such as the SQL Server database via LINQ. MatLab also has many pluginslibraries (some free, some commercial) for nearly any quantitative research domain. There are also drawbacks. With either piece of software the costs are not insignificant for a lone trader (although Microsoft does provide entry-level version of Visual Studio for free). Microsoft tools play well with each other, but integrate less well with external code. Visual Studio must also be executed on Microsoft Windows, which is arguably far less performant than an equivalent Linux server which is optimally tuned. MatLab also lacks a few key plugins such as a good wrapper around the Interactive Brokers API, one of the few brokers amenable to high-performance algorithmic trading. The main issue with proprietary products is the lack of availability of the source code. This means that if ultra performance is truly required, both of these tools will be far less attractive. Open source tools have been industry grade for sometime. Much of the alternative asset space makes extensive use of open-source Linux, MySQLPostgreSQL, Python, R, C and Java in high-performance production roles. However, they are far from restricted to this domain. Python and R, in particular, contain a wealth of extensive numerical libraries for performing nearly any type of data analysis imaginable, often at execution speeds comparable to compiled languages, with certain caveats. The main benefit of using interpreted languages is the speed of development time. Python and R require far fewer lines of code (LOC) to achieve similar functionality, principally due to the extensive libraries. Further, they often allow interactive console based development, rapidly reducing the iterative development process. Given that time as a developer is extremely valuable, and execution speed often less so (unless in the HFT space), it is worth giving extensive consideration to an open source technology stack. Python and R possess significant development communities and are extremely well supported, due to their popularity. Documentation is excellent and bugs (at least for core libraries) remain scarce. Open source tools often suffer from a lack of a dedicated commercial support contract and run optimally on systems with less-forgiving user interfaces. A typical Linux server (such as Ubuntu) will often be fully command-line oriented. In addition, Python and R can be slow for certain execution tasks. There are mechanisms for integrating with C in order to improve execution speeds, but it requires some experience in multi-language programming. While proprietary software is not immune from dependencyversioning issues it is far less common to have to deal with incorrect library versions in such environments. Open source operating systems such as Linux can be trickier to administer. I will venture my personal opinion here and state that I build all of my trading tools with open source technologies. In particular I use: Ubuntu, MySQL, Python, C and R. The maturity, community size, ability to dig deep if problems occur and lower total cost ownership (TCO) far outweigh the simplicity of proprietary GUIs and easier installations. Having said that, Microsoft Visual Studio (especially for C) is a fantastic Integrated Development Environment (IDE) which I would also highly recommend. Batteries Included The header of this section refers to the out of the box capabilities of the language - what libraries does it contain and how good are they This is where mature languages have an advantage over newer variants. C, Java and Python all now possess extensive libraries for network programming, HTTP, operating system interaction, GUIs, regular expressions (regex), iteration and basic algorithms. C is famed for its Standard Template Library (STL) which contains a wealth of high performance data structures and algorithms for free. Python is known for being able to communicate with nearly any other type of systemprotocol (especially the web), mostly through its own standard library. R has a wealth of statistical and econometric tools built in, while MatLab is extremely optimised for any numerical linear algebra code (which can be found in portfolio optimisation and derivatives pricing, for instance). Outside of the standard libraries, C makes use of the Boost library, which fills in the missing parts of the standard library. In fact, many parts of Boost made it into the TR1 standard and subsequently are available in the C11 spec, including native support for lambda expressions and concurrency. Python has the high performance NumPySciPyPandas data analysis library combination, which has gained widespread acceptance for algorithmic trading research. Further, high-performance plugins exist for access to the main relational databases, such as MySQL (MySQLC), JDBC (JavaMatLab), MySQLdb (MySQLPython) and psychopg2 (PostgreSQLPython). Python can even communicate with R via the RPy plugin An often overlooked aspect of a trading system while in the initial research and design stage is the connectivity to a broker API. Most APIs natively support C and Java, but some also support C and Python, either directly or with community-provided wrapper code to the C APIs. In particular, Interactive Brokers can be connected to via the IBPy plugin. If high-performance is required, brokerages will support the FIX protocol . Conclusion As is now evident, the choice of programming language(s) for an algorithmic trading system is not straightforward and requires deep thought. The main considerations are performance, ease of development, resiliency and testing, separation of concerns, familiarity, maintenance, source code availability, licensing costs and maturity of libraries. The benefit of a separated architecture is that it allows languages to be plugged in for different aspects of a trading stack, as and when requirements change. A trading system is an evolving tool and it is likely that any language choices will evolve along with it.