Estratégias quantitativas de negociação em r


QuantStart.


Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo de comerciantes quânticos bem informados e com a mesma mentalidade, prontos para responder às suas perguntas mais prementes sobre negociação de quant.


Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.


Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.


Por Michael Halls-Moore em 26 de março de 2013.


Neste artigo, vou apresentá-lo a alguns dos conceitos básicos que acompanham um sistema de negociação quantitativa de ponta a ponta. Espera-se que este post atenda a dois públicos-alvo. O primeiro será indivíduos tentando obter um emprego em um fundo como um comerciante quantitativo. A segunda será pessoas que desejam tentar montar seu próprio negócio de comércio algorítmico "de varejo".


A negociação quantitativa é uma área extremamente sofisticada de finanças quânticas. Pode levar uma quantidade significativa de tempo para obter o conhecimento necessário para passar uma entrevista ou construir suas próprias estratégias de negociação. Não só isso, mas exige uma ampla experiência em programação, pelo menos em uma linguagem como MATLAB, R ou Python. No entanto, à medida que a frequência comercial da estratégia aumenta, os aspectos tecnológicos tornam-se muito mais relevantes. Assim, ser familiar com C / C ++ será de suma importância.


Um sistema de comércio quantitativo consiste em quatro componentes principais:


Identificação Estratégica - Encontrando uma estratégia, explorando uma vantagem e decidindo sobre a frequência de negociação Backtesting da estratégia - Obtendo dados, analisando o desempenho da estratégia e removendo vieses Sistema de Execução - Vinculando a uma corretora, automatizando a negociação e minimizando custos de transação tamanho da aposta "/ critério Kelly e psicologia comercial.


Começaremos dando uma olhada em como identificar uma estratégia de negociação.


Identificação de Estratégia.


Todos os processos de negociação quantitativos começam com um período inicial de pesquisa. Este processo de pesquisa engloba encontrar uma estratégia, verificando se a estratégia se encaixa em um portfólio de outras estratégias que você pode estar executando, obtendo quaisquer dados necessários para testar a estratégia e tentando otimizar a estratégia para retornos mais altos e / ou menor risco. Você precisará avaliar seus próprios requisitos de capital se estiver executando a estratégia como um comerciante "varejista" e como qualquer custo de transação afetará a estratégia.


Ao contrário da crença popular, é bastante simples encontrar estratégias lucrativas por meio de várias fontes públicas. Os acadêmicos publicam periodicamente resultados teóricos de negociação (embora na maioria dos custos brutos de transação). Os blogs de finanças quantitativas discutirão estratégias em detalhes. As revistas comerciais descreverão algumas das estratégias empregadas pelos fundos.


Você pode questionar por que indivíduos e empresas estão interessados ​​em discutir suas estratégias rentáveis, especialmente quando sabem que outros "aglomerando o comércio" podem impedir a estratégia de trabalhar no longo prazo. A razão está no fato de que eles geralmente não discutem os parâmetros exatos e os métodos de ajuste que eles realizaram. Essas otimizações são a chave para transformar uma estratégia relativamente medíocre em uma altamente rentável. Na verdade, uma das melhores maneiras de criar suas próprias estratégias únicas é encontrar métodos semelhantes e, em seguida, realizar seu próprio procedimento de otimização.


Aqui está uma pequena lista de lugares para começar a procurar idéias de estratégia:


Muitas das estratégias que você olhará cairão nas categorias de reversão média e tendência / impulso. Uma estratégia de reversão à média é aquela que tenta explorar o fato de que existe uma média de longo prazo em uma "série de preços" (como o spread entre dois ativos correlatos) e que os desvios de curto prazo dessa média acabarão sendo revertidos. Uma estratégia de momentum tenta explorar tanto a psicologia do investidor quanto a grande estrutura de fundos, "pegando carona" em uma tendência de mercado, que pode ganhar impulso em uma direção e seguir a tendência até que ela se reverta.


Outro aspecto extremamente importante da negociação quantitativa é a freqüência da estratégia de negociação. A negociação de baixa freqüência (LFT) geralmente se refere a qualquer estratégia que detenha ativos por mais tempo do que um dia de negociação. Correspondentemente, a negociação de alta frequência (HFT) geralmente se refere a uma estratégia que mantém ativos intraday. Ultra-high frequency trading (UHFT) refere-se a estratégias que possuem ativos na ordem de segundos e milissegundos. Como profissionais de varejo, HFT e UHFT certamente são possíveis, mas apenas com conhecimento detalhado da "pilha de tecnologia" e da dinâmica do livro de pedidos. Não vamos discutir esses aspectos em grande medida neste artigo introdutório.


Uma vez que uma estratégia, ou conjunto de estratégias, foi identificado, agora precisa ser testado quanto à lucratividade em dados históricos. Esse é o domínio do backtesting.


Teste de estratégia.


O objetivo do backtesting é fornecer evidências de que a estratégia identificada por meio do processo acima é lucrativa quando aplicada a dados históricos e fora da amostra. Isso define a expectativa de como a estratégia será realizada no "mundo real". No entanto, backtesting não é garantia de sucesso, por várias razões. É talvez a área mais sutil do comércio quantitativo, uma vez que implica inúmeros vieses, que devem ser cuidadosamente considerados e eliminados, tanto quanto possível. Discutiremos os tipos comuns de viés, incluindo viés avançado, viés de sobrevivência e viés de otimização (também conhecido como viés de dados). Outras áreas de importância dentro do backtesting incluem a disponibilidade e a limpeza de dados históricos, levando em consideração custos de transação realistas e decidindo sobre uma plataforma robusta de backtesting. Discutiremos os custos de transação ainda mais na seção Sistemas de Execução abaixo.


Uma vez que uma estratégia tenha sido identificada, é necessário obter os dados históricos através dos quais realizar testes e, talvez, refinamento. Há um número significativo de fornecedores de dados em todas as classes de ativos. Seus custos geralmente variam de acordo com a qualidade, profundidade e pontualidade dos dados. O ponto de partida tradicional para os comerciantes quantos iniciais (pelo menos no nível de varejo) é usar o conjunto de dados gratuitos da Yahoo Finance. Não vou me debruçar muito sobre fornecedores aqui, em vez disso, gostaria de me concentrar nas questões gerais ao lidar com conjuntos de dados históricos.


As principais preocupações com dados históricos incluem precisão / limpeza, viés de sobrevivência e ajuste para ações corporativas, como dividendos e divisões de ações:


Precisão pertence à qualidade geral dos dados - se contém algum erro. Os erros às vezes podem ser fáceis de identificar, como, por exemplo, com um filtro de espiga, que irá escolher "picos" incorretos em dados da série temporal e corrigi-los. Em outras ocasiões, podem ser muito difíceis de detectar. Muitas vezes é necessário ter dois ou mais provedores e, em seguida, verificar todos os seus dados uns contra os outros. O viés de sobrevivência geralmente é uma "característica" de conjuntos de dados gratuitos ou baratos. Um conjunto de dados com viés de sobrevivência significa que ele não contém ativos que não estão mais negociados. No caso de ações, isso significa ações excluídas / falidas. Este viés significa que qualquer estratégia de negociação de ações testada em tal conjunto de dados provavelmente funcionará melhor do que no "mundo real", já que os "vencedores" históricos já foram pré-selecionados. As ações corporativas incluem atividades "logísticas" realizadas pela empresa que geralmente causam uma mudança de função gradual no preço bruto, que não deve ser incluído no cálculo dos retornos do preço. Ajustes para dividendos e desdobramentos são os culpados comuns. Um processo conhecido como ajuste de volta é necessário para ser realizado em cada uma dessas ações. É preciso ter muito cuidado para não confundir um estoque de divisão com um verdadeiro ajuste de retorno. Muitos comerciantes foram pegos por uma ação corporativa!


Para realizar um procedimento de backtest, é necessário usar uma plataforma de software. Você tem a escolha entre softwares backtest dedicados, como o Tradestation, uma plataforma numérica como o Excel ou o MATLAB ou uma implementação personalizada completa em uma linguagem de programação como Python ou C ++. Não vou demorar muito na Tradestation (ou similar), no Excel ou no MATLAB, pois acredito na criação de uma pilha de tecnologia interna completa (por razões descritas abaixo). Um dos benefícios de o fazer é que o software de backtest e o sistema de execução podem ser bem integrados, mesmo com estratégias estatísticas extremamente avançadas. Para as estratégias HFT em particular, é essencial usar uma implementação personalizada.


Quando testar um sistema, é preciso quantificar o desempenho. As métricas "padrão do setor" para estratégias quantitativas são o rebaixamento máximo e o Índice de Sharpe. A retirada máxima caracteriza a maior queda de pico a calha na curva de equidade da conta em um determinado período de tempo (geralmente anual). Isso geralmente é citado como uma porcentagem. As estratégias de LFT tendem a ter maiores disparidades do que as estratégias de HFT, devido a uma série de fatores estatísticos. Um backtest histórico mostrará o último drawdown máximo, que é um bom guia para o futuro desempenho de drawdown da estratégia. A segunda medida é a Ratia de Sharpe, que é definida heuristicamente como a média dos retornos em excesso divididos pelo desvio padrão desses retornos em excesso. Aqui, os retornos excedentes referem-se ao retorno da estratégia acima de um benchmark pré-determinado, como o S & P500 ou um Tesouro de 3 meses. Observe que o retorno anualizado não é uma medida usualmente utilizada, pois não leva em consideração a volatilidade da estratégia (ao contrário do Ratio Sharpe).


Uma vez que uma estratégia tenha sido backtested e seja considerada livre de preconceitos (na medida em que isso é possível!), Com um bom Sharpe e rebaixamentos minimizados, é hora de construir um sistema de execução.


Sistemas de Execução.


Um sistema de execução é o meio pelo qual a lista de negócios gerados pela estratégia é enviada e executada pelo corretor. Apesar do fato de que a geração de comércio pode ser semi - ou mesmo totalmente automatizada, o mecanismo de execução pode ser manual, semi-manual (ou seja, "um clique") ou totalmente automatizado. Para estratégias LFT, as técnicas manuais e semi-manuais são comuns. Para as estratégias HFT, é necessário criar um mecanismo de execução totalmente automatizado, que muitas vezes será estreitamente acoplado ao gerador comercial (devido à interdependência da estratégia e da tecnologia).


As principais considerações ao criar um sistema de execução são a interface com a corretora, a minimização dos custos de transação (incluindo comissão, derrapagem e spread) e a divergência de desempenho do sistema ao vivo do desempenho do backtested.


Existem muitas maneiras de se conectar a uma corretora. Eles variam de chamar seu corretor no telefone diretamente para uma interface de programação de aplicativos (API) de alto desempenho totalmente automatizada. O ideal é que você queira automatizar a execução de suas negociações o máximo possível. Isso liberta você para se concentrar em pesquisas futuras, além de permitir que você execute várias estratégias ou mesmo estratégias de maior freqüência (na verdade, o HFT é essencialmente impossível sem execução automática). O software comum de backtesting descrito acima, como MATLAB, Excel e Tradestation são bons para estratégias mais baixas e mais simples. No entanto, será necessário construir um sistema de execução interno escrito em uma linguagem de alto desempenho, como C ++, para fazer qualquer HFT real. Como uma anedota, no fundo em que eu costumava trabalhar, tínhamos um "loop de negociação" de 10 minutos, onde baixávamos novos dados de mercado a cada 10 minutos e depois executávamos negociações com base nessas informações no mesmo período de tempo. Isso estava usando um script Python otimizado. Para qualquer coisa que se aproxime de dados de minuto ou de segunda frequência, acredito que o C / C ++ seria mais ideal.


Em um fundo maior, muitas vezes não é o domínio do comerciante quant para otimizar a execução. No entanto, em lojas menores ou empresas HFT, os comerciantes são os executores e, portanto, um conjunto de habilidades muito mais amplo é muitas vezes desejável. Tenha em mente se você deseja ser empregado por um fundo. Suas habilidades de programação serão tão importantes, se não mais, do que suas estatísticas e talentos de econometria!


Outra questão importante que se enquadra na bandeira de execução é a redução de custos de transações. Geralmente, existem três componentes para os custos de transação: Comissões (ou impostos), que são as taxas cobradas pela corretora, a troca e a SEC (ou órgão regulador governamental similar); deslizamento, qual é a diferença entre o que você pretendia que seu pedido fosse preenchido em relação ao que estava preenchido; spread, que é a diferença entre o preço de oferta / oferta da garantia negociada. Observe que o spread NÃO é constante e depende da liquidez atual (isto é, disponibilidade de ordens de compra / venda) no mercado.


Os custos de transação podem fazer a diferença entre uma estratégia extremamente lucrativa com um bom índice de Sharpe e uma estratégia extremamente não lucrativa com um índice de Sharpe terrível. Pode ser um desafio prever corretamente os custos de transação de um backtest. Dependendo da frequência da estratégia, você precisará de acesso a dados de troca histórica, que incluirão dados de marca para preços de lances / pedidos. Equipes inteiras de quantos são dedicadas à otimização da execução nos fundos maiores, por esses motivos. Considere o cenário em que um fundo precisa descarregar uma quantidade substancial de negociações (das quais as razões para isso são muitas e variadas!). Ao "despejar" tantas ações no mercado, elas comprimirão rapidamente o preço e não poderão obter uma execução ótima. Daí, os algoritmos que os pedidos de "gotejamento de alimentação" no mercado existem, embora o fundo corra o risco de derrapagem. Além disso, outras estratégias "presas" sobre essas necessidades e podem explorar as ineficiências. Este é o domínio da arbitragem da estrutura do fundo.


A questão principal final para os sistemas de execução diz respeito à divergência de desempenho da estratégia com o desempenho testado. Isso pode acontecer por vários motivos. Já analisamos o viés de look-ahead e o viés de otimização em profundidade, ao considerar os backtests. No entanto, algumas estratégias não facilitam a verificação desses preconceitos antes da implantação. Isso ocorre em HFT mais predominantemente. Pode haver bugs no sistema de execução, bem como a própria estratégia de negociação que não aparece em um backtest, mas aparece no live trading. O mercado pode estar sujeito a uma mudança de regime posterior à implantação de sua estratégia. Novos ambientes regulatórios, mudanças no sentimento dos investidores e fenômenos macroeconômicos podem levar a divergências quanto ao comportamento do mercado e, assim, a rentabilidade da sua estratégia.


Gerenciamento de riscos.


A peça final para o enigma de negociação quantitativa é o processo de gerenciamento de riscos. "Risco" inclui todos os vieses anteriores que discutimos. Isso inclui risco de tecnologia, como servidores co-localizados na central de repente desenvolvendo um mau funcionamento do disco rígido. Isso inclui risco de corretagem, como o corretor estar falido (não tão louco quanto parece, dado o recente susto com a MF Global!). Em suma, abrange quase tudo o que poderia interferir com a implementação comercial, dos quais existem muitas fontes. Livros inteiros são dedicados ao gerenciamento de riscos para estratégias quantitativas, então não tento elucidar todas as possíveis fontes de risco aqui.


O gerenciamento de riscos também abrange o que é conhecido como alocação ótima de capital, que é um ramo da teoria do portfólio. Este é o meio pelo qual o capital é alocado para um conjunto de estratégias diferentes e para os negócios dentro dessas estratégias. É uma área complexa e depende de algumas matemáticas não triviais. O padrão da indústria pelo qual a alocação ótima de capital e a alavancagem das estratégias estão relacionadas é chamado de critério de Kelly. Como este é um artigo introdutório, não vou me alongar em seu cálculo. O critério de Kelly faz alguns pressupostos sobre a natureza estatística dos retornos, que geralmente não são válidos nos mercados financeiros, então os comerciantes são geralmente conservadores quando se trata da implementação.


Outro componente fundamental do gerenciamento de riscos é lidar com o próprio perfil psicológico. Existem muitos vieses cognitivos que podem surgir na negociação. Embora isso seja certamente menos problemático com o comércio algorítmico se a estratégia for deixada sozinha! Um viés comum é o da aversão à perda, em que uma posição perdedora não será fechada devido à dor de ter que perceber uma perda. Da mesma forma, os lucros podem ser tomados muito cedo porque o medo de perder um lucro já ganho pode ser muito grande. Outro viés comum é conhecido como viés de recência. Isso se manifesta quando os comerciantes colocam muita ênfase nos eventos recentes e não no longo prazo. Então, é claro, há o par clássico de viés emocional - medo e ganância. Estes podem, muitas vezes, levar a alavancagem insuficiente ou excessiva, o que pode causar explosão (ou seja, o patrimônio da conta em zero ou pior!) Ou lucros reduzidos.


Como pode ser visto, o comércio quantitativo é uma área extremamente complexa, embora muito interessante, de financiamento quantitativo. Eu literalmente arranhei a superfície do tópico neste artigo e já está ficando bastante longo! Livros e papéis inteiros foram escritos sobre questões que eu apenas dediquei uma ou duas sentenças. Por essa razão, antes de se candidatar a empregos quantitativos em bolsa de fundos, é necessário realizar uma quantidade significativa de estudo de base. No mínimo, você precisará de um extenso conhecimento em estatística e econometria, com muita experiência em implementação, por meio de uma linguagem de programação como MATLAB, Python ou R. Para estratégias mais sofisticadas no final de frequência mais alta, seu conjunto de habilidades é provável para incluir modificação do kernel do Linux, C / C ++, programação de montagem e otimização de latência da rede.


Se você estiver interessado em tentar criar suas próprias estratégias de negociação algorítmica, minha primeira sugestão seria se programar bem. A minha preferência é criar o máximo de captura de dados, backtester de estratégia e sistema de execução por si mesmo possível. Se o seu próprio capital estiver na linha, você não dormiria melhor à noite sabendo que você testou completamente seu sistema e está ciente de suas armadilhas e problemas específicos? Terceirizar isso para um fornecedor, enquanto potencialmente economiza tempo a curto prazo, pode ser extremamente caro a longo prazo.


Apenas iniciando o comércio quantitativo?


3 razões para se inscrever para a lista de e-mails QuantStart:


1. Quant Trading Lessons.


Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!


2. Todo o conteúdo mais recente.


Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.


Real, dicas de negociação viáveis, sem tonturas.


QuantStart.


O portal QuantCademy QuantStademy da QuantStart fornece recursos educacionais detalhados para aprender comércio sistemático e uma forte comunidade de comerciantes algorítmicos de sucesso para ajudá-lo.


Artigos Mais Recentes.


Apenas iniciando o comércio quantitativo?


3 razões para se inscrever para a lista de e-mails QuantStart:


1. Quant Trading Lessons.


Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!


2. Todo o conteúdo mais recente.


Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.


Real, dicas de negociação viáveis, sem tonturas.


Como projetar estratégias de negociação de quantos usando R?


Este blog cobre em resumo o conceito de back-testing de estratégia usando R. Antes de nos determos nos jargões de negociação usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Há mais de 4000 pacotes adicionais, mais de 18.000 membros do grupo do LinkedIn e quase 80 grupos Meetup atualmente em existência. É uma ferramenta perfeita para análise estatística, especialmente para análise de dados. A configuração concisa do Comprehensive R Archive Network sabe como CRAN fornece a lista de pacotes, juntamente com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.


Processo em Quatro Passos de qualquer Estratégia de Negociação Básica.


Formação de hipóteses Testando a produção de refinação.


Nossa hipótese é formulada como “mercado é revertido à média”. A reversão média é uma teoria que sugere que os preços eventualmente retornem ao seu valor médio. O segundo passo consiste em testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e computamos indicadores, sinais e métricas de desempenho. A fase de teste pode ser dividida em três etapas, obter os dados, escrever a estratégia e analisar a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. NSE tem um volume enorme para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço Open-High-Low-Close do mesmo.


Traçamos a banda de Bollinger pelo preço de fechamento.


Nós definimos um nível de limiar para comparar as flutuações no preço. Se o preço aumenta / diminui, atualizamos a coluna de limite. O preço de fechamento é comparado com a faixa superior e com a faixa inferior. Quando a banda superior é cruzada, é um sinal para vender. Da mesma forma, quando a banda inferior é cruzada, é um sinal de venda. A seção de codificação pode ser resumida da seguinte forma: -


Uma visão de helicóptero para a saída da estratégia é dada no diagrama abaixo.


Assim, nossa hipótese de que o mercado é um retorno significativo é suportada. Como este é o back-testing, temos espaço para refinar os parâmetros de negociação que melhorariam nossos retornos médios e os lucros realizados. Isso pode ser feito definindo diferentes níveis de limite, regras de entrada mais rigorosas, stop loss etc. Pode-se escolher mais dados para back-testing, usar a abordagem bayseiana para configurar o limiar, considerar a volatilidade.


Uma vez que você está confiante sobre a estratégia de negociação apoiada pelos resultados dos back-testing, você pode entrar em negociação ao vivo. O ambiente de produção é um grande tópico em si e está fora do escopo no contexto do artigo. Para explicar em breve isso envolveria escrever a estratégia em uma plataforma de negociação.


Vídeo de Webinar.


Uma vez que você aprendeu noções básicas de projetar uma estratégia de negociação quant usando R, você pode dar uma olhada em um exemplo de estratégia de negociação codificada em R e também aprender sobre como começar com o pacote quantmod em R. Você também pode dar uma olhada nosso curso de datacampio interativo com 10 horas de duração, "modelo de estratégia de negociação quantitativa em R"


Comentários estão fechados.


Posts populares recentes.


Artigos mais visitados da semana.


Jobs para usuários de R.


É alimentado pelo WordPress usando um design bavotasan.


Direitos autorais e cópia; 2017 R-bloggers. Todos os direitos reservados. Termos e Condições para este site.


Estratégia de Negociação Quantitativa Usando R: Um Guia Passo a Passo.


Nesta publicação, discutiremos sobre a construção de uma estratégia de negociação usando R. Antes de morar nos jargões comerciais usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Existem mais de 4000 extras em pacotes, mais 18000 membros do grupo do LinkedIn e perto de 80 R grupos Meetup atualmente existentes. É uma ferramenta perfeita para análise estatística, especialmente para análise de dados. A configuração concisa da Rede de Arquivo Abrangente R sabe que o CRAN fornece a lista de pacotes junto com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.


Processo em Quatro Passos de qualquer Estratégia de Negociação Básica.


Formação de hipóteses Testando a produção de refinação.


Nossa hipótese é formulada como "o mercado é reversão". A reversão média é uma teoria que sugere que os preços eventualmente retornem ao seu valor médio. A segunda etapa envolve testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e calculamos indicadores, sinais e métricas de desempenho. A fase de teste pode ser dividida em três etapas, obter os dados, escrever a estratégia e analisar a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. NSE tem um volume enorme para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço do Open-High-Low-Close do mesmo.


Nós definimos um nível de limiar para comparar as flutuações no preço. Se o preço aumenta / diminui, atualizamos a coluna de limite. O preço de fechamento é comparado com a banda superior e com a banda inferior. Quando a banda superior é cruzada, é um sinal para venda. Da mesma forma, quando a banda inferior é cruzada, é um sinal de venda.


A seção de codificação pode ser resumida da seguinte forma,


Uma visão de helicóptero para a saída da estratégia é dada no diagrama abaixo.


Assim, nossa hipótese de que o mercado é reversão à média é suportada. Como este é o back-testing, temos espaço para refinar os parâmetros de negociação que melhorariam nossos retornos médios e os lucros realizados. Isso pode ser feito definindo diferentes níveis de limite, regras de entrada mais rigorosas, stop loss etc. Pode-se escolher mais dados para back-testing, usar a abordagem bayseiana para configurar o limiar, considerar a volatilidade.


Uma vez que você está confiante sobre a estratégia de negociação apoiada pelos resultados dos back-testing, você pode entrar em negociação ao vivo. O ambiente de produção é um grande tópico em si e está fora do escopo no contexto do artigo. Para explicar em breve isso envolveria escrever a estratégia em uma plataforma de negociação.


Como mencionado anteriormente, estaríamos construindo o modelo usando o pacote quantstrat. O Quantstrat fornece uma infra-estrutura genérica para modelo e estratégias quantitativas baseadas em sinal de backtest. É uma camada de abstração de alto nível (construída em xts, FinancialInstrument, blotter, etc.) que permite que você crie e teste estratégias em poucas linhas de código.


As principais características do quantstrat são,


Suporta estratégias que incluem indicadores, sinais e regras Permite que estratégias sejam aplicadas a portfólios de múltiplos ativos Suporta os tipos de pedidos de mercado, limite, stoplimit e stoptrailing Suporta o dimensionamento de pedidos e a otimização de parâmetros.


Neste post, construímos uma estratégia que inclui indicadores, sinais e regras.


Para um modelo baseado em sinal genérico, seguem os objetos que devem ser considerados,


Instrumentos - Contém dados de mercado Indicadores - Valores quantitativos derivados de dados de mercado Sinais - Resultado da interação entre dados de mercado e indicadores Regras - Gerar ordens usando dados de mercado, indicadores e sinais.


Sem muito tempo, vamos discutir a parte de codificação. Nós preferimos R studio para codificação e insistimos que você use o mesmo. Você precisa ter determinados pacotes instalados antes de programar a estratégia.


O seguinte conjunto de comandos instala os pacotes necessários.


Depois de instalar os pacotes, importe-os para uso posterior.


Leia os dados do arquivo csv e converta-o em objeto xts.


Inicializamos o portfólio com o estoque, a moeda, o patrimônio inicial e o tipo de estratégia.


Adicione o limite de posição se desejar negociar mais de uma vez no mesmo lado.


Crie o objeto de estratégia.


Nós construímos uma função que calcula os limiares que queremos trocar. Se o preço se mover pelo thresh1, atualizamos o limite para o novo preço. Novas bandas para negociação são Threshold +/- Thresh2. A saída é um objeto xts, embora usemos a função reclass para garantir.


Adicione o indicador, o sinal e a regra de negociação.


Execute a estratégia e veja o caderno de pedidos.


Atualize o portfólio e visualize as estatísticas do comércio.


Aqui está o código completo.


Uma vez que você esteja familiarizado com essas noções básicas, dê uma olhada em como começar a usar o pacote quantimod em R. Ou, caso você seja bom em C ++, dê uma olhada em uma estratégia de exemplo codificada em C ++.


Se você é um profissional de varejo ou um profissional da área de tecnologia que deseja iniciar sua própria agência de negociação automatizada, comece a aprender o comércio de algoritmos hoje mesmo! Comece com conceitos básicos como arquitetura de negociação automatizada, microestrutura de mercado, sistema de backtesting de estratégia e sistema de gerenciamento de pedidos.


O Trader R.


Usando R e ferramentas relacionadas em Finanças Quantitativas.


Arquivo para as estratégias de negociação & # 8216; & # 8217; Categoria.


Vinculando R ao IQFeed com o pacote QuantTools.


O IQFeed fornece serviços de transmissão de dados e soluções de negociação que cobrem o mercado agrícola, energético e financeiro. É um provedor de feed de dados bem conhecido e reconhecido, voltado para usuários de varejo e pequenas instituições. O preço da assinatura começa em cerca de US $ 80 / mês.


Stanislav Kovalevsky desenvolveu um pacote chamado QuantTools. É um pacote tudo em um projetado para melhorar a modelagem de negociação quantitativa. Ele permite baixar e organizar dados históricos de mercado de várias fontes como Yahoo, Google, Finam, MOEX e IQFeed. O recurso que mais me interessa é a capacidade de vincular o IQFeed à R. Eu uso o IQFeed há alguns anos e estou feliz com ele (não estou afiliado à empresa em nenhum caminho). Mais informações podem ser encontradas aqui. Eu procurei uma integração dentro de R por um tempo e aqui está. Como resultado, depois que fiz alguns testes, mudei meu código que ainda estava em Python para R. Apenas para completar, aqui está um link que explica como fazer o download de dados históricos do IQFeed usando Python.


A QuantTools oferece quatro funcionalidades principais: Obter dados de mercado, Armazenar / Recuperar dados de mercado, Dados de séries temporais de plotagem e Testes reversos.


Primeiro, certifique-se de que o IQfeed esteja aberto. Você pode baixar dados diários ou intraday. O código abaixo faz o download dos preços diários (Aberto, Alto, Baixo, Fechado) para o SPY de 1º de janeiro de 2017 a 1º de junho de 2017.


O código abaixo faz o download dos dados intraday de 1º de maio de 2017 a 3 de maio de 2017.


Observe o parâmetro do período. Pode levar qualquer um dos seguintes valores: tick, 1min, 5min, 10min, 15min, 30min, hora, dia, semana, mês, dependendo da frequência que você precisa.


O QuantTools facilita o processo de gerenciar e armazenar dados do mercado de ticks. Você apenas configura parâmetros de armazenamento e está pronto para ir. Os parâmetros são onde, desde que data e quais símbolos você gostaria de armazenar. Sempre que você puder adicionar mais símbolos e se eles não estiverem presentes em um armazenamento, o QuantTools tentará obter os dados da data de início especificada. O código abaixo salvará os dados no seguinte diretório: & # 8220; C: / Usuários / Arnaud / Documents / Market Data / iqfeed & # 8221 ;. Existe uma sub-pasta por instrumento e os dados são aved em arquivos. rds.


Você também pode armazenar dados entre datas específicas. Substitua a última linha de código acima com uma das seguintes.


Agora, você deseja recuperar alguns dos dados armazenados, basta executar algo como:


Observe que apenas os tiques são suportados no armazenamento local, pelo que o período deve ser & # 8216; assinalar & # 8217;


O QuantTools fornece a função plot_ts para traçar dados da série temporal sem fins de semana, feriados e intervalos overnight. No exemplo abaixo, primeiro recupero os dados armazenados acima, depois seleciono as primeiras 100 observações de preço e, finalmente, desenho o gráfico.


Duas coisas a notar: primeiro espião é um objeto data. table daí a sintaxe acima. Para obter uma visão geral rápida das capacidades de data. table, veja esta excelente folha de truques da DataCamp. Segundo, o parâmetro local é VERDADEIRO à medida que os dados são recuperados do armazenamento interno.


O QuantTools permite escrever sua própria estratégia de negociação usando sua API C ++. Eu não vou elaborar sobre isso, pois este é basicamente o código C ++. Você pode consultar a seção Exemplos no site QuantTools.


No geral, acho o pacote extremamente útil e bem documentado. O único bit faltante é o feed ao vivo entre R e IQFeed, o que tornará o pacote uma solução real de ponta a ponta.


Como de costume, qualquer comentário é bem-vindo.


BERT: um recém-chegado na conexão R Excel.


Há alguns meses, um leitor me mostrou essa nova maneira de conectar R e Excel. Eu não sei por quanto tempo isso aconteceu, mas nunca encontrei isso e eu nunca vi nenhuma postagem no blog ou artigo sobre isso. Então eu decidi escrever um post enquanto a ferramenta realmente vale a pena e antes que alguém pergunte, eu não estou relacionado à empresa de forma alguma.


BERT significa Basic Excel R Toolkit. É grátis (licenciado sob a GPL v2) e foi desenvolvido pela Structured Data LLC. No momento da redação, a versão atual do BERT é 1.07. Mais informações podem ser encontradas aqui. De uma perspectiva mais técnica, o BERT é projetado para suportar a execução de funções R a partir de células da planilha do Excel. Em termos do Excel, é para escrever Funções definidas pelo usuário (UDFs) em R.


Nesta publicação, não vou mostrar-lhe como o R e o Excel interagem através do BERT. Há muito bons tutoriais aqui, aqui e aqui. Em vez disso, quero mostrar-lhe como usei o BERT para criar uma torre de controle # 8222; para minha negociação.


Meus sinais de negociação são gerados usando uma longa lista de arquivos R, mas eu preciso da flexibilidade do Excel para exibir os resultados de forma rápida e eficiente. Como mostrado acima, o BERT pode fazer isso por mim, mas eu também quero adaptar o aplicativo às minhas necessidades. Combinando o poder do XML, VBA, R e BERT, posso criar um aplicativo bonito, mas poderoso, na forma de um arquivo do Excel com código VBA mínimo. Em última análise, tenho um único arquivo do Excel reunindo todas as tarefas necessárias para gerenciar meu portfólio: atualização do banco de dados, geração de sinal, envio de ordens etc e # 8230; Minha abordagem poderia ser dividida nas 3 etapas abaixo:


Use XML para criar menus e botões definidos pelo usuário em um arquivo do Excel. Os menus e botões acima são essencialmente chamadas para funções do VBA. Essas funções do VBA são encapsuladas em torno de funções R definidas usando BERT.


Com esta abordagem, posso manter uma distinção clara entre o núcleo do meu código mantido em R, SQL e Python e tudo usado para exibir e formatar resultados mantidos no Excel, VBA e amp; XML Nas próximas seções, apresento o pré-requisito para desenvolver essa abordagem e um guia passo a passo que explica como o BERT poderia ser usado para simplesmente passar dados de R para Excel com um código mínimo de VBA.


1 & # 8211; Baixe e instale o BERT a partir deste link. Uma vez que a instalação foi concluída, você deve ter um novo menu de suplementos no Excel com os botões como mostrado abaixo. É assim que o BERT se materializou no Excel.


2 & # 8211; Faça o download e instale o editor da interface de usuário personalizada: O Editor de interface do usuário personalizado permite criar menus e botões definidos pelo usuário na faixa de opções do Excel. Um procedimento passo a passo está disponível aqui.


1 & # 8211; Código R: A função R abaixo é um código muito simples apenas para fins ilustrativos. Ele calcula e retorna os resíduos de uma regressão linear. Isto é o que queremos recuperar no Excel. Salve isso em um arquivo chamado myRCode. R (qualquer outro nome é bom) em um diretório de sua escolha.


2 & # 8211; functions. R em BERT: No Excel selecione Add-Ins - & gt; Diretório base e abra o arquivo chamado functions. R. Neste arquivo cole o seguinte código. Certifique-se de inserir o caminho correto.


Isso é apenas o fornecimento de BERT no arquivo R que você criou acima. Em seguida, salve e feche as funções do arquivo. R. Se você quiser fazer alguma alteração no arquivo R criado na etapa 1, você terá que recarregá-lo usando o botão BERT & # 8220; Recarregar arquivo de inicialização e # 8221; do menu Add-Ins no Excel.


3 & # 8211; No Excel: Crie e salve um arquivo chamado myFile. xslm (qualquer outro nome é bom). Este é um arquivo ativado por macro que você salva no diretório de sua escolha. Depois que o arquivo for salvo, feche-o.


4 & # 8211; Abra o arquivo criado acima no editor da interface do usuário personalizada: Depois que o arquivo estiver aberto, cole o código abaixo.


Você deve ter algo assim no editor XML:


Essencialmente, essa parte do código XML cria um menu adicional (RTrader), um novo grupo (Meu Grupo) e um botão definido pelo usuário (Novo botão) na faixa do Excel. Quando terminar, abra myFile. xslm no Excel e feche o Editor de UI personalizado. Você deveria ver algo assim.


5 & ​​# 8211; Abra o editor VBA: Em myFile. xlsm, insira um novo módulo. Cole o código abaixo no módulo recém-criado.


Isso apaga os resultados anteriores na planilha antes de lidar com os novos.


6 & # 8211; Clique no botão Novo: Agora volte para a planilha e no menu do RTrader clique no & # 8220; Novo botão & # 8221; botão. Você deve ver algo como o que aparece abaixo.


O guia acima é uma versão muito básica do que pode ser obtido usando o BERT, mas mostra como combinar o poder de várias ferramentas específicas para criar seu próprio aplicativo personalizado. Do meu ponto de vista, o interesse de tal abordagem é a capacidade de colar R e Excel, obviamente, mas também para incluir via XML (e lote) partes de código de Python, SQL e muito mais. Isso é exatamente o que eu precisava. Finalmente, ficaria curioso para saber se alguém tem alguma experiência com o BERT?


Estratégia de negociação: aproveitando ao máximo os dados da amostra.


Ao testar estratégias de negociação, uma abordagem comum é dividir o conjunto de dados inicial em dados de amostra: a parte dos dados projetados para calibrar o modelo e os dados de amostra: a parte dos dados usada para validar a calibração e garantir que o desempenho criado na amostra será refletido no mundo real. Como regra geral, cerca de 70% dos dados iniciais podem ser utilizados para calibração (isto é, na amostra) e 30% para validação (isto é, fora da amostra). Em seguida, uma comparação dos dados de entrada e saída da amostra ajuda a decidir se o modelo é robusto o suficiente. Este post visa dar um passo adiante e fornece um método estatístico para decidir se os dados fora da amostra estão alinhados com o que foi criado na amostra.


No gráfico abaixo, a área azul representa o desempenho fora da amostra de uma das minhas estratégias.


Uma simples inspeção visual revela um bom ajuste entre o desempenho dentro e fora da amostra, mas o grau de confiança que tenho nisso? Nesta fase não muito e esta é a questão. O que é realmente necessário é uma medida de similaridade entre os conjuntos de dados de entrada e de saída. Em termos estatísticos, isso pode ser traduzido como a probabilidade de que os números de desempenho dentro e fora da amostra sejam provenientes da mesma distribuição. Existe um teste estatístico não paramétrico que faz exatamente isso: o teste Kruskall-Wallis. Uma boa definição deste teste pode ser encontrada no R-Tutor & # 8220; Uma coleção de amostras de dados são independentes se elas vierem de populações não relacionadas e as amostras não se afetam. Usando o Teste de Kruskal-Wallis, podemos decidir se as distribuições populacionais são idênticas sem assumi-las para seguir a distribuição normal. & # 8221; O benefício adicional deste teste não está assumindo uma distribuição normal.


Existe outros testes da mesma natureza que podem enquadrar-se nesse quadro. O teste de Mann-Whitney-Wilcoxon ou os testes de Kolmogorov-Smirnov se encaixam perfeitamente na estrutura descrita aqui, porém isso está além do escopo deste artigo para discutir os prós e contras de cada um desses testes. Uma boa descrição junto com exemplos R podem ser encontradas aqui.


Aqui está o código usado para gerar o gráfico acima e a análise:


No exemplo acima, o período de amostra é mais longo do que o período fora da amostra, portanto, criei aleatoriamente 1000 subconjuntos dos dados de amostra, cada um deles com o mesmo comprimento que os dados fora da amostra. Então, testei cada um em um subconjunto de amostras em relação aos dados fora da amostra e gravei os valores p. Esse processo não cria um único valor p para o teste Kruskall-Wallis, mas uma distribuição que torna a análise mais robusta. Neste exemplo, a média dos valores de p é bem acima de zero (0,478), indicando que a hipótese nula deve ser aceita: há fortes evidências de que os dados de entrada e saída da amostra são provenientes da mesma distribuição.


Como de costume, o que é apresentado neste post é um exemplo de brinquedo que apenas arranha a superfície do problema e deve ser adaptado às necessidades individuais. No entanto, penso que propõe um quadro estatístico interessante e racional para avaliar os resultados fora da amostra.


Este post é inspirado nos dois artigos seguintes:


Vigier Alexandre, Chmil Swann (2007), "Efeitos de várias funções de otimização no desempenho fora da amostra de estratégias de negociação geneticamente evoluídas", prevendo a conferência sobre mercados financeiros.


Vigier Alexandre, Chmil Swann (2010), «Um processo de otimização para melhorar a consistência da amostra, um caso da Bolsa de Valores», JP Morgan Cazenove Equity Quantitative Conference, Londres, outubro de 2010.


Apresentando o fidlr: LoanceR de Dados Financeiros.


fidlr é um complemento do RStudio projetado para simplificar o processo de download de dados financeiros de vários provedores. Esta versão inicial é um invólucro em torno da função getSymbols no pacote quantmod e apenas o Yahoo, Google, FRED e Oanda são suportados. Eu provavelmente adicionarei funcionalidades ao longo do tempo. Como de costume, com essas coisas apenas um lembrete: "O SOFTWARE É FORNECIDO" COMO ESTÁ, SEM GARANTIA DE NENHUM TIPO "# 8230; & # 8221;


Como instalar e usar o fidlr?


Você pode obter o addin / pacote de seu repositório Github aqui (Eu vou registrá-lo em CRAN mais tarde) Instale o addin. Existe um excelente tutorial para instalar o RStudio Addins aqui. Depois que o addin é instalado, ele deve aparecer no menu Addin. Basta escolher fidlr no menu e uma janela como abaixo deve aparecer. Escolha um fornecedor de dados no menu suspenso Origem. Selecione um intervalo de datas no menu Data Digite o símbolo que deseja baixar na caixa de texto do instrumento. Para baixar vários símbolos basta digitar os símbolos separados por vírgulas. Use os botões de opção para escolher se deseja baixar o instrumento em um arquivo csv ou no ambiente global. O arquivo csv será salvo no diretório de trabalho e haverá um arquivo csv por instrumento. Pressione Executar para obter os dados ou Fechar para fechar o addin.


Mensagens de erro e avisos são manipulados pelos pacotes subjacentes (quantmod e Shiny) e podem ser lidos no console.


Esta é uma primeira versão do projeto, então não espere perfeição, mas espero que melhore com o tempo. Informe qualquer comentário, sugestão, erro, etc. & # 8230; para: thertradergmail.


Manter um banco de dados de arquivos de preços em R.


Fazer pesquisas quantitativas implica uma grande quantidade de dados crunching e um precisa de dados limpos e confiáveis ​​para conseguir isso. O que é realmente necessário é a limpeza de dados facilmente acessíveis (mesmo sem conexão à internet). A maneira mais eficiente de fazer isso por mim tem sido manter um conjunto de arquivos csv. Obviamente, este processo pode ser tratado de várias maneiras, mas eu achei um tempo extra muito eficiente e simples para manter um diretório onde eu armazeno e atualizo arquivos csv. Eu tenho um arquivo csv por instrumento e cada arquivo é nomeado após o instrumento que ele contém. A razão pela qual eu faço isso é dupla: primeiro, eu não quero baixar dados (preço) do Yahoo, Google etc e # 8230; toda vez que eu quiser testar uma ideia nova, mas mais importante, uma vez que eu identifiquei e consertei um problema, eu não quero ter que fazê-lo novamente na próxima vez que eu precisar do mesmo instrumento. Simples, mas muito eficiente até agora. O processo está resumido no quadro abaixo.


Em tudo o que se segue, suponho que os dados sejam provenientes do Yahoo. O código terá que ser alterado para dados do Google, Quandl etc e # 8230; Além disso, apresento o processo de atualização dos dados diários de preços. A configuração será diferente para dados de freqüência mais alta e outro tipo de conjunto de dados (ou seja, diferente dos preços).


1 & # 8211; Transferência inicial de dados (listOfInstruments. R & amp; historicalData. R)


O arquivo fileOfInstruments. R é um arquivo contendo apenas a lista de todos os instrumentos.


Se um instrumento não é parte da minha lista (ou seja, nenhum arquivo csv na minha pasta de dados) ou se você fizer isso pela primeira vez, você terá que baixar o conjunto de dados históricos inicial. O exemplo abaixo baixa um conjunto de preços diários dos ETFs do Yahoo Finance de volta para janeiro de 2000 e armazena os dados em um arquivo csv.


2 & # 8211; Atualizar dados existentes (updateData. R)


O código abaixo começa a partir de arquivos existentes na pasta dedicada e atualiza todos eles um após o outro. Eu costumo executar este processo todos os dias, exceto quando eu estou de férias. Para adicionar um novo instrumento, basta executar o passo 1 acima para este instrumento sozinho.


3 & # 8211; Crie um arquivo em lote (updateDailyPrices. bat)


Outra parte importante do trabalho é criar um arquivo em lote que automatiza o processo de atualização acima (I & # 8217; m um usuário do Windows). Isso evita abrir o R ​​/ RStudio e executar o código a partir daí. O código abaixo é colocado em um arquivo. bat (o caminho deve ser alterado com a configuração do leitor). Observe que eu adicionei um arquivo de saída (updateLog. txt) para rastrear a execução.


O processo acima é extremamente simples porque ele apenas descreve como atualizar os dados de preços diários. Eu tenho usado isso por um tempo e tem funcionado muito bem para mim até agora. Para dados mais avançados e / ou freqüências mais altas, as coisas podem ficar muito mais complicadas.


Como de costume, qualquer comentário é bem-vindo.


Avaliação do fator na gestão quantitativa da carteira.


Quando se trata de gerenciar uma carteira de ações versus um benchmark, o problema é muito diferente de definir uma estratégia de retorno absoluto. No primeiro, é necessário manter mais ações do que no final, onde nenhum estoque pode ser realizado se não houver uma oportunidade suficiente. A razão para isso é o erro de rastreamento. Isso é definido como o desvio padrão do retorno da carteira menos o retorno de referência. Quanto menos ações forem mantidas em relação a um benchmark, maior será o erro de rastreamento (por exemplo, maior risco).


A análise que se segue é amplamente inspirada no livro # 8220; Gerenciamento de portfólio ativo # 8221; por Grinold & amp; Kahn Esta é a Bíblia para qualquer pessoa interessada em administrar um portfólio em relação a um benchmark. Eu encorajo fortemente qualquer pessoa interessada no tópico a ler o livro desde o início até o fim. É muito bem escrito e estabelece as bases do gerenciamento sistemático de portfólio ativo (não tenho afiliação ao editor ou aos autores).


Aqui, estamos tentando classificar com a maior precisão possível as ações no universo de investimento em uma base de retorno para a frente. Muitas pessoas criaram muitas ferramentas e inúmeras variantes dessas ferramentas foram desenvolvidas para conseguir isso. Nesta publicação, foco em duas métricas simples e amplamente utilizadas: Coeficiente de Informações (IC) e Quantiles Return (QR).


O IC fornece uma visão geral da capacidade de previsão de fator. Mais precisamente, esta é uma medida de quão bem o fator classifica os estoques em uma base de retorno para a frente. O IC é definido como a correlação de classificação (ρ) entre a métrica (por exemplo, fator) e o retorno para a frente. Em termos estatísticos, a correlação de postos é uma medida não paramétrica da dependência entre duas variáveis. Para uma amostra de tamanho n, as n pontuações brutas são convertidas em classificações e ρ é calculado a partir de:


O horizonte para o retorno para frente tem que ser definido pelo analista e é uma função do turnover da estratégia e da decadência alfa (isso tem sido objeto de extensa pesquisa). Obviamente, os ICs devem ser o mais alto possível em termos absolutos.


Para o leitor afiado, no livro de Grinold & amp; Kahn é dada uma fórmula que liga Relação de informação (IR) e IC: com a amplitude sendo o número de apostas independentes (trades). Esta fórmula é conhecida como a lei fundamental do gerenciamento ativo. O problema é que, muitas vezes, definir com precisão a amplitude não é tão fácil quanto parece.


Para ter uma estimativa mais precisa do fator poder preditivo, é necessário dar um passo além e agrupar os estoques por quantis de valores de fatores e, em seguida, analisar o retorno médio a termo (ou qualquer outra métrica de tendência central) de cada um deles. quantis. A utilidade desta ferramenta é simples. Um fator pode ter um bom IC, mas seu poder preditivo pode ser limitado a um pequeno número de ações. Isso não é bom, pois um gerente de portfólio terá que escolher ações dentro do universo inteiro para atender a sua restrição de erro de rastreamento. O bom retorno dos quantiles é caracterizado por uma relação monótona entre os quantiles individuais e os retornos diretos.


Todas as ações no índice S & P500 (no momento da redação). Obviamente, há um viés de sobrevivência: a lista de ações no índice mudou significativamente entre o início e o final do período de amostragem, no entanto, é bom o suficiente apenas para fins ilustrativos.


O código abaixo baixa os preços das ações individuais no S & P500 entre janeiro de 2005 e hoje (leva um tempo) e transforma os preços brutos em retorno nos últimos 12 meses e no último mês. O primeiro é o nosso fator, o último será usado como medida de retorno para frente.


Abaixo está o código para calcular Coeficiente de Informações e Quantiles Return. Note-se que usei quintios neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles, etc. & # 8230;) pode ser usado. Depende realmente do tamanho da amostra, do que você deseja capturar e da sua vontade de ter uma visão ampla ou foco nas caudas de distribuição. Para estimar os retornos dentro de cada quintil, a mediana foi utilizada como estimador de tendência central. Esta medida é muito menos sensível a valores aberrantes do que a média aritmética.


E finalmente o código para produzir o gráfico de retorno Quantiles.


3 & # 8211; Como explorar as informações acima?


No gráfico acima Q1 é mais baixo após 12 meses de retorno e Q5 mais alto. Existe um aumento quase monotônico no retorno de quantiles entre Q1 e Q5, o que indica claramente que os estoques que caíram em Q5 superam aqueles que caíram em Q1 em cerca de 1% por mês. Isso é muito significativo e poderoso para um fator tão simples (não é realmente uma surpresa e # 8230;). Portanto, há maiores chances de vencer o índice por sobreponderar os estoques caindo no Q5 e subponderar aqueles que caem no Q1 em relação ao benchmark.


Um IC de 0,0206 pode não significar um ótimo negócio em si, mas é significativamente diferente de 0 e indica um bom poder preditivo dos últimos 12 meses em geral. Os testes de significância formal podem ser avaliados, mas isso está além do escopo deste artigo.


A estrutura acima é excelente para avaliar a qualidade dos fatores de investimento, no entanto, há várias limitações práticas que precisam ser abordadas para a implementação na vida real:


Reequilíbrio: na descrição acima, considerou que, no final de cada mês, o portfólio é totalmente reequilibrado. Isso significa que todas as ações que caíram no 1T estão abaixo do peso e todas as ações que caíram no 5ºT estão com sobrepeso em relação ao benchmark. Isso nem sempre é possível por razões práticas: alguns estoques podem ser excluídos do universo de investimento, existem restrições ao peso da indústria ou do setor, existem restrições sobre o roteamento etc & # 8230; Custos de Transação: Isso não foi levado em consideração na análise acima e isso é um sério freio para a implementação da vida real. Considerações de rotatividade são geralmente implementadas na vida real em uma forma de penalidade na qualidade do fator. Coeficiente de transferência: Esta é uma extensão da lei fundamental da gestão ativa e relaxa a suposição do modelo de Grinold de que os gerentes não enfrentam restrições que os impeçam de traduzir suas percepções de investimentos diretamente em apostas de portfólio.


E, finalmente, estou espantado com o que pode ser alcançado em menos de 80 linhas de código com o R & # 8230;


Como de costume, qualquer comentário é bem-vindo.


Risco como uma Variável de Sobrevivência & # 8221;


Me deparo com muitas estratégias na blogosfera, algumas são interessantes, algumas são uma completa perda de tempo, mas a maioria compartilha uma característica comum: as pessoas que desenvolvem essas estratégias fazem sua lição de casa para analisar o retorno, mas muito menos atenção é dada ao lado do risco sua natureza aleatória. I’ve seen comment like “a 25% drawdown in 2011 but excellent return overall”. Well my bet is that no one on earth will let you experience a 25% loss with their money (unless special agreements are in place). In the hedge fund world people have very low tolerance for drawdown. Generally, as a new trader in a hedge fund, assuming that you come with no reputation, you have very little time to prove yourself. You should make money from day 1 and keep on doing so for a few months before you gain a bit of credibility.


First let’s say you have a bad start and you lose money at the beginning. With a 10% drawdown you’re most certainly out but even with a 5% drawdown the chances of seeing your allocation reduced are very high. This has significant implications on your strategies. Let’s assume that if you lose 5% your allocation is divided by 2 and you come back to your initial allocation only when you passed the high water mark again (e. g. the drawdown comes back to 0). In the chart below I simulated the experiment with one of my strategies.


You start trading in 1st June 2003 and all goes well until 23rd Jul. 2003 where your drawdown curve hits the -5% threshold (**1**). Your allocation is cut by 50% and you don’t cross back the high water mark level until 05th Dec. 2003 (**3**). If you have kept the allocation unchanged, the high water mark level would have been crossed on 28th Oct. 2003 (**2**) and by the end of the year you would have made more money.


But let’s push the reasoning a bit further. Still on the chart above, assume you get really unlucky and you start trading toward mid-June 2003. You hit the 10% drawdown limit by the beginning of August and you’re most likely out of the game. You would have started in early August your allocation would not have been cut at all and you end up doing a good year in only 4 full months of trading. In those two examples nothing has changed but your starting date….


The trading success of any individual has some form of path dependency and there is not much you can do about it. However you can control the size of a strategy’s drawdown and this should be addressed with great care. A portfolio should be diversified in every possible dimension: asset classes, investment strategies, trading frequencies etc…. From that perspective risk is your “survival variable”. If managed properly you have a chance to stay in the game long enough to realise the potential of your strategy. Otherwise you won’t be there next month to see what happens.


As usual any comments welcome.


A Simple Shiny App for Monitoring Trading Strategies – Parte II.


This is a follow up on my previous post “A Simple Shiny App for Monitoring Trading Strategies“. I added a few improvements that make the app a bit better (at least for me!). Below is the list of new features :


A sample. csv file (the one that contains the raw data) A “EndDate” drop down box allowing to specify the end of the period. A “Risk” page containing a VaR analysis and a chart of worst performance over various horizons A “How To” page explaining how to use and tailor the app to individual needs.


I also made the app totally self contained. It is now available as a stand alone product and there is no need to have R/RStudio installed on your computer to run it. It can be downloaded from the R Trader Google drive account. This version of the app runs using portable R and portable Chrome. For the keen reader, this link explains in full details how to package a Shiny app into a desktop app (Windows only for now).


1 & # 8211; How to install & run the app on your computer.


Create a specific folder Unzip the contain of the. zip file onto that new folder. Change the paths in the runShinyApp file to match your setings To run the app, you just have launch the run. vbs file. I also included an icon (RTraderTradingApp. ico) should you want to create a shortcut on your desktop.


ui. R: controls the layout and appearance of the app server. R: contains the instructions needed to build the app. You can load as much strategies as you want as long as the corresponding csv file has the right format (see below). shinyStrategyGeneral. R: loads the required packages and launches the app.


3 & # 8211; How to add a trading strategy?


Create the corresponding. csv file in the right directory Create a new input in the data reactive function (within the server. R file) Add an extra element to the choice parameter in the first selectInput in the sidebarPanel (within the ui. R file). The element’s name should match the name of the new input above.


Remove the input in the data reactive function corresponding to the strategy you want to remove (within the server. R file) Remove the element in the choice parameter in the first selectInput in the sidebarPanel corresponding to the strategy you want to remove (within the ui. R file).


Please feel free to get in touch should you have any suggestion.


A Simple Shiny App for Monitoring Trading Strategies.


In a previous post I showed how to use R, Knitr and LaTeX to build a template strategy report. This post goes a step further by making the analysis interactive. Besides the interactivity, the Shiny App also solves two problems :


I can now access all my trading strategies from a single point regardless of the instrument traded. Coupled with the Shiny interactivity, it allows easier comparison. I can focus on a specific time period.


The code used in this post is available on a Gist/Github repository. There are essentially 3 files.


ui. R : controls the layout and appearance of the app. server. R : contains the instructions needed to build the app. It loads the data and format it. There is one csv file per strategy each containing at least two columns: date and return with the following format: (“2010-12-22″,”0.04%” ). You can load as much strategies as you want as long as they have the right format. shinyStrategyG eneral. R : loads the required packages and launches the app.


This app is probably far from perfect and I will certainly improve it in the future. Feel free to get in touch should you have any suggestion.


A big thank you to the RStudio/Shiny team for such a great tool.


Using Genetic Algorithms in Quantitative Trading.


The question one should always asked him/herself when using technical indicators is what would be an objective criteria to select indicators parameters (e. g., why using a 14 days RSI rather than 15 or 20 days?). Genetic algorithms (GA) are well suited tools to answer that question. In this post I’ll show you how to set up the problem in R. Before I proceed the usual reminder: What I present in this post is just a toy example and not an invitation to invest. It’s not a finished strategy either but a research idea that needs to be further researched, developed and tailored to individual needs.


What are genetic algorithms?


The best description of GA I came across comes from Cybernatic Trading a book by Murray A. Ruggiero. “Genetic Algorithms were invented by John Holland in the mid-1970 to solve hard optimisation problems. This method uses natural selection, survival of the fittest”. The general process follows the steps below:


Encode the problem into chromosomes Using the encoding, develop a fitness function for use in evaluating each chromosome’s value in solving a given problem Initialize a population of chromosomes Evaluate each chromosome in the population Create new chromosomes by mating two chromosomes. This is done by muting and recombining two parents to form two children (parents are selected randomly but biased by their fitness) Evaluate the new chromosome Delete a member of the population that is less fit than the new chromosome and insert the new chromosome in the population. If the stop criteria is reached (maximum number of generations, fitness criteria is good enough…) then return the best chromosome alternatively go to step 4.


From a trading perspective GA are very useful because they are good at dealing with highly nonlinear problems. However they exhibit some nasty features that are worth mentioning:


Over fitting: This is the main problem and it’s down to the analyst to set up the problem in a way that minimises this risk. Computing time : If the problem isn’t properly defined, it can be extremely long to reach a decent solution and the complexity increases exponentially with the number of variables. Hence the necessity to carefully select the parameters.


There are several R packages dealing with GA, I chose to use the most common one: rgenoud.


Daily closing prices for most liquid ETFs from Yahoo finance going back to January 2000. The in sample period goes from January 2000 to December 2010. The Out of sample period starts on January 2011.


The logic is as following: the fitness function is optimised over the in sample period to obtain a set of optimal parameters for the selected technical indicators. The performance of those indicators is then evaluated in the out of sample period. But before doing so the technical indicators have to be selected.


The equity market exhibits two main characteristics that are familiar to anyone with some trading experience. Long term momentum and short term reversal. Those features can be translated in term of technical indicators by: moving averages cross over and RSI. This represents a set of 4 parameters: Look-back periods for long and short term moving averages, look-back period for RSI and RSI threshold. The sets of parameters are the chromosomes . The other key element is the fitness function . We might want to use something like: maximum return or Sharpe ratio or minimum average Drawdown. In what follows, I chose to maximise the Sharpe ratio.


The R implementation is a set of 3 functions:


fitnessFunction : defines the fitness function (e. g., maximum Sharpe ratio) to be used within the GA engine tradingStatistics : summary of trading statistics for the in and out of sample periods for comparison purposes genoud : the GA engine from the rgenoud package.


The genoud function is rather complex but I’m not going to explain what each parameter means as I want to keep this post short (and the documentation is really good).


In the table below I present for each instrument the optimal parameters (RSI look-back period, RSI threshold, Short Term Moving Average, and Long Term Moving Average) along with the in and out of sample trading statistics.


Before commenting the above results, I want to explain a few important points. To match the logic defined above, I bounded the parameters to make sure the look-back period for the long term moving average is always longer that the shorter moving average. I also constrained the optimiser to choose only the solutions with more than 50 trades in the in sample period (e. g;, statistical significance).


Overall the out of sample results are far from impressive. The returns are low even if the number of trades is small to make the outcome really significant. However there’s a significant loss of efficiency between in and out of sample period for Japan (EWJ) which very likely means over fitting.


This post is intended to give the reader the tools to properly use GA in a quantitative trading framework. Once again, It’s just an example that needs to be further refined. A few potential improvement to explore would be:


fitness function : maximising the Sharpe ratio is very simplistic. A “smarter” function would certainly improve the out of sample trading statistics pattern : we try to capture a very straightforward pattern. A more in depth pattern research is definitely needed. optimisation : there are many ways to improve the way the optimisation is conducted. This would improve both the computation speed and the rationality of the results.


The code used in this post is available on a Gist repository.


Quantitative Trading Strategy Using Quantstrat Package in R: A Step by Step Guide.


In this post, we will be building a trading strategy using R. Before dwelling into the trading jargons using R let us spend some time understanding what R is. R is an open source. There are more than 4000 add-on packages, 18000 plus members of LinkedIn’s group and close to 80 R Meetup groups currently in existence. It is a perfect tool for statistical analysis especially for data analysis. The concise setup of Comprehensive R Archive Network knows as CRAN provides you the list of packages along with the base installation required. There are lot of packages available depending upon the analysis needs to be done. To implement the trading strategy, we will use the package called quantstrat.


Four Step Process of Any Basic Trading Strategy.


Hypothesis formation Testing Refining Production.


Our hypothesis is formulated as “market is mean reverting”. Mean reversion is a theory that suggests that the prices eventually move back to their average value. The second step involves testing the hypothesis for which we formulate a strategy on our hypothesis and compute indicators, signals and performance metrics. The testing phase can be broken down into three steps, getting the data, writing the strategy and analyzing the output. In this example we consider NIFTY-Bees. It is an exchange traded fund managed by Goldman Sachs. NSE has huge volume for the instrument hence we consider this. The image below shows the Open-High-Low-Close price of the same.


We set a threshold level to compare the fluctuations in the price. If the price increases/decreases we update the threshold column. The closing price is compared with the upper band and with the lower band. When the upper band is crossed, it is a signal for sell. Similarly when the lower band is crossed, it is a buy signal.


The coding section can be summarized as follows,


A helicopter view towards the output of the strategy is given in the diagram below.


Thus our hypothesis that market is mean reverting is supported. Since this is back-testing we have room for refining the trading parameters that would improve our average returns and the profits realized. This can be done by setting different threshold levels, more strict entry rules, stop loss etc. One could choose more data for back-testing, use Bayseian approach for threshold set up, take volatility into account.


Uma vez que você está confiante sobre a estratégia de negociação apoiada pelos resultados dos back-testing, você pode entrar em negociação ao vivo. Production environment is a big topic in itself and it’s out of scope in the article’s context. To explain in brief this would involve writing the strategy on a trading platform.


As mentioned earlier, we would be building the model using quantstrat package. Quantstrat provides a generic infrastructure to model and backtest signal-based quantitative strategies. It is a high-level abstraction layer (built on xts, FinancialInstrument, blotter, etc.) that allows you to build and test strategies in very few lines of code.


The key features of quantstrat are,


Supports strategies which include indicators, signals, and rules Allows strategies to be applied to multi-asset portfolios Supports market, limit, stoplimit, and stoptrailing order types Supports order sizing and parameter optimization.


In this post we build a strategy that includes indicators, signals, and rules.


For a generic signal based model following are the objects one should consider,


Instruments - Contain market data Indicators - Quantitative values derived from market data Signals - Result of interaction between market data and indicators Rules - Generate orders using market data, indicators and signals.


Without much ado let’s discuss the coding part. We prefer R studio for coding and insist you use the same. You need to have certain packages installed before programming the strategy.


The following set of commands installs the necessary packages.


Once you have installed the packages you import them for further usage.


Read the data from csv file and convert it into xts object.


We initialize the portfolio with the stock, currency, initial equity and the strategy type.


Add position limit if you wish to trade more than once on the same side.


Create the strategy object.


We build a function that computes the thresholds are which we want to trade. If price moves by thresh1 we update threshold to new price. New bands for trading are Threshold+/-Thresh2. Output is an xts object though we use reclass function to ensure.


Add the indicator, signal and the trading rule.


Run the strategy and have a look at the order book.


Update the portfolio and view the trade statistics.


Here is the complete code.


Once you are familiar with these basics you could take a look at how to start using quantimod package in R. Or in case you’re good at C++, take a look at an example strategy coded in C++.


If you’re a retail trader or a tech professional looking to start your own automated trading desk, start learning algo trading today! Comece com conceitos básicos como arquitetura de negociação automatizada, microestrutura de mercado, sistema de backtesting de estratégia e sistema de gerenciamento de pedidos.

Comments

Popular posts from this blog

Forex capital trading melbourne

Forex hedging sem perda

Enciclopédia de troca de opções