Enquanto eu gosto de onde essa pergunta está indo, eu gostaria de sugerir para torná-lo um pouco mais concreto. Quais partes do processo de backtesting que você gostaria de aprender Isso pode variar em qualquer lugar de apenas estimar um retorno normal, onde o portfólio retorna de sua estratégia já são dadas para a implementação de uma regra de formação de carteira completa algoritmicamente. Ndash Constantin Dec 30 14 at 21:06 Para ser honesto eu don39t saber muito sobre backtesting. Foi-me dito que terei que testar novas estratégias ou melhorar as atuais durante o meu estágio. Então eu gostaria de saber um pouco mais sobre o assunto antes de começar. Quais são as diferentes partes dela. Ndash Maxime Dec 30 14 at 21:31 A ideia geral Para os títulos de capital, um backtest simples normalmente consistem em duas etapas: Computação do retorno da carteira resultante de sua regra de formação de carteira (ou estratégia de negociação) Modelo de preços de ativos Passo 2 é simplesmente uma regressão e computacionalmente muito simples no Matlab. O que é complicado é a implementação do passo 1, que exigirá que você se sinta muito confortável no Matlab, e existem diferentes maneiras de fazer isso. Se você sabe como fazer uma regressão OLS em Matlab, o que você deve se concentrar em todos os tipos de manipulações de matriz. Implementação em Matlab Formação de portfólio e cálculo de retorno Para dar um exemplo de como uma estratégia de negociação primitiva poderia ser implementada no Matlab, vamos assumir dados de retorno mensais e um período de espera uniforme de um mês em n ativos durante k períodos, onde i in e k dentro . Supondo que não haja mudanças na composição de seu universo de ações, sua matriz de retorno X é de dimensões k vezes n. X ampères ampères x ampères ampères ampères x ampères dots amp vdots ampères ddots amp vdots ampères ddots amp vdots x ampères dots ampères x ampères dots ampères vdots ampères ddots ampères vdots ampères ddots amp vdots x ampères dots ampères x ampères dots ampères x end Onde retorna São computados como x frac-1. Assumindo que seu critério de seleção é algum tipo de característica de estoque que está disponível na freqüência mensal, você também terá uma matriz de características C. Você poderia então escrever um algoritmo que identifica aquelas entradas em C que cumprem seu critério de seleção (por exemplo, exceder um certo limite ) E substituir as entradas correspondentes (onde i e t são iguais) de uma matriz indicadora I (que foi inicializada como uma matriz zero usando a função zeros) com uns. Você pode então multiplicar as entradas de I por aquelas da matriz de retornos X para obter uma matriz R que indica os retornos resultantes de suas participações. Você pode então calcular a média das entradas não-zero para cada linha de R para obter seu vetor de retornos da carteira. Ajuste de risco e identificação de retornos anormais Na etapa 2, você compara esse vetor com os retornos normais obtidos da estimativa de regressão de um modelo de precificação de ativos, como o modelo Fama-French. Subtraindo o vetor de retorno normal de seu portfólio retorna o vetor, você determina se sua estratégia de negociação resultou em um retorno anormal positivo, que é o que você está buscando. Recomendações Se você é novo no Matlab, sugiro que você se familiarize com ele o suficiente para implementar essa estratégia simplista antes de relaxar algumas das suposições simplificadoras (como o período de manutenção uniforme e a periodicidade) e avançar para implementações mais sofisticadas. Mais uma vez, o que eu gostaria de salientar é que isso exige que você se sinta muito confortável com Matlab e especialmente as diferentes maneiras de manipular matrizes, o que pode levar algum tempo. Se você não é obrigado a usar Matlab para o seu estágio e gostaria de obter resultados rápidos, você poderia fazer a etapa 1 no Excel em vez disso, que é tedioso, mas não exige o investimento inicial (vale a pena) que você precisa fazer para Matlab. Para se familiarizar com Matlab, tenho certeza que você já descobriu a documentação extremamente boa que vem com ele. Isso, para mim, é o recurso mais valioso e provavelmente mais útil do que qualquer outro recurso financeiro específico (com o qual eu esperaria até que você esteja familiarizado com o Matlab). Tudo o que é necessário para determinar o retorno normal é uma regressão OLS e uma compreensão rudimentar dos modelos de precificação de ativos. Respondeu 30 de dezembro 14 às 22: 20MatlabTrading Este post é sobre como é importante usar diferentes tipos de métodos de otimização, como algoritmos genéticos e paralelização para obter resultados mais rápido. Otimização de Algoritmos Genéticos Apesar do fato de que o princípio do algoritmo genético (evolucionário) é muito bem explicado nos webinars do MathWorks, nos exemplos, no entanto, ele é usado apenas para a otimização da escolha de um grupo de estratégia a partir de um conjunto. Este é um bom exemplo do uso desses algoritmos, no entanto, acontece que há uma necessidade de definir muitas variáveis com intervalos significativos para uma estratégia, você não obter com uma iteração ea paralelização de processos 8211 cálculos podem levar vários dias . Certamente, existem estratégias na fase final de otimização. Quando nós quase certamente sabemos que a estratégia de negociação é bem sucedida, podemos esperar por vários dias ou alugar o cluster inteiro - o resultado pode valer a pena. No entanto, se precisamos estimar os resultados de uma estratégia volumosa e decidir se vale a pena gastar o tempo, então algoritmos genéticos podem ser perfeitamente adequado. Nós fornecemos a possibilidade de usar três métodos para otimizar a estratégia em WFAToolbox: Método linear 8211 é um modo usual de classificação em que você verá todos os resultados intermediários (subótimos). Dá a máxima precisão. O método paralelo 8211 todos os kernels de sua CPU serão usados. Não permite ver resultados intermediários, mas acelera significativamente a operação. Dá máxima precisão durante o aumento da velocidade de cálculo. O método genético 8211 utiliza o algoritmo evolutivo de otimização. Permite ver valores subóptimos, mas dá o resultado próximo ao melhor. Não é um método muito preciso, mas é preciso o suficiente para a execução inicial da estratégia. Muito rápido. Muitas vezes nos perguntam se o WFAToolbox - Caixa de Ferramentas de Análise Walk-Forward para MATLAB tem a capacidade de usar a GPU nos cálculos. Infelizmente, a GPU não é adequada para todas as tarefas e seu uso é muito específico. Para usá-lo, você precisa ajustar a lógica eo código de cada estratégia para testes de núcleos gráficos. Infelizmente, devido a tal não universalidade do método não se pode usar GPU em WFAToolbox. Continuando a parte 2 da discussão de problemas e soluções em testes e análise de estratégia de negociação algorítmica em MATLAB, convido você a ler este post sobre o problema de indisponibilidade de visualização de processos em soluções de software moderno para testes de sistemas de negociação. Visualização do processo de teste Na minha experiência de trabalho, muitas vezes eu analisei outras plataformas populares para testes de estratégia de negociação. Tais como TradeStation. MetaStock. Multicharts etc. e eu fui surpreendido sempre em como pouca atenção foi pagada à visualização do processo testando. A coisa é que quando nós não vemos os resultados dos valores intermediários, sub-optimal de parâmetros optimized, nós jogamos frequentemente afastado o ouro junto com a sujeira. A questão é por causa de uma amostragem excessivamente ampla, a estratégia ajusta os parâmetros da maneira como vemos uma estratégia perfeita que falha na vida real ou ver um ou dois negócios, que são supostamente o melhor porque foi selecionado tais dados de intervalo de tempo onde o Melhor estratégia de negociação seria buy-and-hold, mas por que são então outras estratégias necessárias para a visualização do processo de teste de estratégia de negociação em MATLAB (proposto no webinar) Como resultado, sem ver resultados intermediários, precisamos 171blindly187 alterar os parâmetros para tentar Para obter os melhores dados ou assisti-lo em alguns 3D ou 4D (cor é a dimensão 4), como proposto em webinars. A análise de valores nos espaços N-dimensionais pode definitivamente ser uma alternativa, mas tem várias limitações: E se houver mais de 4 dimensões Quando você vê que sinais e em que freqüência eles aparecem na faixa de preço, você tem quase todos os A representação visual necessária de sua estratégia: a freqüência das transações, sua rentabilidade (curva de renda), a precisão de abertura, a similaridade com outros valores subótimos, etc. que não se pode dizer sobre o desempenho no espaço N-dimensional onde todas as informações úteis É, de fato, que o valor ótimo não é apenas um, mas há toda uma gama de valores subóptimos em uma ou mais áreas. Ao otimizar uma estratégia em WFAToolbox 8211 Walk-Forward Analysis Toolbox para MATLAB174. Como um novo valor ótimo é encontrado, os sinais de estratégia de negociação no período em amostra e fora da amostra imediatamente aparecem no gráfico, para que você sempre pode controlar o intervalo de opções que você deve atribuir, e também você pode pausar a otimização Sem esperar pelo final do teste, como se torna claro que algo deu errado ou tudo está bem. Hola, meu nome é Igor Volkov. Tenho desenvolvido estratégias de negociação algorítmica desde 2006 e tenho trabalhado em vários fundos de hedge. Neste artigo, eu gostaria de discutir as dificuldades que surgem no caminho do desenvolvimento de estratégias de negociação MATLAB durante testes e análises, bem como para oferecer soluções possíveis. Tenho vindo a utilizar o MATLAB para testar estratégias de algoritmos desde 2007 e cheguei à conclusão de que esta não é apenas a ferramenta de investigação mais conveniente, mas também a mais poderosa porque torna possível o uso de modelos estatísticos e econométricos complexos, redes neurais, Aprendizagem de máquina, filtros digitais, lógica fuzzy, etc, adicionando caixa de ferramentas. A linguagem MATLAB é bastante simples e bem documentada, por isso mesmo um não-programador (como eu) pode dominá-lo. Como tudo começou. Era 2008 (se não me engano) quando o primeiro webinar sobre negociação algorítmica em MATLAB com Ali Kazaam foi lançado, abrangendo o tópico de otimização de estratégias simples baseadas em indicadores técnicos, etc. apesar de um código bastante simétrico, as ferramentas eram interessantes Suficiente para usar. Eles serviram como ponto de partida para a pesquisa e aprimoramento de um modelo de teste e análise que permitiria usar todo o poder das caixas de ferramentas e liberdade de ações do MATLAB durante a criação de estratégias comerciais próprias, ao mesmo tempo que permitiria controlar o processo Dos testes e os dados obtidos e sua análise subsequente escolheriam carteira efetiva de sistemas de negociação robustos. Posteriormente, webinars Mathworks foram atualizados a cada ano e gradualmente introduziu elementos cada vez mais interessantes. Assim, em 2018, realizou-se o primeiro webinar sobre pares comerciais (arbitragem estatística) utilizando a Caixa de Ferramentas Econométrica, embora a Caixa de Ferramentas de teste e análise permanecesse a mesma. Em 2017, Trading Toolbox da Mathworks apareceu que permitiu conectar MATLAB para diferentes corretores para a execução de suas aplicações. Embora houvesse soluções automáticas para a execução das transações, a partir desse ponto MATLAB poderia ser considerado um sistema para desenvolver estratégias de negociação com um ciclo completo: desde o carregamento de dados até a execução de estratégias de negociação automatizadas. Por que cada Algotrader deveria reinventar a roda? No entanto, a Mathworks não ofereceu uma solução completa para testar e analisar as estratégias. Os códigos que você poderia obter dos webinars eram os únicos elementos de um teste de sistema completo e era necessário modificá-los , Personalizá-los e adicioná-los à GUI para facilidade de uso. Foi muito demorado, colocando assim uma questão: seja qual for a estratégia, ela deve passar pelo mesmo processo de teste e análise, o que permitiria que ele fosse classificado como estável e utilizável. Então, por que cada algotrader deveria reinventar a roda e escrever Seu próprio código para estratégias de teste adequadas no MATLAB Portanto, a decisão foi tomada para criar um produto que permitiria executar todo o processo associado ao teste e análise de estratégias de negociação algorítmicas usando uma interface simples e amigável. Em primeiro lugar, gostaria de responder às seguintes perguntas: O que aconteceu com o blog 1. Jev Kuznetsov não é o dono mais O blog foi comprado de nosso amigo, Jev Kuznetsov, que se mudou para o seu outro blog tradingwithpython. blogspot. Ele concluiu que Python é melhor do que MATLAB para negociação, o que eu considero ser falso. MATLAB continua a ser um dos melhores softwares do mundo para fins de negociação algorítmica IMHO (tenho alguns fatos sobre isso, embora para discussão futura). 2. Nós mudamos a marca A partir deste momento o blog será chamado MatlabTrading, que é muito mais compreensível sobre os temas que irá incluir. Além disso, o nome de domínio foi alterado para matlabtrading em vez do matlab-trading. blogspot inicial. Embora o domínio antigo ainda esteja trabalhando redirecionando do nome de domínio primário. O que acontecerá com o blog 1. Mais artigos e artigos Esperamos trazer vida a este blog postando conteúdo relevante uma ou duas vezes por semana. Nos primeiros meses, publicaremos na maior parte os artigos e vídeos que já temos para tornar mais fácil para os nossos queridos leitores a busca de informações sobre um recurso e ter crosslink sobre eles. Então nós temos planos para escrever posts sobre aspectos práticos de negociação algorítmica no MATLAB. Como criar estratégias de negociação automáticas modernas, tais como: pares de arbitragem estatística negociação reversão média estratégias de negociação neutra mercado baseado em cointegration bollinger bandas kalman filtro etc para commodities, ações e Forex. Tendência de estratégias de acompanhamento com Jurik Moving Average e outros filtros digitais sofisticados Previsão de estratégias com aprendizado de máquinas (Support Vector Machines) e outros métodos Criando estratégias de negociação robusto usando o teste de fluxo de visão visual de gestão de dinheiro para reinvestir seu capital (ciência sobre como obter 1M de 10K Em um ano com o máximo, mas estimado risco e suor recompensas). Talvez depois de ler este youve pensou que este vai ser um outro artigo mudo para aqueles caras pobres que procuram como se tornar rico através de negociação em forex e tudo isso. Bem, isso é totalmente falso Estamos trabalhando no MATLAB, ea maioria de nós são cientistas e especialistas nesse aspecto, então tudo é sério. 2. Mais interatividade Eu ficarei feliz se todos nós pudermos relacionar através de comentários em postagens. Assine nossas notícias para receber alertas sobre as postagens e eventos mais recentes. Mais adiante, temos planos para fazer webinars do Google Hangouts. Não perca, clique no botão Seguir no canto superior direito para se juntar à nossa comunidade. O que você gostaria de ler em nossos posts Que tópicos você pode sugerir Escreva aqui nos comentários. No meu post anterior, cheguei a uma conclusão de que fechar a fechar pares de negociação não é tão rentável hoje como costumava ser antes de 2018. Um leitor apontou que poderia ser que a natureza reverter média dos spreads apenas mudou para prazos mais curtos . Acontece que compartilho a mesma idéia, então decidi testar essa hipótese. Desta vez apenas um par é testado: 100 SPY vs -80 IWM. Backtest é realizado em dados de barra de 30 segundos de 11.2017 para 12.2017. As regras são simples e semelhantes à estratégia que testei no último post: se o retorno da barra do par exceder 1 na pontuação z, troque a próxima barra. O resultado parece muito bonito: eu consideraria isso como prova suficiente de que ainda há uma abundância de reversão média na escala de 30 segundos. Se você acha que este gráfico é muito bom para ser verdade, que infelizmente é o caso. Nenhum custo de transação ou spread bid-ask foram considerados. Na verdade, eu duvido que não haveria qualquer lucro à esquerda depois de subtrair todos os custos de negociação. Ainda assim, este tipo de gráficos é a cenoura pendurada na frente do meu nariz, mantendo-me ir. Bad notícias de todos, de acordo com meus cálculos, (que espero sinceramente estão incorretos) o comércio de pares clássicos está morto. Alguns povos discordariam fortemente, mas é aqui o que eu encontrei: Vamos fazer exame de uma estratégia hipotética que trabalhe em uma cesta de etfs: ESPY, XLY, XLE, XLF, XLI, XLB, XLK, IWM, QQQ, Pares podem ser feitas. Cada par é construído como uma propagação neutra do mercado. Regras de estratégia: Em cada dia, para cada par, calcule z-score com base no desvio padrão de 25 dias. Se z-score gt limiar, ir curto, fechar próximo dia Se z-score lt - threshold ir longo, fechar próximo dia Para manter tudo simples, o cálculo é feito sem qualquer gestão de capital (pode-se ter até 90 pares em carteira Em cada dia). Os custos de transação também não são considerados. Para colocá-lo simplesmente, esta estratégia rastreia um dia reverter natureza média do mercado de spreads neutros. Aqui estão os resultados simulados para vários limiares: Não importa qual limiar é usado, a estratégia é altamente rentável em 2008, muito bom throuh 2009 e completamente inútil a partir de início de 2018. Esta não é a primeira vez que me deparei com esta mudança na média reverter Comportamento em etfs. Não importa o que Ive tentou, eu não tive sorte em encontrar uma estratégia de negociação de pares que iria trabalhar em ETFs passado de 2018. Minha conclusão é que esses tipos de simples stat-arb modelos apenas não cortá-lo mais. Backtesting Validar seus modelos financeiros com histórico Backtesting é um framework que utiliza dados históricos para validar modelos financeiros, incluindo estratégias de negociação e modelos de gerenciamento de risco. Dependendo dos objetivos da validação, os profissionais financeiros utilizam mais de um indicador ou metodologia para medir a eficácia dos modelos financeiros. Backtesting é rotineiramente realizado na negociação e gerenciamento de risco. Como resultado, há uma série de técnicas dedicadas de backtesting específicas para estas duas áreas. Na negociação, as técnicas de backtesting comuns incluem: Análise in-sample vs. out-of-sample Análise walk-forward ou otimização walk-forward Análise em nível de instrumento vs. avaliação em nível de portfólio Na análise de risco, o backtesting geralmente é aplicado ao valor-at (VaR) e também é conhecido como VaR backtesting. Existem várias técnicas de backtesting VaR, tais como: Testes de semáforo Basels Teste binomial Kupiecs Proporção de testes de falhas Tempo de Kupiecs até o primeiro teste de falha Teste de Christoffersens de cobertura condicional Teste de independência de cobertura condicional de Christoffersens Tempo Haas entre falhas ou teste Kupiec Testar o seu teste de backstage de sucesso 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 Guia de Iniciantes e Identificação de Estratégia. Ambos estes artigos mais longos, mais envolvidos foram muito populares assim que o mal continuam nesta veia e fornecem o detalhe no tópico do backtesting da estratégia. O backtesting algorítmico requer conhecimento de muitas áreas, incluindo psicologia, matemática, estatística, desenvolvimento de software e microestrutura do mercado. Eu não poderia esperar para cobrir todos esses temas em um artigo, então eu vou dividi-los em duas ou três peças menores. O que vamos discutir nesta seção III começar por definir backtesting e, em seguida, vou descrever o básico de como ele é realizado. Então eu vou elucidar sobre os preconceitos que tocou no guia para iniciantes Quantitative Trading. Em seguida, apresentarei uma comparação das várias opções de software de backtesting disponíveis. Em artigos subseqüentes, veremos os detalhes das implementações de estratégias que são muitas vezes mal mencionadas ou ignoradas. Também vamos considerar como tornar o processo de backtesting mais realista, incluindo as idiossincrasias de uma troca comercial. Em seguida, discutiremos os custos de transação e como modelá-los corretamente em uma configuração de backtest. Vamos terminar com uma discussão sobre o desempenho de nossos backtests e, finalmente, fornecer um exemplo de uma estratégia de quant comum, conhecido como um meio-reverting pares comércio. Vamos começar por discutir o que backtesting é e por que devemos realizá-lo em nossa negociação algorítmica. O que é Backtesting A negociação algorítmica se destaca dos outros tipos de classes de investimento, porque podemos fornecer expectativas mais confiáveis sobre o desempenho futuro do desempenho passado, como conseqüência da disponibilidade abundante de dados. O processo pelo qual este é 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 comércio (que nós significaremos aqui para ser um round-trip de dois sinais) terá um lucro ou uma perda associada. A acumulação deste lucro durante a duração do seu backtest estratégia levará ao lucro total e perda (também conhecido como PL ou PnL). Essa é a essência da idéia, embora, claro, o diabo está sempre nos detalhes Quais são as principais razões para backtesting uma estratégia algorítmica Filtração - Se você se lembra do artigo sobre Identificação da Estratégia. Nosso objetivo na fase inicial de pesquisa era estabelecer um pipeline estratégico e então filtrar qualquer estratégia que não atendesse a certos critérios. Backtesting nos fornece outro mecanismo de filtragem, pois podemos eliminar estratégias que não atendam às nossas necessidades de desempenho. Modelagem - Backtesting nos permite testar (com segurança) novos modelos de certos fenômenos de mercado, como custos de transação, roteamento de pedidos, latência, liquidez ou outros problemas de microestrutura do mercado. Otimização - Embora a otimização da estratégia esteja repleta de vieses, o backtesting nos permite aumentar o desempenho de uma estratégia modificando a quantidade ou valores dos parâmetros associados a essa estratégia e recalculando seu desempenho. Verificação - Nossas estratégias são muitas vezes obtidas externamente, através do nosso pipeline estratégico. Backtesting uma estratégia garante que ele não foi incorretamente implementado. Embora raramente teremos 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 a nossa própria implementação. Backtesting fornece uma série de vantagens para negociação algorítmica. No entanto, nem sempre é possível retroceder diretamente uma estratégia. Em geral, à medida que a frequência da estratégia aumenta, torna-se mais difícil modelar corretamente os efeitos da 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 onde o sistema de execução é a chave para o desempenho da estratégia, como com algoritmos de freqüência ultra-alta. Infelizmente, backtesting é repleto de preconceitos de todos os tipos. Nós abordamos algumas dessas questões em artigos anteriores, mas vamos agora discuti-los em profundidade. Preconceitos que afetam Backtests de estratégia Há muitos viés que podem afetar o desempenho de uma estratégia backtestada. Infelizmente, esses preconceitos têm uma tendência para inflar o desempenho, em vez de prejudicá-lo. Assim, você deve sempre considerar um backtest para ser um limite superior idealizado sobre o desempenho real da estratégia. É quase impossível eliminar os viés da negociação algorítmica, por isso é nosso trabalho minimizá-los da melhor forma possível para tomar decisões informadas sobre nossas estratégias algorítmicas. Há quatro grandes preconceitos que eu gostaria de discutir: Otimização Bias. Bia de olhar para frente. Preconceito de Sobrevivência e Tolerância Psicológica. Otimização Bias Este é provavelmente o mais insidioso de todos os vieses de backtest. Trata-se de ajustar ou introduzir parâmetros comerciais adicionais até que o desempenho da estratégia no conjunto de dados de backtest é muito atraente. No entanto, uma vez viva o desempenho da estratégia pode ser marcadamente diferente. Outro nome para esse viés é o encaixe de curva ou viés de snooping de dados. O viés de otimização é difícil de eliminar, já que as estratégias algorítmicas muitas vezes envolvem muitos parâmetros. Os parâmetros nesta instância podem ser os critérios entryexit, os períodos de look-back, os períodos de média (isto é, o parâmetro de alisamento de média móvel) ou a 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, é preciso também ter cuidado com os últimos, 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 sonoro e fundamental para a escolha de parâmetros deve, com todos os outros fatores considerados, levar a uma superfície de parâmetro mais lisa. Se você tem uma superfície de desempenho muito nervosa, muitas vezes 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 multidimensionais e é uma área de pesquisa altamente ativa. Eu não vou me debruçar sobre isso aqui, mas mantê-lo na parte de trás de sua mente quando você encontrar uma estratégia com um fantástico backtest Look-Ahead Bias Look-ahead viés é introduzido em um backtesting sistema quando dados futuros acidentalmente incluídos em um ponto no Onde esses dados não estariam realmente disponíveis. Se estivermos executando o backtest cronologicamente e atingiremos o ponto de tempo N, então o viés prospectivo ocorrerá se os dados forem incluídos para qualquer ponto Nk, onde k0. Os erros de viés prospectivo podem ser incrivelmente sutis. Aqui estão três exemplos de como o viés prospectivo pode ser introduzido: Erros Técnicos - Vetores de Arrays no código geralmente têm iteradores ou variáveis de índice. Deslocamentos incorretos desses índices podem levar a um viés prospectivo incorporando dados em Nk para k não-zero. Cálculo de parâmetros - Outro exemplo comum de viés prospectivo ocorre quando se calculam parâmetros de estratégia ó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, aplicada retroativamente a uma estratégia de negociação para fins de otimização, então dados futuros estão sendo incorporados e existe um viés prospectivo. MaximaMinima - Certas estratégias de negociação fazem uso de valores extremos em qualquer período de tempo, como incorporar os preços altos ou baixos nos dados OHLC. No entanto, uma vez que estes valores mínimos máximos só podem ser calculados no final de um período de tempo, um viés prospectivo é introduzido se esses valores forem usados durante o período corrente. É sempre necessário atrasar os valores de highlow em pelo menos um período em qualquer estratégia de negociação fazendo uso deles. Como com o viés de otimização, é preciso ter muito cuidado para evitar sua introdução. É frequentemente a razão principal por que as estratégias negociando underperform seus backtests significativamente na troca viva. Surto 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égias. 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 considere apenas aqueles que sobreviveram até o momento atual. Como exemplo, considere testar uma estratégia em uma seleção aleatória de ações antes e depois da queda do mercado de 2001. Alguns estoques de tecnologia faliram, enquanto outros conseguiram se manter à tona e até prosperaram. Se tivéssemos restringido essa estratégia apenas às ações que passaram pelo período de levantamento do mercado, estaríamos introduzindo um viés de sobrevivência porque eles já demonstraram seu sucesso para nós. Na verdade, este é apenas outro caso específico de viés prospectivo, uma vez que as informações futuras estão sendo incorporadas à análise do passado. Existem duas formas principais de mitigar o viés de sobrevivência em seus backtests de estratégia: Survivorship Bias Free Datasets - No caso de dados de equidade é possível comprar conjuntos de dados que incluem entidades excluídas, embora não sejam baratos e só tendem a ser utilizados por empresas institucionais . Em particular, os dados do Yahoo Finance não é livre de sobrevivência, e isso é comumente usado por muitos comerciantes de varejo. Pode-se também negociar em classes de ativos que não são propensas a viés de sobrevivência, como certas commodities (e seus derivados futuros). Uso de dados mais recentes - No caso de ações, a utilização de um conjunto de dados mais recentes mitiga a possibilidade de que a seleção de ações escolhida seja ponderada para os sobreviventes, simplesmente porque há menor probabilidade de fechamento de ações em períodos de tempo mais curtos. Pode-se também começar a construir um banco de dados pessoal de sobrevivência-viés, coletando dados do ponto atual em diante. Depois de 3-4 anos, você terá um sólido sobrevivência-viés livre conjunto de dados de ações com o qual backtest estratégias adicionais. Vamos agora considerar certos fenômenos psicológicos que podem influenciar o seu desempenho comercial. Psicológica Tolerância Bias Este fenômeno particular não é frequentemente discutido no contexto da negociação quantitativa. No entanto, é discutido extensivamente em relação a métodos de negociação mais discricionários. Ele tem vários nomes, mas Ive decidiu chamá-lo de tolerância psicológica viés, porque capta a essência do problema. Ao criar backtests ao longo de um período de 5 anos ou mais, é fácil olhar para uma curva de patrimônio tendência ascendente, calcular o rendimento anual composto, Sharpe ratio e até mesmo características drawdown e estar satisfeito com os resultados. A título de exemplo, a estratégia pode possuir uma redução relativa máxima de 25 e uma duração máxima de levantamento de 4 meses. Isso não seria atípico para uma estratégia de momentum. É fácil convencer-se de que é fácil tolerar esses períodos de perdas porque o quadro geral é cor-de-rosa. No entanto, na prática, é muito mais difícil Se levantamentos históricos de 25 ou mais ocorrem nos backtests, em seguida, com toda a probabilidade, você verá períodos de drawdown semelhante na negociação ao vivo. Estes períodos de retirada são psicologicamente difíceis de suportar. Tenho observado em primeira mão o que pode ser uma retirada prolongada, em um ambiente institucional, e não é agradável - mesmo se os backtests sugerem que tais períodos ocorrerão. A razão que eu ter denominado um viés é que muitas vezes uma estratégia que de outra forma seria bem sucedida é interrompida de negociação durante os tempos de retirada estendida e, portanto, levará a significativa underperformance em comparação com um backtest. Assim, embora a estratégia seja de natureza algorítmica, os fatores psicológicos ainda podem ter uma forte influência sobre a rentabilidade. O takeaway é para garantir que se você ver abaixamentos de uma certa percentagem e duração nos backtests, então você deve esperar que eles ocorram em ambientes de negociação ao vivo, e terá de perseverar, a fim de atingir a rentabilidade 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 a partir do zero (ou plugins adequados obtidos). As quant traders we are interested in the balance of being able to own our trading technology stack versus the speed and reliability of our development methodology. Here are the key considerations for software choice: Programming Skill - The choice of environment will in a large part come down to your ability to program software. I would argue that being in control of the total stack will have a greater effect on your long term PL than outsourcing as much as possible to vendor software. This is due to the downside risk of having external bugs or idiosyncrasies that you are unable to fix in vendor software, which would otherwise be easily remedied if you had more control over your tech stack. You also want an environment that strikes the right balance between productivity, library availability and speed of execution. I make my own personal recommendation below. Execution CapabilityBroker Interaction - Certain backtesting software, such as Tradestation, ties in directly with a brokerage. I am not a fan of this approach as reducing transaction costs are often a big component of getting a higher Sharpe ratio. If youre tied into a particular broker (and Tradestation forces you to do this), then you will have a harder time transitioning to new software (or a new broker) if the need arises. Interactive Brokers provide an API which is robust, albeit with a slightly obtuse interface. Customisation - An environment like MATLAB or Python gives you a great deal of flexibility when creating algo strategies as they provide fantastic libraries for nearly any mathematical operation imaginable, but also allow extensive customisation where necessary. Strategy Complexity - Certain software just isnt cut out for heavy number crunching or mathematical complexity. Excel is one such piece of software. While it is good for simpler strategies, it cannot really cope with numerous assets or more complicated algorithms, at speed. Bias Minimisation - Does a particular piece of software or data lend itself more to trading biases You need to make sure that if you want to create all the functionality yourself, that you dont introduce bugs which can lead to biases. Speed of Development - One shouldnt have to spend months and months implementing a backtest engine. Prototyping should only take a few weeks. Make sure that your software is not hindering your progress to any great extent, just to grab a few extra percentage points of execution speed. C is the elephant in the room here Speed of Execution - If your strategy is completely dependent upon execution timeliness (as in HFTUHFT) then a language such as C or C will be necessary. However, you will be verging on Linux kernel optimisation and FPGA usage for these domains, which is outside the scope of this article Cost - Many of the software environments that you can program algorithmic trading strategies with are completely free and open source. In fact, many hedge funds make use of open source software for their entire algo trading stacks. In addition, Excel and MATLAB are both relatively cheap and there are even free alternatives to each. Now that we have listed the criteria with which we need to choose our software infrastructure, I want to run through some of the more popular packages and how they compare: Note: I am only going to include software that is available to most retail practitioners and software developers, as this is the readership of the site. While other software is available such as the more institutional grade tools, I feel these are too expensive to be effectively used in a retail setting and I personally have no experience with them. Backtesting Software Comparison Description: High-level language designed for speed of development. Wide array of libraries for nearly any programmatic task imaginable. Gaining wider acceptance in hedge fund and investment bank community. Not quite as fast as CC for execution speed. Execution: Python plugins exist for larger brokers, such as Interactive Brokers. Hence backtest and execution system can all be part of the same tech stack. Customisation: Python has a very healthy development community and is a mature language. NumPySciPy provide fast scientific computing and statistical analysis tools relevant for quant trading. Strategy Complexity: Many plugins exist for the main algorithms, but not quite as big a quant community as exists for MATLAB. Bias Minimisation: Same bias minimisation problems exist as for any high level language. Need to be extremely careful about testing. Development Speed: Pythons main advantage is development speed, with robust in built in testing capabilities. Execution Speed: Not quite as fast as C, but scientific computing components are optimised and Python can talk to native C code with certain plugins. Cost: FreeOpen Source Description: Mature, high-level language designed for speed of execution. Wide array of quantitative finance and numerical libraries. Harder to debug and often takes longer to implement than Python or MATLAB. Extremely prevalent in both the buy - and sell-side. Execution: Most brokerage APIs are written in C and Java. Thus many plugins exist. Customisation: CC allows direct access to underlying memory, hence ultra-high frequency strategies can be implemented. Strategy Complexity: C STL provides wide array of optimised algorithms. Nearly any specialised mathematical algorithm possesses a free, open-source CC implementation on the web. Bias Minimisation: Look-ahead bias can be tricky to eliminate, but no harder than other high-level language. Good debugging tools, but one must be careful when dealing with underlying memory. Development Speed: C is quite verbose compared to Python or MATLAB for the same algorithmm. More lines-of-code (LOC) often leads to greater likelihood of bugs. Execution Speed: CC has extremely fast execution speed and can be well optimised for specific computational architectures. This is the main reason to utilise it. Cost: Various compilers: LinuxGCC is free, MS Visual Studio has differing licenses. Different strategies will require different software packages. HFT and UHFT strategies will be written in CC (these days they are often carried out on GPUs and FPGAs ), whereas low-frequency directional equity strategies are easy to implement in TradeStation, due to the all in one nature of the softwarebrokerage. My personal preference is for Python as it provides the right degree of customisation, speed of development, testing capability and execution speed for my needs and strategies. If I need anything faster, I can drop in to C directly from my Python programs. One method favoured by many quant traders is to prototype their strategies in Python and then convert the slower execution sections to C in an iterative manner. Eventually the entire algo is written in C and can be left alone to trade In the next few articles on backtesting we will take a look at some particular issues surrounding the implementation of an algorithmic trading backtesting system, as well as how to incorporate the effects of trading exchanges. We will discuss strategy performance measurement and finally conclude with an example strategy. Apenas começando com o comércio quantitativo
No comments:
Post a Comment