Monday, 26 March 2018

Desenvolvedor de sistema de comércio algorítmico


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


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


Assista ao nosso blog de vídeo algorítmico em que nosso principal desenvolvedor analisa o desempenho a partir de 6/10/17 & ndash; 8/8/17 usando nosso sistema de negociação automatizado. Visite nosso Blog Algorithmic Trading para ver todos os vídeos de desempenho de 2016-2018 no acumulado do ano. Os futuros e opções de negociação envolvem risco substancial de perda e não são adequados para todos os investidores.


Comece hoje mesmo na negociação algorítmica.


Os Destaques do Swing Trader.


Nossa Swing Trading Strategy negocia o S & P 500 Emini Futures (ES) e o Ten Year Note (TY). Este é um sistema de negociação 100% automatizado que pode ser executado automaticamente com os melhores esforços por vários Corretores Registrados da NFA. Também pode ser instalado e carregado na plataforma Tradestation. Os seguintes dados cobrem o período de avanço (fora da amostra) que abrange 10/1 / 15-1 / 4/18. A negociação de futuros envolve risco substancial de perda e não é apropriada para todos os investidores. O desempenho passado não é indicativo de desempenho futuro. Esses dados presumem que 1 unidade (US $ 15.000) foi negociada durante todo o período em análise (non-compounded).


* Perdas podem exceder o rebaixamento máximo. Isso é medido de um ponto para o outro, fechando o comércio para fechar o comércio. O desempenho passado não é indicativo de desempenho futuro.


O Swing Trader Monthly P / L.


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


* Perdas podem exceder o rebaixamento máximo. Isso é medido de um ponto para o outro, fechando o comércio para fechar o comércio. O desempenho passado não é indicativo de desempenho futuro.


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


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


Algorithmic Trading, também conhecido como Quant Trading é um estilo de negociação que utiliza algoritmos de previsão de mercado para encontrar negociações potenciais. Existem várias subcategorias de negociação quantitativa para incluir High Frequency Trading (HFT), Arbitragem Estatística e Análise de Predição de Mercado. Na AlgorithmicTrading, nós nos concentramos no desenvolvimento de sistemas de negociação automatizados que fazem negócios de swing, dia e opções para aproveitar as ineficiências do mercado.


Atualmente, estamos oferecendo dois sistemas de negociação de futuros que negociam o ES & amp; Futuros de TY. Continue lendo para ver por si mesmo como implementar um sistema de negociação de algo projetado profissionalmente pode ser benéfico para suas metas de investimento. Nós não somos consultores de negociação de commodities registrados e, portanto, não controlamos diretamente contas de clientes e ndash; no entanto, negociamos ambos os sistemas de negociação com nosso próprio capital, utilizando um dos corretores de execução de negociação automatizada.


Exemplo de negociação algorítmica.


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


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


Detalhes no Swing Trader System.


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


Este pacote utiliza sete estratégias de negociação na tentativa de diversificar melhor sua conta. Este pacote utiliza comércios de swing, day trades, condutores de ferro e chamadas cobertas para tirar proveito de várias condições de mercado. Este pacote é negociado em unidades de tamanho de US $ 30.000 e foi lançado ao público em outubro de 2016. Visite a página do produto S & P Crusher para ver os resultados do back-test com base nos relatórios de comercialização.


Detalhes no triturador S & P.


Cobrindo os fundamentos do design do sistema de negociação automatizado.


Múltiplos Sistemas de Negociação Algorítmica Disponíveis.


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


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


Nossa metodologia de negociação quântica nos emprega várias estratégias de negociação de algoritmos para diversificar melhor sua conta de negociação automática. Saiba mais visitando nossa página de metodologia de design de estratégias de negociação.


Trades During Bear & amp; Bull Markets.


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


Sistemas de negociação totalmente automatizados.


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


O Algorithmic Trading funciona?


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


Múltiplas Estratégias de Negociação Quant.


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


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


Algoritmos de negociação múltiplos são negociados como parte de um maior sistema de negociação algorítmica.


Cada estratégia de negociação algorítmica oferecida possui vários pontos fortes e fracos. Seus pontos fortes e fracos são identificados com base em três estados de mercado potenciais: Strong Up, Sideways & amp; Down movendo mercados. A estratégia de negociação de condores de ferro supera os mercados em movimento lateral e ascendente, enquanto o algoritmo das notas de tesouro se sobressai nos mercados em baixa. Com base no backtesting, espera-se que o algoritmo de momentum tenha um bom desempenho durante os mercados em ascensão. Confira a seguinte coleção de vídeos, onde cada algoritmo de negociação oferecido é revisado por nosso desenvolvedor líder. Os pontos fortes de cada troco comercial são revisados ​​juntamente com os fracos daqueles.


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


Comissões do dia são inseridas & amp; saiu no mesmo dia, enquanto as negociações de giro terão um longo prazo de negociação com base nas expectativas para o S & amp; P 500 a tendência de maior ou menor no prazo intermédio. As negociações de opções são colocadas nas opções S & P 500 Weekly em futuros, geralmente entrando em uma segunda-feira e mantendo até a expiração de sexta-feira.


Estratégias de negociação Swing.


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


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


A Momentum Swing Trading Strategy coloca os negócios do swing no Emini S & amp; P Futures, aproveitando as condições de mercado que sugerem um movimento de prazo intermediário mais alto. Este algoritmo de negociação é usado em ambos os nossos sistemas de negociação automatizados: O S & amp; P Crusher v2 & amp; O comerciante do balanço.


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


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


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


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


Estratégia de Negociação do Dia de Futuros # 1: Algoritmo de Negociação de Dia.


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


Estratégia de Negociação de Dia de Futuro # 2: Algoritmo de Negociação de Dia de Breakout.


A Breakout Day Trading Strategy coloca o day trade no Emini-S & P Futures quando o mercado mostra força pela manhã. Esta estratégia de negociação de futuros é utilizada no sistema de negociação automatizado S & amp; P Crusher v2.


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


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


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


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


Opções Trading Strategy # 1: Algoritmo de Condor Iron Condor.


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


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


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


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


Algoritmos de negociação que realmente funcionam?


Essa série de vídeos de negociação algorítmica é feita para que nossos clientes possam ver os detalhes de cada negociação semanalmente. Assista a cada um dos seguintes vídeos de negociação algorítmica para ver em tempo real o desempenho de nossos algoritmos de negociação. Sinta-se à vontade para visitar nossos Críticas de AlgorithmicTrading & amp; Página de imprensa para ver o que os outros estão falando sobre nós.


Inscrição na newsletter.


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


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


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


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


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


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


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


Várias opções de execução automática de comércio estão disponíveis.


Nossos algoritmos de negociação podem ser executados automaticamente usando um dos corretores de execução automática registrados pela NFA (com os melhores esforços) ou podem ser negociados em seu próprio PC usando MultiCharts ou Tradestation.


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


Os corretores interativos são corretores registrados pela NFA que podem executar nossos algoritmos automaticamente com os melhores esforços. Além disso, eles suportam clientes canadenses.


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


A TradeStation é mais conhecida pelo software de análise e pela plataforma de negociação eletrônica que oferece ao operador ativo e a determinados mercados de traders institucionais que permitem que os clientes projetem, testem, otimizem, monitorem e automatizem suas próprias ações, opções e opções personalizadas. estratégias de negociação de futuros. Tradestation é outra opção para pessoas que desejam negociar automaticamente nossos algoritmos em seu próprio PC.


Negociação Algorítmica.


O que é 'Algorithmic Trading'


O comércio algorítmico, também conhecido como negociação de algoritmos e negociação de caixa preta, é um sistema de negociação que utiliza modelos matemáticos avançados e complexos e fórmulas para tomar decisões e transações de alta velocidade nos mercados financeiros. O comércio algorítmico envolve o uso de programas de computador rápidos e algoritmos complexos para criar e determinar estratégias de negociação para retornos ideais.


QUEBRANDO 'Algorithmic Trading'


Algumas estratégias de investimento e estratégias de negociação, como arbitragem, disseminação entre mercados, criação de mercado e especulação, podem ser aprimoradas por meio de negociações algorítmicas. As plataformas eletrônicas podem operar completamente estratégias de investimento e negociação por meio de negociação algorítmica. Como tal, os algoritmos são capazes de executar instruções de negociação sob condições particulares de preço, volume e tempo. O uso de negociação algorítmica é mais comumente usado por grandes investidores institucionais devido à grande quantidade de ações que eles compram todos os dias. Algoritmos complexos permitem que esses investidores obtenham o melhor preço possível sem afetar significativamente o preço da ação e aumentar os custos de compra.


As estratégias populares incluem arbitragem, negociação antes do rebalanceamento do fundo de índice, reversão à média e escalpelamento.


Arbitragem é a diferença de preços de mercado entre duas entidades diferentes. Arbitragem é comumente praticada em negócios globais. Por exemplo, as empresas podem tirar proveito de suprimentos mais baratos ou mão-de-obra de outros países. Essas empresas são capazes de cortar custos e aumentar os lucros. A arbitragem também pode ser utilizada na negociação de futuros de S & P e ações da S & amp; P 500. É típico que as ações de futuros de S & P e S & P 500 desenvolvam diferenças de preços. Quando isso ocorre, as ações negociadas nos mercados da NASDAQ e da NYSE atrasam ou superam os futuros de S & P, proporcionando uma oportunidade para a arbitragem. A negociação algorítmica de alta velocidade pode rastrear esses movimentos e lucrar com as diferenças de preço.


Negociação antes do rebalanceamento do fundo do índice.


As poupanças de aposentadoria, como os fundos de pensão, são principalmente investidas em fundos mútuos. Os fundos de índices de fundos mútuos são regularmente ajustados para se igualarem aos novos preços dos ativos subjacentes do fundo. Antes que isso aconteça, as instruções de negociação pré-programadas são acionadas por estratégias de suporte a negociação algorítmica, que podem transferir lucros de investidores para operadores algorítmicos.


Reversão Média.


A reversão à média é um método matemático que calcula a média dos preços altos e baixos temporários de um título. O comércio algorítmico calcula essa média e o lucro potencial do movimento do preço do título à medida que ele se afasta ou vai em direção ao preço médio.


Os scalpers lucram com a negociação do spread bid-ask o mais rápido possível várias vezes ao dia. Os movimentos de preço devem ser menores que o spread da segurança. Esses movimentos acontecem em minutos ou menos, daí a necessidade de decisões rápidas, que podem ser otimizadas por fórmulas de negociação algorítmica.


Outras estratégias otimizadas por negociação algorítmica incluem redução de custos de transação e outras estratégias relativas a dark pools.


Escolhendo o software de negociação algorítmica correto.


Ao usar o comércio algorítmico, os comerciantes confiam no seu dinheiro suado para o software comercial que eles usam. O software certo é muito importante para assegurar a execução efetiva e precisa dos pedidos comerciais. O software defeituoso, ou um sem os recursos necessários, pode levar a grandes perdas. Este artigo analisa as principais coisas a considerar para escolher o software certo para negociação algorítmica. (Para mais, veja: Noções básicas de negociação algorítmica: conceitos e exemplos.)


[O software de negociação algorítmica depende de uma compreensão profunda da análise técnica. Afinal, os indicadores técnicos são frequentemente utilizados como insumos para esses sistemas de negociação. O Curso de Análise Técnica da Investopedia fornece uma visão geral aprofundada sobre como identificar padrões, tendências, sinais e indicadores técnicos que impulsionam o comportamento dos preços. Com mais de cinco horas de vídeo sob demanda, exercícios e conteúdo interativo, você aprenderá todas as principais formas de análise técnica e estudos de caso de acesso mostrando como eles são usados.]


Um Quick Primer para Algorithmic Trading.


Um algoritmo é definido como um conjunto específico de instruções passo a passo para completar uma tarefa específica. Seja o jogo de computador simples, ainda viciante, como o Pac-Man ou uma planilha que oferece grande número de funções, cada programa segue um conjunto específico de instruções com base em um algoritmo subjacente.


O comércio algorítmico é o processo de usar um programa de computador que segue um conjunto definido de instruções para colocar uma ordem comercial. O objetivo do programa de negociação algorítmica é identificar dinamicamente oportunidades lucrativas e colocar os negócios de forma a gerar lucros a uma velocidade e frequência impossíveis de igualar por um operador humano. Dadas as vantagens de uma maior precisão e velocidade de execução relâmpago, as atividades comerciais baseadas em algoritmos de computador ganharam enorme popularidade. (Para mais, veja: Os prós e os contras dos sistemas de negociação automatizados.)


Quem usa software de negociação algorítmica?


A negociação algorítmica é dominada por grandes empresas comerciais, como hedge funds, bancos de investimento e empresas comerciais proprietárias. Dada a disponibilidade abundante de recursos devido ao seu grande tamanho, essas empresas geralmente constroem seu próprio software de negociação proprietário, incluindo grandes sistemas de negociação com centros de dados dedicados e equipe de suporte.


Em um nível individual, traders e quants proprietários experientes usam negociação algorítmica. Os comerciantes proprietários, que são menos conhecedores de tecnologia, podem comprar software de negociação readymade para suas necessidades de negociação algorítmica. O software é oferecido por seus corretores ou comprado de provedores de terceiros. Quants tem um bom conhecimento de negociação e programação de computadores, e eles desenvolvem software comercial por conta própria. (Para mais informações, consulte: Quants: o que eles fazem e como evoluíram.)


Algorithmic Trading Software - Construir ou comprar?


Existem duas maneiras de acessar o software de negociação algorítmica: construir ou comprar.


A compra de software pronto oferece acesso rápido e atempado, ao construir o seu próprio, permite flexibilidade total para personalizar as suas necessidades. O software de negociação automatizado é muitas vezes caro para comprar e pode estar cheio de lacunas, o que, se ignorado, pode levá-lo a perdas. Os custos elevados podem tirar o potencial de lucro realista do seu empreendimento de negociação algorítmica. Por outro lado, construir software de negociação algorítmica por conta própria requer tempo, esforço e um profundo conhecimento, e ainda pode não ser à prova de falhas.


O risco envolvido na negociação automática é muito alto, o que pode levar a grandes perdas. Independentemente de se decidir comprar ou construir, torna-se importante conhecer os recursos básicos necessários.


As principais características do software de negociação algorítmica.


Disponibilidade de dados do mercado e da empresa: todos os algoritmos de negociação são projetados para atuar em dados de mercado em tempo real e cotações de preços. Alguns programas também são personalizados para dar conta dos dados fundamentais da empresa, como os índices EPS e PE. Qualquer software de negociação algorítmica deve ter feed de dados de mercado em tempo real, bem como um feed de dados da empresa. Ele deve estar disponível como um build-in no sistema ou deve ter uma disposição para integrar facilmente de fontes alternativas. Conectividade a vários mercados: os comerciantes que procuram trabalhar em vários mercados devem ter em atenção que cada troca pode fornecer seu feed de dados em um formato diferente, como TCP / IP, Multicast ou um FIX. Seu software deve ser capaz de aceitar feeds de diferentes formatos. Outra opção é ir com fornecedores de dados de terceiros como a Bloomberg e a Reuters, que agregam dados de mercado de diferentes trocas e fornecem-no em um formato uniforme para clientes finais. O software de negociação algorítmica deve ser capaz de processar esses feeds agregados conforme necessário. Latência: A menor palavra desta lista é o fator mais importante para o algo-trading. Latência é o tempo de atraso introduzido no movimento de pontos de dados de um aplicativo para o outro. Considere a seguinte sequência de eventos. Demora 0,2 segundos para uma cotação de preço proveniente da troca para o centro de dados do seu fornecedor de software (DC), 0,3 segundos do data center para alcançar sua tela de negociação, 0,1 segundo para o seu software de negociação para processar essa cotação recebida, 0,3 segundos para para analisar e colocar um comércio, 0,2 segundos para a sua ordem comercial para chegar ao seu corretor, 0,3 segundos para o seu corretor rotear sua ordem para a troca.


Tempo total decorrido = 0.2 + 0.3 + 0.1 + 0.3 + 0.2 + 0.3 = Total 1.4 segundos.


No mundo comercial dinâmico de hoje, a cotação do preço original teria mudado várias vezes dentro desse período de 1,4 segundo. Esse atraso poderia fazer ou quebrar seu empreendimento de negociação algorítmica. É preciso manter essa latência ao nível mais baixo possível para garantir que você obtenha as informações mais atualizadas e precisas sem intervalo de tempo.


A latência foi reduzida para microssegundos, e todas as tentativas devem ser feitas para mantê-lo o mais baixo possível no sistema comercial. Algumas medidas incluem ter conectividade direta com a troca para obter dados mais rapidamente, eliminando o fornecedor no meio; melhorando o seu algoritmo de negociação para que demore menos que 0.1 + 0.3 = 0.4 segundos para análise e tomada de decisão; ou eliminando o corretor e enviando diretamente trocas para a troca para economizar 0,2 segundos.


Configuração e personalização: a maioria dos softwares de negociação algorítmica oferece algoritmos de comércio embutidos padrão, como aqueles baseados em um crossover da média móvel de 50 dias (MA) com o MA de 200 dias. Um trader pode gostar de experimentar mudando para o MA de 20 dias com o MA de 100 dias. A menos que o software ofereça essa customização de parâmetros, o negociador pode ser restringido pela funcionalidade fixa incorporada. Seja comprando ou construindo, o software de negociação deve ter um alto grau de personalização e configuração. Funcionalidade para escrever programas personalizados: Matlab, Python, C ++, JAVA e Perl são as linguagens de programação comuns usadas para escrever software de negociação. A maioria dos softwares de negociação vendidos pelos fornecedores de terceiros oferece a capacidade de escrever seus próprios programas personalizados dentro dele. Isso permite que um comerciante experimente e experimente qualquer conceito comercial que ela desenvolva. O software que oferece codificação na linguagem de programação de sua escolha é obviamente preferido. (Para mais informações, consulte: Codificação de sistemas de negociação: Introdução.) Recurso Backtesting em dados históricos: a simulação Backtesting envolve testar uma estratégia de negociação em dados históricos. Ele avalia a praticidade e rentabilidade da estratégia em dados passados, certificando-o para o sucesso (ou falha ou qualquer alteração necessária). Esta função obrigatória também deve ser acompanhada de uma disponibilidade de dados históricos, nos quais o backtesting pode ser realizado. Integração com a interface de negociação: o software de negociação algorítmica coloca trades automaticamente com base na ocorrência de um critério desejado. O software deve ter a conectividade necessária para a rede de corretores para colocar o comércio ou uma conectividade direta com a troca para enviar ordens comerciais. Integração Plug-n-play: um comerciante pode estar usando simultaneamente um terminal Bloomberg para sua análise de preços, um terminal de intermediário para fazer negócios e um programa Matlab para análise de tendências. Dependendo das necessidades individuais, o software de negociação algorítmica deve ter integração fácil de plug-n-play e APIs disponíveis em ferramentas de negociação comumente usadas. Isso garante a escalabilidade, bem como a integração. Programação Independente da Plataforma: algumas línguas de programação precisam de plataformas dedicadas. Por exemplo, certas versões do C ++ podem ser executadas somente em sistemas operacionais selecionados, enquanto o Perl pode ser executado em todos os sistemas operacionais. Ao construir ou comprar software de negociação, deve-se dar preferência a software de negociação que seja independente de plataforma e suporte a linguagens independentes de plataforma. Você nunca sabe como sua negociação evoluirá alguns meses abaixo da linha. O material sob o capô: Um ditado comum diz: "Até mesmo um macaco pode clicar em um botão do mouse para fazer uma troca". Dependência de computadores não deve ser cega. É o comerciante que deve entender o que está indo sob o capô. Ao comprar software de negociação, deve-se pedir e levar tempo para passar pela documentação detalhada que mostra a lógica subjacente de um software de negociação algorítmico particular. Evite qualquer software de negociação que seja uma caixa preta completa e que pretende ser uma máquina de fazer dinheiro secreto.


Ao construir software, seja realista sobre o que você está implementando e seja claro sobre os cenários onde ele pode falhar. Antes de colocá-lo para usar com dinheiro real, faça uma resposta completa.


Por onde começar?


Todo o software de negociação algorítmico pronto geralmente oferece versões de avaliação de funcionalidade limitada gratuita ou períodos de avaliação limitados com funcionalidades completas. Explore-os na íntegra durante esses testes antes de comprar qualquer coisa. Não esqueça de detalhar a documentação disponível.


Para construir um, uma boa fonte gratuita para explorar o comércio algorítmico é a quespian. Ele oferece uma plataforma on-line para testar e desenvolver comércio algorítmico. Os indivíduos podem tentar personalizar qualquer algoritmo existente ou escrever um completamente novo. A plataforma também oferece software de negociação algorítmico embutido para ser testado em relação aos dados do mercado.


The Bottom Line.


O software de negociação algorítmica é caro para comprar e é difícil de construir sozinho. Comprar pré-fabricados oferece acesso rápido e atempado, e criar o seu próprio permite flexibilidade total para personalizá-lo às suas necessidades. Antes de se aventurar com dinheiro real, é preciso entender completamente a funcionalidade básica do software de negociação algorítmica comprado ou construído. A falta de fazê-lo pode ser uma perda dispendiosa difícil de recuperar.


Melhor Linguagem de Programação para Sistemas de Negociação Algorítmica?


Melhor Linguagem de Programação para Sistemas de Negociação Algorítmica?


Uma das perguntas mais freqüentes que recebo no mailbag do QS é "Qual é a melhor linguagem de programação para negociação algorítmica?". A resposta curta é que não há "melhor" linguagem. Parâmetros de estratégia, desempenho, modularidade, desenvolvimento, resiliência e custo devem ser considerados. Este artigo descreverá os componentes necessários de uma arquitetura de sistema de comércio algorítmico e como as decisões relativas à implementação afetam a escolha da linguagem.


Primeiramente, os principais componentes de um sistema de negociação algorítmica serão considerados, como as ferramentas de pesquisa, o otimizador de portfólio, o gerenciador de risco e o mecanismo de execução. Posteriormente, diferentes estratégias de negociação serão examinadas e como elas afetam o design do sistema. Em particular, a frequência de negociação e o volume de negociação provável serão ambos discutidos.


Uma vez que a estratégia de negociação tenha sido selecionada, é necessário arquitetar todo o sistema. Isso inclui a escolha de hardware, o sistema operacional e a resiliência do sistema contra eventos raros e potencialmente catastróficos. Enquanto a arquitetura está sendo considerada, a devida atenção deve ser dada ao desempenho - tanto para as ferramentas de pesquisa quanto para o ambiente de execução ao vivo.


Qual é o sistema de negociação tentando fazer?


Antes de decidir sobre a "melhor" linguagem com a qual escrever um sistema de negociação automatizado, é necessário definir os requisitos. O sistema será puramente baseado em execução? O sistema exigirá um módulo de gerenciamento de risco ou de construção de portfólio? O sistema exigirá um backtester de alto desempenho? Para a maioria das estratégias, o sistema de negociação pode ser particionado em duas categorias: Pesquisa e geração de sinais.


A pesquisa está preocupada com a avaliação de um desempenho da estratégia em relação aos dados históricos. O processo de avaliação de uma estratégia de negociação sobre dados de mercado anteriores é conhecido como backtesting. O tamanho dos dados e a complexidade algorítmica terão um grande impacto na intensidade computacional do backtester. A velocidade e a simultaneidade da CPU costumam ser os fatores limitantes na otimização da velocidade de execução da pesquisa.


A geração de sinais preocupa-se em gerar um conjunto de sinais de negociação de um algoritmo e enviar esses pedidos ao mercado, geralmente por meio de uma corretora. Para determinadas estratégias, é necessário um alto nível de desempenho. Problemas de E / S, como largura de banda de rede e latência, são muitas vezes o fator limitante na otimização de sistemas de execução. Assim, a escolha de idiomas para cada componente de todo o seu sistema pode ser bem diferente.


Tipo, Frequência e Volume de Estratégia.


O tipo de estratégia algorítmica empregada terá um impacto substancial no design do sistema. Será necessário considerar os mercados que estão sendo negociados, a conectividade com fornecedores de dados externos, a frequência e o volume da estratégia, o tradeoff entre facilidade de desenvolvimento e otimização de desempenho, bem como qualquer hardware personalizado, incluindo customização co-localizada servidores, GPUs ou FPGAs que possam ser necessários.


As escolhas tecnológicas para uma estratégia de ações norte-americanas de baixa frequência serão muito diferentes daquelas de uma negociação de estratégia de arbitragem estatística de alta frequência no mercado de futuros. Antes da escolha da linguagem, muitos fornecedores de dados devem ser avaliados quanto à estratégia em questão.


Será necessário considerar a conectividade com o fornecedor, a estrutura de quaisquer APIs, a pontualidade dos dados, os requisitos de armazenamento e a resiliência em face de um fornecedor ficar off-line. Também é aconselhável ter acesso rápido a vários fornecedores! Vários instrumentos têm suas próprias peculiaridades de armazenamento, exemplos dos quais incluem vários símbolos de ticker para ações e datas de vencimento para futuros (para não mencionar quaisquer dados OTC específicos). Isso precisa ser levado em conta no design da plataforma.


A frequência da estratégia é provavelmente um dos maiores impulsionadores de como a pilha de tecnologia será definida. Estratégias que empregam dados com mais freqüência do que minuciosamente ou em segundo lugar exigem consideração significativa com relação ao desempenho.


Uma estratégia que excede as segundas barras (isto é, dados de ticks) leva a um design orientado pelo desempenho como o requisito primário. Para estratégias de alta frequência, uma quantidade substancial de dados de mercado precisará ser armazenada e avaliada. Softwares como HDF5 ou kdb + são comumente usados ​​para essas funções.


Para processar os volumes extensos de dados necessários para aplicativos HFT, um backtester e um sistema de execução extensivamente otimizados devem ser usados. C / C ++ (possivelmente com algum montador) é provável que seja o candidato a idioma mais forte. Estratégias de frequência ultra-alta quase certamente exigirão hardware customizado, como FPGAs, co-location de troca e ajuste de interface de rede / kernal.


Sistemas de pesquisa.


Os sistemas de pesquisa geralmente envolvem uma mistura de desenvolvimento interativo e scripts automatizados. O primeiro ocorre com frequência dentro de um IDE, como o Visual Studio, o MatLab ou o R Studio. Este último envolve extensos cálculos numéricos sobre numerosos parâmetros e pontos de dados. Isso leva a uma escolha de idioma que fornece um ambiente simples para testar o código, mas também fornece desempenho suficiente para avaliar estratégias em várias dimensões de parâmetro.


IDEs típicos nesse espaço incluem o Microsoft Visual C ++ / C #, que contém extensos utilitários de depuração, recursos de conclusão de código (via "Intellisense") e visões gerais simples da pilha inteira do projeto (via banco de dados ORM, LINQ); MatLab, que é projetado para extensa álgebra linear numérica e operações vetorizadas, mas de uma forma de console interativo; R Studio, que envolve o console de linguagem estatística R em um IDE completo; Eclipse IDE para Linux Java e C ++; e IDEs semi-proprietários como o Enthought Canopy for Python, que incluem bibliotecas de análise de dados como NumPy, SciPy, scikit-learn e pandas em um único ambiente interativo (console).


Para backtesting numérico, todos os idiomas acima são adequados, embora não seja necessário utilizar uma GUI / IDE, pois o código será executado "em segundo plano". A consideração principal neste estágio é a velocidade de execução. Uma linguagem compilada (como C ++) é geralmente útil se as dimensões do parâmetro de backtesting forem grandes. Lembre-se que é necessário ter cuidado com esses sistemas, se for esse o caso!


Linguagens interpretadas, como Python, geralmente usam bibliotecas de alto desempenho como o NumPy / pandas para a etapa de backtesting, a fim de manter um grau razoável de competitividade com equivalentes compilados. Em última análise, a linguagem escolhida para o backtesting será determinada por necessidades algorítmicas específicas, bem como o leque de bibliotecas disponíveis na linguagem (mais sobre isso abaixo). No entanto, a linguagem usada para os ambientes de backtester e de pesquisa pode ser completamente independente daquelas usadas nos componentes de construção de portfólio, gerenciamento de risco e execução, como será visto.


Construção de Carteira e Gestão de Risco.


Os componentes de gerenciamento de risco e de construção de portfólio são frequentemente negligenciados pelos traders algorítmicos de varejo. Isso é quase sempre um erro. Essas ferramentas fornecem o mecanismo pelo qual o capital será preservado. Eles não apenas tentam aliviar o número de apostas "arriscadas", mas também minimizam a rotatividade dos negócios, reduzindo os custos de transação.


Versões sofisticadas desses componentes podem ter um efeito significativo na qualidade e consistência da lucratividade. É fácil criar uma estratégia estável, pois o mecanismo de construção de portfólio e o gerenciador de risco podem ser facilmente modificados para lidar com vários sistemas. Assim, eles devem ser considerados componentes essenciais no início do projeto de um sistema de negociação algorítmica.


O trabalho do sistema de construção de portfólio é pegar um conjunto de negócios desejados e produzir o conjunto de negociações reais que minimizam o churn, manter exposições a vários fatores (como setores, classes de ativos, volatilidade, etc.) e otimizar a alocação de capital para vários estratégias em um portfólio.


A construção de portfólio geralmente se reduz a um problema de álgebra linear (como uma fatoração de matriz) e, portanto, o desempenho é altamente dependente da eficácia da implementação da álgebra linear numérica disponível. Bibliotecas comuns incluem uBLAS, LAPACK e NAG para C ++. O MatLab também possui operações de matriz amplamente otimizadas. O Python utiliza o NumPy / SciPy para tais cálculos. Um portfólio freqüentemente reequilibrado exigirá uma biblioteca matricial compilada (e bem otimizada!) Para realizar este passo, de modo a não afunilar o sistema de negociação.


O gerenciamento de riscos é outra parte extremamente importante de um sistema de negociação algorítmica. O risco pode vir de várias formas: aumento da volatilidade (embora isso possa ser visto como desejável para certas estratégias!), Aumento de correlações entre classes de ativos, inadimplência de terceiros, interrupções de servidor, eventos "black swan" e erros não detectados no código de negociação. para nomear alguns.


Os componentes de gerenciamento de risco tentam antecipar os efeitos da volatilidade excessiva e correlação entre as classes de ativos e seus efeitos subseqüentes sobre o capital comercial. Muitas vezes, isso reduz a um conjunto de cálculos estatísticos, como os "testes de estresse" de Monte Carlo. Isso é muito semelhante às necessidades computacionais de um mecanismo de precificação de derivativos e, como tal, será vinculado à CPU. Estas simulações são altamente paralelizáveis ​​(veja abaixo) e, até certo ponto, é possível "lançar hardware no problema".


Sistemas de Execução.


O trabalho do sistema de execução é receber sinais de negociação filtrados dos componentes de construção de carteira e gerenciamento de risco e enviá-los para uma corretora ou outros meios de acesso ao mercado. Para a maioria das estratégias de negociação algorítmica de varejo, isso envolve uma conexão API ou FIX para uma corretora como a Interactive Brokers. As principais considerações ao decidir sobre uma linguagem incluem a qualidade da API, a disponibilidade do wrapper de idioma para uma API, a frequência de execução e o escorregamento previsto.


A "qualidade" da API refere-se a quão bem documentada ela é, que tipo de desempenho ela fornece, se precisa de software independente para ser acessado ou se um gateway pode ser estabelecido de maneira sem cabeça (ou seja, sem GUI). No caso dos Interactive Brokers, a ferramenta Trader WorkStation precisa estar em execução em um ambiente GUI para acessar sua API. Certa vez, tive que instalar uma edição do Ubuntu do Desktop em um servidor de nuvem da Amazon para acessar o Interactive Brokers remotamente, puramente por esse motivo!


A maioria das APIs fornecerá uma interface C ++ e / ou Java. Geralmente, cabe à comunidade desenvolver wrappers específicos de linguagem para C #, Python, R, Excel e MatLab. Observe que, com cada plug-in adicional utilizado (especialmente os wrappers de APIs), há escopo para os bugs se infiltrarem no sistema. Sempre teste plugins desse tipo e garanta que eles sejam ativamente mantidos. Um indicador que vale a pena é ver quantas novas atualizações foram feitas em uma base de código nos últimos meses.


Freqüência de execução é da maior importância no algoritmo de execução. Observe que centenas de pedidos podem ser enviados a cada minuto e, como tal, o desempenho é crítico. A derrapagem será incorrida através de um sistema de execução com péssimo desempenho e isso terá um impacto dramático na lucratividade.


As linguagens com tipagem estática (veja abaixo) como C ++ / Java são geralmente ótimas para execução, mas há um compromisso em tempo de desenvolvimento, teste e facilidade de manutenção. Linguagens dinamicamente tipificadas, como Python e Perl, são geralmente "rápidas o suficiente". Certifique-se sempre de que os componentes são projetados de maneira modular (veja abaixo) para que possam ser "trocados" conforme o sistema é dimensionado.


Planejamento arquitetônico e processo de desenvolvimento.


Os componentes de um sistema de negociação, seus requisitos de frequência e volume foram discutidos acima, mas a infra-estrutura do sistema ainda não foi coberta. Aqueles que atuam como comerciantes de varejo ou que trabalham em um pequeno fundo provavelmente estarão "usando muitos chapéus". Será necessário estar cobrindo o modelo alfa, os parâmetros de gerenciamento e execução de riscos, e também a implementação final do sistema. Antes de aprofundar em linguagens específicas, o design de uma arquitetura de sistema ideal será discutido.


Separação de preocupações.


Uma das decisões mais importantes que devem ser tomadas no início é como "separar as preocupações" de um sistema de negociação. No desenvolvimento de software, isso significa essencialmente dividir os diferentes aspectos do sistema de negociação em componentes modulares separados.


Ao expor as interfaces em cada um dos componentes, é fácil trocar partes do sistema por outras versões que auxiliem o desempenho, a confiabilidade ou a manutenção, sem modificar nenhum código de dependência externo. Essa é a "melhor prática" para esses sistemas. Para estratégias em freqüências mais baixas, tais práticas são recomendadas. Para negociação de ultra alta frequência, o livro de regras pode ter que ser ignorado em detrimento do ajuste do sistema para um desempenho ainda maior. Um sistema mais fortemente acoplado pode ser desejável.


Criar um mapa de componentes de um sistema de negociação algorítmico vale um artigo em si. No entanto, uma abordagem ideal é garantir que haja componentes separados para as entradas de dados de mercado históricas e em tempo real, armazenamento de dados, API de acesso a dados, backtester, parâmetros estratégicos, construção de portfólio, gerenciamento de risco e sistemas automatizados de execução.


Por exemplo, se o armazenamento de dados em uso estiver atualmente com baixo desempenho, mesmo em níveis significativos de otimização, ele poderá ser substituído com reescritas mínimas para a API de acesso a dados ou acesso a dados. Tanto quanto o backtester e componentes subseqüentes estão em causa, não há diferença.


Outro benefício dos componentes separados é que ele permite que uma variedade de linguagens de programação seja usada no sistema geral. Não há necessidade de se restringir a um único idioma se o método de comunicação dos componentes for independente de idioma. Este será o caso se eles estiverem se comunicando via TCP / IP, ZeroMQ ou algum outro protocolo independente de linguagem.


Como um exemplo concreto, considere o caso de um sistema de backtesting sendo escrito em C ++ para desempenho "processamento de números", enquanto o gerenciador de portfólio e os sistemas de execução são escritos em Python usando SciPy e IBPy.


Considerações de desempenho.


O desempenho é uma consideração significativa para a maioria das estratégias de negociação. Para estratégias de maior frequência, é o fator mais importante. "Desempenho" abrange uma ampla gama de problemas, como velocidade de execução algorítmica, latência de rede, largura de banda, E / S de dados, simultaneidade / paralelismo e dimensionamento. Cada uma dessas áreas é coberta individualmente por grandes livros didáticos, portanto, este artigo apenas arranhará a superfície de cada tópico. A arquitetura e a escolha de idiomas serão agora discutidas em termos de seus efeitos no desempenho.


A sabedoria predominante, como afirma Donald Knuth, um dos pais da Ciência da Computação, é que "a otimização prematura é a raiz de todo o mal". Isso é quase sempre o caso - exceto quando se constrói um algoritmo de negociação de alta frequência! Para aqueles que estão interessados ​​em estratégias de baixa frequência, uma abordagem comum é construir um sistema da maneira mais simples possível e apenas otimizar à medida que os gargalos começam a aparecer.


As ferramentas de criação de perfil são usadas para determinar onde surgem os gargalos. Os perfis podem ser feitos para todos os fatores listados acima, seja em um ambiente MS Windows ou Linux. Existem muitas ferramentas de sistema operacional e idioma disponíveis para isso, bem como utilitários de terceiros. A escolha da língua será agora discutida no contexto do desempenho.


C ++, Java, Python, R e MatLab contêm bibliotecas de alto desempenho (como parte de seus padrões ou externamente) para estrutura de dados básica e trabalho algorítmico. O C ++ é fornecido com a Biblioteca de Modelos Padrão, enquanto o Python contém o NumPy / SciPy. Tarefas matemáticas comuns são encontradas nessas bibliotecas e raramente é benéfico escrever uma nova implementação.


Uma exceção é se a arquitetura de hardware altamente personalizada for necessária e um algoritmo estiver fazendo uso extensivo de extensões proprietárias (como caches personalizados). No entanto, muitas vezes a "reinvenção da roda" desperdiça tempo que poderia ser mais bem gasto desenvolvendo e otimizando outras partes da infraestrutura de negociação. O tempo de desenvolvimento é extremamente precioso, especialmente no contexto de desenvolvedores únicos.


A latência é frequentemente uma questão do sistema de execução, pois as ferramentas de pesquisa geralmente estão situadas na mesma máquina. Para o primeiro, a latência pode ocorrer em vários pontos ao longo do caminho de execução. Os bancos de dados devem ser consultados (latência de disco / rede), os sinais devem ser gerados (operacional, latência do sistema de mensagens kernal), sinais de negociação enviados (latência de NIC) e pedidos processados ​​(latência interna de sistemas de intercâmbio).


Para operações de freqüência mais alta, é necessário tornar-se intimamente familiarizado com a otimização do kernal, bem como com a otimização da transmissão da rede. Esta é uma área profunda e está significativamente além do escopo do artigo, mas se um algoritmo UHFT for desejado, esteja ciente da profundidade do conhecimento necessário!


O cache é muito útil no kit de ferramentas de um desenvolvedor de comércio quantitativo. O armazenamento em cache se refere ao conceito de armazenamento de dados acessados ​​com freqüência de uma maneira que permite acesso de maior desempenho, em detrimento do potencial de rigidez dos dados. Um caso de uso comum ocorre no desenvolvimento da Web ao capturar dados de um banco de dados relacional baseado em disco e colocá-lo na memória. Quaisquer solicitações subsequentes para os dados não precisam "atingir o banco de dados" e, portanto, os ganhos de desempenho podem ser significativos.


Para situações de negociação, o armazenamento em cache pode ser extremamente benéfico. Por exemplo, o estado atual de um portfólio de estratégias pode ser armazenado em um cache até que seja reequilibrado, de modo que a lista não precise ser regenerada em cada loop do algoritmo de negociação. Essa regeneração provavelmente será uma operação alta de I / O de CPU ou disco.


No entanto, o armazenamento em cache não é isento de seus próprios problemas. A regeneração dos dados em cache de uma só vez, devido à natureza volátil do armazenamento em cache, pode colocar uma demanda significativa na infraestrutura. Outro problema é o empilhamento de cães, em que múltiplas gerações de uma nova cópia de cache são realizadas sob uma carga extremamente alta, o que leva a uma falha em cascata.


Alocação de memória dinâmica é uma operação cara na execução de software. Assim, é imperativo que os aplicativos de negociação de desempenho mais alto conheçam bem como a memória está sendo alocada e desalocada durante o fluxo do programa. Novos padrões de linguagem, como Java, C # e Python, executam a coleta automática de lixo, que se refere à desalocação da memória alocada dinamicamente quando os objetos saem do escopo.


A coleta de lixo é extremamente útil durante o desenvolvimento, pois reduz os erros e ajuda na legibilidade. No entanto, muitas vezes é sub-ótimo para certas estratégias de negociação de alta frequência. A coleta de lixo personalizada é geralmente desejada para esses casos. Em Java, por exemplo, ajustando o coletor de lixo e a configuração de heap, é possível obter alto desempenho para estratégias de HFT.


O C ++ não fornece um coletor de lixo nativo e, portanto, é necessário manipular toda alocação / desalocação de memória como parte da implementação de um objeto. Embora potencialmente propenso a erros (potencialmente levando a ponteiros pendentes), é extremamente útil ter um controle refinado de como os objetos aparecem no heap para determinados aplicativos. Ao escolher um idioma, certifique-se de estudar como o coletor de lixo funciona e se ele pode ser modificado para otimizar um determinado caso de uso.


Muitas operações em sistemas de negociação algorítmica são passíveis de paralelização. Isto refere-se ao conceito de realizar múltiplas operações programáticas ao mesmo tempo, isto é, em "paralelo". Os chamados algoritmos "embarassingly parallel" incluem etapas que podem ser calculadas de forma totalmente independente de outras etapas. Certas operações estatísticas, como as simulações de Monte Carlo, são um bom exemplo de algoritmos embarassingly paralelos, pois cada sorteio aleatório e operação subseqüente do caminho podem ser computados sem o conhecimento de outros caminhos.


Outros algoritmos são apenas parcialmente paralelizáveis. Simulações de dinâmica de fluidos são um exemplo, onde o domínio de computação pode ser subdividido, mas, em última instância, esses domínios devem se comunicar entre si e, assim, as operações são parcialmente sequenciais. Os algoritmos paralelizáveis ​​estão sujeitos à Lei de Amdahl, que fornece um limite superior teórico para o aumento de desempenho de um algoritmo paralelizado quando sujeito a processos separados por $ N $ (por exemplo, em um núcleo ou encadeamento da CPU).


A paralelização tornou-se cada vez mais importante como um meio de otimização, uma vez que as velocidades de clock do processador estagnaram, pois os processadores mais recentes contêm muitos núcleos com os quais executar cálculos paralelos. O aumento do hardware gráfico do consumidor (predominantemente para videogames) levou ao desenvolvimento de Unidades de Processamento Gráfico (Graphical Processing Units - GPUs), que contêm centenas de "núcleos" para operações altamente concorrentes. Essas GPUs agora são muito acessíveis. Estruturas de alto nível, como o CUDA da Nvidia, levaram à adoção generalizada na academia e nas finanças.


Esse hardware GPU geralmente é adequado apenas para o aspecto de pesquisa de finanças quantitativas, enquanto outros hardwares mais especializados (incluindo Field-Programmable Gate Arrays - FPGAs) são usados ​​para (U) HFT. Atualmente, os idiomas mais modernos suportam um grau de simultaneidade / multithreading. Assim, é fácil otimizar um backtester, já que todos os cálculos são geralmente independentes dos demais.


O dimensionamento em engenharia de software e operações refere-se à capacidade do sistema de manipular cargas crescentes consistentemente na forma de solicitações maiores, maior uso do processador e mais alocação de memória. No comércio algorítmico, uma estratégia é capaz de escalonar se puder aceitar maiores quantidades de capital e ainda produzir retornos consistentes. A pilha de tecnologia de negociação é dimensionada se puder suportar maiores volumes de negócios e maior latência, sem gargalos.


Embora os sistemas devam ser projetados para escalar, muitas vezes é difícil prever antecipadamente onde ocorrerá um gargalo. Registro, testes, criação de perfis e monitoramento rigorosos ajudarão muito a permitir que um sistema seja dimensionado. Os próprios idiomas são geralmente descritos como "não escaláveis". Isso geralmente é resultado de desinformação, e não de fatos concretos. É a pilha total de tecnologia que deve ser verificada para escalabilidade, não para o idioma. É claro que certas linguagens têm um desempenho maior do que outras em casos de uso específicos, mas uma linguagem nunca é "melhor" que outra em todos os sentidos.


Um meio de administrar escala é separar as preocupações, como dito acima. De modo a introduzir ainda a capacidade de lidar com "picos" no sistema (isto é, volatilidade súbita que desencadeia uma série de operações), é útil criar uma "arquitectura de fila de mensagens". Isso significa simplesmente colocar um sistema de fila de mensagens entre os componentes para que os pedidos sejam "empilhados" se um determinado componente não puder processar muitas solicitações.


Em vez de solicitações serem perdidas, elas são simplesmente mantidas em uma pilha até que a mensagem seja manipulada. Isso é particularmente útil para enviar negociações para um mecanismo de execução. Se o motor estiver sofrendo sob latência pesada, ele fará o backup dos negócios. Uma fila entre o gerador de sinais de negociação e a API de execução aliviará essa questão às custas do escorregamento comercial em potencial. Um broker de fila de mensagens de software livre bem respeitado é o RabbitMQ.


Hardware e Sistemas Operacionais.


O hardware que executa sua estratégia pode ter um impacto significativo na lucratividade de seu algoritmo. Este não é um problema restrito a operadores de alta frequência. Uma má escolha em hardware e sistema operacional pode levar a uma falha da máquina ou reinicializar no momento mais inoportuno. Assim, é necessário considerar onde seu aplicativo irá residir. A escolha é geralmente entre uma máquina desktop pessoal, um servidor remoto, um provedor "nuvem" ou um servidor co-localizado em troca.


As máquinas desktop são simples de instalar e administrar, especialmente com sistemas operacionais mais novos e amigáveis ​​ao usuário, como o Windows 7/8, o Mac OSX e o Ubuntu. Sistemas de desktop possuem algumas desvantagens significativas, no entanto. O principal é que as versões dos sistemas operacionais projetados para máquinas de mesa provavelmente exigirão reinicializações / patches (e geralmente no pior dos casos!). Eles também usam mais recursos computacionais pela necessidade de uma interface gráfica de usuário (GUI).


Utilizar hardware em um ambiente doméstico (ou escritório local) pode levar a problemas de conectividade à Internet e de tempo de atividade. O principal benefício de um sistema de desktop é que a potência computacional significativa pode ser adquirida pela fração do custo de um servidor dedicado remoto (ou sistema baseado em nuvem) de velocidade comparável.


Um servidor dedicado ou uma máquina baseada em nuvem, embora frequentemente mais cara do que uma opção de desktop, permite uma infraestrutura de redundância mais significativa, como backups automáticos de dados, a capacidade de garantir mais tempo de atividade e monitoramento remoto. Eles são mais difíceis de administrar, pois exigem a capacidade de usar os recursos de login remoto do sistema operacional.


No Windows, isso geralmente é feito através do protocolo RDP (Remote Desktop Protocol) da GUI. Em sistemas baseados em Unix, a linha de comando Secure SHell (SSH) é usada. A infra-estrutura de servidor baseada em Unix é quase sempre baseada em linha de comando, o que imediatamente torna as ferramentas de programação baseadas em GUI (como MatLab ou Excel) inutilizáveis.


Um servidor co-localizado, como a frase é usada no mercado de capitais, é simplesmente um servidor dedicado que reside dentro de uma troca a fim de reduzir a latência do algoritmo de negociação. Isso é absolutamente necessário para certas estratégias de negociação de alta frequência, que dependem de baixa latência para gerar alfa.


O aspecto final da escolha de hardware e a escolha da linguagem de programação é a independência de plataforma. Existe a necessidade de o código ser executado em vários sistemas operacionais diferentes? O código foi projetado para ser executado em um tipo específico de arquitetura de processador, como o Intel x86 / x64 ou será possível executar em processadores RISC, como os fabricados pela ARM? Essas questões serão altamente dependentes da frequência e do tipo de estratégia que está sendo implementada.


Resiliência e Teste.


Uma das melhores maneiras de perder muito dinheiro em negociações algorítmicas é criar um sistema sem resiliência. Isso se refere à durabilidade do sistema quando sujeito a eventos raros, como falências de corretagem, volatilidade excessiva súbita, tempo de inatividade em toda a região para um provedor de servidor em nuvem ou a exclusão acidental de um banco de dados comercial inteiro. Anos de lucros podem ser eliminados em segundos com uma arquitetura mal projetada. É absolutamente essencial considerar problemas como depuração, teste, registro, backups, alta disponibilidade e monitoramento como componentes principais de seu sistema.


É provável que, em qualquer aplicação de negociação quantitativa personalizada razoavelmente complicada, pelo menos 50% do tempo de desenvolvimento seja gasto em depuração, teste e manutenção.


Quase todas as linguagens de programação são enviadas com um depurador associado ou possuem alternativas de terceiros bem respeitadas. Em essência, um depurador permite a execução de um programa com a inserção de pontos de interrupção arbitrários no caminho do código, que interrompem temporariamente a execução para investigar o estado do sistema. O principal benefício da depuração é que é possível investigar o comportamento do código antes de um ponto de falha conhecido.


A depuração é um componente essencial na caixa de ferramentas para analisar erros de programação. No entanto, eles são mais amplamente usados ​​em linguagens compiladas, como C ++ ou Java, já que linguagens interpretadas, como Python, são mais fáceis de depurar devido a menos instruções LOC e menos detalhadas. Apesar dessa tendência, o Python vem com o pdb, que é uma ferramenta sofisticada de depuração. O Microsoft Visual C ++ IDE possui extensos utilitários de depuração de GUI, enquanto para o programador Linux C ++ de linha de comando, existe o depurador gdb.


Testes em desenvolvimento de software referem-se ao processo de aplicar parâmetros e resultados conhecidos a funções, métodos e objetos específicos dentro de uma base de código, para simular comportamento e avaliar múltiplos caminhos de código, ajudando a garantir que um sistema se comporta como deveria. Um paradigma mais recente é conhecido como Test Driven Development (TDD), em que o código de teste é desenvolvido em relação a uma interface especificada sem implementação. Antes da conclusão da base de código real, todos os testes falharão. Como o código é escrito para "preencher os espaços em branco", os testes acabarão por passar, ponto em que o desenvolvimento deve cessar.


O TDD requer um design de especificação inicial extenso, bem como um grau saudável de disciplina, a fim de realizar com sucesso. Em C ++, o Boost fornece uma estrutura de teste de unidade. Em Java, a biblioteca JUnit existe para cumprir o mesmo propósito. O Python também possui o módulo unittest como parte da biblioteca padrão. Muitas outras linguagens possuem estruturas de teste de unidade e muitas vezes há várias opções.


Em um ambiente de produção, o registro sofisticado é absolutamente essencial. O registro refere-se ao processo de saída de mensagens, com vários graus de gravidade, em relação ao comportamento de execução de um sistema para um arquivo simples ou banco de dados. Os logs são uma "primeira linha de ataque" ao procurar um comportamento inesperado do tempo de execução do programa. Infelizmente, as deficiências de um sistema de extração de madeira tendem a ser descobertas após o fato! Como com os backups discutidos abaixo, um sistema de registro deve ser considerado antes de um sistema ser projetado.


Tanto o Microsoft Windows quanto o Linux vêm com um amplo recurso de registro do sistema, e as linguagens de programação tendem a ser fornecidas com bibliotecas de registro padrão que cobrem a maioria dos casos de uso. É sempre aconselhável centralizar as informações de registro para analisá-las em uma data posterior, já que elas podem levar a idéias sobre como melhorar o desempenho ou a redução de erros, o que quase certamente terá um impacto positivo em seus retornos comerciais.


Embora o registro de um sistema forneça informações sobre o que aconteceu no passado, o monitoramento de um aplicativo fornecerá informações sobre o que está acontecendo no momento. Todos os aspectos do sistema devem ser considerados para monitoramento. Métricas no nível do sistema, como uso do disco, memória disponível, largura de banda da rede e uso da CPU, fornecem informações básicas sobre carga.


Métricas de negociação, como preços / volume anormais, levantamentos repentinos rápidos e exposição de contas para diferentes setores / mercados também devem ser continuamente monitorados. Além disso, deve ser instigado um sistema de limite que forneça notificação quando certas métricas forem violadas, elevando o método de notificação (email, SMS, chamada telefônica automatizada), dependendo da gravidade da métrica.


O monitoramento do sistema é geralmente o domínio do administrador do sistema ou do gerenciador de operações. No entanto, como um desenvolvedor comercial exclusivo, essas métricas devem ser estabelecidas como parte do design maior. Existem muitas soluções para monitoramento: proprietárias, hospedadas e de código aberto, que permitem a personalização extensiva de métricas para um caso de uso específico.


Backups e alta disponibilidade devem ser as principais preocupações de um sistema de negociação. 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 won't 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 doesn't 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 NumPy/SciPy 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. Existem vantagens e desvantagens para ambas as abordagens. 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 licensing/maintenance costs.


The Microsoft 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 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 plugins/libraries (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, MySQL/PostgreSQL, 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 dependency/versioning 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 system/protocol (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 C++11 spec, including native support for lambda expressions and concurrency.


Python has the high performance NumPy/SciPy/Pandas 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++ (MySQL/C++), JDBC (Java/MatLab), MySQLdb (MySQL/Python) and psychopg2 (PostgreSQL/Python). 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.


Conclusão.


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.


A Quantcademy.


Junte-se ao portal de adesão da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento e saiba como aumentar a rentabilidade da sua estratégia.


Negociação Algorítmica Bem Sucedida.


Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para seu portfólio usando um mecanismo de backtesting personalizado em Python.


Negociação Algorítmica Avançada.


Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquinas e estatísticas bayesianas com R e Python.


Perguntas frequentes.


How do I know this is not a scam?


We encourage all of our potential customers to perform their own due diligence. We believe in full transparency, and share our results openly on our website. This includes putting statements from an individual trading the algorithms on our website. We are registered with the BBB (A+ Rating) & are Rip-Off Report verified. Individuals from Rip-Off Report actually visited our lead developer at his home office – interviewing him in order for us to receive the final “Verfied” status. In addition, we’ve been reviewed by a well known blogger who reached out to our company some time ago without us knowing. This blogger is known for his very harsh criticism of trading system vendors. In the end, he gave us 4.7 out of 5 stars. Out of the 50+ reviews he’s done, only a small handful receive anything better than 1 star. Lastly, back in November of 2014 an interested buyer funded a third party evaluation of the trading systems we offered at that time. At this point, the review is a bit dated, covering a few of our early algorithms – nonetheless, you can read the final report here.


If you would like to know more, contact one of our representatives to schedule a live demo of our system. AlgorithmicTrading does not access or touch your money, we simply license the algorithms that are auto-traded through a brokerage account or utilized on the tradestation platform.


How does Algorithmic Trading in general, differ from other styles of trading?


We recommend you watch the following two part video series, where our lead developer actually finds a strategy online (MACD Trading Strategy) – codes it up and shows how effective it is. In the second video, he takes it a step further and adds a confirmation signal that is recommended by the third party website – the Awesome Oscillator. How does this strategy perform? Our developer does his best to make it work – and the results might surprise you.


Not only does he code up the strategy, show the performance reports, do his best to optimize the algorithm – but he also shows you the code and uses a finite state machine to create a sequence of trade events required to occur before placing the trade (first the MACD bullish cross, then the Awesome Oscillator bullish cross as confirmation).


This video series is very interesting – because it really demonstrates the power of Quant/Algorithmic Trading.


Developing a valid trading system requires much more than providing one or two charts with a few suggestions. It requires the developer/vendor to clearly identify when to get in, when to get out, what stop to use, what limit order to use, what candle size to use (5 min, 10 min, 60 min, etc), what symbol (SPY, QQQ, ES, etc), to include commission/slippage and much more.


How can I get started auto-trading?


Our representatives can help you get set up in just a few easy steps. Click here for more information on how to get started.


Why should I buy your algorithimic trading system?


Understanding the risk of trading futures, we prefer to not use any hard sale tactics. Our approach is to simply present the data, with the appropriate risk disclosures, and let you make your own decisions. Our representatives are not licensed or registered investment advisors, or CTAs, so we cannot give you advice about your specific situation, but we are happy to provide you with information regarding our various portfolios and trading strategies. If you are interested, we can provide you with live demos and back-tested reports from TradeStation on each algorithm going back 10+ years. We encourage you to review the data, share with a NFA registered CTA (Commodity Trading Adviser), and let us know what questions they have so that we can address them. Contact us or call 866.759.6546 to speak with a representative.


Qual corretor você usa?


For auto-trade execution, we have several options available. In addition, the algorithms are coded in tradestation easy language. If you prefer to handle the trades on your own, we can install the encrypted models onto your tradestation platform. Contact us or call 866.759.6546 for details.


Are your results based on live trading or simulated?


For the recently updated portfolios/strategies, we began using actual fills (not hypothetical) around October 2016. All results posted since then are the live returns, normalized to a “per unit” trade size – taken from our developers live brokerage account. Slippage is noted as $0 for these trades, since they are the actual fills not simulated.


Results posted prior to live trading are considered back-tested/simulated/hypothetical unless otherwise noted. Keep in mind, while they are listed as back-tested, for some of the algorithms (Treasury Note/P2-PushPull, Momentum/BullFire, Breakout Day Trade & Short Day Trade), the period between October 2015-October 2016 are considered blind walk-forward, since these algorithms were last optimized in October 2015.


The newer algorithms (Gap Short, Covered Calls & Iron Condor) are more recent additions and their results are back-tested until after October 2016 when they started trading live.


Por que isso importa? Among other reasons, algorithms that are back-tested have the benefit of hind-sight and since actual trades are not placed, impacts of the trading system on the market traded are not accounted for. Developers will introduce “slippage” in order to simulate any potential impact actual trades could have – however these are estimates. In our models, we introduce 1 tick of slippage per trade, per contract – round trip. For example, if the algorithm in a simulated account saw a fill of 2100.00 on the ES, we would assume the fill was at 2100.25 in our models.


If you have questions on any of this, please feel free to contact us.


Can I trade my Roth IRA/IRA on your algorithms?


Yes, automated futures & options trading is an alternative investment allowed in self-directed IRAs. One of our approved CFTC/NFA registered auto-execution brokers can walk you through the process so that you can trade your IRA or Roth IRA with our algorithms. Contact us to learn more.


Do you develop your own algorithms? What is the background of your lead system developer?


Yes, we have developed all of our algorithms. Our lead developer has a Bachelor of Science in Electrical Engineering. He has worked for Fortune 500 companies as a programmer/logic design engineer including Hewlett-Packard, Intel and Qualcomm. His expertise in algorithm development and advanced mathematics has made him the perfect fit for quant/mechanical trading.


Logic design engineers are all too familiar with finite state machines and how to implement complex parallel processing logic. In our opinion, these concepts translate well into the Quant field of programming algorithmic trading systems, since the markets can be thought of as one huge state machine with trades being initiated based on various sequence of events.


Logic design engineers are also familiar with debugging logic and attempting to find holes in the logic they create. This critical way of looking at a design also translates well into Quant trading. Writing an trading algorithm in many ways is the easy part. Doing your best to ensure the algorithm is not over-optimized and that it will trade well post-optimization is the hard part. A critical/pessimistic approach to designing an algorithmic trading strategy is very helpful in producing a quality product that not only looks good back-tested, but also walk-forward tested and finally in live trades.


What exactly do your algorithms trade?


We trade the Futures market, both long and short on the Emini S&P Futures and the TY Treasury Note. In addition, we place options trades, both long and short. Our options trades are either Iron Condors or Covered Calls and are always on the front running weekly options. This helps reduce risk some – in that we do not hold options positions over the week end.


How do the different algorithms within a package work together?


Our trading systems, such as The Swing Trader and S&P Crusher v2 trade multiple uncorrelated algorithms concurrently. Understanding that no one can predict the market direction with 100% certainty, we instead layer in multiple algorithms into a single portfolio with the intent of having 1-2 algorithms that do well when the market is trading higher, 1-2 that do well when the market is going lower and 1-2 trading algorithms that are expected to do well during sideways moving market conditions. In the contrary market directions, our goal is to minimize losses or have small gains. Combined, we attempt to be NET positive 1-2 algorithms for each market condition (up moving, sideways moving and down moving).


This doesn’t guarantee that every month we have gains, however in our opinion it is the best way to implement a purely technical trading system. Many developers attempt to create one algorithm that works in all market conditions, a very difficult if not impossible task in our opinion.


If there are multiple algorithms trading together, is there a way to tell which one placed which trade?


Sim. There is a smart-phone app that will alert you anytime a new trade is placed, and you can receive email alerts as well. You will also receive daily and monthly statements from the NFA Registered clearing firm, where your money is actually located. At the end of each trading day, we update the trade list for each portfolio/strategy with any closed out trades. With this information, you can follow along in real time and compare your results with ours.


Do you have a short algo?


Yes, we have multiple algorithms designed to do well when the S&P is going lower, the Short Day Trading Strategy, the Morning Gap Day Trading Strategy and the Treasury Note Trading Strategy. In addition, our Covered Call Trading Strategy performs very well during down moving markets. The two day trading algorithms trade the S&P 500 Emini Futures (ES). The Treasury Note Algorithm trades the 10-Year Note (TY) which has an inverse correlation to the S&P 500, meaning it typically performs well when the S&P 500 is going lower. This algo had its best year in 2008 and is our best performing algorithm since going live. The covered call strategy sells out-of-money calls on the ES Weekly Options.


Based on the back-testing, we expect all of our portfolios to perform well during the next bear market. There are no guarantees, but we are quite confident in their ability to outperform during bear market conditions.


Os resultados são baseados em resultados de desempenho simulados ou hipotéticos que possuem certas limitações inerentes. Ao contrário dos resultados apresentados em um registro de desempenho real, esses resultados não representam a negociação real. Além disso, como esses negócios não foram efetivamente executados, esses resultados podem ter uma compensação maior ou menor pelo impacto, se houver, de alguns fatores de mercado, como a falta de liquidez. Programas de negociação simulados ou hipotéticos em geral também estão sujeitos ao fato de serem projetados com o benefício de retrospectiva. Não está sendo feita nenhuma representação de que qualquer conta terá ou poderá obter lucros ou perdas similares a essas demonstrações.


How much does your system cost?


We offer access to our portfolios & trading strategies based on a membership system. Members of our service are allowed to trade any combination of portfolios/strategies they see on our website – up to the maximum amount they are licensed to trade. This allows us to control how much capital is being traded on our algorithms in order to minimize the impact additional customers could have on their performance moving forward.


Click here to contact us or call 866.759.6546 for more information. You’ll be surprised how affordable they are.


How much is needed to trade the algos?


Each package has a different “per unit” trade size which is also the minimum dollar amount required to get started. Each unit represents a block of trades placed across the different algorithms contained in that package. The S&P Crusher requires a starting account size of $30,000, while the Swing Trading Strategy requires a starting balance of $15,000. Contacte-nos para mais detalhes.


What happens if my account goes below the per Unit Trade size?


The per unit trade sizes for the S&P Crusher and Swing Trader are built such that the account can incur losses without an individual needing to deposit more capital. The absolute minimum required to trade the S&P Crusher before one might receive a margin call is approximately $12,500. The per unit trade size of $30,000 provides a very large buffer to account for losses.


For the Swing Trader, the absolute minimum is approximately $7,500 and it’s per unit trade size is $15,000. Like the S&P Crusher, this provides a very large buffer such that the account could incur a fairly large drawdown without receiving a margin call. Of course, there are no guarantees in trading. These algorithms should only be traded with “risk capital”.


Do you trade the algorithms yourselves?


Various individuals connected to the company traded them and also sell the license to trade them. In previous years (with varying consistency), our developer traded the algorithms (2013-2015). In those periods, the developer also traded R&D algorithms and would place an occasional discretionary trade. Some of these “R&D” algorithms did well, others did not. For 2013-2016, the developer was not profitable in his personal trading accounts, primarily due to overriding the algorithms at times and placing discretionary trades. The developer currently trades all trading strategies contained in the ES Trading Strategy called the S&P Crusher v2 & The Swing Trader in his personal trading account.


Is support for your system available?


We offer 24/7 email and phone support, and auto-execution brokers also offer exceptional customer support. If you are a current customer in need of support, call us at 866.759.6546.


Do you offer managed account services?


AlgorithimicTrading and it’s representatives/principles are not Commodity Trading Advisers and do NOT offer managed or partially-managed account services. As a third party trading system development firm, we do not control client accounts. Our customers are able to override trades, modify allocation between the different trading strategies & shut off the strategies should they chose to.


AlgorithmicTrading sells the license to use our algorithms. With that said, there are multiple NFA Registered brokers who will auto-execute our algorithms with best efforts on your trading account. Call 866.759.6546 for more information.


Should I ‘bet the farm’ with your algorithms?


Absolutamente não. Algorithmic trading in the Emini Futures market on a relatively short-term basis should be considered a risky investment. AlgorithmicTrading and its representatives are not registered CTAs (Commodity Trading Advisor) and can not provide advice unique to your situation. Consult a professional to discuss your specific investment objectives and to determine if our algorithmic trading systems can provide a role in working towards those goals.


Please do not trade our algorithms if you do not have adequate risk capital to allocate towards them.


Do you ever re-optimize the algorithms?


Yes, as needed. This is included as part of the maintenance of the algorithms. If we find an improvement to the existing algorithms, we will provide that to our auto-execution brokers and do our best to notify all existing customers of the change.


If you are a customer using tradestation, you will need to notify us by email to schedule an update.


Do you guarantee I will make money every month?


No. The average gain per month is an average gain that the algorithms have made on a back-tested basis going back to the period indicated. Some months they made more that what is posted, other months they made less or posted losses for the month. This is an average gain per month using the “per unit” trade size.


Os resultados são baseados em resultados de desempenho simulados ou hipotéticos que possuem certas limitações inerentes. Ao contrário dos resultados apresentados em um registro de desempenho real, esses resultados não representam a negociação real. Além disso, como esses negócios não foram efetivamente executados, esses resultados podem ter compensado excessivamente ou sobre o impacto, se houver, de certos fatores de mercado, como a falta de liquidez. Programas de negociação simulados ou hipotéticos em geral também estão sujeitos ao fato de serem projetados com o benefício de retrospectiva. No representation is being made that any account will, or is likely to, achieve profits or losses similar to these being shown.


Even at 5% per month (60% per year), it would outperform most hedge funds. Why don’t they do what you're doing?


Our algorithms are considered aggressive. Hedge funds do have aggressive quant algorithms like ours, however it is our opinion that they typically don’t allocate as much of their capital toward these riskier models, and therefore do not have the potential for spectacular returns that we may have.


At our customers discretion, if the per unit allocation is modified to reduce risk, the back-tested average monthly gain is also reduced. Customers should always consider the risk involved with trading futures when allocating the number of contracts they wish to trade. AlgorithmicTrading is not a registered commodity trading advisor and does not provide risk management services. Customers should consult with a registered CTA for advice tailored to their specific situation.


I don't have time to look at any charts, I’m too busy.


Our system is 100% automated. There in no installation or action needed by you if you utilize one of our auto-execution brokers. Once you are set up, your auto-execution broker will trade the algorithms on your account, with best efforts. You will receive a daily statement. There is also a smart-phone app that will alert you in real-time when a trade is placed on your account.


Do you have to be registered as a CTA in order to sell your algorithms?


No, pursuant to CFTC Rule 4.14(a)(9)(ii) we are not required to register under the Act as a commodity trading advisor.


A person is exempt from registration as a CTA if “[i]t does not engage in . . . [p]roviding commodity trading advice base on, or tailored to, the commodity interest or cash market positions or other circumstances or characteristics of particular clients.”


What is your refund policy?


We encourage our customers to take a long-term perspective when using our algorithms and therefore do not provide refunds . Our contract states all sales are final. Trading is not easy, even with a high-quality, automated trading system like ours. It is best to not focus on the day-to-day ticks of the market or our performance. Instead look at it on a monthly or quarterly basis. Measure your results compared to the performance of the S&P 500 and enjoy the ride!


Do you have statements you can share?


Yes, simply visit our Algorithmic Trading Statements page to see actual statements from an individual trading our algorithms on full auto-pilot. Just keep in mind, past performance is not indicative of future performance.


Forex Algorithmic Trading: um conto prático para engenheiros.


Como você pode saber, o mercado cambial (Forex, ou FX) é usado para negociação entre pares de moedas. Mas você pode não estar ciente de que é o mercado mais líquido do mundo.


Alguns anos atrás, impulsionados pela minha curiosidade, fiz os primeiros passos no mundo da negociação algorítmica Forex criando uma conta demo e jogando simulações (com dinheiro falso) na plataforma de negociação Meta Trader 4.


Depois de uma semana de "negociação", quase dobrava meu dinheiro. Estimulado pela minha própria negociação algorítmica bem sucedida, cavei e, eventualmente, me inscrevi para vários fóruns de FX. Logo, passava horas lendo sobre sistemas de negociação algorítmica (conjuntos de regras que determinam se você deve comprar ou vender), indicadores personalizados, modos de mercado e muito mais.


Meu primeiro cliente.


Por volta dessa época, por acaso, ouvi dizer que alguém estava tentando encontrar um desenvolvedor de software para automatizar um sistema comercial simples. Estava de volta aos meus dias de faculdade quando eu estava aprendendo sobre programação simultânea em Java (threads, semáforos e todo esse lixo). Eu pensei que este sistema automatizado não poderia ser muito mais complicado do que o meu curso avançado de ciências de dados funcionar, então eu perguntei sobre o trabalho e entrou a bordo.


O cliente queria um software de negociação algorítmica construído com o MQL4, uma linguagem de programação funcional usada pela plataforma Meta Trader 4 para realizar ações relacionadas a estoque.


O papel da plataforma de negociação (Meta Trader 4, neste caso) é fornecer uma conexão com um corretor Forex. O corretor fornece uma plataforma com informações em tempo real sobre o mercado e executa suas ordens de compra / venda. Para leitores que não estão familiarizados com o comércio de Forex, aqui estão as informações fornecidas pelo feed de dados:


Através do Meta Trader 4, você pode acessar todos esses dados com funções internas, acessíveis em vários prazos: a cada minuto (M1), a cada cinco minutos (M5), M15, M30, a cada hora (H1), H4, D1, W1, MN .


O movimento do preço atual é chamado de tiquetaque. Em outras palavras, um tick é uma mudança no preço Bid ou Ask para um par de moedas. Durante os mercados ativos, pode haver vários carrapatos por segundo. Durante os mercados lentos, pode haver minutos sem um tiquetaque. O tiquetaque é o batimento cardíaco de um robô de mercado de moeda.


Quando você faz um pedido através dessa plataforma, você compra ou vende um determinado volume de uma determinada moeda. Você também define os limites stop-loss e take-profit. O limite de stop-loss é a quantidade máxima de pips (variações de preço) que você pode perder antes de desistir de um comércio. O limite de lucro obtido é a quantidade de pips que você irá acumular a seu favor antes de descontar.


As especificações de negociação algorítmica do cliente eram simples: eles queriam um robô Forex baseado em dois indicadores. Como pano de fundo, os indicadores são muito úteis ao tentar definir um estado de mercado e tomar decisões comerciais, pois são baseados em dados passados ​​(por exemplo, valor de preço mais alto nos últimos n dias). Muitos vêm embutidos no Meta Trader 4. No entanto, os indicadores em que meu cliente estava interessado vieram de um sistema de negociação customizado.


Eles queriam trocar todas as vezes que dois desses indicadores personalizados se cruzassem, e apenas em certo ângulo.


À medida que eu resolvi as mãos, eu aprendi que os programas MQL4 têm a seguinte estrutura:


A função de início é o coração de cada programa MQL4, uma vez que é executado sempre que o mercado se move (ergo, esta função será executada uma vez por marca). Este é o caso, independentemente do prazo que você está usando. Por exemplo, você poderia estar operando no cronograma H1 (uma hora), mas a função inicial executaria muitos milhares de vezes por período de tempo.


Para contornar isso, forcei a função a executar uma vez por unidade de período:


Obtendo os valores dos indicadores:


A lógica de decisão, incluindo a interseção dos indicadores e seus ângulos:


Enviando os pedidos:


Se você estiver interessado, você pode encontrar o código completo e executável no GitHub.


Backtesting


Uma vez que eu construí meu sistema de negociação algorítmica, eu queria saber: 1) se estava se comportando adequadamente e 2) se a estratégia de negociação Forex fosse usada.


Backtesting (às vezes escrito "back-testing") é o processo de testar um sistema particular (automatizado ou não) sob os eventos do passado. Em outras palavras, você testa seu sistema usando o passado como um proxy para o presente.


MT4 vem com uma ferramenta aceitável para backtesting uma estratégia de negociação Forex (hoje em dia, existem mais ferramentas profissionais que oferecem maior funcionalidade). Para começar, você configura seus prazos e executa seu programa sob uma simulação; A ferramenta irá simular cada tico sabendo que, para cada unidade, ele deve abrir a certo preço, fechar a um determinado preço e alcançar altos e baixos especificados.


Depois de comparar as ações do programa com preços históricos, você terá um bom senso se está ou não executando corretamente.


Do backtesting, eu chequei a taxa de retorno do robô FX para alguns intervalos de tempo aleatórios; Escusado será dizer que sabia que o meu cliente não iria ficar rico com isso - os indicadores que ele havia escolhido, juntamente com a lógica da decisão, não eram lucrativos. Como amostra, aqui estão os resultados da execução do programa na janela M15 para 164 operações:


Observe que nosso equilíbrio (a linha azul) termina abaixo do seu ponto de partida.


Otimização de parâmetros e suas mentiras.


Embora o backtesting tenha me deixado desconfiado da utilidade desse robô FX, fiquei intrigado quando comecei a brincar com seus parâmetros externos e notei grandes diferenças na Taxa de Retorno geral. Esta ciência particular é conhecida como otimização de parâmetros.


Eu fiz alguns testes difíceis para tentar inferir o significado dos parâmetros externos na Razão de retorno e surgiu algo como isto:


Você pode pensar (como eu fiz) que você deve usar o Parâmetro A. Mas a decisão não é tão direta como pode aparecer. Especificamente, observe a imprevisibilidade do Parâmetro A: para valores de erro pequenos, seu retorno muda drasticamente. Em outras palavras, o Parâmetro A é muito provável que a previsão excessiva de resultados futuros, uma vez que qualquer incerteza, qualquer alteração no total resultará em um desempenho pior.


Mas, de fato, o futuro é incerto! E o retorno do Parâmetro A também é incerto. A melhor escolha, de fato, é confiar na imprevisibilidade. Muitas vezes, um parâmetro com um retorno máximo mais baixo, mas uma previsibilidade superior (menor flutuação) será preferível a um parâmetro com alto retorno, mas uma previsibilidade fraca.


O único que você pode ter certeza é que você não conhece o futuro do mercado, e pensar que você sabe como o mercado vai atuar com base em dados passados ​​é um erro. Por sua vez, você deve reconhecer essa imprevisibilidade em suas previsões Forex.


Isso não significa necessariamente que devemos usar o Parâmetro B, porque mesmo os retornos mais baixos do Parâmetro A funcionam melhor do que o Parâmetro B; Isso é apenas para mostrar que os Parâmetros de Otimização podem resultar em testes que exageram os resultados futuros prováveis, e esse pensamento não é óbvio.


Considerações globais de comércio de algoritmo Forex.


Desde essa primeira experiência de negociação de Forex algorítmica, construí vários sistemas de negociação automatizados para clientes e posso dizer que há espaço para explorar e continuar a análise de Forex a ser feito. Por exemplo, recentemente construí um sistema baseado em encontrar os chamados movimentos de "Big Fish"; isto é, grandes variações de pips em pequenas e minúsculas unidades de tempo. Este é um assunto que me fascina.


Construir o seu próprio sistema de simulação FX é uma excelente opção para aprender mais sobre o comércio de Forex e as possibilidades são infinitas. Por exemplo, você poderia tentar decifrar a distribuição de probabilidade das variações de preços em função da volatilidade em um mercado (EUR / USD, por exemplo), e talvez criar um modelo de simulação de Monte Carlo usando a distribuição por estado de volatilidade, usando qualquer grau de precisão que você deseja. Vou deixar isso como um exercício para o leitor ansioso.


O mundo Forex pode ser esmagador às vezes, mas espero que este write-up deu-lhe alguns pontos sobre como começar em sua própria estratégia de negociação Forex.


Leitura adicional.


Hoje em dia, existe um vasto conjunto de ferramentas para construir, testar e melhorar as Automatizações do Sistema de Negociação: Trading Blox para testes, NinjaTrader para negociação, OCaml para programação, para citar alguns.


Eu li extensivamente sobre o mundo misterioso que é o mercado de moeda. Aqui estão alguns write-ups que eu recomendo para programadores e leitores entusiasmados:


Compreendendo o básico.


Sobre o que Forex é negociado?


O comércio Forex (ou FX) está comprando e vendendo por meio de pares de moedas (por exemplo, USD vs. EUR) no mercado de câmbio.


Como o Forex ganha dinheiro?


Os corretores de Forex ganham dinheiro através de comissões e taxas. Os comerciantes de Forex ganham (ou perdem) o dinheiro com base em seu tempo: se eles conseguirem vender alto o suficiente em comparação com quando eles compraram, eles podem lucrar.


O que há para testar uma estratégia de negociação?


Backtesting é o processo de testar uma estratégia ou sistema específico usando os eventos do passado.


O que é o comércio algorítmico?


A negociação algorítmica é quando um robô / programa usa um conjunto de regras que informam quando comprar ou vender.

No comments:

Post a Comment