Desenvolvimento e backtesting de estratégias de negociação sistemáticas
Desenvolvimento e backtesting de estratégias de negociação sistemáticas
A QuantDesk é uma solução completa de ponta a ponta para um fundo quantificado de qualquer tamanho. Inclui o OpenQuant IDE, o QuantRouter, o QuantBase (servidor de dados de mercado com captura de feeds em tempo real e gerenciamento centralizado de dados históricos), QuantTrader (mecanismo de implantação de produção para estratégias de negociação automatizadas desenvolvidas). com o OpenQuant) e QuantController, um aplicativo de servidor que complementa o QuantDesk para permitir um gerenciamento eficiente da arquitetura de negociação distribuída do SmartQuant.
Claro, ainda passamos muito tempo experimentando, experimentando e testando diferentes estratégias. Ter um bom ambiente de desenvolvimento não permite necessariamente que você pule essa etapa. A vantagem real de uma estrutura bem projetada é reduzir ao mínimo o tempo entre o teste e a produção e a natureza escalável da infraestrutura, que pode crescer com a empresa, desde o gerenciamento de um pequeno capital inicial até níveis verdadeiramente institucionais. Com um sistema como este, os gerentes emergentes podem se sentir em igualdade de condições enquanto negociam no mesmo mercado que concorrentes maiores, e podem realizar plenamente as vantagens inerentes de serem ágeis e adaptáveis.
Fundador e CEO da General Quantitative, LLC.
Copyright 1997-2016 SmartQuant Ltd info @ smartquant.
Backtesting Bem-sucedido de Estratégias de Negociação Algorítmica - Parte I.
Backtesting Bem-sucedido de Estratégias de Negociação Algorítmica - Parte I.
Este artigo continua a série sobre negociação quantitativa, que começou com o Beginner's Guide and Strategy Identification. Ambos os artigos, mais longos e mais envolvidos, têm sido muito populares, por isso vou continuar nesse sentido e fornecer detalhes sobre o tema do backtesting de estratégia.
O backtesting algorítmico requer conhecimento de muitas áreas, incluindo psicologia, matemática, estatística, desenvolvimento de software e microestrutura de mercado / troca. Eu não poderia esperar cobrir todos esses tópicos em um artigo, então vou dividi-los em duas ou três partes menores. O que vamos discutir nesta seção? Começarei definindo o backtesting e depois descreverei o básico de como ele é realizado. Então eu vou elucidar sobre os preconceitos que tocamos no Beginner's Guide to Quantitative Trading. A seguir, apresentarei uma comparação das várias opções de software de backtesting disponíveis.
Nos artigos subseqüentes, veremos os detalhes das implementações de estratégia que são mal mencionadas ou ignoradas. Também vamos considerar como tornar o processo de backtesting mais realista, incluindo as idiossincrasias de uma bolsa de valores. Em seguida, discutiremos os custos de transação e como modelá-los corretamente em uma configuração de backtest. Terminaremos com uma discussão sobre o desempenho de nossos backtests e, finalmente, forneceremos um exemplo de uma estratégia comum de quant, conhecida como um comércio de pares que reverte a média.
Vamos começar discutindo o que é o backtesting e por que devemos realizá-lo em nossa negociação algorítmica.
O que é o backtesting?
A negociação algorítmica se diferencia de outros tipos de classes de investimento, porque podemos fornecer expectativas mais confiáveis sobre o desempenho futuro do desempenho passado, como consequência da disponibilidade abundante de dados. O processo pelo qual isso é realizado é conhecido como backtesting.
Em termos simples, o backtesting é realizado expondo seu algoritmo de estratégia particular a um fluxo de dados financeiros históricos, o que leva a um conjunto de sinais de negociação. Cada negociação (que vamos querer dizer aqui como uma ida e volta de dois sinais) terá um lucro ou prejuízo associado. A acumulação deste lucro / perda ao longo da duração do seu backtest de estratégia levará ao lucro e perda total (também conhecido como 'P & L' ou 'PnL'). Essa é a essência da ideia, embora, é claro, o "diabo esteja sempre nos detalhes"!
Quais são as principais razões para fazer backtesting de uma estratégia algorítmica?
Filtragem - Se você se lembra do artigo sobre identificação de estratégia, nosso objetivo na fase inicial de pesquisa era configurar um pipeline de estratégia e filtrar qualquer estratégia que não atendesse a determinados critérios. O backtesting nos fornece outro mecanismo de filtragem, pois podemos eliminar estratégias que não atendem às nossas necessidades de desempenho. Modelagem - O backtesting nos permite testar (com segurança!) Novos modelos de certos fenômenos de mercado, como custos de transação, roteamento de ordens, latência, liquidez ou outras questões de microestrutura do mercado. Otimização - Embora a otimização da estratégia seja repleta de vieses, o backtesting nos permite aumentar o desempenho de uma estratégia, modificando a quantidade ou os valores dos parâmetros associados a essa estratégia e recalculando seu desempenho. Verificação - Nossas estratégias são muitas vezes adquiridas externamente, através do nosso pipeline de estratégia. O backtesting de uma estratégia garante que ela não tenha sido implementada incorretamente. Embora raramente tenhamos acesso aos sinais gerados por estratégias externas, muitas vezes teremos acesso às métricas de desempenho, como as características de Sharpe Ratio e Drawdown. Assim, podemos compará-los com nossa própria implementação.
Backtesting fornece uma série de vantagens para negociação algorítmica. No entanto, nem sempre é possível fazer backtest diretamente de uma estratégia. Em geral, à medida que a frequência da estratégia aumenta, torna-se mais difícil modelar corretamente os efeitos de microestrutura do mercado e das trocas. Isso leva a backtests menos confiáveis e, portanto, uma avaliação mais complicada de uma estratégia escolhida. Este é um problema particular em que o sistema de execução é a chave para o desempenho da estratégia, como acontece com os algoritmos de freqüência ultra-alta.
Infelizmente, o backtesting é repleto de preconceitos de todos os tipos. Nós abordamos algumas dessas questões em artigos anteriores, mas vamos agora discuti-las em profundidade.
Vieses que afetam os backtests de estratégia.
Existem muitos vieses que podem afetar o desempenho de uma estratégia de backtested. Infelizmente, esses vieses tendem a inflar o desempenho em vez de prejudicá-lo. Assim, você deve sempre considerar um backtest como um limite superior idealizado no desempenho real da estratégia. É quase impossível eliminar os vieses do comércio algorítmico, por isso é nosso trabalho minimizá-los da melhor maneira possível, a fim de tomar decisões informadas sobre nossas estratégias algorítmicas.
Existem quatro principais vieses que desejo discutir: Viés de Otimização, Viés de Look-Ahead, Viés de Sobrevivência e Viés de Tolerância Psicológica.
Viés de otimização.
Este é provavelmente o mais insidioso de todos os preconceitos de backtest. Isso envolve o ajuste ou a introdução de parâmetros de negociação adicionais até que o desempenho da estratégia no conjunto de dados de backtest seja muito atraente. No entanto, uma vez que viver, o desempenho da estratégia pode ser muito diferente. Outro nome para esse viés é "ajuste de curva" ou "viés de snooping de dados".
O viés de otimização é difícil de eliminar, pois as estratégias algorítmicas geralmente envolvem muitos parâmetros. "Parâmetros" neste exemplo podem ser os critérios de entrada / saída, períodos de retorno, períodos médios (isto é, o parâmetro de suavização da média móvel) ou frequência de medição de volatilidade. O viés de otimização pode ser minimizado mantendo o número de parâmetros no mínimo e aumentando a quantidade de pontos de dados no conjunto de treinamento. De fato, também é preciso ter cuidado com este último, pois os pontos de treinamento mais antigos podem estar sujeitos a um regime anterior (como um ambiente regulatório) e, portanto, podem não ser relevantes para sua estratégia atual.
Um método para ajudar a atenuar esse viés é realizar uma análise de sensibilidade. Isso significa variar os parâmetros de forma incremental e traçar uma "superfície" de desempenho. O raciocínio sólido e fundamental para as escolhas de parâmetros deve, com todos os outros fatores considerados, levar a uma superfície de parâmetro mais suave. Se você tem uma superfície de desempenho muito agitada, isso geralmente significa que um parâmetro não está refletindo um fenômeno e é um artefato dos dados de teste. Existe uma vasta literatura sobre algoritmos de otimização multidimensional e é uma área altamente ativa de pesquisa. Eu não vou me debruçar sobre isso aqui, mas mantenha isso no fundo de sua mente quando você encontrar uma estratégia com um backtest fantástico!
Tendência de Look-Ahead.
O viés de antecipação é introduzido em um sistema de backtesting quando dados futuros são acidentalmente incluídos em um ponto da simulação onde esses dados não estariam disponíveis. Se estivermos realizando o backtest cronologicamente e chegarmos ao ponto de tempo $ N $, então o bias de look-ahead ocorre se os dados forem incluídos para qualquer ponto $ N + k $, onde $ k> 0 $. Erros de polarização antecipada podem ser incrivelmente sutis. Aqui estão três exemplos de como o viés de look-ahead pode ser introduzido:
Bugs técnicos - Matrizes / vetores no código geralmente possuem iteradores ou variáveis de índice. Deslocamentos incorretos desses índices podem levar a um viés de antecipação ao incorporar dados em $ N + k $ para não-zero $ k $. Cálculo de Parâmetros - Outro exemplo comum de viés de look-ahead ocorre ao calcular parâmetros estratégicos ótimos, como com regressões lineares entre duas séries temporais. Se todo o conjunto de dados (incluindo dados futuros) for usado para calcular os coeficientes de regressão e, portanto, aplicado retroativamente a uma estratégia de negociação para fins de otimização, os dados futuros serão incorporados e haverá um viés de antecipação. Maxima / Minima - Determinadas estratégias de negociação utilizam valores extremos em qualquer período de tempo, como incorporar os preços altos ou baixos nos dados do OHLC. No entanto, como esses valores máximos / mínimos só podem ser calculados no final de um período de tempo, um viés de antecipação é introduzido se esses valores forem usados durante o período atual. É sempre necessário atrasar valores altos / baixos em pelo menos um período em qualquer estratégia de negociação fazendo uso deles.
Tal como acontece com o viés de otimização, é preciso ter muito cuidado para evitar sua introdução. Muitas vezes, é a principal razão pela qual as estratégias de negociação têm um desempenho inferior aos backtests significativamente em "negociação ao vivo".
Viés de sobrevivência.
O viés de sobrevivência é um fenômeno particularmente perigoso e pode levar a um desempenho significativamente inflacionado para certos tipos de estratégia. Ocorre quando as estratégias são testadas em conjuntos de dados que não incluem o universo completo de ativos anteriores que podem ter sido escolhidos em um determinado momento, mas consideram apenas aqueles que "sobreviveram" à hora atual.
Como exemplo, considere testar uma estratégia em uma seleção aleatória de ações antes e depois do crash do mercado de 2001. Algumas ações da tecnologia faliram, enquanto outras conseguiram se manter à tona e até prosperaram. Se tivéssemos restringido essa estratégia apenas às ações que passaram pelo período de rebaixamento do mercado, estaríamos introduzindo um viés de sobrevivência, porque eles já demonstraram seu sucesso para nós. Na verdade, este é apenas mais um caso específico de viés de antecipação, já que informações futuras estão sendo incorporadas à análise passada.
Existem duas maneiras principais de atenuar o viés de sobrevivência em seus backtests de estratégia:
Conjuntos de dados livres de viés de sobrevivência - No caso de dados de patrimônio, é possível adquirir conjuntos de dados que incluem entidades com registro de saída, embora não sejam baratas e só tendam a ser utilizadas por empresas institucionais. Em particular, os dados do Yahoo Finance NÃO são livres de viés de sobrevivência, e isso é comumente usado por muitos traders de algoritmos de varejo. Também é possível negociar em classes de ativos que não são propensas ao viés de sobrevivência, como certas commodities (e seus futuros derivativos). Usar dados mais recentes - No caso de ações, a utilização de um conjunto de dados mais recente atenua a possibilidade de que a seleção de ações escolhida seja ponderada para "sobreviventes", simplesmente porque há menos probabilidade de fechamento de estoque geral em períodos de tempo mais curtos. Também é possível começar a criar um conjunto de dados pessoal livre de viés de sobrevivência, coletando dados do ponto atual em diante. Depois de 3 a 4 anos, você terá um sólido conjunto de dados de equidade livres de viés de sobrevivência, com o qual será feito backtest de estratégias adicionais.
Consideraremos agora certos fenômenos psicológicos que podem influenciar seu desempenho comercial.
Tendência da Tolerância Psicológica.
Este fenómeno em particular não é frequentemente discutido no contexto do comércio quantitativo. No entanto, é discutido extensivamente em relação a métodos de negociação mais discricionários. Ele tem vários nomes, mas eu decidi chamar de "viés de tolerância psicológica" porque capta a essência do problema. Ao criar backtests durante um período de 5 anos ou mais, é fácil olhar para uma curva de capital de tendência ascendente, calcular o retorno anual composto, o índice de Sharpe e até as características de rebaixamento e ficar satisfeito com os resultados. Como exemplo, a estratégia pode possuir um rebaixamento relativo máximo de 25% e uma duração máxima de rebaixamento de 4 meses. Isso não seria atípico para uma estratégia momentânea. É fácil convencer-se de que é fácil tolerar esses períodos de perdas porque o quadro geral é otimista. No entanto, na prática, é muito mais difícil!
Se rebotes históricos de 25% ou mais ocorrerem nos backtests, então, com toda a probabilidade, você verá períodos de rebaixamento similar em negociações ao vivo. Estes períodos de abandono são psicologicamente difíceis de suportar. Observei em primeira mão como pode ser uma redução prolongada, em um ambiente institucional, e isso não é agradável - mesmo que os backtests sugiram que tais períodos ocorrerão. A razão pela qual eu o denominei de "viés" é que muitas vezes uma estratégia que de outra forma seria bem-sucedida é impedida de negociar durante períodos de rebaixamento estendido e, portanto, levará a um desempenho significativamente inferior comparado a um backtest. Assim, embora a estratégia seja de natureza algorítmica, os fatores psicológicos ainda podem ter uma forte influência na lucratividade. O objetivo é assegurar que, se você vir perdas de uma certa porcentagem e duração nos backtests, então você deve esperar que elas ocorram em ambientes de negociação ao vivo e que precisem perseverar para alcançar a lucratividade mais uma vez.
Pacotes de software para backtesting.
O cenário de software para backtesting de estratégia é vasto. As soluções vão desde software sofisticado de nível institucional totalmente integrado até linguagens de programação como C ++, Python e R, onde quase tudo deve ser escrito do zero (ou 'plugins' obtidos). Como traders quant estamos interessados no equilíbrio de poder "possuir" nossa pilha de tecnologia de negociação versus a velocidade e confiabilidade de nossa metodologia de desenvolvimento. Aqui estão as principais considerações para a escolha de software:
Habilidade de Programação - A escolha do ambiente dependerá em grande parte de sua capacidade de programar software. Eu diria que estar no controle da pilha total terá um efeito maior no seu P & L de longo prazo do que a terceirização, tanto quanto possível, do software do fornecedor. Isso se deve ao risco negativo de ter bugs externos ou idiossincrasias que você não consiga consertar no software do fornecedor, que, de outra forma, seriam facilmente solucionados se você tivesse mais controle sobre sua "pilha de tecnologia". Você também quer um ambiente que encontre o equilíbrio certo entre produtividade, disponibilidade de biblioteca e velocidade de execução. Eu faço minha própria recomendação pessoal abaixo. Interação de capacidade de execução / corretor - Certos softwares de backtesting, como o Tradestation, são vinculados diretamente a uma corretora. Eu não sou fã dessa abordagem, já que reduzir os custos de transação é muitas vezes um grande componente para obter um índice maior de Sharpe. Se você está preso a um corretor específico (e o Tradestation o "força" a fazer isso), você terá mais dificuldade em fazer a transição para um novo software (ou um novo corretor) se for necessário. Os Interactive Brokers fornecem uma API robusta, embora com uma interface ligeiramente obtusa. Personalização - Um ambiente como o MATLAB ou o Python oferece uma grande flexibilidade na criação de estratégias de algoritmos, uma vez que fornecem bibliotecas fantásticas para quase todas as operações matemáticas imagináveis, mas também permitem uma ampla personalização quando necessário. Complexidade de estratégia - Certos softwares simplesmente não são feitos para processamento pesado de números ou complexidade matemática. O Excel é um desses softwares. Embora seja bom para estratégias mais simples, ele não pode realmente lidar com numerosos ativos ou algoritmos mais complicados, em velocidade. Minimização de viés - Uma determinada peça de software ou dados se presta mais a vieses de negociação? Você precisa ter certeza de que, se quiser criar todas as funcionalidades sozinho, não apresentará bugs que possam levar a vieses. Velocidade de desenvolvimento - Não se deve ter que passar meses e meses implementando um mecanismo de backtest. A prototipagem deve levar apenas algumas semanas. Certifique-se de que seu software não está atrapalhando o seu progresso em grande medida, apenas para pegar alguns pontos percentuais extras de velocidade de execução. C ++ é o "elefante na sala" aqui! Velocidade de Execução - Se a sua estratégia é completamente dependente da pontualidade da execução (como no HFT / UHFT), então uma linguagem como C ou C ++ será necessária. No entanto, você estará se aproximando da otimização do kernel do Linux e do uso do FPGA para esses domínios, o que está fora do escopo deste artigo! Custo - Muitos dos ambientes de software com os quais você pode programar estratégias de negociação algorítmica são completamente livres e de código aberto. Na verdade, muitos fundos de hedge fazem uso de software de código aberto para todas as suas pilhas de negociação de algoritmos. Além disso, o Excel e o MATLAB são relativamente baratos e existem alternativas gratuitas para cada um deles.
Agora que listamos os critérios com os quais precisamos escolher nossa infraestrutura de software, eu quero executar alguns dos pacotes mais populares e como eles se comparam:
Nota: Eu só vou incluir o software que está disponível para a maioria dos profissionais de varejo e desenvolvedores de software, pois este é o público do site. Enquanto outros softwares estão disponíveis, tais como as ferramentas mais institucionais, eu sinto que são muito caras para serem efetivamente usadas em um ambiente de varejo e eu pessoalmente não tenho nenhuma experiência com elas.
Backtesting Systematic Trading Strategies em Python: Considerações e Open Source Frameworks.
Backtesting Systematic Trading Strategies em Python: Considerações e Open Source Frameworks.
Neste artigo, Frank Smietana, um dos colaboradores convidados especializados da QuantStart, descreve o cenário de software de backtesting de código aberto Python e fornece conselhos sobre qual framework de backtesting é adequado para as necessidades de seu próprio projeto.
O backtesting é, sem dúvida, a parte mais crítica do processo de produção da SST (Estratégia de Negociação Sistemática), situada entre o desenvolvimento e a implementação da estratégia (negociação ao vivo). Se uma estratégia é falha, espera-se que um backtesting rigoroso exponha isso, impedindo que uma estratégia deficitária seja implantada.
Vários recursos relacionados se sobrepõem ao backtesting, incluindo simulação comercial e negociação ao vivo. O backtesting usa dados históricos para quantificar o desempenho do STS. Os simuladores de negociação levam o backtesting um passo adiante, visualizando o desencadeamento de negociações e o desempenho de preços em uma base barra a barra. A negociação simulada / ao vivo implanta um STS testado em tempo real: sinalizando negociações, gerando ordens, roteando ordens para corretores e mantendo posições conforme as ordens são executadas.
A maioria dos frameworks vai além do backtesting para incluir alguns recursos de negociação ao vivo. Isso é conveniente se você quiser implantar a partir de sua estrutura de backtesting, que também funciona com seu corretor e fontes de dados preferidos. O Quantopian / Zipline dá um passo adiante, fornecendo uma solução totalmente integrada de desenvolvimento, backtesting e implantação.
A comunidade Python está bem atendida, com pelo menos seis estruturas de backtesting de código aberto disponíveis. Eles estão, no entanto, em vários estágios de desenvolvimento e documentação. Se você gosta de trabalhar em uma equipe criando uma estrutura de backtesting de código aberto, confira os repositórios do Github.
Antes de avaliar as estruturas de backtesting, vale a pena definir os requisitos do seu STS.
Qual (is) classe (s) de ativos você está negociando? Enquanto a maioria dos frameworks suportam dados de Ações dos EUA via YahooFinance, se uma estratégia incorpora derivativos, ETFs ou títulos de EM, os dados precisam ser importados ou fornecidos pela estrutura. As coberturas de classes de ativos vão além dos dados. O framework pode lidar com futuros e opções de tamanho finito e gerar transações roll-over automaticamente? E quanto aos mercados sem liquidez, quão realista uma suposição deve ser feita ao executar grandes pedidos?
Qual freqüência de dados e detalhes seu STS é construído? Um sistema de negociação que exige cada tick ou lance / pedido tem um conjunto muito diferente de problemas de gerenciamento de dados que um intervalo de 5 minutos ou de hora em hora. Os fundos de hedge e as lojas HFT investiram significativamente na criação de estruturas de backtesting robustas e escalonáveis para lidar com esse volume e frequência de dados. Algumas plataformas fornecem um conjunto rico e profundo de dados para várias classes de ativos, como ações da S & P, com resolução de um minuto.
Que tipo (s) de pedido exige o seu STS? No mínimo, limite, paradas e OCO devem ser suportados pelo framework.
Nível de suporte & amp; documentação necessária. Os frameworks de estágio inicial têm escassa documentação, poucos têm suporte além de conselhos comunitários.
Os componentes de um framework de backtesting.
Aquisição de dados e STS: Os componentes de aquisição consomem o arquivo de script / definição STS e fornecem os dados necessários para o teste. Se a estrutura exigir que qualquer STS seja recodificado antes do backtesting, a estrutura deverá suportar funções enlatadas para os indicadores técnicos mais populares para acelerar o teste de STS. Os usuários determinam quanto tempo um período histórico será backtest com base no que o framework fornece ou no que eles são capazes de importar.
O teste de desempenho aplica a lógica STS à janela de dados históricos solicitada e calcula uma ampla gama de riscos & amp; métricas de desempenho, incluindo redução máxima, taxas de Sharpe e Sortino. A maioria das estruturas suporta um número decente de recursos de visualização, incluindo curvas de equidade e estatísticas decifradas.
A otimização tende a exigir a maior parte dos recursos de computação no processo STS. Se o seu STS exigir otimização, concentre-se em uma estrutura que suporte o processamento distribuído / paralelo escalável.
No contexto de estratégias desenvolvidas usando indicadores técnicos, os desenvolvedores de sistemas tentam encontrar um conjunto ideal de parâmetros para cada indicador. Mais simplesmente, a otimização pode achar que um STS crossover médio de 6 e 10 dias acumulou mais lucro sobre os dados de teste históricos do que qualquer outra combinação de períodos de tempo entre 1 e 20. Já com este exemplo trivial, 20 * 20 = 400 combinações de parâmetros ser calculado & amp; classificado.
Em um contexto de portfólio, a otimização busca encontrar a ponderação ideal de todos os ativos do portfólio, incluindo instrumentos em curto e alavancados. Periodicamente, a carteira é reequilibrada, resultando na compra e venda de participações de carteira conforme necessário para alinhar com os pesos otimizados.
O dimensionamento de posição é um uso adicional de otimização, ajudando os desenvolvedores de sistemas a simular e analisar o impacto da alavancagem e o dimensionamento dinâmico da posição no STS e no desempenho do portfólio.
Seis Quadros de Backtesting para Python.
Os recursos padrão das plataformas de backtesting de Python de código aberto parecem incluir:
Evento orientado Licenciamento muito flexível e irrestrito Coleção decente de indicadores técnicos predefinidos Capacidades de cálculo / visualização / relatório de métricas de desempenho padrão.
PyAlgoTrade.
O PyAlgoTrade é uma estrutura de backtesting mutuamente documentada, juntamente com recursos de negociação em papel e ao vivo. O suporte de dados inclui o Yahoo! Finanças, Google Finance, NinjaTrader e qualquer tipo de série temporal baseada em CSV, como o Quandl. Tipos de pedidos suportados incluem Market, Limit, Stop e StopLimit.
O PyAlgoTrade suporta negociação Bitcoin via Bitstamp, e manipulação de eventos do Twitter em tempo real.
bt - Backtesting para Python.
bt “visa fomentar a criação de blocos facilmente testáveis, reutilizáveis e flexíveis de lógica estratégica para facilitar o rápido desenvolvimento de estratégias de negociação complexas”.
A estrutura é particularmente adequada para testar o STS baseado em portfólio, com algos para ponderação de ativos e reequilíbrio de portfólio. Modificar uma estratégia para executar diferentes frequências de tempo ou pesos de ativos alternativos envolve um ajuste de código mínimo. bt é construído sobre o ffn - uma biblioteca de funções financeiras para Python.
Backtrader.
Essa plataforma é excepcionalmente bem documentada, com um blog de acompanhamento e uma comunidade on-line ativa para postar perguntas e solicitações de recursos. Backtrader suporta vários formatos de dados, incluindo arquivos CSV, Pandas DataFrames, iteradores de blaze e feeds de dados em tempo real de três corretores. Esses feeds de dados podem ser acessados simultaneamente e podem até representar diferentes períodos de tempo. Corretores suportados incluem Oanda para negociação de FX e negociação de classe de múltiplos ativos via Interactive Brokers e Visual Chart.
pysystemtrade.
O desenvolvedor do pysystemtrade, Rob Carver, tem um ótimo post discutindo por que ele se propôs a criar outro framework de backtesting em Python e os argumentos a favor e contra o desenvolvimento de frameworks. O framework de backtesting para o pysystemtrade é discutido no livro de Rob, "Systematic Trading".
O pysystemtrade lista vários recursos de roteiro, incluindo um testador completo completo que inclui técnicas de otimização e calibração e negociação de futuros totalmente automatizada com a Interactive Brokers. Contribuidores de código aberto são bem-vindos.
Zipline é um simulador de negociação algorítmica com capacidades de negociação em papel e ao vivo. Acessível através da interface IPython Notebook baseada em navegador, o Zipline fornece uma alternativa fácil de usar às ferramentas de linha de comando. Suportado e desenvolvido pela Quantopian, o Zipline pode ser usado como uma estrutura de backtesting autônoma ou como parte de um ambiente de desenvolvimento, teste e implementação de STS completo da Quantipian / Zipline. O Zipline fornece 10 anos de dados de estoque históricos americanos com resolução de minutos e várias opções de importação de dados.
O QSTrader é um framework de backtesting com recursos de negociação ao vivo. O Fundador da QuantStart, Michael Halls-Moore, lançou o QSTrader com o intuito de construir uma plataforma robusta e escalável o suficiente para atender às necessidades dos fundos institucionais de hedge, bem como aos traders quantificados de varejo. O QSTrader atualmente suporta dados de resolução "bar" do OHLCV em várias escalas de tempo, mas permite que dados de ticks sejam usados.
Ambos backtesting e live trading são completamente orientados a eventos, simplificando a transição de estratégias de pesquisa para testes e, finalmente, negociação ao vivo. A estratégia principal / código do portfólio é geralmente idêntica em ambas as implantações.
O principal benefício do QSTrader é a sua modularidade, permitindo uma ampla personalização de código para aqueles que possuem requisitos específicos de gerenciamento de risco ou portfólio.
Abraçando o Backtest.
É da natureza humana concentrar-se na recompensa de desenvolver um (esperançosamente lucrativo) STS, e então se apressar em implantar uma conta financiada (porque estamos esperançosos), sem gastar tempo e recursos suficientes para fazer backtesting da estratégia. Mas o backtesting não é apenas um gatekeeper para nos impedir de implementar estratégias falhas e perder o capital comercial, ele também fornece uma série de diagnósticos que podem informar o processo de desenvolvimento do STS. Por exemplo, testar um STS idêntico em dois períodos de tempo diferentes, compreender o empate máximo de uma estratégia no contexto de correlações de ativos e criar portfólios mais inteligentes, fazendo backtesting de alocações de ativos em várias regiões geográficas.
Em posts futuros, cobriremos backtesting frameworks para ambientes não-Python, e o uso de várias técnicas de sampling como bootstrapping e jackknife para backtesting de modelos preditivos de trading.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.
Uma Abordagem Sistemática para o Desenvolvimento de Estratégias de Negociação.
Na Parte 1 e na Parte 2 do nosso Guia de Principiantes para o desenvolvimento do sistema comercial, falamos sobre as habilidades necessárias e como abordar um sistema de negociação. Nós dissemos que um Sistema de Negociação Automatizado consiste em vários elementos. Você precisa decidir quais mercados deseja negociar, identificar e codificar uma lógica de negociação, contabilizar os custos de negociação e otimizar via backtesting (mas não overfit).
Aqui, falamos especificamente sobre o processo de identificação da lógica de negociação e desenvolvimento de uma estratégia. A estratégia será a carne do seu sistema de negociação.
O objetivo final de uma estratégia de negociação é dar a você uma ação final de negociação - comprar ou vender uma certa quantidade de um ativo comercializável. No entanto, há um processo estruturado que leva a esse objetivo final. Idealmente, sua estratégia de negociação deve decidir o seguinte:
DIREÇÃO: identificar se um ativo é barato ou caro ou justo valor COMÉRCIO DE ENTRADA: dado que um ativo é barato / caro, decida se quer comprar / vender aquele ativo COMÉRCIO DE SAÚDE: dado que um ativo é justo e se temos um posição naquele ativo (comprado ou vendido anteriormente), decida se deseja sair dessa posição. FAIXA DE PREÇOS: decida o preço (ou faixa de preço) que deseja fazer com que este comércio seja QUANTIDADE: Quantidade de capital (quantas ações de um estoque, por exemplo) que deseja negociar.
Isto dá-lhe a ação final de negociação, por exemplo: comprar X número de ações da empresa Y abaixo do preço Z, que você envia para o seu corretor.
Enquanto pensava em projetar uma estratégia de negociação, acho útil o seguinte fluxograma.
Vamos analisar o que está acontecendo aqui em detalhes:
Temos dados de preço em tempo real para vários títulos (isso pode vir de um corretor, de um fornecedor de dados ou de um servidor co-localizado) alimentando nosso sistema. DIREÇÃO - Esse feed de dados é analisado pelo nosso modelo de previsão, que usa dados atuais e históricos. dados para prever um valor justo para os títulos usando uma lógica pré-aprendizagem. A previsão real pode variar com base em como você construiu seu modelo. Por exemplo, em vez de prever o valor justo, você pode prever a probabilidade de que o preço suba (ou diminua) ENTRADA / SAÍDA COMERCIAL - A predição anterior alimenta a lógica do sinal de negociação, que decide se queremos fazer uma negociação. Isto é muito importante. Mesmo que um ativo seja barato, talvez você não queira necessariamente comprá-lo. Por exemplo, o valor justo de uma ação pode ser R $ 100 e atualmente está sendo negociado a R $ 99 (você espera que o preço volte a R $ 100), mas a variação nos preços das ações (desvio padrão) recentemente pode ser R $ 10 e você pode querer esperar por um melhor ponto de entrada. Ou o custo para negociar pode ser Re 1, deixando você sem lucro se comprar Rs 99. Ou você já pode estar no seu limite máximo de posição. Essa parte da lógica identifica quais transações fazer e qual preço negociar na (QUANTIDADE DE PREÇOS) QUANTIDADE: Agora você sabe qual comércio fazer, você tem que decidir quanto fundos alocar para essa negociação. A lógica aqui vai variar muito de estratégia para estratégia. Normalmente, você não quer entrar (ou sair) em uma negociação de uma só vez. Você pode querer entrar em uma negociação em pequenos pedaços para evitar perdas decorrentes de uma má decisão ou negociar com o melhor preço ou evitar impactar demais o mercado. No exemplo anterior, você pode comprar uma pequena quantidade de estoque a 99, então espere até que o preço vá para 98 e compre um pouco mais e assim por diante. A quantidade de posição que você já possui e os fundos disponíveis para negociar também afetam essa lógica. Se você está negociando vários ativos, você terá que decidir quanto alocar para cada ativo também. Finalmente, temos o pedido completo que estamos prontos para executar no mercado.
O objetivo deste post foi orientá-lo na abordagem sistemática do desenvolvimento de uma estratégia de negociação. Nos próximos tutoriais, falaremos sobre algumas estratégias básicas, como a reversão da média e o momentum que ajudarão você nos passos 2 e 3 - identificando Direção, Comércio e Preço. Para alguma experiência prática, tente desenvolver suas próprias estratégias usando nossa caixa de ferramentas.
Escolhendo uma plataforma para backtesting e execução automatizada.
Escolhendo uma plataforma para backtesting e execução automatizada.
Neste artigo, o conceito de execução automatizada será discutido. De um modo geral, este é o processo de permitir que uma estratégia de negociação, através de uma plataforma de negociação eletrônica, gere sinais de execução comercial sem qualquer intervenção humana subsequente. A maioria dos sistemas discutidos no QuantStart até o momento foram projetados para serem implementados como estratégias de execução automatizadas. O artigo descreverá pacotes de software e linguagens de programação que fornecem recursos de backtesting e execução automatizada.
A primeira consideração é como backtest uma estratégia. Minha visão pessoal é que o desenvolvimento personalizado de um ambiente de backtesting dentro de uma linguagem de programação de primeira classe fornece a maior flexibilidade. Por outro lado, uma plataforma de backtesting integrada desenvolvida pelo fornecedor sempre terá que fazer suposições sobre como os backtests são realizados. Apesar disso, a escolha de linguagens de programação disponíveis é grande e diversificada, o que muitas vezes pode ser esmagador. Não é óbvio, antes do desenvolvimento, qual idioma é adequado.
Ao codificar uma estratégia em regras sistemáticas, o profissional quantitativo deve estar confiante de que seu desempenho futuro refletirá seu desempenho passado. Geralmente, existem duas formas de sistema de backtesting que são utilizadas para testar essa hipótese. Em geral, eles são categorizados como back testers de pesquisa e back testers orientados a eventos. Consideraremos backtesters personalizados versus produtos de fornecedores para esses dois paradigmas e veremos como eles se comparam.
Ferramentas de pesquisa.
Ao identificar estratégias de negociação algorítmica, geralmente é desnecessário simular totalmente todos os aspectos da interação com o mercado. Em vez disso, podem ser feitas aproximações que fornecem determinação rápida do desempenho da estratégia em potencial. Tais ferramentas de pesquisa muitas vezes fazem hipóteses irrealistas sobre os custos de transação, preços de preenchimento provável, restrições de curto prazo, dependência de local, gerenciamento de risco e dimensionamento de posição. Apesar dessas deficiências, o desempenho de tais estratégias ainda pode ser efetivamente avaliado. Ferramentas comuns para pesquisa incluem MATLAB, R, Python e Excel.
Esses pacotes de software são fornecidos com recursos de vetorização que permitem velocidade de execução rápida e implementação de estratégia mais fácil. MATLAB e pandas são exemplos de sistemas vetorizados. Com essas ferramentas de pesquisa, é possível testar várias estratégias, combinações e variantes de maneira rápida e iterativa, sem a necessidade de "concretizar" completamente uma simulação realística de interação com o mercado.
Embora tais ferramentas sejam frequentemente usadas tanto para backtesting quanto para execução, esses ambientes de pesquisa geralmente não são adequados para estratégias que abordam a negociação intradia em frequências mais altas em escala de sub-minuto. Essas bibliotecas não tendem a se conectar efetivamente a fornecedores de dados de mercado em tempo real nem a interagir com APIs de corretagem de maneira robusta.
Apesar dessas deficiências executivas, os ambientes de pesquisa são muito utilizados no setor de comércio quantitativo profissional. Eles fornecem o "primeiro rascunho" para todas as ideias estratégicas antes da promoção para verificações mais rigorosas dentro de um ambiente realista de backtesting.
Backtesting baseado em eventos.
Uma vez que uma estratégia seja considerada adequada na pesquisa, ela deve ser avaliada de maneira mais realista. Tal realismo tenta explicar a maioria (se não todas) das questões descritas nos posts anteriores. A situação ideal é poder usar o mesmo código de geração de comércio para o backtesting histórico, bem como a execução ao vivo. Isto é conseguido através de um backtester baseado em eventos.
Os sistemas orientados a eventos são amplamente utilizados na engenharia de software, geralmente para manipular a entrada da interface gráfica do usuário (GUI) em sistemas operacionais baseados em janelas. Eles também são ideais para negociação algorítmica, pois a noção de pedidos de mercado em tempo real ou preenchimentos de negociação pode ser encapsulada como um evento. Tais sistemas são geralmente escritos em linguagens de alto desempenho, como C ++, C # e Java.
Considere uma situação em que uma estratégia de negociação automatizada está conectada a um feed de mercado em tempo real e a um corretor (esses dois podem ser um e o mesmo). Novas informações de mercado serão enviadas ao sistema, o que acionará um evento para gerar um novo sinal de negociação e, portanto, um evento de execução. Esses sistemas são executados em um loop contínuo, aguardando para receber eventos e manipulá-los adequadamente.
É possível gerar subcomponentes, como um manipulador histórico de dados e um simulador de corretagem, que podem imitar suas contrapartes ao vivo. Isso permite estratégias de backtesting de uma maneira extremamente semelhante à da execução ao vivo.
A desvantagem de tais sistemas reside no seu projeto complicado quando comparado a uma ferramenta de pesquisa mais simples. Portanto, "tempo para comercializar" é mais longo. Eles são mais propensos a erros e exigem um bom conhecimento de programação e metodologia de desenvolvimento de software.
Em termos de engenharia, a latência é definida como o intervalo de tempo entre uma simulação e uma resposta. Em negociação quantitativa, geralmente se refere ao atraso de tempo de ida e volta entre a geração de um sinal de execução e o recebimento das informações de preenchimento de um corretor que executa a execução.
Tal latência raramente é um problema em estratégias interdias de baixa frequência. O movimento esperado dos preços durante o período de latência não afetará a estratégia em grande medida. O mesmo não acontece com as estratégias de frequência mais alta, em que a latência se torna extremamente importante. O objetivo final da HFT é reduzir o máximo possível a latência para reduzir o escorregamento.
Diminuir a latência envolve minimizar a "distância" entre o sistema de negociação algorítmica e a troca final na qual um pedido está sendo executado. Isso pode envolver o encurtamento da distância geográfica entre os sistemas, reduzindo assim os tempos de viagem ao longo do cabeamento da rede. Também pode envolver a redução do processamento realizado em hardware de rede ou a escolha de uma corretora com infraestrutura mais sofisticada. Muitas corretoras competem em latência para conquistar negócios.
A diminuição da latência se torna exponencialmente mais cara em função da "distância da internet", que é definida como a distância da rede entre dois servidores. Assim, para um operador de alta frequência, um compromisso deve ser alcançado entre o gasto de redução de latência e o ganho de minimização do escorregamento. Estas questões serão discutidas na seção sobre Colocation abaixo.
Opções de idioma.
Alguns problemas que direcionam a escolha da linguagem já foram descritos. Agora vamos considerar os benefícios e desvantagens de linguagens de programação individuais. Eu categorizei amplamente as linguagens em desenvolvimento de alto desempenho / mais difícil versus desempenho mais baixo / desenvolvimento mais fácil. Estes são termos subjetivos e alguns discordarão dependendo de seu histórico.
Um dos aspectos mais importantes da programação de um ambiente de backtesting customizado é que o programador está familiarizado com as ferramentas que estão sendo usadas. Para aqueles que são novos no cenário da linguagem de programação, o seguinte esclarecerá o que tende a ser utilizado no comércio algorítmico.
C ++, C # e Java.
C ++, C # e Java são exemplos de linguagens de programação orientadas a objetos de uso geral. Isso significa que eles podem ser usados sem um ambiente de desenvolvimento integrado (IDE) correspondente, são todos de plataforma cruzada, têm uma ampla variedade de bibliotecas para praticamente todas as tarefas imagináveis e permitem velocidade de execução rápida quando utilizadas corretamente.
Se a velocidade de execução final for desejada, C ++ (ou C) provavelmente será a melhor escolha. Oferece a maior flexibilidade para gerenciar memória e otimizar a velocidade de execução. Essa flexibilidade tem um preço. C ++ é difícil de aprender bem e pode levar a bugs sutis. O tempo de desenvolvimento pode demorar muito mais do que em outros idiomas. Apesar dessas deficiências, é difundida no setor financeiro.
C # e Java são semelhantes, pois ambos exigem que todos os componentes sejam objetos, com exceção dos tipos de dados primitivos, como floats e inteiros. Eles diferem do C ++ executando a coleta de lixo automática. A coleta de lixo adiciona uma sobrecarga de desempenho, mas leva a um desenvolvimento mais rápido. Essas linguagens são boas escolhas para o desenvolvimento de um backtester, pois possuem recursos de GUI nativos, bibliotecas de análise numérica e velocidade de execução rápida.
Pessoalmente, eu uso o C ++ para criar backtesters acionados por eventos que precisam de velocidade de execução extremamente rápida, como para sistemas HFT. Isto é somente se eu senti que um sistema orientado a eventos do Python foi afunilado, já que a última linguagem seria minha primeira escolha para tal sistema.
MATLAB, R e Python.
O MATLAB é um IDE comercial para computação numérica. Ele ganhou ampla aceitação nos setores acadêmico, de engenharia e financeiro. Tem muitas bibliotecas numéricas para computação científica. Ele possui uma velocidade de execução rápida sob a suposição de que qualquer algoritmo que esteja sendo desenvolvido está sujeito à vetorização ou paralelização. Apesar dessas vantagens, é caro, tornando-o menos atraente para os comerciantes de varejo em um orçamento. Às vezes, o MATLAB é usado para execução direta em uma corretora como a Interactive Brokers.
R é um ambiente de script de estatísticas dedicado. É gratuito, de código aberto, multiplataforma e contém uma grande variedade de pacotes estatísticos disponíveis gratuitamente para a realização de análises extremamente avançadas. R é amplamente utilizado em estatísticas acadêmicas e na indústria quantitativa de hedge funds. Embora seja possível conectar R a uma corretora não é bem adequado para a tarefa e deve ser considerado mais uma ferramenta de pesquisa. Ele também não tem velocidade de execução, a menos que as operações sejam vetorizadas.
Eu agrupei o Python sob esse cabeçalho, embora ele esteja em algum lugar entre o MATLAB, R e as linguagens de propósito geral mencionadas anteriormente. É gratuito, de código aberto e multiplataforma. Ele é interpretado como oposto a compilado, o que o torna mais lento do que o C ++. No entanto, ele contém uma biblioteca para realizar praticamente qualquer tarefa imaginável, desde a computação científica até o design de servidores web de baixo nível. Em particular, ele contém NumPy, SciPy, pandas, matplotlib e scikit-learn, que fornecem um ambiente de pesquisa numérica robusto que, quando vetorizado, é comparável à velocidade de execução da linguagem compilada.
O Python também possui bibliotecas para se conectar a corretoras. Isso faz com que seja um "balcão único" para criar um backtesting orientado a eventos e um ambiente de execução ao vivo sem ter que entrar em outros idiomas mais complexos. A velocidade de execução é mais do que suficiente para os negociadores intradiários que negociam na escala de tempo de minutos e acima. O Python é muito simples de aprender e aprender quando comparado a linguagens de baixo nível como o C ++. Por essas razões, usamos extensivamente o Python nos artigos da QuantStart.
Ambientes Integrados de Desenvolvimento.
O termo IDE tem vários significados dentro da negociação algorítmica. Os desenvolvedores de software usam isso para significar uma GUI que permite a programação com recursos de realce de sintaxe, navegação de arquivos, depuração e execução de código. Os traders algorítmicos usam isso para significar um ambiente de backtesting / negociação totalmente integrado com histórico ou download de dados em tempo real, gráficos, avaliação estatística e execução ao vivo. Para nossos propósitos, eu uso o termo para significar qualquer ambiente de backtest / trading, frequentemente baseado em GUI, que não é considerado uma linguagem de programação de uso geral.
Embora alguns traders de quantificação possam considerar o Excel impróprio para negociação, descobri que ele é extremamente útil para a "verificação de integridade" dos resultados. O fato de que todos os dados estão diretamente disponíveis à vista facilita a implementação de estratégias muito básicas de sinal / filtro. Corretoras como a Interactive Brokers também permitem plugins DDE que permitem que o Excel receba dados de mercado em tempo real e execute ordens de negociação.
Apesar da facilidade de uso, o Excel é extremamente lento para qualquer escala razoável de dados ou nível de computação numérica. Eu só uso para verificação de erros ao desenvolver contra outras estratégias. Em particular, é extremamente útil para verificar se uma estratégia está sujeita a um viés de antecipação. Isso é fácil de detectar no Excel devido à natureza da planilha do software.
Se você não se sentir à vontade com as linguagens de programação e estiver executando uma estratégia interdias, o Excel pode ser uma boa escolha.
Software de backtesting comercial / varejo.
O mercado de gráficos de varejo, "análise técnica" e software de backtesting é extremamente competitivo. Os recursos oferecidos por esse software incluem gráficos de preços em tempo real, uma variedade de indicadores técnicos, modelos de backtesting personalizados e execução automatizada.
Alguns fornecedores fornecem uma solução completa, como a TradeStation. A TradeStation é uma corretora on-line que produz software de negociação (também conhecido como TradeStation) que fornece execução de ordens eletrônicas em várias classes de ativos. Atualmente, não tenho conhecimento de uma API direta para execução automatizada. Em vez disso, os pedidos devem ser feitos através do software da GUI. Isso contrasta com a Interactive Brokers, que tem uma interface de negociação mais enxuta (Trader WorkStation), mas oferece APIs proprietárias de execução de ordens / mercado em tempo real e uma interface FIX.
Outra plataforma extremamente popular é o MetaTrader, que é usado em operações de câmbio para criar 'Expert Advisors'. Estes são scripts personalizados escritos em uma linguagem proprietária que pode ser usada para negociação automatizada. Eu não tive muita experiência com a TradeStation ou com o MetaTrader, então não vou gastar muito tempo discutindo seus méritos.
Tais ferramentas são úteis se você não estiver confortável com o desenvolvimento de software em profundidade e desejar que muitos dos detalhes sejam atendidos. No entanto, com esses sistemas muita flexibilidade é sacrificada e muitas vezes você está vinculado a uma única corretora.
Ferramentas de código aberto e baseadas na web.
Os dois sistemas populares de backtesting baseados na web são Quantopian e QuantConnect. O primeiro faz uso do Python (e ZipLine, veja abaixo), enquanto o último utiliza C #. Ambos fornecem uma riqueza de dados históricos. A Quantopian atualmente suporta negociação ao vivo com a Interactive Brokers, enquanto a QuantConnect está trabalhando para negociação ao vivo.
A Algo-Trader é uma empresa com sede na Suíça que oferece licenças de código aberto e comercial para o seu sistema. Pelo que posso reunir a oferta parece bastante madura e eles têm muitos clientes institucionais. O sistema permite o backtesting histórico completo e o processamento complexo de eventos e eles se conectam a Interactive Brokers. A edição Enterprise oferece substancialmente mais recursos de alto desempenho.
O Marketcetera fornece um sistema de backtesting que pode se conectar a muitas outras linguagens, como Python e R, para alavancar o código que você já tenha escrito. O 'Strategy Studio' fornece a capacidade de escrever código de backtesting, bem como algoritmos de execução otimizados e, subsequentemente, transição de um backtest histórico para live paper trading. Eu não os usei antes.
ZipLine é a biblioteca Python que alimenta o serviço Quantopian mencionado acima. É um ambiente de backtest totalmente orientado a eventos e atualmente suporta as ações dos EUA em uma base minuciosa. Eu não fiz uso extensivo do ZipLine, mas conheço outros que acham que é uma boa ferramenta. Ainda há muitas áreas para melhorar, mas a equipe está constantemente trabalhando no projeto e é muito ativamente mantida.
Há também alguns projetos hospedados no Github / Google Code que você pode querer examinar. Eu não passei muito tempo investigando-os. Esses projetos incluem OpenQuant, TradeLink e PyAlgoTrade.
Software de Backtesting Institucional.
Os sistemas de backtesting de nível institucional, como Deltix e QuantHouse, não são frequentemente utilizados por traders algorítmicos de varejo. As licenças de software geralmente estão bem fora do orçamento para infraestrutura. Dito isto, tal software é amplamente utilizado por quant funds, proprietary trading houses, family offices e similares.
Os benefícios de tais sistemas são claros. Eles fornecem uma solução completa para coleta de dados, desenvolvimento de estratégias, backtesting histórico e execução ao vivo de vários instrumentos ou portfólios, até o nível de alta frequência. Essas plataformas tiveram testes extensivos e muito uso "em campo" e, portanto, são consideradas robustas.
Os sistemas são orientados a eventos e os ambientes de backtesting muitas vezes podem simular os ambientes ao vivo com um alto grau de precisão. Os sistemas também suportam algoritmos de execução otimizados, que tentam minimizar os custos de transação. Isto é particularmente útil para os comerciantes com uma base de capital maior.
Tenho que admitir que não tive muita experiência com Deltix ou QuantHouse. Dito isto, o orçamento só os coloca fora do alcance da maioria dos comerciantes de varejo, por isso não vou me debruçar sobre esses sistemas.
Colocação.
O cenário de software para negociação algorítmica foi agora pesquisado. Agora podemos voltar nossa atenção para a implementação do hardware que executará nossas estratégias.
Um comerciante de varejo provavelmente estará executando sua estratégia em casa durante as horas de mercado. Isso envolverá ligar o PC, conectar-se à corretora, atualizar o software de mercado e permitir que o algoritmo seja executado automaticamente durante o dia. Por outro lado, um fundo quant financeiro profissional com ativos significativos sob gestão (AUM) terá uma infra-estrutura dedicada de servidor com colocação em troca, a fim de reduzir a latência, tanto quanto possível, para executar suas estratégias de alta velocidade.
Home Desktop.
A abordagem mais simples para a implantação de hardware é simplesmente executar uma estratégia algorítmica com um computador desktop doméstico conectado à corretora por meio de uma conexão de banda larga (ou similar).
Embora esta abordagem seja simples de começar, ela sofre de muitos inconvenientes. A máquina de mesa está sujeita a falha de energia, a menos que tenha o backup feito por um no-break. Além disso, uma ligação à Internet em casa também está à mercê do ISP. A perda de energia ou falha na conectividade com a Internet pode ocorrer em um momento crucial da negociação, deixando o operador algorítmico com posições abertas que não podem ser fechadas. Esse problema também ocorre com reinicializações obrigatórias do sistema operacional (isso realmente aconteceu comigo em uma configuração profissional!) E falha de componente, o que leva aos mesmos problemas.
Pelos motivos acima, hesito em recomendar uma abordagem de desktop doméstica para negociação algorítmica. Se você decidir seguir essa abordagem, certifique-se de ter um computador de backup E uma conexão de internet de backup (por exemplo, um dongle 3G) que possa ser usado para fechar posições em uma situação de inatividade.
O próximo nível de um desktop doméstico é fazer uso de um servidor virtual privado (VPS). Um VPS é um sistema de servidor remoto geralmente comercializado como um serviço de "nuvem". Eles são muito mais baratos que um servidor dedicado correspondente, já que um VPS é na verdade uma partição de um servidor muito maior. Eles possuem um ambiente de sistema operacional virtual isolado, disponível apenas para cada usuário individual. A carga da CPU é compartilhada entre vários VPS e uma parte dos sistemas RAM é alocada para o VPS. Tudo isto é realizado através de um processo conhecido como virtualização.
Os provedores comuns de VPS incluem o Amazon EC2 e o Rackspace Cloud. Eles fornecem sistemas de nível de entrada com pouca RAM e uso básico da CPU através de alta RAM pronta para a empresa, servidores de alta CPU. Para a maioria dos comerciantes de varejo algorítmicos, os sistemas de nível de entrada são suficientes para estratégias intraday ou interday de baixa frequência e bancos de dados de dados históricos menores.
Os benefícios de um sistema baseado em VPS incluem disponibilidade 24 horas por dia (7 dias por semana), recursos de monitoramento mais robustos, plugins fáceis para serviços adicionais, como armazenamento de arquivos ou bancos de dados gerenciados e uma arquitetura flexível. Uma desvantagem é a despesa contínua. À medida que o sistema cresce, o hardware dedicado torna-se mais barato por unidade de desempenho. Esse ponto de preço pressupõe a colocação fora de uma troca.
Em comparação com um sistema de desktop doméstico, a latência nem sempre é melhorada com a escolha de um provedor de VPS. Seu local de residência pode estar mais próximo de uma determinada bolsa financeira do que os datacenters do seu provedor de nuvem. Isso é mitigado pela escolha de uma empresa que ofereça serviços de VPS voltados especificamente para transações algorítmicas que estão localizadas em ou perto de bolsas de valores. Estes provavelmente custarão mais do que um provedor VPS genérico, como Amazon ou Rackspace.
Colocação de Troca.
Para obter a melhor minimização de latência, é necessário colocar servidores dedicados diretamente no data center de troca. Esta é uma opção proibitivamente cara para quase todos os traders algorítmicos de varejo, a menos que estejam muito bem capitalizados. É realmente o domínio do fundo quantitativo profissional ou corretagem. Como mencionei acima, uma opção mais realista é comprar um sistema VPS de um provedor localizado próximo a uma bolsa.
Como pode ser visto, existem muitas opções para backtesting, execução automatizada e hospedagem de uma estratégia. A determinação da solução correta depende do orçamento, da capacidade de programação, do grau de customização exigido, da disponibilidade da classe de ativos e de a transação ser realizada em uma base de varejo ou profissional.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.
Комментарии
Отправить комментарий