Friday 24 May 2019

Trading strategies with r


Eu sou muito novo para a R e tentando testar uma estratégia que eu já programei no WealthLab. Várias coisas que eu não entendo (e isso não funciona obviamente). Eu não entendo os Close Prices muito bem num vetor. Ou algum tipo de vetor, mas começa com a estrutura e eu realmente não entendo o que essa função faz. É por isso que minha série, 1 chamada provavelmente não funciona. N ltnrow (série) também não funciona, mas eu preciso disso para o loop. Então, acho que se eu receber essas 2 perguntas respondidas, minha estratégia deveria funcionar. Estou muito agradecido por qualquer ajuda ... R parece bastante complicado, mesmo com a experiência de programação em outras línguas, sim, eu copiei algumas linhas de código deste tutorial e realmente não entendo essa linha. Eu significo séries, 1 eu pensei que aplicaria a função f na quotcolumnquot 1 da série. Mas, uma vez que esta série possui alguns complementos com estrutura, etc. não funciona. Eu estou falando sobre este tutorial: o bloggingbacktesting-a-trading-strategy ndash MichiZH 6 de junho 13 às 14: 22Finanças Matemática e Modelagem II (FINC 621) é uma classe de nível de pós-graduação que atualmente é oferecida na Universidade Loyola em Chicago durante o trimestre de inverno . O FINC 621 explora tópicos em finanças quantitativas, matemática e programação. A classe é de natureza prática e é composta de uma conferência e de um componente de laboratório. Os laboratórios utilizam a linguagem de programação R e os alunos devem enviar suas atribuições individuais no final de cada aula. O objetivo final do FINC 621 é fornecer aos alunos ferramentas práticas que possam usar para criar, modelar e analisar estratégias de negociação simples. Alguns links R úteis Sobre o Instrutor Harry G. é um comerciante quantitativo sênior para uma empresa comercial de HFT em Chicago. Ele possui um grau master8217s em Engenharia Elétrica e um mestrado em Matemática Financeira da Universidade de Chicago. Em seu tempo livre, Harry ensina um curso de graduação em finanças quantitativas na Universidade Loyola, em Chicago. Ele também é o autor de Quantitative Trading com R. 30 de novembro de 2017, às 12h34. Alguns meses atrás, um leitor me apontou 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 uma publicação, pois a ferramenta realmente vale a pena e antes de qualquer pessoa pergunta, I8217m não está relacionado à empresa de nenhuma maneira. BERT significa Basic Excel R Toolkit. It8217s 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 foi projetado para suportar a execução de funções R a partir de células do planilha do Excel. Em termos de Excel, it8217s para escrever funções definidas pelo usuário (UDFs) em R. Nesta postagem, I8217m não vai mostrar-lhe como o R e o Excel interagem via BERT. Existem muitos tutoriais aqui. Aqui e aqui. Em vez disso, eu quero mostrar-lhe como usei o BERT para construir um 8220control tower8221 para minha negociação. Meus sinais comerciais 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, o BERT pode fazer isso por mim, mas eu também quero adaptar o aplicativo às minhas necessidades. Ao combinar o poder de XML, VBA, R e BERT, posso criar um aplicativo bem parecido e poderoso na forma de um arquivo Excel com código VBA mínimo. Em última análise, eu tenho um único arquivo do 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 VBA. Essas funções VBA estão envolvidas em torno de funções R definidas usando o 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 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 Add-Ins no Excel com os botões como mostrado abaixo. É assim que o BERT se materializou no Excel. 2 8211 Baixe e instale o editor personalizado de UI. O Editor de UI personalizado permite criar menus e botões definidos pelo usuário na faixa de Excel. Um procedimento passo a passo está disponível aqui. Guia passo a passo 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 está bem) em um diretório de sua escolha. 2 8211 funções. R em 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. Isso é apenas o acesso ao BERT o arquivo R que você criou acima. Em seguida, salve e feche as funções do arquivo. R. Se você deseja fazer qualquer alteração no arquivo R criado na etapa 1, você terá que recarregá-lo usando o botão BERT 8220Reload Startup File8221 no menu Add-Ins no Excel 3 8211 No Excel: Crie e salve um arquivo chamado myFile. xslm (Qualquer outro nome está bem). Este é um arquivo ativado por macro que você salva no diretório de sua escolha. Uma vez que o arquivo é salvo, feche-o. 4 8211 Abra o arquivo criado acima no editor UI personalizado: depois que o arquivo estiver aberto, cole o código abaixo. Você deve ter algo assim no editor XML: Essencialmente, este 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. Uma vez que você esteja pronto, abra myFile. xslm no Excel e feche o Editor de UI personalizado. Você deve 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 novos. 6 8211 Clique no botão Novo. Agora volte para a planilha e no menu RTrader clique no botão 8220New Button8221. Você deve ver algo como o que aparece abaixo. O guia acima é uma versão muito básica do que pode ser alcançado usando o BERT, mas mostra como combinar o poder de várias ferramentas específicas para criar sua própria aplicação personalizada. 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 19 de agosto de 2017, às 9h26. 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 fora dos dados de amostra: a parte dos dados utilizados para validar a calibração e garantir que o desempenho criado na amostra seja 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 dentro e fora da amostra ajuda a decidir se o modelo é robusto o suficiente. Esta publicação pretende dar um passo adiante e fornece um método estatístico para decidir se os dados fora da amostra estão em linha 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 simples inspeção visual revela um bom ajuste entre o desempenho dentro e fora da amostra, mas qual o grau de confiança que tenho neste. Nesta fase, não é muito e essa é a questão. O que é realmente necessário é uma medida de similaridade entre os conjuntos de dados dentro e fora da amostra. Em termos estatísticos, isso pode ser traduzido como a probabilidade de os números de desempenho dentro e fora da amostra serem provenientes 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 na coleção R-Tutor 8220A. As 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 de população são idênticas sem assumir que elas sigam 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 adequam-se perfeitamente à estrutura 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 R podem ser encontradas 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 fora da amostra, então eu criei aleatoriamente 1000 subconjuntos dos dados de amostra, cada um deles com o mesmo comprimento que o fora De dados de amostra. Em seguida, testei cada subconjunto de amostra contra os dados fora da amostra e gravei os valores p. Esse 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 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 dentro e fora da amostra são provenientes da mesma distribuição. Como de costume, o que é apresentado nesta publicação é um exemplo de brinquedo que apenas arranha a superfície do problema e deve ser adaptado às necessidades individuais. No entanto, acho que propõe um quadro estatístico interessante e racional para avaliar os resultados da amostra. Esta publicação é inspirada nos seguintes dois artigos: Vigier Alexandre, Chmil Swann (2007), Efeitos de várias funções de otimização sobre o desempenho de amostras de estratégias de negociação desenvolvidas genéticamente, Previsão de mercados financeiros Conference Vigier Alexandre, Chmil Swann (2018), An Processo de otimização para melhorar a consistência da amostra, um caso do mercado de ações, JP Morgan Cazenove Equity Quantitative Conference, Londres outubro de 2018 13 de dezembro de 2017, 2:03 pm Fazer pesquisas quantitativas implica muita fragmentação de dados e um precisa de dados limpos e confiáveis ​​para Conseguir isso. O que é realmente necessário é um dado limpo que é facilmente acessível (mesmo sem conexão à internet). A maneira mais eficiente de fazer isso por mim tem sido manter um conjunto de arquivos csv. Obviamente, esse processo pode ser tratado de várias maneiras, mas eu encontrei horas extras muito eficientes e simples para manter um diretório onde eu armazeno e atualize 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 etc8230 sempre que eu quero testar uma nova idéia, mas mais importante, uma vez que identifiquei e corrigi um problema, eu não quero ter que Faça novamente a 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 etc8230 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 listOfInstruments. R é um arquivo contendo apenas a lista de todos os instrumentos. Se um instrumento não for parte da minha lista (ou seja, nenhum arquivo csv na minha pasta de dados) ou se você fizer isso pela primeira vez que você precisa 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. Costumo executar esse processo todos os dias, exceto quando I8217m de férias. Para adicionar um novo instrumento, basta executar o passo 1 acima para este instrumento sozinho. 3 8211 Criar um arquivo em lote (updateDailyPrices. bat) Outra parte importante do trabalho é criar um arquivo em lote que automatiza o processo de atualização acima (I8217m, um usuário do Windows). Isso evita abrir o RRStudio 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 reader8217s). 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 usei isso por um tempo e tem funcionado muito bem para mim até agora. Para dados mais avançados e ou frequências mais altas, as coisas podem ficar muito mais complicadas. Como de costume, todos os comentários são bem-vindos 23 de março de 2017, às 20h55. 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, é preciso 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 do benchmark. Menos estoques são mantidos em comparação com um benchmark quanto maior o erro de rastreamento (por exemplo, maior risco). A análise que se segue é amplamente inspirada no livro 8220Aficiência de portfólio de ativos8221 por Grinold amp Kahn. Esta é a Bíblia para qualquer pessoa interessada em administrar um portfólio em relação a um benchmark. Eu incentivo fortemente qualquer pessoa com interesse no tópico para ler o livro desde o início até o fim. It8217s muito bem escrito e estabelece as bases do gerenciamento sistemático sistemático de portfólio (não tenho afiliação ao editor ou aos autores). 1 8211 Análise de Factores Aqui estamos tentando classificar com a maior precisão possível os estoques no universo de investimento em uma base de retorno direto. 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). 1.1 8211 Coeficiente de informação O horizonte para o retorno direto deve ser definido pelo analista e it8217s como função do roteamento da estratégia8217 e da desintegração alfa (este tem sido objeto de pesquisa extensiva). 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 a Relação de Informações (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 a amplitude com precisão não é tão fácil quanto parece. 1.2 8211 Retorno dos Quantiles Para ter uma estimativa mais precisa do poder preditivo do fator, é necessário avançar um pouco mais e agrupar os estoques por quantile dos valores dos fatores, em seguida, analisar o retorno direto médio (ou qualquer outra métrica de tendência central) de cada um desses Quantiles. A utilidade desta ferramenta é direta. 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. Os bons retornos de quantiles são caracterizados por uma relação monótona entre os quantiles individuais e retornos diretos. Todas as ações no índice SampP500 (no momento da redação). Obviamente, há um viés de envio de sobrevivência: a lista de ações no índice mudou significativamente entre o início e o final do período de amostra, no entanto, é bom o suficiente para fins de ilustração apenas. O código abaixo baixa os preços das ações individuais no SampP500 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 é nosso fator, o último será usado como a medida de retorno direto. Abaixo está o código para calcular Coeficiente de Informações e Quantiles Return. Note-se que eu usei quintiles neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles, etc8230) 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. Há um aumento quase monotônico no retorno de quantiles entre Q1 e Q5, o que indica claramente que os estoques que caíram no 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 though8230). Portanto, há maiores chances de vencer o índice ao sobreponderar os estoques caindo no Q5 e subponderar aqueles que caíram no Q1 em relação ao benchmark. Um IC de 0,0206 pode não significar um ótimo negócio em si, mas it8217s 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. 4 8211 Limitações práticas O quadro acima é excelente para avaliar a qualidade dos investimentos de factor8217, no entanto, existem várias limitações práticas que devem ser abordadas para a implementação da vida real: Reequilíbrio. Na descrição acima, a página 8217s assumiu que, no final de cada mês, o portfólio é totalmente reequilibrado. 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 no roteamento, etc.8230 Custos de transação. Isso não foi levado em consideração na análise acima e isso é um travão grave para a implementação da vida real. As considerações sobre o volume de negócios geralmente são implementadas na vida real sob uma forma de penalidade na qualidade dos fatores. Coeficiente de transferência. Esta é uma extensão da lei fundamental da gestão ativa e relaxa a suposição do modelo de Grinold8217s que os gerentes não enfrentam restrições que impedem que elas traduzam seus insights de investimentos diretamente em apostas de portfólio. E, finalmente, I8217m impressionado com o que pode ser alcançado em menos de 80 linhas de código com R8230 Como de costume, todos os comentários são bem-vindos 14 de março de 2017, 1:07 pm A pergunta que alguém deve sempre pedir a ela mesmo ao usar indicadores técnicos é o que seria um objetivo Critérios para selecionar parâmetros de 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 adequadas para responder a essa pergunta. Nesta publicação, eu mostro como configurar o problema em R. Antes de prosseguir o lembrete usual: O que eu apresento nesta publicação é apenas um exemplo de brinquedo e não um convite para investir. Não é uma estratégia final, 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 do GA que encontrei vem da 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. Este método utiliza a seleção natural, a sobrevivência do melhor 8221. O processo geral segue as etapas abaixo: Codifique o problema nos cromossomos Usando a codificação, desenvolva uma função de aptidão física para uso na avaliação de cada valor do cromossoma8217s na resolução de um problema. Inicialize uma população de cromossomos. Avalie cada cromossomo na população Crie novos cromossomos acoplando dois Cromossomos. Isso é feito por muting e recombinação de dois pais para formar dois filhos (os pais são selecionados aleatoriamente, mas tendenciosos pela aptidão física) Avalie o novo cromossomo Exclua um membro da população menos ajustável do que o novo cromossomo e insira o novo cromossomo na população . Se o critério de parada for atingido (número máximo de gerações, o critério de aptidão é bom o suficiente8230), então devolva o melhor cromossomo, alternativamente, vá para o passo 4. De uma perspectiva comercial, a GA é muito útil porque eles são bons em lidar com problemas altamente não-lineares. No entanto, eles exibem algumas características desagradáveis ​​que merecem destaque: Sobreposição: Este é o principal problema e o it8217s até o analista para configurar o problema de forma a minimizar esse risco. Tempo de computação. Se o problema não for definido corretamente, pode ser extremamente longo para alcançar uma solução decente e a complexidade aumenta exponencialmente com o número de variáveis. Daí a necessidade de selecionar cuidadosamente os parâmetros. Existem vários pacotes R que lidam com GA, optei por usar o mais comum: rgenoud Os preços de fechamento diários para a maioria dos ETFs líquidos das finanças do Yahoo voltam a janeiro de 2000. O período de amostra vai de janeiro de 2000 a dezembro de 2018. O Out of O 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 devem ser selecionados. O mercado de ações exibe duas características principais que são familiares para qualquer pessoa com alguma experiência comercial. Momento a longo prazo e reversão de curto prazo. Essas características podem ser traduzidas em termos de indicadores técnicos por: médias móveis cruzadas e RSI. Isso representa um conjunto de 4 parâmetros: períodos de retorno para médias móveis a longo e curto prazo, período de retorno para RSI e RSI. Os conjuntos de parâmetros são os cromossomos. O outro elemento-chave é a função de fitness. Podemos querer usar algo como: retorno máximo ou taxa Sharpe ou redução média mínima. No que se segue, escolhi maximizar a proporção de Sharpe. A implementação R é um conjunto de 3 funções: fitnessFunction. Define a função de aptidão física (por exemplo, a relação de Sharpe máxima) a ser usada dentro do comércio de motores GA. Resumo das estatísticas de negociação para os períodos de entrada e saída de amostra para fins de comparação genoud. O mecanismo GA do pacote rgenoud A função genoud é bastante complexa, mas I8217m não vai explicar o que cada parâmetro significa que eu quero manter esta publicação curta (e a documentação é realmente boa). Na tabela abaixo, apresento para cada instrumento os parâmetros ótimos (período de retorno de RSI, limite de RSI, Média de Mudança de Curto Prazo e Média de Mudança de Longo Prazo), juntamente com as estatísticas de negociação dentro e fora da amostra. Antes de comentar os resultados acima, quero explicar alguns pontos importantes. Para combinar a lógica definida acima, limitei os parâmetros para garantir que o período de look-back para a média móvel a longo prazo seja sempre mais longo que a média móvel mais curta. Eu também obriguei o otimizador a escolher apenas as soluções com mais de 50 trades no período de amostra (por exemplo, significância estatística). Em geral, os resultados fora da amostra estão longe de serem impressionantes. Os retornos são baixos, mesmo que o número de negócios seja pequeno para tornar o resultado realmente significativo. Contudo, uma perda significativa de eficiência entre dentro e fora do período de amostra para o Japão (EWJ), o que provavelmente significa uma sobreposição. Esta publicação destina-se a fornecer ao leitor as ferramentas para usar adequadamente o GA em uma estrutura de negociação quantitativa. Mais uma vez, It8217 é apenas um exemplo que precisa ser refinado. Algumas potenciais melhorias a serem exploradas seriam: função de fitness. Maximizar a relação Sharpe é muito simplista. Uma função 8220smarter8221 certamente melhoraria o padrão de estatísticas de comércio fora da amostra. Tentamos capturar um padrão muito direto. Uma pesquisa de padrão mais detalhada é definitivamente necessária. otimização . Há muitas maneiras de melhorar a forma como a otimização é conduzida. Isso melhoraria a velocidade de computação e a racionalidade dos resultados. O código usado nesta publicação está disponível em um repositório Gist. Como de costume, todos os comentários são bem-vindos 28 de fevereiro de 2017, 3:52 pm Há um enorme corpo de literatura tanto acadêmico quanto empírico sobre a previsão do mercado. Na maioria das vezes mistura duas características de mercado: Magnitude e Direção. Neste artigo, eu quero me concentrar em identificar apenas a direção do mercado. O objetivo que eu estabeleci, é identificar condições de mercado quando as chances são significativamente tendenciosas em direção a um mercado ascendente ou descendente. Esta publicação fornece um exemplo de como CART (Classification And Regression Trees) pode ser usado neste contexto. Antes de prosseguir com o lembrete usual: O que eu apresento nesta publicação é apenas um exemplo de brinquedo e não um convite para investir. Não é uma estratégia final, 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 são um conjunto de técnicas de classificação e previsão. A técnica destina-se a produzir regras que prevejam o valor de uma variável de resultado (alvo) a partir de valores conhecidos das variáveis ​​preditoras (explicativas). Existem muitas implementações diferentes, mas todos estão compartilhando uma característica geral e é isso que eu estou interessado. De Wikipedia, Algoritmos para a construção de árvores de decisão geralmente funcionam de cima para baixo, escolhendo uma variável em cada passo que melhor divide o conjunto de itens. Algoritmos diferentes usam métricas diferentes para medir 8220best8221. Estes geralmente medem a homogeneidade da variável alvo nos subconjuntos. Essas métricas são aplicadas a cada subconjunto candidato, e os valores resultantes são combinados (por exemplo, média) para fornecer uma medida da qualidade da divisão. A metodologia CART exibe 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 que lidam com o Particionamento Recursivo, eu uso aqui uma porcentagem para estimativa de árvores e rpart. plot para desenho de árvores. 2 8211 Data amp Experiment Design Os preços diários da OHLC para a maioria dos ETFs líquidos de janeiro de 2000 a dezembro de 2017 extraídos do Google Finance. O período de amostra vai de janeiro de 2000 a dezembro de 2018, o resto do conjunto de dados é o período fora da amostra. Antes de executar qualquer tipo de análise, o conjunto de dados deve estar preparado para a tarefa. A variável alvo é o retorno forward semanal da ETF definido como dois estados do resultado mundial (UP ou DOWN). Se o retorno semanal gt 0, então o mercado no estado UP, DOWN indica o contrário. As variáveis ​​explicativas são um conjunto de indicadores técnicos derivados do conjunto de dados diário inicial da OHLC. Cada indicador representa um comportamento de mercado bem documentado. A fim de reduzir o ruído nos dados e tentar identificar relacionamentos robustos, cada variável independente é considerada como tendo um resultado binário. Volatilidade (VAR1). A alta volatilidade geralmente está associada a um mercado descendente e baixa volatilidade com um mercado superior. A volatilidade é definida como os 20 dias de ATR bruto (alcance médio verdadeiro) espalhados para sua média móvel (MA). Se Raw ATR gt MA então VAR1 1, senão VAR1 -1. Momento de curto prazo (VAR2). O mercado de ações exibe um comportamento de curto prazo capturado aqui por uma média móvel de 5 dias (SMA). Se Price gt SMA então VAR2 1 mais VAR2 -1 Momento de longo prazo (VAR3). O mercado de ações exibe um comportamento de impulso de longo prazo capturado aqui por uma média móvel de 50 dias (LMA). Se Price gt LMA então VAR3 1 mais VAR3 -1 Reversão de curto prazo (VAR4). Isso é capturado pelo CRTDR que significa Close Relative To Daily Range e calculado como segue:. Se CRTDR gt 0,5, então VAR4 1 mais VAR4 -1 regime de autocorrelação (VAR5). O mercado de ações tende a passar por períodos de regimes de autocorrelação negativos e positivos. Se retornar autocorrelação nos últimos 5 dias gt 0, então VAR5 1 mais VAR5 -1 coloco abaixo um exemplo de árvore com algumas explicações Na árvore acima, o caminho para alcançar o nó 4 é: VAR3 gt0 (Momento de longo prazo gt 0) e VAR4 Gt 0 (CRTDR gt 0). O retângulo vermelho indica que esta é uma folha DOWN (por exemplo, nó terminal) com uma probabilidade de 58 (1 8211 0,42). Em termos de mercado, isso significa que se Momento longo prazo e CRTDR é gt 0,5, então a probabilidade de um retorno positivo na próxima semana é 42 com base em dados amostra amostra. 18 indica a proporção do conjunto de dados que cai no nó terminal (por exemplo, folha). Há muitas maneiras de usar a abordagem acima, optei por 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 coloco em uma matriz. Esta é a matriz de 8220rules8221 dando a probabilidade de a semana que vem apontar para cima ou para baixo. Eu aplico as regras na matriz acima para os dados fora da amostra (janeiro de 2017 8211 de dezembro de 2017) e comparo 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 às regras UP e DOWN simultaneamente. Por isso, aplico um esquema de votação. Durante uma semana, resumo todas as regras que se aplicam a essa semana dando um 1 para uma regra UP e -1 para uma regra ABAIXO. Se a soma for maior que 0, a semana é classificada como UP, se a soma for negativa it8217s uma semana ABAIXO e se a soma for igual a 0, não haverá nenhuma posição tomada na semana (return 0). A metodologia acima é aplicada a um Conjunto de ETFs muito líquidos. Eu traço abaixo as curvas de equidade da amostra, juntamente com a estratégia de compra e retenção no mesmo período. Os resultados iniciais parecem encorajadores, mesmo que a qualidade do resultado varie muito de acordo com o instrumento. No entanto, existe um enorme espaço de melhoria. Posto abaixo algumas direções para uma análise mais aprofundada Otimização do caminho. 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 otimização do caminho certamente melhoraria os resultados acima. Outras variáveis. Escolhi as variáveis ​​explicativas unicamente com base na experiência. It8217s é muito provável que esta escolha não seja boa nem otimizada. Metodologia Backtest. Usei uma simples metodologia de In e Out of sample. Em um backtest mais formal, eu preferiria usar uma janela de rolagem ou expansão de sub-períodos de amostra de entrada e saída (por exemplo, análise de marcha para frente). Como de costume, todos os comentários são bem-vindos

No comments:

Post a Comment