Descrição de um projeto completo para projetar e implementar um sistema de gerenciamento de risco e de negociação de ponta Fornecendo uma combinação altamente acessível de bom design de software, modelos matemáticos práticos e práticas empresariais mais utilizadas hoje em dia, Este livro armas você com tudo que você precisa para criar um sistema sofisticado de negociação e gerenciamento de risco apropriado para a maioria das classes de ativos. Gurav Mengla, um designer de software de sistema de negociação financeira superior, baseia-se em seus anos de experiência no Barclays, HSBC e outras instituições financeiras líderes para cortar as complexidades do design do sistema de negociação, oferecendo soluções testadas para praticamente todos os desafios técnicos à negociação automatizada Concepção e implementação do sistema. Repleto de estudos de caso e exemplos de instituições financeiras de topo, em todo o mundo, com detalhes de projeto do sistema e código fonte enfatiza extensibilidade e escalabilidade com estratégias para incorporar novos modelos de forma integrada em sistemas existentes recursos abrangente cobertura dos modelos financeiros mais utilizados e práticas mais prevalentes Na comunidade financeira hoje Explora subsistema de relatórios diários, semanais, mensais e anuais que agregam o risco em todos os níveis organizacionais de secretária para departamento para divisão para toda a empresa CD inclui dados valiosos e detalhes de design do sistema do livro, incluindo C código fonte e sistema Modelsshow mais Detalhes do produto Formato Mixed media product 512 pages Dimensões 150 x 250mm 505g Data de publicação 09 Nov 2016 Editor John Wiley amp Sons Inc Publicação Cidade / País New York, Estados Unidos Idioma Inglês ISBN10 0471667706 ISBN13 9780471667704 Faixa de venda 993,684 As pessoas que compraram este artigo também compraram Outros livros nesta série Bem-vindo a um Book Depository mais colorido Como muitos livros para encontrar e amar como sempre, com um novo logotipo, mais cores, e como sempre livre entrega mundial. Aproveite o nosso novo site Siga-nos Explore Como podemos ajudar Junte-se a nós Material importante Aceitamos estes métodos de pagamento copiar 2016 The Book Depository Ltd. Reino Unido. 5124926Building Automated Trading Systems, 1 ª Edição Principais Características Ensina o design do sistema financeiro e desenvolvimento a partir do zero usando o Microsoft Visual C 2005. Fornece dezenas de exemplos que ilustram as abordagens de programação no livro Capítulos são suportados por screenshots, equações, exemplo Excel Planilhas e código de programação. Descrição Nos próximos anos, as indústrias proprietárias de trading e hedge funds migrarão em grande parte para sistemas automatizados de seleção e execução de negócios. Na verdade, isso já está acontecendo. Enquanto vários livros de finanças fornecem código C para derivativos de preços e realização de cálculos numéricos, nenhum aborda o tópico a partir de uma perspectiva de projeto de sistema. Este livro será dividido em duas técnicas de seçõesprogramming e sistema automatizado de comércio (ATS) technologyand ensinar o projeto de sistema financeiro e desenvolvimento do absoluto chão usando Microsoft Visual C 2005. MS Visual C 2005 foi escolhido como a linguagem de implementação principalmente porque a maioria das empresas comerciais E grandes bancos desenvolveram e continuam a desenvolver seus algoritmos proprietários em ISO C e Visual C oferece a maior flexibilidade para incorporar esses algoritmos legados em sistemas de trabalho. Além disso, o Framework eo ambiente de desenvolvimento fornecem as melhores bibliotecas e ferramentas para o rápido desenvolvimento de sistemas de negociação. A primeira seção do livro explica o Visual C 2005 em detalhes e concentra-se no conhecimento de programação necessário para o desenvolvimento automatizado do sistema de negociação, incluindo design orientado a objeto, delegados e eventos, enumerações, geração de números aleatórios, temporização e objetos timer e gerenciamento de dados com STL E coleções. Além disso, uma vez que a maior parte do código legado e código de modelagem nos mercados financeiros é feito em ISO C, este livro examina em profundidade vários tópicos avançados relacionados ao gerenciamento gerenciado / não gerenciado de memória e interoperabilidade. Além disso, este livro fornece dezenas de exemplos que ilustram o uso de conectividade de banco de dados com ADO e um extenso tratamento de SQL e FIX e XML / FIXML. Tópicos avançados de programação, como threading, soquetes, bem como usando C para se conectar ao Excel também são discutidos em comprimento e com suporte por exemplos. A segunda seção do livro explica preocupações tecnológicas e conceitos de design para sistemas automatizados de negociação. Especificamente, os capítulos são dedicados ao tratamento de feeds de dados em tempo real, gerenciamento de ordens no livro de ordens de troca, seleção de posições e gerenciamento de riscos. Um. dll está incluído no livro que emulará a conexão a uma indústria API amplamente utilizada (Trading Technologies, Inc. s XTAPI) e fornecerá maneiras de testar algoritmos de gerenciamento de posição e ordem. Padrões de projeto são apresentados para sistemas de mercado baseados em análise técnica, bem como para sistemas de mercado que utilizam spreads intermercados. Como todos os capítulos giram em torno de programação de computadores para a engenharia financeira e desenvolvimento de sistemas de comércio, este livro vai educar comerciantes, engenheiros financeiros, analistas quantitativos, estudantes de finanças quantitativas e até mesmo programadores experientes sobre questões tecnológicas que giram em torno do desenvolvimento de aplicações financeiras em um Microsoft Ambiente ea construção e implementação de sistemas e ferramentas de negociação em tempo real. Audiência primária: engenheiros financeiros, analistas quantitativos, programadores em empresas comerciais estudantes de pós-graduação em engenharia financeira e cursos de mercados financeiros e programas. Benjamin Van Vliet Ben Van Vliet é Professor do Instituto de Tecnologia de Illinois (IIT), onde também atua como Diretor Associado do M. S. Mercados Financeiros. Na IIT ele ensina cursos em finanças quantitativas, C e programação, e design e desenvolvimento automatizado de sistema de negociação. Ele é vice-presidente do Instituto de Tecnologia de Mercado, onde preside o conselho consultivo para o programa Certified Trading System Developer (CTSD). Ele também atua como editor de séries da série Financial Markets Technology para a Elsevier / Academic Press e consulta extensivamente na indústria de mercados financeiros. O Sr. Van Vliet é também autor de Modeling Financial Markets com Robert Hendry (2003, McGraw Hill) e Building Automated Trading Systems (2007, Academic Press), além de vários artigos nas áreas de finanças e tecnologia e Pesquisa em várias conferências acadêmicas e profissionais Afiliações e Experiência Professora e Diretora Adjunta do Programa de Mestrado em Mercados Financeiros da Escola de Negócios Stuart, Instituto de Tecnologia de Illinois, EUA Publicação RecenteTSL AUTOMATICAMENTE PROJETOS, TESTS E WRITES TRADING SYSTEMS AND REQUIRES NO PROGRAMMING ATENÇÃO: 6 DEZEMBRO DE 2016: Várias Novas Demonstrações foram adicionadas à página Flash Demos aqui: Vá para a página de Demonstrações Flash raquo Aproveite a TSL ESTARÁ NA EXPO INTERNACIONAL DE TRADERS EM LAS VEGAS 16-18 DE NOVEMBRO DE 2016 Mike Barna, Presidente e Fundador do Trading System Lab estará falando na 2016 Las Vegas International Traders Expo em 17 e 18 de novembro. Mike estará falando e dando demos ao vivo na TSL, EVORUN e DAS durante vários Sessões agendadas. Além disso, demonstrações não programadas TSL, reuniões e grupos de discussão serão realizadas durante toda a Expo. Texto Mike no número de telefone de contato rápido à direita se você estiver na Expo e quiser falar com Mike em particular, fazer parte de um pequeno grupo, ou se você deseja ver quaisquer características específicas da TSL durante qualquer das sessões palestras e Demos Este é o grande evento comercial do ano e você não deve perdê-la. O registo é GRÁTIS. O link está aqui: Vá para o Las Vegas Traders Internacional Expo 2016 raquo TSL está satisfeito para anunciar a liberação de DAS: TSL é fácil de usar, mas DAS leva a facilidade de uso para outro nível. O DAS vai além do EVORUN proporcionando um maior nível de controle sobre a coreografia de projeto automático que ocorre entre o Linear Automático do Código de Máquina com Mecanismo de Programação Genética e as rotinas de Simulação Integrada de Negociação inerentes à TSL. DAS permite que o usuário humano para avaliar o efeito de vários critérios comerciais muito mais rápido do que antes, com controle direto sobre o motor durante o tempo de design. O DAS explora as capacidades de geração de ALPHA do mecanismo de escrita de código TSL a um nível que era anteriormente inalcançável. Usando o DAS, os usuários podem agora direcionar e redirecionar a execução, em Tempo de Design, durante a execução do projeto, não simplesmente configurando a execução e, em seguida, executando a execução. O EVORUN fornece ao usuário um mecanismo automático de execução de vários lotes permitindo uma execução mais longa cobrindo muitas variantes de negociação e simulação a serem exploradas durante a execução, contudo o DAS conecta o designer humano com o mecanismo de design permitindo uma vasta gama de cenários imediatos A ser explorado. A descoberta conceitual do DAS DAS é tanto criativa e única neste negócio e fornece ao usuário ALPHA design e capacidades de produção que poderia ter sonhado apenas há alguns anos atrás, observa TSLs Presidente, Michael Barna. O plano agora é que o DAS será oficialmente lançado aos clientes em ou antes da Feira Internacional de Comerciantes de Novembro, em Las Vegas, onde a TSL estará dando várias apresentações na TSL, EVORUN e DAS. Novos vídeos DAS podem ser encontrados aqui-Demo 57 e 58: Vá para o DAS Flash Demos raquo Super Buffer Update: Dentro do LAIMGP Trading Systems patenteado são armazenados para implementação durante a execução. Anteriormente, 30 Melhores Programas de Sistema de Negociação seriam disponibilizados para implementação quando a execução fosse encerrada. A TSL aumentou este Buffer do Programa de Melhor Trading Systems para 300. Assim, um usuário pode selecionar de uma lista muito maior de Sistemas de Negociação quando a execução for encerrada. Este Buffer aumentado estará disponível para Basic Runs, EVORUN e DAS. Leia abaixo para obter informações sobre o DAS. No atual relatório de junho de 2016, a TSL permanece no topo da lista de Sistemas de Negociação avaliada em Dados Sequestrados por Verdade de Futuros. A TSL possui o Sistema de Bond 1 e 2, 2 dos Top 10 Sistemas eMini SP, 1 Sistema de Gás Natural, 1 Sistema desde a Data de Lançamento e 2 dos Top 10 Sistemas desde a Data de Lançamento. Human Designed logo em 2007. A Futures Truth é um CTA, tem uma equipe de designers do sistema de negociação, trilhas mais de 700 Trading System Market-Models apresentados por mais de 80 Quants de estratégia de negociação em todo o mundo e tem sido rastreamento de sistemas de negociação desde 1985. TSLs clientes variam de Iniciante para PhD Quant. Os sistemas de negociação de fim de dia (EOD) são os mais simples e rápidos para o Design de Máquinas. Mesmo em uma carteira de muitos mercados, o motor TSL auto-designs sistemas de negociação em uma taxa muito alta graças a manipulações de GP de registro patenteado e simulação de alta velocidade, fitness e algoritmos de tradução. Nossa tecnologia de GP está bem documentada no livro universitário líder em programação genética escrito por um dos parceiros da TSL, Frank Francone. Particularmente importante é o fato de que, após 8 anos de testes e classificação independente da Sequestered Data, a TSL Machine Designed Trading Algorithms ocupa mais altas classificações de desempenho do que qualquer outra empresa de desenvolvimento - 5 dos Top 10 desde a Data de Lançamento, 3 dos 10 melhores sistemas Para os últimos 12 meses, e 2 dos Top 10 sistemas eMini SP. End of Day sistemas de negociação são muito populares, no entanto intraday sistemas de comércio apelar para os comerciantes mais risco adverso e interesse em curto prazo sistemas de negociação tem aumentado nos últimos meses. Talvez devido à preocupação com taxas de juros mais altas, colapso de energia e preço de commodities, incerteza geopolítica, terrorismo ou a recente volatilidade do mercado, muitos comerciantes estão menos dispostos a manter posições durante a noite. A lógica aqui é que com risco overnight, o grau de exposição e, conseqüentemente, a chance de maiores reduções é aumentada. Naturalmente, a volatilidade intraday pôde desmoronar ou expandir, conduzindo aos rendimentos silenciados ou ao risco substancial também, particularmente para o comerciante direcional do short-term. No entanto, não mantendo uma posição de negociação durante a noite tem um grande apelo, especialmente se os custos de negociação pode ser controlada e aliança de produção do sistema de negociação é suficiente. TSL tem uma grande variedade de características de negociação de dia, incluindo Funções de Fitness a curto prazo, pré-processadores e Daytrading tipos específicos de negociação. Os usuários da TSL Machine podem selecionar a freqüência de negociação, metas comerciais médias, horários de negociação, metas de levantamento e uma série de outros objetivos de projeto. Além disso, as configurações de entrada para TradeStation e MultiCharts são exportadas permitindo importação fácil para essas plataformas. A TSL tem o prazer de anunciar que a CSI COMMODITY SYSTEMS, INC. Ea TSL formaram um acordo para fornecer aos nossos clientes um portfólio de dados de commodities, especificamente projetados para TSL Machine Learning. Para obter esses dados é necessária uma assinatura de dados CSI. Nenhum outro fornecedor fornece esses dados especificamente projetados. Esses dados diários permitirão um melhor desenho da Estratégia de Negociação usando TSL e é o resultado de muitos anos de pesquisa e desenvolvimento de requisitos de dados. Sem dados apropriados, os projetos robustos da estratégia negociando são muito difíceis de realizar. Esses portfólios de dados são baixados e instalados como parte do aplicativo de dados CSI. Arquivos auxiliares como arquivos. DOPs e Attributes. INI são pré-montados pela TSL para permitir a importação de dados fácil para TradeStation. Outras plataformas que podem ler dados de preço ASCII, MetaStock ou CSI podem carregar esses dados também para uso com TSL. Entre em contato com a TSL para saber mais sobre os novos dados de projeto do sistema de negociação. A CSI demonstrou ter os dados mais precisos disponíveis sobre os produtos. Para aqueles de nós que vivem e trabalham no Vale do Silício, a TSL está patrocinando um grupo MEETUP para pessoas interessadas em Aprendizagem de Máquinas aplicada a Estratégias de Negociação onde iremos explorar várias aplicações e personalizações da plataforma TSL. Você pode se inscrever aqui e conhecer outros profissionais comerciais que estão trabalhando com TSL e tecnologia de aprendizagem de máquina. Junte-se à Silicon Valley Aprendizagem de Máquinas para Estratégias de Negociação Meetup Group raquo TSL tem o prazer de lançar a versão 1.3.2 da TSL Carteiras, Pares e Opções e a mais recente compilação de 2015 para Sistemas Direcionais de Mercado Único. Entre em contato conosco para obter informações sobre essas últimas compilações que se concentram em direcional, longo ou curto, daytrading, Fitness APIs e novos recursos de entrada, risco e saída. Os últimos relatórios de Verdade de Futuros ainda mostram estratégias de negociação concebidas pela TSL Machine, avaliadas em Sequestered Data 7 anos após seus projetos foram congelados e lançados para acompanhamento independente, o que aponta para robustez no futuro para estas TSL Machine Designed Strategies. QUANT SYSTEMS ATUALIZAÇÃO DO LABORATÓRIO: A TSL continua a ser a principal plataforma de escolha para o profissional e profissional não profissional. A Quant Systems Lab, no entanto, é uma plataforma de aprendizagem de nível institucional altamente sofisticada que oferece recursos mais adequados ao programador de quantos avançados que rotineiramente usa uma variedade de APIs e linguagens e ambientes de desenvolvimento de programação. Recursos QSLs não são encontrados em qualquer outra plataforma de desenvolvimento de estratégia comercial no mundo. QSL também abrange todos os recursos de desenvolvimento ricos encontrados na plataforma TSL base. QSL está atualmente em desenvolvimento. A RML ea TSL estão procurando ativamente parcerias com instituições que desejem dirigir esse ambiente de desenvolvimento e aplicação em uma direção que seja apropriada para seus objetivos e desejos em relação à abordagem de negociação, pesquisa e desenvolvimento e ambientes de implementação. Este é um ótimo momento para injetar suas próprias necessidades na próxima onda de Aprendizagem de Máquinas aplicada ao design de Estratégia de Negociação. Entre em contato com TSL ou RML diretamente para obter mais informações sobre este novo e exclusivo e emocionante desenvolvimento. TSL é um Algoritmo de Aprendizagem de Máquina que escreve automaticamente Sistemas de Negociação e os Sistemas de Negociação criados por esta máquina são top rated por Futures Truth e foram avaliados em Sequestered Data. Nenhuma programação é necessária. Nenhuma outra ferramenta do Sistema de Negociação no mundo atingiu este nível de realização. TSL é uma plataforma notável dado o fato que os sistemas negociando projetados pela máquina de TSL sobre 7 anos há são ainda rated por Futures Truth. A TSL emprega um sistema de indução automática patenteado de código de máquina com mecanismo de programação genética capaz de velocidades muito altas e TSL produz código de produção, reduzindo ou eliminando a necessidade de esforços de programação de sistemas de negociação e experiência em análise técnica. O Executive Brief e Demo localizado abaixo lhe dará uma visão geral desta poderosa ferramenta de produção estratégia comercial. É importante notar que a TSL projeta um número ilimitado de Estratégias de Negociação em qualquer mercado, qualquer prazo, dia de negociação ou fim de dia, bem como carteiras, pares e opções, mais uma vez, sem programação necessária. Os clientes variam de iniciantes a nível de doutor Quant investigadores e desenvolvedores, nacionais e internacionais, bem como CTAs / CPOs, Hedge Funds e Prop lojas. Agora, com 7 anos de experiência servindo clientes comerciais, TSL adquiriu um alto nível de experiência em Aprendizado de Máquinas como aplicado a Sistemas de Negociação. A TSL oferece treinamento e consultoria individual sem custo adicional para os clientes, para ajudar a garantir que os clientes aproveitem ao máximo o motor TSL. Após 7 anos de testes de terceiros sobre dados sequestrados, a forma mais extrema de testes diretos, a TSL Machine Designed Trading Systems ainda ocupa 4 Das 10 principais Estratégias de Negociação desde a Data de Lançamento, seguidas pela Verdade de Futuros, incluindo o 1 Sistema desde a data de lançamento, 2 dos 10 Sistemas Top 10 dos últimos 12 meses e 2 dos 10 principais Sistemas eMini SP. Esses sistemas de código aberto foram projetados pela TSL Machine sem necessidade de programação. Observe que esses sistemas ES foram projetados nos dados completos do SP 500 Futures, e não nos eMini SP Futures Data, mas continuaram sendo rastreados e classificados em dados ES que eles não foram projetados originalmente, em 2007. Vá para o site Futures Truth Raquo Relatórios históricos adicionais podem ser encontrados nos relatórios históricos da Futures Truths, bem como no material de apresentação da TSL. Ir para a Carta de Opinião de Verdade de Futuros raquo Trading System Lab reduz a complexidade do design de estratégia de negociação para baixo a algumas configurações e cliques do mouse, Economizando tempo, dinheiro e programação. Este Algoritmo de Estratégia de Negociação de Design de Auto utiliza um programa genético avançado, patenteado, baseado no registro (não deve ser confundido com um Algoritmo Genético) que não está disponível em nenhum outro lugar do mundo. Essas máquinas projetadas estratégias de negociação permaneceu robusto através dos anos de fusão financeira extrema e recuperação posterior. Essa mudança de paradigma mostrou que um algoritmo de aprendizado de máquina devidamente escolhido e desenvolvido pode projetar automaticamente estratégias de negociação robustas. O LAIMGP foi desenvolvido pela RML Technologies, Inc. e as rotinas de Simulação, Pré-processamento, Tradução, Fitness e Integração foram realizadas pelo Trading System Lab (TSL). TSL licenças do pacote completo para indivíduos, empresas comerciais proprietárias e hedge funds. Pré-processar seus dados, executar o programa genético avançado e, em seguida, implementar a sua plataforma de negociação. Demonstramos esse processo em um demo flash de 6 minutos, disponível no link abaixo. Todas as estratégias de negociação da TSL são exportadas da máquina totalmente divulgadas em código aberto. As estratégias da TSL têm sido classificadas como desempenho de terceiros em dados sequestrados. Argumentos sobre o uso de dados fora da amostra (OOS) são geralmente centrados em torno do possível uso acidental de que os dados estendidos nos processos de desenvolvimento. Se isso acontecer, então os dados cegos não é mais cego, ele foi corrompido. Para eliminar essa possibilidade, a TSL enviou estratégias projetadas por máquinas para testes em Sequestered Data. O que isto significa é que a medição de desempenho da estratégia ocorre no futuro. Uma vez que os dados retidos não existem quando as estratégias foram projetadas, não há nenhuma maneira que esses dados de avaliação podem ser usados acidentalmente no processo de desenvolvimento. Estratégias produzidas pela TSL Machine foram testadas em Sequestered Data pelo terceiro independente, Futures Truth e são top rated, batendo a maioria dos outros sistemas de negociação humana ou projetada manualmente. Para aqueles de vocês que perderam o webinar do LinkedIn Automated Trading Strategies Group apresentado pelo Trading System Lab intitulado: WHO DESIGNS BETTER TRADING STRATEGIES UM HUMANO OU UMA MÁQUINA você pode baixá-lo aqui: Download do TSL Webinar: raquo O período gratuito acabou para o novo Kindle Book contendo nosso artigo intitulado: Machine Designed Trading Systems, no entanto você pode fazer o download deste livro Kindle barato aqui: Livro Kindle raquo TSL está agora oficialmente no Mapa do Vale do Silício. Mapa de Silicon Valley e posição de TSL (posição de 6 horas) raquo TSL é uma máquina que projeta algoritmos, caminhadas dianteiras, backtests, corridas múltiplas, EVORUNS e código de exportação em uma variedade de línguas. No que diz respeito à robustez dianteira, a TSL detém inúmeros rankings superiores com algoritmos de negociação projetados pela máquina, conforme relatado pela empresa de relatórios independente, Futures Truth. Estes (máquina projetada) sistemas out-performed, na caminhada para a frente, a maioria ou todos os outros (manualmente projetado) sistemas de rastreamento, e incluiu derrapagem e comissão no teste. (Ver referências abaixo) A mudança de paradigma é que esses sistemas foram projetados por uma máquina, não um humano, ea TSL Machine projeta milhões de sistemas em taxas muito altas usando um algoritmo avançado, exclusivo, patenteado (LAIMGP), projetado especificamente para automaticamente Sistemas de comércio de design. Comerciantes sem experiência em programação podem executar a plataforma TSL, produzir os algoritmos de negociação e implantá-los em uma variedade de plataformas de negociação, incluindo TradeStation, MultiCharts e OMS / EMS especializados. Os programadores e quants podem realizar trabalhos ainda mais avançados desde que os conjuntos de terminais são totalmente personalizáveis. TSL é capaz de usar multi-dados de DNA dentro de seus pré-processadores. Veja Demo 48 onde usamos o índice de volatilidade CBOE (VIX) para o Design de Máquinas eMini SP Trading System. Este tipo de trabalho de design é simples de realizar na TSL, já que o pré-processador é completamente personalizável, usando seus padrões e indicadores exclusivos em um único ou múltiplo projeto de fluxo de dados. Os pré-processadores avançados têm demonstrado oferecer um impulso adicional ao desempenho do sistema de negociação. A TSL agora oferece um tradutor BLOX. Entre em contato conosco ou Darryl Tremelling na Voyager Trading para obter detalhes adicionais. Como o Software TSL que escreve Software Machine out-projetar outras submissões humanas para FT sem programação necessária Como funcionam os sistemas de negociação projetados na máquina Nossa cronologia de desenvolvimento está bem coberta em nossos White Papers e Flash Demos disponíveis no site da TSL. O WEBINAR Linkden Automated Trading Strategies pode ser encontrado aqui: Vá para o LinkedIn raquo WEBINAR O 2015 OUANTLABS WEBINAR pode ser encontrada aqui: Vá para o 2015 QUANTLABS WEBINAR raquo O 2014 OUANTLABS WEBINAR pode ser encontrada aqui: Vá para o 2014 QUANTLABS WEBINAR raquo O que É o Optimum Bar Size para trocar 100 tick, 15 minutos, diariamente. O novo módulo EVORUN da TSL permite que as estratégias sejam projetadas pela máquina enquanto itera sobre o tamanho da barra, o tipo de comércio, o pré-processador, a freqüência de negociação e a função de aptidão em um multirun. EVORUN e TSL Versão 1.3 Demos 51 e 52 já estão disponíveis aqui: Vá para TSL Demos raquo TODAS AS ESTRATÉGIAS DA TSL SÃO TOTALMENTE DIVULGADAS EM CÓDIGO ABERTO. QUEREM LER UM LIVRO SOBRE O PROGRAMA GENÉTICO DE TSL Frank Francone é co-autor do livro de texto universitário Genetic Programming: An Introduction (A série Morgan Kaufman em Inteligência Artificial). TSL tem vários projetos de HFT em andamento em vários servidores colocated perto de motores correspondentes de troca. As estratégias projetadas pela TSL podem ser implementadas em bases de dados baseadas em pedidos ou barras sub-secundárias. Consulte a Demonstração 50. Entre em contato com a TSL para obter informações adicionais. Usando OneMarketData, TSL pode Auto-Design High Frequency Trading Strategies. A Demonstração 50 mostra um exemplo usando granularidade de 250 milissegundos. Dados do livro de pedidos criados usando o OneMarketDatas OneTick Complex Event Order Aggregator Book Book. TSL é um stochastic, evolucionário, multirun, Estratégia Trading autodesigner que produz e exporta código portátil em uma variedade de línguas. Este é um fim completo para terminar a plataforma de design do sistema de negociação e autodesign sistemas de negociação de alta freqüência, Day Trading, EOD, pares, carteiras e sistemas de negociação de opções em poucos minutos sem programação. Veja Teses, White Papers, PPT Presentations e outra documentação sob o Literature Link à esquerda. Assista as demonstrações em Flash à esquerda para uma breve apresentação sobre esta nova tecnologia. A Plataforma TSL produz Machine Designed, Trading Strategies em taxas ultra altas graças a avaliações de nível de registro. Nenhuma outra plataforma de desenvolvimento de estratégia de negociação no mercado fornece esse nível de poder. O programa LAIMGP-Genetic dentro da TSL é um dos algoritmos mais poderosos disponíveis hoje e opera a taxas muito mais rápidas do que os algoritmos concorrentes. Com TSL, sistemas de negociação e código são escritos para você em linguagens incluindo C, JAVA, Assembler, EasyLanguage e outros através de tradutores. Frank Francone, presidente da RML Technologies, Inc. preparou uma demonstração flash intitulada Genetic Programming for Predictive Modeling. RML produz o mecanismo de programação genética Discipulus que é usado dentro TSL. Este tutorial é uma excelente maneira de aprender sobre Discipulus e irá fornecer uma base para a sua compreensão contínua de TSLs Auto-Design de Trading System Paradigm Shift. TSL simplifica a importação de dados, pré-processamento e design de sistemas de negociação usando o desempenho do sistema de negociação como fitness. Certifique-se de assistir os demos TSL como a plataforma TSL é especificamente orientada para o projeto do sistema de negociação. Baixe o tutorial do Discipulus A tecnologia utilizada no Trading System Lab é 60 a 200 vezes mais rápida do que outros algoritmos. Veja os White Papers sobre os estudos de velocidade no SAIC aqui: Vá para white papers raquo Telefone: 1-408-356-1800 e-mail: (protegido) Melhor linguagem de programação para sistemas de negociação algorítmica Por Michael Halls-Moore em 26 de julho de 2013 Um dos As perguntas mais freqüentes que recebo no mailbag 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 negociação algorítmica e como as decisões relativas à implementação afetam a escolha da linguagem. Em primeiro lugar, serão consideradas as principais componentes de um sistema de negociação algorítmica, tais como as ferramentas de pesquisa, otimizador de portfólio, gerente de risco e mecanismo de execução. Posteriormente, diferentes estratégias de negociação serão examinadas e como elas afetam a concepção do sistema. Em especial, a frequência das negociações e o provável volume de transacções serão discutidos. Uma vez selecionada a estratégia de negociação, é necessário arquitetar todo o sistema. Isso inclui a escolha do hardware, do (s) sistema (s) operacional (is) e da resiliência do sistema contra eventos raros, potencialmente catastróficos. Enquanto a arquitetura está sendo considerada, devemos ter devidamente em conta o desempenho - tanto para as ferramentas de pesquisa como para o ambiente de execução ao vivo. O que é o sistema de negociação que tenta fazer Antes de decidir-se sobre a mais melhor língua com que para escrever um sistema negociando automatizado é necessário definir os requisitos. Será que o sistema vai ser puramente baseado na execução Será que o sistema requer um módulo de gestão de risco ou construção de carteira Será que o sistema requer um backtester de alto desempenho Para a maioria das estratégias o sistema de negociação pode ser dividido em duas categorias: Pesquisa e geração de sinal. A pesquisa se preocupa com a avaliação do desempenho de uma 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 ea complexidade algorítmica terão um grande impacto na intensidade computacional do backtester. A velocidade ea simultaneidade da CPU são frequentemente os fatores limitantes na otimização da velocidade de execução da pesquisa. Geração de sinal está preocupado com a geração de um conjunto de sinais de negociação a partir de um algoritmo e enviar tais ordens para o mercado, geralmente através de uma corretora. Para certas 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 freqüentemente o fator limitante na otimização de sistemas de execução. Assim, a escolha das linguagens para cada componente de todo o seu sistema pode ser bastante diferente. Tipo, Frequência e Volume da Estratégia O tipo de estratégia algorítmica empregada terá um impacto substancial na concepção do sistema. Será necessário considerar os mercados sendo negociados, a conectividade com fornecedores de dados externos, a freqüência e o volume da estratégia, o trade-off entre facilidade de desenvolvimento e otimização de desempenho, bem como qualquer hardware personalizado, Servidores, GPUs ou FPGAs que possam ser necessários. As escolhas tecnológicas para uma estratégia de ações de baixa freqüência nos EUA serão muito diferentes das de uma estratégia de arbitragem estatística de alta freqüência negociada no mercado de futuros. Antes da escolha da linguagem muitos fornecedores de dados devem ser avaliados que pertencem a uma estratégia à mão. Será necessário considerar a conectividade com o fornecedor, a estrutura de qualquer API, a oportunidade dos dados, os requisitos de armazenamento e a resiliência em face de um fornecedor ficar offline. Também é aconselhável possuir acesso rápido a vários fornecedores. Vários instrumentos têm todos os seus próprios caprichos de armazenamento, exemplos dos quais incluem múltiplos símbolos de ticker para ações e datas de vencimento para futuros (sem mencionar quaisquer dados OTC específicos). Isso precisa ser incorporado ao design da plataforma. Freqüência da estratégia é provável que seja um dos maiores drivers de como a pilha de tecnologia será definida. Estratégias empregando dados mais freqüentemente do que minuciosamente ou em segundo lugar barras exigem consideração significativa com relação ao desempenho. Uma estratégia que ultrapassa as barras secundárias (isto é, dados de carraça) conduz a um design conduzido pelo desempenho como o requisito primário. Para estratégias de alta freqüência, uma quantidade substancial de dados de mercado precisará ser armazenada e avaliada. Software como HDF5 ou kdb são comumente usados para essas funções. Para processar os volumes extensos de dados necessários para aplicações HFT, um sistema de backtester e de execução extensivamente otimizado deve ser usado. C / C (possivelmente com algum montador) é provável que o candidato linguagem mais forte. Ultra-high frequency strategies will almost certainly require custom hardware such as FPGAs, exchange co-location and kernal/network interface tuning. Research Systems Research systems typically involve a mixture of interactive development and automated scripting. The former often takes place within an IDE such as Visual Studio, MatLab or R Studio. The latter involves extensive numerical calculations over numerous parameters and data points. This leads to a language choice providing a straightforward environment to test code, but also provides sufficient performance to evaluate strategies over multiple parameter dimensions. Typical IDEs in this space include Microsoft Visual C/C, which contains extensive debugging utilities, code completion capabilities (via Intellisense) and straightforward overviews of the entire project stack (via the database ORM, LINQ ) MatLab. which is designed for extensive numerical linear algebra and vectorised operations, but in an interactive console manner R Studio. which wraps the R statistical language console in a fully-fledged IDE Eclipse IDE for Linux Java and C and semi-proprietary IDEs such as Enthought Canopy for Python, which include data analysis libraries such as NumPy. SciPy. scikit-learn and pandas in a single interactive (console) environment. For numerical backtesting, all of the above languages are suitable, although it is not necessary to utilise a GUI/IDE as the code will be executed in the background. The prime consideration at this stage is that of execution speed. A compiled language (such as C) is often useful if the backtesting parameter dimensions are large. Remember that it is necessary to be wary of such systems if that is the case Interpreted languages such as Python often make use of high-performance libraries such as NumPy/pandas for the backtesting step, in order to maintain a reasonable degree of competitiveness with compiled equivalents. Ultimately the language chosen for the backtesting will be determined by specific algorithmic needs as well as the range of libraries available in the language (more on that below). However, the language used for the backtester and research environments can be completely independent of those used in the portfolio construction, risk management and execution components, as will be seen. Portfolio Construction and Risk Management The portfolio construction and risk management components are often overlooked by retail algorithmic traders. This is almost always a mistake. These tools provide the mechanism by which capital will be preserved. They not only attempt to alleviate the number of risky bets, but also minimise churn of the trades themselves, reducing transaction costs. Sophisticated versions of these components can have a significant effect on the quality and consistentcy of profitability. It is straightforward to create a stable of strategies as the portfolio construction mechanism and risk manager can easily be modified to handle multiple systems. Thus they should be considered essential components at the outset of the design of an algorithmic trading system. The job of the portfolio construction system is to take a set of desired trades and produce the set of actual trades that minimise churn, maintain exposures to various factors (such as sectors, asset classes, volatility etc) and optimise the allocation of capital to various strategies in a portfolio. Portfolio construction often reduces to a linear algebra problem (such as a matrix factorisation) and hence performance is highly dependent upon the effectiveness of the numerical linear algebra implementation available. Common libraries include uBLAS. LAPACK and NAG for C. MatLab also possesses extensively optimised matrix operations. Python utilises NumPy/SciPy for such computations. A frequently rebalanced portfolio will require a compiled (and well optimised) matrix library to carry this step out, so as not to bottleneck the trading system. Risk management is another extremely important part of an algorithmic trading system. Risk can come in many forms: Increased volatility (although this may be seen as desirable for certain strategies), increased correlations between asset classes, counter-party default, server outages, black swan events and undetected bugs in the trading code, to name a few. Risk management components try and anticipate the effects of excessive volatility and correlation between asset classes and their subsequent effect(s) on trading capital. Often this reduces to a set of statistical computations such as Monte Carlo stress tests. This is very similar to the computational needs of a derivatives pricing engine and as such will be CPU-bound. These simulations are highly parallelisable (see below) and, to a certain degree, it is possible to throw hardware at the problem. Execution Systems The job of the execution system is to receive filtered trading signals from the portfolio construction and risk management components and send them on to a brokerage or other means of market access. For the majority of retail algorithmic trading strategies this involves an API or FIX connection to a brokerage such as Interactive Brokers. The primary considerations when deciding upon a language include quality of the API, language-wrapper availability for an API, execution frequency and the anticipated slippage. The quality of the API refers to how well documented it is, what sort of performance it provides, whether it needs standalone software to be accessed or whether a gateway can be established in a headless fashion (i. e. no GUI). In the case of Interactive Brokers, the Trader WorkStation tool needs to be running in a GUI environment in order to access their API. I once had to install a Desktop Ubuntu edition onto an Amazon cloud server to access Interactive Brokers remotely, purely for this reason Most APIs will provide a C and/or Java interface. It is usually up to the community to develop language-specific wrappers for C, Python, R, Excel and MatLab. Note that with every additional plugin utilised (especially API wrappers) there is scope for bugs to creep into the system. Always test plugins of this sort and ensure they are actively maintained. A worthwhile gauge is to see how many new updates to a codebase have been made in recent months. Execution frequency is of the utmost importance in the execution algorithm. Note that hundreds of orders may be sent every minute and as such performance is critical. Slippage will be incurred through a badly-performing execution system and this will have a dramatic impact on profitability. Statically-typed languages (see below) such as C/Java are generally optimal for execution but there is a trade-off in development time, testing and ease of maintenance. Dynamically-typed languages, such as Python and Perl are now generally fast enough. Always make sure the components are designed in a modular fashion (see below) so that they can be swapped out out as the system scales. Architectural Planning and Development Process The components of a trading system, its frequency and volume requirements have been discussed above, but system infrastructure has yet to be covered. Those acting as a retail trader or working in a small fund will likely be wearing many hats. It will be necessary to be covering the alpha model, risk management and execution parameters, and also the final implementation of the system. Before delving into specific languages the design of an optimal system architecture will be discussed. Separation of Concerns One of the most important decisions that must be made at the outset is how to separate the concerns of a trading system. In software development, this essentially means how to break up the different aspects of the trading system into separate modular components. By exposing interfaces at each of the components it is easy to swap out parts of the system for other versions that aid performance, reliability or maintenance, without modifying any external dependency code. This is the best practice for such systems. For strategies at lower frequencies such practices are advised. For ultra high frequency trading the rulebook might have to be ignored at the expense of tweaking the system for even more performance. A more tightly coupled system may be desirable. Creating a component map of an algorithmic trading system is worth an article in itself. However, an optimal approach is to make sure there are separate components for the historical and real-time market data inputs, data storage, data access API, backtester, strategy parameters, portfolio construction, risk management and automated execution systems. For instance, if the data store being used is currently underperforming, even at significant levels of optimisation, it can be swapped out with minimal rewrites to the data ingestion or data access API. As far the as the backtester and subsequent components are concerned, there is no difference. Another benefit of separated components is that it allows a variety of programming languages to be used in the overall system. There is no need to be restricted to a single language if the communication method of the components is language independent. This will be the case if they are communicating via TCP/IP, ZeroMQ or some other language-independent protocol. As a concrete example, consider the case of a backtesting system being written in C for number crunching performance, while the portfolio manager and execution systems are written in Python using SciPy and IBPy . Performance Considerations Performance is a significant consideration for most trading strategies. For higher frequency strategies it is the most important factor. Performance covers a wide range of issues, such as algorithmic execution speed, network latency, bandwidth, data I/O, concurrency/parallelism and scaling. Each of these areas are individually covered by large textbooks, so this article will only scratch the surface of each topic. Architecture and language choice will now be discussed in terms of their effects on performance. The prevailing wisdom as stated by Donald Knuth. one of the fathers of Computer Science, is that premature optimisation is the root of all evil. This is almost always the case - except when building a high frequency trading algorithm For those who are interested in lower frequency strategies, a common approach is to build a system in the simplest way possible and only optimise as bottlenecks begin to appear. Profiling tools are used to determine where bottlenecks arise. Profiles can be made for all of the factors listed above, either in a MS Windows or Linux environment. There are many operating system and language tools available to do so, as well as third party utilities. Language choice will now be discussed in the context of performance. C, Java, Python, R and MatLab all contain high-performance libraries (either as part of their standard or externally) for basic data structure and algorithmic work. C ships with the Standard Template Library, while Python contains NumPy/SciPy. Common mathematical tasks are to be found in these libraries and it is rarely beneficial to write a new implementation. One exception is if highly customised hardware architecture is required and an algorithm is making extensive use of proprietary extensions (such as custom caches). However, often reinvention of the wheel wastes time that could be better spent developing and optimising other parts of the trading infrastructure. Development time is extremely precious especially in the context of sole developers. Latency is often an issue of the execution system as the research tools are usually situated on the same machine. For the former, latency can occur at multiple points along the execution path. Databases must be consulted (disk/network latency), signals must be generated (operating syste, kernal messaging latency), trade signals sent (NIC latency) and orders processed (exchange systems internal latency). For higher frequency operations it is necessary to become intimately familiar with kernal optimisation as well as optimisation of network transmission. This is a deep area and is significantly beyond the scope of the article but if an UHFT algorithm is desired then be aware of the depth of knowledge required Caching is very useful in the toolkit of a quantitative trading developer. Caching refers to the concept of storing frequently accessed data in a manner which allows higher-performance access, at the expense of potential staleness of the data. A common use case occurs in web development when taking data from a disk-backed relational database and putting it into memory. Any subsequent requests for the data do not have to hit the database and so performance gains can be significant. For trading situations caching can be extremely beneficial. For instance, the current state of a strategy portfolio can be stored in a cache until it is rebalanced, such that the list doesnt need to be regenerated upon each loop of the trading algorithm. Such regeneration is likely to be a high CPU or disk I/O operation. However, caching is not without its own issues. Regeneration of cache data all at once, due to the volatilie nature of cache storage, can place significant demand on infrastructure. Another issue is dog-piling . where multiple generations of a new cache copy are carried out under extremely high load, which leads to cascade failure. Dynamic memory allocation is an expensive operation in software execution. Thus it is imperative for higher performance trading applications to be well-aware how memory is being allocated and deallocated during program flow. Newer language standards such as Java, C and Python all perform automatic garbage collection . which refers to deallocation of dynamically allocated memory when objects go out of scope . Garbage collection is extremely useful during development as it reduces errors and aids readability. However, it is often sub-optimal for certain high frequency trading strategies. Custom garbage collection is often desired for these cases. In Java, for instance, by tuning the garbage collector and heap configuration, it is possible to obtain high performance for HFT strategies. C doesnt provide a native garbage collector and so it is necessary to handle all memory allocation/deallocation as part of an objects implementation. While potentially error prone (potentially leading to dangling pointers) it is extremely useful to have fine-grained control of how objects appear on the heap for certain applications. When choosing a language make sure to study how the garbage collector works and whether it can be modified to optimise for a particular use case. Many operations in algorithmic trading systems are amenable to parallelisation . This refers to the concept of carrying out multiple programmatic operations at the same time, i. e in parallel. So-called embarassingly parallel algorithms include steps that can be computed fully independently of other steps. Certain statistical operations, such as Monte Carlo simulations, are a good example of embarassingly parallel algorithms as each random draw and subsequent path operation can be computed without knowledge of other paths. Other algorithms are only partially parallelisable. Fluid dynamics simulations are such an example, where the domain of computation can be subdivided, but ultimately these domains must communicate with each other and thus the operations are partially sequential. Parallelisable algorithms are subject to Amdahls Law. which provides a theoretical upper limit to the performance increase of a parallelised algorithm when subject to N separate processes (e. g. on a CPU core or thread ). Parallelisation has become increasingly important as a means of optimisation since processor clock-speeds have stagnated, as newer processors contain many cores with which to perform parallel calculations. The rise of consumer graphics hardware (predominently for video games) has lead to the development of Graphical Processing Units (GPUs), which contain hundreds of cores for highly concurrent operations. Such GPUs are now very affordable. High-level frameworks, such as Nvidias CUDA have lead to widespread adoption in academia and finance. Such GPU hardware is generally only suitable for the research aspect of quantitative finance, whereas other more specialised hardware (including Field-Programmable Gate Arrays - FPGAs) are used for (U)HFT. Nowadays, most modern langauges support a degree of concurrency/multithreading. Thus it is straightforward to optimise a backtester, since all calculations are generally independent of the others. Scaling in software engineering and operations refers to the ability of the system to handle consistently increasing loads in the form of greater requests, higher processor usage and more memory allocation. In algorithmic trading a strategy is able to scale if it can accept larger quantities of capital and still produce consistent returns. The trading technology stack scales if it can endure larger trade volumes and increased latency, without bottlenecking . While systems must be designed to scale, it is often hard to predict beforehand where a bottleneck will occur. Rigourous logging, testing, profiling and monitoring will aid greatly in allowing a system to scale. Languages themselves are often described as unscalable. This is usually the result of misinformation, rather than hard fact. It is the total technology stack that should be ascertained for scalability, not the language. Clearly certain languages have greater performance than others in particular use cases, but one language is never better than another in every sense. One means of managing scale is to separate concerns, as stated above. In order to further introduce the ability to handle spikes in the system (i. e. sudden volatility which triggers a raft of trades), it is useful to create a message queuing architecture. This simply means placing a message queue system between components so that orders are stacked up if a certain component is unable to process many requests. Rather than requests being lost they are simply kept in a stack until the message is handled. This is particularly useful for sending trades to an execution engine. If the engine is suffering under heavy latency then it will back up trades. A queue between the trade signal generator and the execution API will alleviate this issue at the expense of potential trade slippage. A well-respected open source message queue broker is RabbitMQ . Hardware and Operating Systems The hardware running your strategy can have a significant impact on the profitability of your algorithm. This is not an issue restricted to high frequency traders either. A poor choice in hardware and operating system can lead to a machine crash or reboot at the most inopportune moment. Thus it is necessary to consider where your application will reside. The choice is generally between a personal desktop machine, a remote server, a cloud provider or an exchange co-located server. Desktop machines are simple to install and administer, especially with newer user friendly operating systems such as Windows 7/8, Mac OSX and Ubuntu. Desktop systems do possess some significant drawbacks, however. The foremost is that the versions of operating systems designed for desktop machines are likely to require reboots/patching (and often at the worst of times). They also use up more computational resources by the virtue of requiring a graphical user interface (GUI). Utilising hardware in a home (or local office) environment can lead to internet connectivity and power uptime problems. The main benefit of a desktop system is that significant computational horsepower can be purchased for the fraction of the cost of a remote dedicated server (or cloud based system) of comparable speed. A dedicated server or cloud-based machine, while often more expensive than a desktop option, allows for more significant redundancy infrastructure, such as automated data backups, the ability to more straightforwardly ensure uptime and remote monitoring. They are harder to administer since they require the ability to use remote login capabilities of the operating system. In Windows this is generally via the GUI Remote Desktop Protocol (RDP). In Unix-based systems the command-line Secure SHell (SSH) is used. Unix-based server infrastructure is almost always command-line based which immediately renders GUI-based programming tools (such as MatLab or Excel) to be unusable. A co-located server, as the phrase is used in the capital markets, is simply a dedicated server that resides within an exchange in order to reduce latency of the trading algorithm. This is absolutely necessary for certain high frequency trading strategies, which rely on low latency in order to generate alpha. The final aspect to hardware choice and the choice of programming language is platform-independence. Is there a need for the code to run across multiple different operating systems Is the code designed to be run on a particular type of processor architecture, such as the Intel x86/x64 or will it be possible to execute on RISC processors such as those manufactured by ARM These issues will be highly dependent upon the frequency and type of strategy being implemented. Resilience and Testing One of the best ways to lose a lot of money on algorithmic trading is to create a system with no resiliency . This refers to the durability of the sytem when subject to rare events, such as brokerage bankruptcies, sudden excess volatility, region-wide downtime for a cloud server provider or the accidental deletion of an entire trading database. Years of profits can be eliminated within seconds with a poorly-designed architecture. It is absolutely essential to consider issues such as debuggng, testing, logging, backups, high-availability and monitoring as core components of your system. It is likely that in any reasonably complicated custom quantitative trading application at least 50 of development time will be spent on debugging, testing and maintenance. Nearly all programming languages either ship with an associated debugger or possess well-respected third-party alternatives. In essence, a debugger allows execution of a program with insertion of arbitrary break points in the code path, which temporarily halt execution in order to investigate the state of the system. The main benefit of debugging is that it is possible to investigate the behaviour of code prior to a known crash point . Debugging is an essential component in the toolbox for analysing programming errors. However, they are more widely used in compiled languages such as C or Java, as interpreted languages such as Python are often easier to debug due to fewer LOC and less verbose statements. Despite this tendency Python does ship with the pdb. which is a sophisticated debugging tool. The Microsoft Visual C IDE possesses extensive GUI debugging utilities, while for the command line Linux C programmer, the gdb debugger exists. Testing in software development refers to the process of applying known parameters and results to specific functions, methods and objects within a codebase, in order to simulate behaviour and evaluate multiple code-paths, helping to ensure that a system behaves as it should. A more recent paradigm is known as Test Driven Development (TDD), where test code is developed against a specified interface with no implementation. Prior to the completion of the actual codebase all tests will fail. As code is written to fill in the blanks, the tests will eventually all pass, at which point development should cease. TDD requires extensive upfront specification design as well as a healthy degree of discipline in order to carry out successfully. In C, Boost provides a unit testing framework. In Java, the JUnit library exists to fulfill the same purpose. Python also has the unittest module as part of the standard library. Many other languages possess unit testing frameworks and often there are multiple options. In a production environment, sophisticated logging is absolutely essential. Logging refers to the process of outputting messages, with various degrees of severity, regarding execution behaviour of a system to a flat file or database. Logs are a first line of attack when hunting for unexpected program runtime behaviour. Unfortunately the shortcomings of a logging system tend only to be discovered after the fact As with backups discussed below, a logging system should be given due consideration BEFORE a system is designed. Both Microsoft Windows and Linux come with extensive system logging capability and programming languages tend to ship with standard logging libraries that cover most use cases. It is often wise to centralise logging information in order to analyse it at a later date, since it can often lead to ideas about improving performance or error reduction, which will almost certainly have a positive impact on your trading returns. While logging of a system will provide information about what has transpired in the past, monitoring of an application will provide insight into what is happening right now . All aspects of the system should be considered for monitoring. System level metrics such as disk usage, available memory, network bandwidth and CPU usage provide basic load information. Trading metrics such as abnormal prices/volume, sudden rapid drawdowns and account exposure for different sectors/markets should also be continuously monitored. Further, a threshold system should be instigated that provides notification when certain metrics are breached, elevating the notification method (email, SMS, automated phone call) depending upon the severity of the metric. System monitoring is often the domain of the system administrator or operations manager. However, as a sole trading developer, these metrics must be established as part of the larger design. Many solutions for monitoring exist: proprietary, hosted and open source, which allow extensive customisation of metrics for a particular use case. Backups and high availability should be prime concerns of a trading system. Consider the following two questions: 1) If an entire production database of market data and trading history was deleted (without backups) how would the research and execution algorithm be affected 2) If the trading system suffers an outage for an extended period (with open positions) how would account equity and ongoing profitability be affected The answers to both of these questions are often sobering It is imperative to put in place a system for backing up data and also for testing the restoration of such data. Many individuals do not test a restore strategy. If recovery from a crash has not been tested in a safe environment, what guarantees exist that restoration will be available at the worst possible moment Similarly, high availability needs to be baked in from the start. Redundant infrastructure (even at additional expense) must always be considered, as the cost of downtime is likely to far outweigh the ongoing maintenance cost of such systems. I wont delve too deeply into this topic as it is a large area, but make sure it is one of the first considerations given to your trading system. Choosing a Language Considerable detail has now been provided on the various factors that arise when developing a custom high-performance algorithmic trading system. The next stage is to discuss how programming languages are generally categorised. Type Systems When choosing a language for a trading stack it is necessary to consider the type system . The languages which are of interest for algorithmic trading are either statically - or dynamically-typed . A statically-typed language performs checks of the types (e. g. integers, floats, custom classes etc) during the compilation process. Such languages include C and Java. A dynamically-typed language performs the majority of its type-checking at runtime. Such languages include Python, Perl and JavaScript. For a highly numerical system such as an algorithmic trading engine, type-checking at compile time can be extremely beneficial, as it can eliminate many bugs that would otherwise lead to numerical errors. However, type-checking doesnt catch everything, and this is where exception handling comes in due to the necessity of having to handle unexpected operations. Dynamic languages (i. e. those that are dynamically-typed) can often lead to run-time errors that would otherwise be caught with a compilation-time type-check. For this reason, the concept of TDD (see above) and unit testing arose which, when carried out correctly, often provides more safety than compile-time checking alone. Another benefit of statically-typed languages is that the compiler is able to make many optimisations that are otherwise unavailable to the dynamically - typed language, simply because the type (and thus memory requirements) are known at compile-time. In fact, part of the inefficiency of many dynamically-typed languages stems from the fact that certain objects must be type-inspected at run-time and this carries a performance hit. Libraries for dynamic languages, such as 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. There are advantages and disadvantages to both approaches. It is necessary to consider how well a language is supported, the activity of the community surrounding a language, ease of installation and maintenance, quality of the documentation and any 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 C11 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 . Conclusion As is now evident, the choice of programming language(s) for an algorithmic trading system is not straightforward and requires deep thought. The main considerations are performance, ease of development, resiliency and testing, separation of concerns, familiarity, maintenance, source code availability, licensing costs and maturity of libraries. The benefit of a separated architecture is that it allows languages to be plugged in for different aspects of a trading stack, as and when requirements change. A trading system is an evolving tool and it is likely that any language choices will evolve along with it. Michael Halls-Moore Mike é o fundador da QuantStart e tem estado envolvido na indústria de finanças quantitativas nos últimos cinco anos, principalmente como desenvolvedor quantitativo e, mais tarde, como consultor de comerciante de quant para hedge funds.
No comments:
Post a Comment