Backtesting negociação estratégias r


Im muito novo para R e tentar backtest uma estratégia Ive programado já em WealthLab. Várias coisas que eu não entendo (e não funciona obviamente :) Eu não entendo os Preços Fechar bem em um vetor. Ou algum tipo de vetor, mas ele começa com a estrutura e eu realmente não entendo o que esta função faz. É por isso que minha série, uma chamada provavelmente não funciona. N lt - nrow (série) não funciona, mas eu preciso que para o Loop Então eu acho que se eu chegar Estas 2 perguntas respondidas minha estratégia deve funcionar. Estou muito grato por qualquer ajuda .. R parece muito complicado, mesmo com a experiência de programação em outras línguas yeah I Tipo de copiado algumas linhas de código a partir deste tutorial e don39t realmente entender esta linha. Quero dizer série, 1 eu pensei que iria aplicar a função f para quotcolumnquot 1 da série. Mas desde que esta série é alguma compley com a estrutura etc. não trabalha. I39m falando sobre este tutorial: r-bloggersbacktesting-a-negociação-estratégia ndash MichiZH Jun 6 13 at 14: 22Backtesting: Interpretando o passado Backtesting é um componente-chave do desenvolvimento do sistema de comércio eficaz. É realizado reconstruindo, com dados históricos, os negócios que teriam ocorrido no passado usando regras definidas por uma determinada estratégia. O resultado oferece estatísticas que podem ser usadas para avaliar a eficácia da estratégia. Usando esses dados, os comerciantes podem otimizar e melhorar suas estratégias, encontrar quaisquer falhas técnicas ou teóricas, e ganhar confiança em sua estratégia antes de aplicá-lo aos mercados reais. A teoria subjacente é que qualquer estratégia que funcionou bem no passado é susceptível de funcionar bem no futuro e, inversamente, qualquer estratégia que teve um desempenho ruim no passado é susceptível de funcionar mal no futuro. Este artigo dá uma olhada no que os aplicativos são usados ​​para backtest, que tipo de dados são obtidos, e como colocá-lo para usar Os dados e as ferramentas Backtesting pode fornecer abundância de estatística valiosa comentários sobre um determinado sistema. Algumas estatísticas de backtesting universal incluem: Lucro líquido ou perda - ganho ou perda percentual líquido. Prazo - Datas passadas em que o teste ocorreu. Universo - Ações que foram incluídas no backtest. Medidas de volatilidade - Percentagem máxima de subida e descida. Médias - Percentagem de ganho médio e perda média, média de barras mantidas. Exposição - Percentual de capital investido (ou exposto ao mercado). Razões - Relação vitórias-perdas. Retorno anualizado - Retorno percentual ao longo de um ano. Retorno ajustado ao risco - Retorno percentual em função do risco. Normalmente, backtesting software terá duas telas que são importantes. A primeira permite que o profissional personalize as configurações para backtesting. Essas personalizações incluem tudo, desde o período de tempo até os custos de comissão. Aqui está um exemplo de tal tela no AmiBroker: A segunda tela é o relatório de resultados de backtesting real. Isto é onde você pode encontrar todas as estatísticas mencionadas acima. Novamente, aqui está um exemplo desta tela no AmiBroker: Em geral, a maioria dos softwares comerciais contém elementos semelhantes. Alguns programas de software high-end também incluem funcionalidades adicionais para realizar o dimensionamento automático da posição, otimização e outros recursos mais avançados. Os 10 mandamentos Há muitos fatores que os comerciantes prestam atenção quando eles estão backtesting estratégias de negociação. Aqui está uma lista das 10 coisas mais importantes a lembrar enquanto backtesting: Tome em conta as tendências do mercado amplo no período em que uma determinada estratégia foi testada. Por exemplo, se uma estratégia só foi testada de 1999 a 2000, pode não estar bem em um mercado de baixa. É muitas vezes uma boa idéia para backtest durante um período de tempo longo que engloba vários tipos diferentes de condições de mercado. Leve em conta o universo no qual o backtesting ocorreu. Por exemplo, se um sistema de mercado amplo é testado com um universo consistindo de ações de tecnologia, pode deixar de fazer bem em diferentes setores. Como regra geral, se uma estratégia é direcionada para um gênero específico de estoque, limitar o universo a esse gênero, mas, em todos os outros casos, manter um grande universo para fins de teste. Medidas de volatilidade são extremamente importantes a considerar no desenvolvimento de um sistema de comércio. Isto é especialmente verdadeiro para as contas alavancadas, que são submetidas a chamadas de margem se a sua equidade desce abaixo de um certo ponto. Os comerciantes devem procurar manter a volatilidade baixa, a fim de reduzir o risco e permitir uma transição mais fácil dentro e fora de um determinado estoque. O número médio de barras mantidas também é muito importante para assistir ao desenvolver um sistema de negociação. Embora a maioria dos backtesting software inclui custos de comissão nos cálculos finais, isso não significa que você deve ignorar esta estatística. Se possível, aumentar o número médio de barras mantidas pode reduzir os custos de comissão e melhorar seu retorno geral. A exposição é uma espada de dois gumes. Exposição aumentada pode conduzir aos lucros mais elevados ou aos perdas mais elevados, quando a exposição diminuída significa lucros mais baixos ou perdas mais baixas. No entanto, em geral, é uma boa idéia para manter a exposição abaixo de 70, a fim de reduzir o risco e permitir uma transição mais fácil dentro e fora de um determinado estoque. A estatística média de perda de ganho, combinada com a relação ganhos-perdas, pode ser útil para determinar o dimensionamento de posição ótimo e a administração de dinheiro usando técnicas como o Critério de Kelly. (Veja Money Management Usando o Critério Kelly.) Os comerciantes podem assumir posições maiores e reduzir os custos de comissão, aumentando seus ganhos médios e aumentando sua relação ganhos-para-perdas. Retorno anualizado é importante porque é usado como uma ferramenta para comparar os retornos de sistemas contra outros locais de investimento. É importante não só olhar para o retorno global anualizado, mas também para ter em conta o risco aumentado ou diminuído. Isso pode ser feito olhando para o retorno ajustado ao risco, que explica vários fatores de risco. Antes de um sistema de negociação ser adotado, ele deve superar todos os outros locais de investimento em igual ou menos risco. Backtesting personalização é extremamente importante. Muitas aplicações de backtesting têm entrada para valores de comissão, tamanhos de lote redondos (ou fracionários), tamanhos de carrapatos, requisitos de margem, taxas de juros, pressupostos de deslizamento, regras de dimensionamento de posição, regras de saída da mesma barra e configurações de parada. Para obter os resultados de backtesting mais precisos, é importante ajustar essas configurações para imitar o corretor que será usado quando o sistema for ativado. Backtesting às vezes pode levar a algo conhecido como super-otimização. Esta é uma condição onde os resultados de desempenho são ajustados tão altamente ao passado que eles não são mais precisos no futuro. Geralmente, é uma boa idéia implementar regras que se apliquem a todas as ações ou a um conjunto selecionado de ações segmentadas e não sejam otimizadas na medida em que as regras não sejam mais compreensíveis pelo criador. Backtesting nem sempre é a maneira mais precisa para avaliar a eficácia de um determinado sistema de comércio. Às vezes, as estratégias que funcionaram bem no passado não conseguem fazer bem no presente. O desempenho passado não é indicativo de resultados futuros. Certifique-se de comércio de papel de um sistema que foi testado com sucesso antes de ir ao vivo para ter certeza de que a estratégia ainda se aplica na prática. Conclusão Backtesting é um dos aspectos mais importantes do desenvolvimento de um sistema comercial. Se criado e interpretado corretamente, pode ajudar comerciantes a aperfeiçoar e melhorar suas estratégias, encontrar todas as falhas técnicas ou teóricas, assim como ganhar a confiança em sua estratégia antes de aplicá-la aos mercados reais. Recursos Tradecision (tradecision) - High-end Desenvolvimento do Sistema de Negociação AmiBroker (amibroker) - Desenvolvimento do Sistema de Negociação de Orçamento. Uma teoria econômica da despesa total na economia e seus efeitos no produto e na inflação. A economia keynesiana foi desenvolvida. A detenção de um activo numa carteira. Um investimento de carteira é feito com a expectativa de ganhar um retorno sobre ele. Este. Um índice desenvolvido por Jack Treynor que mede ganhos obtidos em excesso do que poderia ter sido obtido em um risco. A recompra de ações em circulação (recompra) por uma empresa para reduzir o número de ações no mercado. Empresas. Um reembolso de imposto é um reembolso sobre os impostos pagos a um indivíduo ou agregado familiar quando a responsabilidade fiscal real é inferior ao montante. O valor monetário de todos os produtos acabados e serviços produzidos dentro de um país fronteiras em um período de tempo específico. Backtesting uma estratégia de negociação simples Stock Nota: Este post não é aconselhamento financeiro Esta é apenas uma maneira divertida de explorar algumas das capacidades R tem para Importando e manipulando dados. Recentemente li um post sobre o ETF Prophet que explorou uma interessante estratégia de negociação de ações no Excel. A estratégia é simples: encontrar o ponto alto do estoque nos últimos 200 dias, e contar o número de dias que decorreram desde aquela alta. Se seu sido mais menos de 100 dias, possui o estoque. Se foi mais de 100 dias, don8217t ele próprio. Esta estratégia é muito simples, mas produz alguns resultados impressionantes. (Observe, no entanto, que este exemplo usa dados que não foram ajustados de divisões ou dividendos e poderiam conter outros erros. Além disso, ignorando os custos de negociação e atrasos de execução, ambos afetam o desempenho da estratégia.) Implementar essa estratégia em R é simples, E oferece inúmeras vantagens sobre o excel, a principal das quais é que puxar dados do mercado de ações em R é fácil, e podemos testar essa estratégia em uma ampla gama de índices com relativamente pouco esforço. Primeiro de tudo, nós baixamos dados para GSPC usando o quantmod. (GSPC significa índice SampP 500). Em seguida, construímos uma função para calcular o número de dias desde o n-dia de alta em uma série de tempo, e uma função para implementar nossa estratégia de negociação. A última função leva 2 parâmetros: o n-dia alta que você deseja usar, e os números de dias passado que alta você vai segurar o estoque. O exemplo é 200 e 100, mas você poderia facilmente mudar isso para o máximo de 500 dias e ver o que acontece se você segurar o estoque 300 dias depois que antes de resgatar. Uma vez que esta função é parametrizada, podemos facilmente testar muitas outras versões da nossa estratégia. Nós pad o início da nossa estratégia com zeros por isso será o mesmo comprimento como os nossos dados de entrada. (Se você deseja uma explanação mais detalhada da função daysSinceHigh, consulte a discussão sobre validação cruzada). Multiplicamos nosso vetor posição (0,1) pelos retornos do índice para obter nossos retornos de estratégia8217s. Agora nós construímos uma função para retornar algumas estatísticas sobre uma estratégia de negociação, e comparar a nossa estratégia com o benchmark. Um tanto arbitrariamente, decidi considerar o retorno cumulativo, o retorno anual médio, a taxa de sharpe, a ganância, a volatilidade anual média, o levantamento máximo e a redução de comprimento máximo. Outras estatísticas seriam fáceis de implementar. Como você pode ver, esta estratégia se compara favoravelmente à abordagem padrão 8220buy-and-hold8221. Finalmente, testamos nossa estratégia em três outros índices: FTSE, que representa a Irlanda eo Reino Unido, o Índice Industrial Dow Jones. Que remonta a 1896, eo N225. Que representa o Japão. I8217ve funcionalizou o processo inteiro, assim você pode testar cada nova estratégia com 1 linha de código: Nunca perca uma atualização Inscrever-se para R-blogueiros para receber e-mails com as últimas postagens R. (Você não verá esta mensagem novamente.) 30 de novembro de 2017, 12:34 pm Alguns meses atrás, um leitor me apontar esta nova maneira de conectar R e Excel. Eu não sei por quanto tempo isto tem sido em torno, mas nunca me deparei com ele e nunca vi qualquer postagem no blog ou artigo sobre ele. Então eu decidi escrever um post como a ferramenta é realmente vale a pena e antes que alguém pergunta, I8217m não relacionados com a empresa de qualquer forma. BERT significa Basic Excel R Toolkit. It8217s livre (licenciado sob o GPL v2) e foi desenvolvido por 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 foi projetado para suportar a execução de funções R a partir de células da planilha do Excel. Em termos de Excel, it8217s para escrever User-Defined Functions (UDFs) em R. Neste post I8217m não vai mostrar-lhe como R e Excel interagem via BERT. Existem muito bons tutoriais aqui. Aqui e aqui. Em vez disso eu quero mostrar-lhe como eu usei BERT para construir um 8220control tower8221 para o meu comércio. Meus sinais de negociação são gerados usando uma longa lista de arquivos R, mas eu preciso da flexibilidade do Excel para exibir resultados de forma rápida e eficiente. Como mostrado acima BERT pode fazer isso para mim, mas eu também quero adaptar a aplicação às minhas necessidades. Ao combinar o poder de XML, VBA, R e BERT eu posso criar uma boa aparência ainda poderosa aplicação sob a forma de um arquivo do Excel com o mínimo de código VBA. Em última análise, tenho um único arquivo Excel reunindo todas as tarefas necessárias para gerenciar meu portfólio: atualização de banco de dados, geração de sinal, envio de pedidos etc8230 Minha abordagem pode ser dividida nas 3 etapas abaixo: Use XML para criar menus e botões definidos pelo usuário em um Excel Arquivo. Os menus e botões acima são essencialmente chamadas para funções do VBA. Essas funções VBA são wrapup em torno de funções R definidas usando BERT. Com essa abordagem, posso manter uma clara distinção entre o núcleo do meu código mantido em R, SQL e Python e tudo usado para exibir e formatar os resultados mantidos em Excel, VBA amp. XML. Nas próximas seções eu apresento o pré-requisito para desenvolver tal abordagem e um guia passo a passo que explica como o BERT poderia ser usado para simplesmente passar dados de R para o Excel com o mínimo de código VBA. 1 8211 Baixe e instale o BERT a partir deste link. Depois que a instalação for concluída você deve ter um novo menu Add-Ins no Excel com os botões, como mostrado abaixo. Foi assim que o BERT se materializou no Excel. 2 8211 Baixe e instale o editor de UI personalizado. O Custom UI Editor permite criar menus e botões definidos pelo usuário na fita Excel. Um procedimento passo a passo está disponível aqui. Guia passo a passo 1 8211 Código R: A função abaixo R é um código muito simples para fins de ilustração. Calcula e retorna os resíduos de uma regressão linear. Isso é o que queremos recuperar no Excel. Salve isso em um arquivo chamado myRCode. R (qualquer outro nome é muito bem) em um diretório de sua escolha. 2 8211 funções. R no BERT. No Excel, selecione Add-Ins - gt Home Directory e abra o arquivo chamado functions. R. Neste arquivo cole o seguinte código. Certifique-se de inserir o caminho correto. Este é apenas sourcing em BERT o arquivo R que você criou acima. Em seguida, salvar e fechar o arquivo functions. R. Se você quiser fazer qualquer alteração no arquivo R criado na etapa 1, você terá que recarregá-la usando o botão BERT 8220Reload Startup File8221 no menu Add-Ins do Excel 3 8211 No Excel: Crie e salve um arquivo chamado myFile. xslm (Qualquer outro nome é bom). Este é um arquivo habilitado para macro que você salva no diretório de sua escolha. Depois que o arquivo é salvo, feche-o. 4 8211 Abra o arquivo criado acima no editor de UI personalizado: Depois que o arquivo estiver aberto, cole o código abaixo. Você deve ter algo parecido com isso no editor XML: Essencialmente, esse pedaço de 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 fita Excel. Depois de feito, abra myFile. xslm no Excel e feche o Editor de UI personalizado. Você deve ver algo como isto. 5 8211 Editor de VBA aberto. Em myFile. xlsm insira um novo módulo. Cole o código abaixo no módulo recém-criado. Isso apaga resultados anteriores na planilha antes de lidar com novos. 6 8211 Clique em Novo Botão. Agora volte para a planilha e no menu do RTrader clique no botão 8220New Button8221. Você deve ver algo como o abaixo aparecendo. O guia acima é uma versão muito básica do que pode ser alcançado usando BERT, mas mostra como combinar o poder de várias ferramentas específicas para construir seu próprio aplicativo personalizado. De minha perspectiva, o interesse de tal abordagem é a capacidade de colar juntos R e Excel, obviamente, mas também para incluir via XML (e lote) pedaços de código de Python, SQL e muito mais. Isso é exatamente o que eu precisava. Finalmente, gostaria de saber se alguém tem alguma experiência com o BERT. Ao testar estratégias de negociação, uma abordagem comum é dividir o conjunto inicial de dados em dados de amostra: a parte dos dados projetada para calibrar O modelo e fora dos dados de amostra: a parte dos dados utilizados para validar a calibração e garantir que o desempenho criado na amostra será refletida no mundo real. Como regra geral, cerca de 70 dos dados iniciais podem ser utilizados para calibração (i. e. na amostra) e 30 para validação (isto é, fora da amostra). Em seguida, uma comparação dos dados de entrada e saída de dados ajuda a decidir se o modelo é suficientemente robusto. Este post pretende ir um passo mais longe e fornece um método estatístico para decidir se os dados fora da amostra está em consonância com o que foi criado na amostra. No gráfico abaixo a área azul representa o desempenho fora da amostra para uma das minhas estratégias. Uma inspeção visual simples revela um bom ajuste entre o dentro e fora do desempenho da amostra, mas que grau de confiança eu tenho nesta Nesta fase não muito e este é o problema. O que é verdadeiramente necessário é uma medida de semelhança entre os conjuntos de dados de entrada e saída. Em termos estatísticos, isto poderia ser traduzido como a probabilidade de que os valores de desempenho dentro e fora da amostra provenham da mesma distribuição. Existe um teste estatístico não-paramétrico que faz exatamente isso: o teste de Kruskall-Wallis. Uma boa definição deste teste pode ser encontrada no R-Tutor 8220A coleção de amostras de dados são independentes se vierem de populações não relacionadas e as amostras não afetam uns aos outros. Utilizando o teste de Kruskal-Wallis. Podemos decidir se as distribuições da população são idênticas sem supor que elas sigam a distribuição normal.8221 O benefício adicional deste teste não está assumindo uma distribuição normal. Existem outros testes da mesma natureza que poderiam caber nessa estrutura. O teste de Mann-Whitney-Wilcoxon ou os testes de Kolmogorov-Smirnov seriam perfeitamente adequados ao quadro descreve aqui no entanto 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 de R pode ser encontrada aqui. Aqui 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 de ausência de amostra, portanto, eu criei aleatoriamente 1000 subconjuntos dos dados da amostra, cada um deles com o mesmo comprimento que o out Dos dados da amostra. Em seguida, eu testei cada um no subconjunto de amostra contra a saída de dados de amostra e eu gravei os valores de p. Este processo não cria um único valor de p para o teste de Kruskall-Wallis, mas uma distribuição que torna a análise mais robusta. Neste exemplo, a média dos valores de p está bem acima de zero (0,478) indicando que a hipótese nula deve ser aceita: existem fortes evidências de que os dados de entrada e saída da amostra vêm da mesma distribuição. Como de costume o que é apresentado neste post é um exemplo de brinquedo que apenas arranhões 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 da amostra. Este post é inspirado nos seguintes dois artigos: Vigier Alexandre, Chmil Swann (2007), Efeitos de Várias Funções de Otimização no Desempenho de Amostra de Estratégias de Negociação Geneticamente Evoluídas, Previsão de Mercados Financeiros Conferência Vigier Alexandre, Chmil Swann (2018), An Processo de otimização para melhorar inout da consistência da amostra, um caso de mercado de ações, JP Morgan Cazenove Equity Quantitative Conference, Londres Outubro de 2018 13 de dezembro de 2017, 2:03 pm Fazendo investigação quantitativa implica um monte de dados crunching e precisa de dados limpos e confiáveis ​​para Alcançar este objectivo. O que é realmente necessário é dados limpos que é facilmente acessível (mesmo sem uma conexão à Internet). A maneira mais eficiente de fazer isso para mim foi manter um conjunto de arquivos csv. Obviamente, este processo pode ser tratado de muitas maneiras, mas eu encontrei tempo extra muito eficiente e simples para manter um diretório onde eu armazenar e atualizar arquivos csv. Eu tenho um arquivo csv por instrumento e cada arquivo é nomeado após o instrumento que ele contém. A razão que eu faço assim é dupla: Primeiro, eu don8217t quero baixar (preço) dados do Yahoo, Google etc8230 cada vez que eu quero testar uma nova idéia, mas mais importante uma vez que eu identifiquei e corrigiu um problema, eu don8217t quero ter que Fazê-lo novamente na próxima vez que eu preciso do mesmo instrumento. Simples ainda muito eficiente até agora. O processo é resumido no gráfico abaixo. Em tudo o que segue, eu suponho que os dados vêm do Yahoo. O código terá de ser alterado para os dados do Google, Quandl etc8230 Além disso, eu 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 Download de dados iniciais (listOfInstruments. R amp historicalData. R) O arquivo listOfInstruments. R é um arquivo que contém apenas a lista de todos os instrumentos. Se um instrumento não for parte de minha lista (ou seja, nenhum arquivo csv na minha pasta de dados) ou se você fizer isso pela primeira vez você tem que baixar o conjunto de dados históricos iniciais. O exemplo abaixo carrega um conjunto de preços diários de ETFs do Yahoo Finance de volta a janeiro de 2000 e armazena os dados em um arquivo csv. 2 8211 Atualizar dados existentes (updateData. R) O código a seguir é iniciado 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 I8217m em férias. Para adicionar um novo instrumento, basta executar o passo 1 acima para este instrumento sozinho. 3 8211 Criar um arquivo em lotes (updateDailyPrices. bat) Outra parte importante do trabalho é a criação de um arquivo em lotes que automatiza o processo de atualização acima (I8217m, um usuário do Windows). Isso evita abrir RRStudio e executar o código de lá. O código abaixo é colocado em um arquivo. bat (o caminho deve ser alterado com a configuração do reader8217s). Observe que eu adicionei um arquivo de saída (updateLog. txt) para rastrear a execução. O processo acima é extremamente simples porque ele só descreve como atualizar 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 todos os comentários bem-vindos 23 de março de 2017, 8:55 pm Quando se trata de gerenciar um portfólio de ações versus um benchmark o problema é muito diferente de definir uma estratégia de retorno absoluto. No primeiro um tem que segurar mais estoques do que no mais atrasado onde nenhum estoque em tudo pode ser prendido se não há uma oportunidade boa bastante. A razão para isso é o erro de rastreamento. Isso é definido como o desvio padrão do retorno da carteira menos o retorno do índice de referência. Os estoques menos são mantidos contra um benchmark quanto maior o erro de rastreamento (por exemplo, maior risco). A análise que se segue é amplamente inspirada pelo livro 8220Active Portfolio Management8221 de Grinold amp Kahn. Esta é a bíblia para qualquer pessoa interessada em executar um portfólio contra um benchmark. Eu incentivo fortemente qualquer um com um interesse no tópico para ler o livro do começo ao fim. É muito bem escrito e estabelece as bases da gestão sistemática de carteira ativa (eu não tenho afiliação ao editor ou aos autores). 1 8211 Análise Fatorial Aqui estamos tentando classificar com a maior precisão possível as ações do universo de investimento em uma base de retorno para a frente. Muitas pessoas inventaram muitas ferramentas e inúmeras variantes dessas ferramentas foram desenvolvidas para conseguir isso. Neste post me concentro em duas métricas simples e amplamente utilizadas: Coeficiente de Informação (IC) e Quantiles Return (QR). 1.1 8211 Coeficiente de Informação O horizonte para o retorno a termo tem de ser definido pelo analista e é função do volume de negócios da estratégia e da desintegração alfa (este tem sido objecto de extensa investigação). Obviamente, os CI devem ser tão elevados quanto possível em termos absolutos. Para o leitor afiado, no livro de Grinold amp Kahn uma fórmula que liga a relação de informação (IR) e IC é dada: com amplitude sendo o número de apostas independentes (comércios). Esta fórmula é conhecida como a lei fundamental da gestão activa. O problema é que muitas vezes, definir amplitude com precisão não é tão fácil quanto parece. 1.2 8211 Retorno de Quantiles Para obter uma estimativa mais precisa do poder de previsão de fator, é necessário ir um passo adiante e agrupar os estoques por quantil de valores de fator e então analisar o retorno médio de retorno (ou qualquer outra métrica de tendência central) de cada um desses Quantiles. A utilidade desta ferramenta é simples. Um fator pode ter um IC bom, mas seu poder preditivo pode ser limitado a um pequeno número de ações. Isso não é bom como um gestor de carteira terá de escolher estoques dentro de todo o universo, a fim de atender a sua restrição de erro de rastreamento. Os bons quantiles de retorno são caracterizados por uma relação monótona entre os quantiles individuais e retornos futuros. Todas as ações no índice SampP500 (no momento da escrita). Obviamente, existe 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, porém é bastante boa apenas para fins ilustrativos. O código abaixo carrega os preços das ações individuais no SampP500 entre janeiro de 2005 e hoje (demora um pouco) e transforma os preços brutos em retorno nos últimos 12 meses e no último mês. O primeiro é o nosso fator, este último será usado como a medida de retorno para a frente. Abaixo está o código para calcular o Coeficiente de Informação e Quantiles Retorno. Note que eu usei quintis neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles etc8230) pode ser usado. Ele realmente depende do tamanho da amostra, o que você deseja capturar e wether você quer ter uma visão ampla ou se concentrar em caudas de distribuição. Para estimar retornos dentro de cada quintil, a mediana tem sido usada como estimador de tendência central. Esta medida é muito menos sensível aos valores atípicos do que a média aritmética. E, finalmente, o código para produzir o Quantiles Retorno gráfico. 3 8211 Como explorar as informações acima No gráfico acima, Q1 é o mais baixo após 12 meses de retorno e Q5 mais alto. Há um aumento quase monotônico no retorno dos quantiles entre Q1 e Q5, o que indica claramente que os estoques que caem em Q5 superam os que caem 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 though8230). Portanto, há maiores chances de vencer o índice por sobreponderar as ações caem no Q5 e subponderar aqueles que caem no primeiro trimestre em relação ao benchmark. Um IC de 0,0206 pode não significar muito em si, mas é significativamente diferente de 0 e indica um bom poder preditivo dos últimos 12 meses de retorno global. Testes de significância formal podem ser avaliados, mas isso está além do escopo deste artigo. 4 8211 Limitações práticas A estrutura acima é excelente para avaliar a qualidade dos fatores de investimento, porém há uma série de limitações práticas que devem ser abordadas para a implementação da vida real: Rebalancing. Na descrição acima, 8282 assumiu que no final de cada mês a carteira é totalmente rebalanceada. Isso significa que todas as ações que caem no primeiro trimestre estão abaixo do peso e todas as ações que caem no Q5 estão acima do peso 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 volume de negócios etc8230 Custos de transação. Isso não tem sido levado em conta na análise acima e este é um freio grave para a implementação da vida real. Considerações de volume de negócios são geralmente implementadas na vida real em uma forma de penalidade sobre a 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 Grinolds de que os gerentes não enfrentam restrições que os impedem de traduzir seus insights de investimentos diretamente em apostas em carteira. E, finalmente, I8217m espantado com o que pode ser alcançado em menos de 80 linhas de código com R8230 Como de costume todos os comentários bem-vindos 14 de março de 2017, 1:07 pm A pergunta que se deve sempre perguntou himherself quando usando indicadores técnicos é o que seria um objetivo Critérios para selecionar os parâmetros dos indicadores (por exemplo, por que usar um RSI de 14 dias em vez de 15 ou 20 dias). Algoritmos genéticos (GA) são ferramentas bem adaptadas para responder a essa pergunta. Neste post I8217ll mostrar-lhe como configurar o problema em R. Antes de prosseguir o lembrete habitual: O que eu apresento neste post é apenas um exemplo de brinquedo e não um convite para investir. Não é uma estratégia acabada, mas uma idéia de pesquisa que precisa ser mais pesquisada, desenvolvida e adaptada às necessidades individuais. O que são algoritmos genéticos A melhor descrição de GA que eu encontrei vem de Cybernatic Trading um livro de Murray A. Ruggiero. 8220 Algoritmos genéticos foram inventados por John Holland em meados de 1970 para resolver problemas de otimização dura. Este método utiliza a seleção natural, sobrevivência do fittest8221. O processo geral segue as etapas abaixo: Codificar o problema em cromossomos Usando a codificação, desenvolver uma função de aptidão para uso na avaliação de cada cromossomo 8217s valor na resolução de um dado problema Inicializar uma população de cromossomos Avaliar cada cromossomo na população Criar novos cromossomos por acasalamento dois Cromossomos. Isso é feito muting e recombinando dois pais para formar duas crianças (os pais são selecionados aleatoriamente, mas tendenciosa pela sua aptidão) Avaliar o novo cromossomo Excluir um membro da população que é menos apto do que o novo cromossomo e inserir o novo cromossomo na população . Se o critério de paragem é atingido (número máximo de gerações, os critérios de aptidão são bons o suficiente), em seguida, retornar o melhor cromossomo ou vá para a etapa 4 A partir de uma perspectiva de negociação GA são muito úteis porque são bons em lidar com problemas altamente não-lineares. No entanto, eles apresentam algumas características desagradáveis ​​que vale a pena mencionar: Over fitting: Este é o principal problema e it8217s até o analista para configurar o problema de uma forma que minimize esse risco. Tempo de computação. Se o problema não é definido corretamente, pode ser muito longo para chegar a uma solução decente ea complexidade aumenta exponencialmente com o número de variáveis. Daí a necessidade de selecionar cuidadosamente os parâmetros. Há vários pacotes de R que tratam de GA, eu escolhi usar o mais comum: rgenoud Os preços de fechamento diários para a maioria de ETFs líquidos de finanças de Yahoo que vão para trás a janeiro 2000. O em período da amostra vai de janeiro 2000 a dezembro 2018. O Fora de Período de amostragem começa em janeiro de 2017. A lógica é a seguinte: a função de aptidão é otimizada durante o período de amostra para obter um conjunto de parâmetros ótimos para os indicadores técnicos selecionados. O desempenho desses indicadores é então avaliado no período fora da amostra. Mas antes disso, os indicadores técnicos precisam ser selecionados. O mercado de ações apresenta duas características principais que são familiares a qualquer pessoa com alguma experiência de negociação. Momento de longo prazo e inversão de curto prazo. Esses recursos podem ser traduzidos em termos de indicadores técnicos por: cruzamento de médias móveis e RSI. Isso representa um conjunto de 4 parâmetros: Períodos de retorno para médias móveis de longo e curto prazo, período de retrocesso para o limiar RSI e RSI. Os conjuntos de parâmetros são os cromossomos. O outro elemento-chave é a função fitness. Podemos querer usar algo como: retorno máximo ou Sharpe ratio ou Drawdown média mínima. No que segue, eu escolhi maximizar a relação de Sharpe. A implementação R é um conjunto de 3 funções: fitnessFunction. Define a função de aptidão (por exemplo, a razão máxima de Sharpe) a ser utilizada dentro do mecanismo de negociação de motores GA. Resumo das estatísticas de negociação para os períodos de entrada e saída dos períodos de amostragem para fins de comparação. O mecanismo GA do pacote rgenoud A função genoud é bastante complexa, mas não vou explicar o que significa cada parâmetro, pois quero manter este post curto (ea documentação é realmente boa). Na tabela abaixo, apresentamos para cada instrumento os parâmetros ótimos (RSI, RSI, Short Term Moving Average e Long Term Moving Average) juntamente com as estatísticas de negociação de entrada e saída da amostra. Antes de comentar os resultados acima, eu quero explicar alguns pontos importantes. Para coincidir com a lógica definida acima, limitei os parâmetros para certificar-se de que o período de look-back para a média móvel de longo prazo é sempre maior que a média móvel mais curta. Também obriguei o otimizador a escolher apenas as soluções com mais de 50 operações no período de amostra (por exemplo, significância estatística). Em geral, os resultados da amostra estão longe de ser impressionantes. Os retornos são baixos, mesmo se o número de comércios é pequeno para fazer o resultado realmente significativo. Contudo, existe uma perda significativa de eficiência entre o período de entrada e saída do período de amostragem para o Japão (EWJ), o que muito provavelmente significa um ajuste excessivo. Este post destina-se a dar ao leitor as ferramentas para usar corretamente GA em um quadro de negociação quantitativa. Mais uma vez, é apenas um exemplo que precisa ser refinado. A melhoria potencial poucos a explorar seria: função de fitness. Maximizar a proporção de Sharpe é muito simplista. Uma função 8220smarter8221 certamente melhoraria o padrão de estatísticas de negociação de amostra. Nós tentamos capturar um padrão muito direto. Uma pesquisa mais em profundidade padrão é definitivamente necessário. otimização . Há muitas maneiras de melhorar a forma como a otimização é conduzida. Isso melhoraria tanto a velocidade de cálculo como a racionalidade dos resultados. O código usado nesta postagem está disponível em um repositório Gist. Como de costume todos os comentários bem-vindos 28 de fevereiro de 2017, 3:52 pm Há um enorme corpo de literatura acadêmica e empírica sobre previsão de mercado. Na maioria das vezes, mistura duas características de mercado: Magnitude e Direção. Neste artigo, quero me concentrar em identificar apenas a direção do mercado. O objetivo que eu estabeleci, é identificar as condições de mercado quando as probabilidades são significativamente tendenciosas para um up ou um mercado para baixo. Este post dá um exemplo de como CART (Classification And Regression Trees) pode ser usado neste contexto. Antes de eu proceder o lembrete habitual: O que eu apresento neste post é apenas um exemplo de brinquedo e não um convite para investir. Não é uma estratégia acabada, mas uma idéia de pesquisa que precisa ser mais pesquisada, desenvolvida e adaptada às necessidades individuais. 1 8211 O que é CART e por que usá-lo De estatísticas, CART é um conjunto de técnicas para classificação e previsão. A técnica visa produzir regras que prevejam o valor de uma variável de resultado (alvo) a partir de valores conhecidos de variáveis ​​preditoras (explicativas). Existem muitas implementações diferentes, mas todos eles estão compartilhando uma característica geral e isso é o que eu estou interessado. Da Wikipedia, Algoritmos para construir árvores de decisão geralmente trabalham de cima para baixo, escolhendo uma variável em cada etapa que melhor divide o conjunto de itens. Diferentes algoritmos usam diferentes métricas para medir 8220best8221. Estes geralmente medem a homogeneidade da variável alvo dentro dos subconjuntos. Estas métricas são aplicadas a cada subconjunto candidato, e os valores resultantes são combinados (por exemplo, em média) para proporcionar uma medida da qualidade da divisão. A metodologia CART apresenta algumas características que são muito adequadas para análise de mercado: Não paramétrico. CART pode lidar com qualquer tipo de distribuição estatística não linear. CART pode lidar com um grande espectro de dependência entre variáveis ​​(por exemplo, não limitado a relações lineares) Robusto para outliers Existem vários pacotes R lidar com particionamento recursivo, eu uso aqui rpart para árvores estimativa e rpart. plot para árvores desenho. 2 8211 Data amp Experiment Design Preços diários de OHLC para a maioria dos ETFs líquidos de janeiro de 2000 a dezembro de 2017 extraídos do Google Finance. O período da amostra vai de janeiro de 2000 a dezembro de 2018, o restante do conjunto de dados é o período fora da amostra. Antes de executar qualquer tipo de análise o conjunto de dados tem de ser preparado para a tarefa. A variável alvo é o ETF retorno semanal definido como dois estados do resultado mundial (UP ou DOWN). Se o retorno semanal semanal gt 0 então o mercado no estado UP, o estado DOWN de outra forma As variáveis ​​explicativas são um conjunto de indicadores técnicos derivados do conjunto de dados OHLC diário inicial. Cada indicador representa um comportamento de mercado bem documentado. Para reduzir o ruído nos dados e tentar identificar relações robustas, cada variável independente é considerada como tendo um resultado binário. Volatilidade (VAR1). Alta volatilidade é geralmente associada a um mercado para baixo e baixa volatilidade com um up market. A volatilidade é definida como os 20 dias de ATR bruto (Average True Range) espalhados para a sua média móvel (MA). Se bruto ATR gt MA, em seguida, VAR1 1, senão VAR1 -1. Momento de curto prazo (VAR2). O mercado acionário apresenta um comportamento momentâneo de curto prazo, capturado aqui por uma média móvel simples de 5 dias (SMA). Se Preço gt SMA então VAR2 1 mais VAR2 -1 Momento de longo prazo (VAR3). O mercado acionário apresenta um comportamento de longo prazo capturado por uma média móvel de 50 dias (LMA). Se Preço gt LMA então VAR3 1 mais VAR3 -1 Inversão de curto prazo (VAR4). Isso é capturado pelo CRTDR, que significa Fechar Relative To Daily Range e calculado da seguinte forma:. Se CRTDR gt 0,5, então VAR4 1 outro VAR4 -1 regime de Autocorrelação (VAR5). O mercado de ações tende a passar por períodos de regimes negativos e positivos de autocorrelação. Se retorna a autocorrelação nos últimos 5 dias gt 0 então VAR5 1 mais VAR5 -1 Posto abaixo um exemplo de árvore com algumas explicações Na árvore acima, o caminho para alcançar o nó 4 é: VAR3 gt0 (Long Term Momentum gt 0) e VAR4 Gt 0 (CRTDR gt 0). O retângulo vermelho indica que esta é uma folha DOWN (por exemplo, um nó terminal) com uma probabilidade de 58 (1 8211 0,42). Em termos de mercado, isto significa que se Momentum Long Term é Up e CRTDR é gt 0,5, então a probabilidade de um retorno positivo na próxima semana é 42 com base nos dados amostra amostra. 18 indica a proporção do conjunto de dados que cai nesse nó terminal (por exemplo folha). Há muitas maneiras de usar a abordagem acima, eu escolhi para estimar e combinar todas as árvores possíveis. A partir dos dados da amostra, coleciono todas as folhas de todas as árvores possíveis e as colho em uma matriz. Esta é a matriz 8220rules8221 dando a probabilidade da próxima semana beeing UP ou DOWN. Eu aplico as regras na matriz acima para fora dos dados da amostra (Jan 2017 8211 Dec 2017) e eu comparar os resultados com o resultado real. O problema com esta abordagem é que um único ponto (semana) pode cair em várias regras e até mesmo pertencer a UP e DOWN regras simultaneamente. Portanto, aplico um esquema de votação. Para uma determinada semana eu resumo todas as regras que se aplicam a essa semana dando um 1 para uma regra UP e -1 para uma regra DOWN. Se a soma for maior que 0, a semana é classificada como UP, se a soma for negativa, é uma semana DOWN e se a soma for igual a 0 não haverá nenhuma posição tomada naquela semana (retorno 0) A metodologia acima é aplicada a uma Conjunto de ETFs muito líquidos. Eu traço abaixo da saída da amostra equidade curvas juntamente com a estratégia de comprar e manter durante o mesmo período. Os resultados iniciais parecem encorajadores, mesmo que a qualidade do resultado varie muito de instrumento. No entanto, há uma enorme sala de aperfeiçoamento. Eu coloco abaixo algumas direções para uma análise mais aprofundada. O algoritmo usado aqui para definir as árvores é ótimo em cada divisão, mas não garante a otimização do caminho. Adicionar uma métrica para medir a otimalidade do caminho certamente melhoraria os resultados acima. Outras variáveis. Escolhi as variáveis ​​explicativas unicamente com base na experiência. É muito provável que essa escolha não seja boa nem ótima. Metodologia de Backtest. Eu usei um simples dentro e fora da metodologia da amostra. Em um backtest mais formal eu preferiria usar uma janela de rolamento ou expansão de sub-períodos de amostra dentro e fora (por exemplo, análise de frente) Como de costume, quaisquer comentários bem-vindos

Comments

Popular Posts