Saturday, 17 June 2017

Quantitativo Negociação Estratégias Em R Parte 1 De 3


November 30, 2016, 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. Finalmente, 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 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, salve e feche 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 fora da 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 (2010), 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 2010 13 de dezembro de 2015, 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 se segue, presumo que os dados venham 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 2015, 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 índice de referência. Isso nem sempre é possível por razões práticas: alguns estoques podem ser excluídos do universo de investimento, existem restrições sobre o peso da indústria ou do setor, existem restrições sobre o volume de negócios etc 8230 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 sobre 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 2014, 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 por 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 2010. O Fora de Período de amostragem começa em janeiro de 2011. 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 como 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 é realizada. 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 2014, 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 do 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 2013 extraídos do Google Finance. O período da amostra vai de janeiro de 2000 a dezembro de 2010, 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 da 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 2011 8211 Dec 2013) 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 acordo com o 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 prefiro usar uma janela de rolamento ou expansão de sub-períodos de amostra dentro e fora (por exemplo, análise de andamento) Como de costume, qualquer comentário welcomeSuccessful Backtesting de estratégias de negociação algorítmica, Parte 1 Este artigo continua a série sobre o comércio quantitativo , Que começou com o Beginner8217s Guide and Strategy Identification. Ambos estes artigos mais longos, mais envolvidos foram muito populares assim que I8217ll continuam nesta veia e fornecem o detalhe no tópico do backtesting da estratégia. O backtesting algorítmico requer conhecimento de muitas áreas, incluindo psicologia, matemática, estatística, desenvolvimento de software e microestrutura do mercado. Eu não poderia cobrir todos esses tópicos em um artigo, então vou dividi-los em dois ou três pedaços menores. O que discutiremos nesta seção começaremos definindo o backtesting e então descreverei os fundamentos de como ele é realizado. Então eu vou elucidar sobre os preconceitos que tocou no Guia Beginner8217s de Negociação Quantitativa. Em seguida, apresentarei uma comparação das várias opções de software de backtesting disponíveis. Em artigos subseqüentes, veremos os detalhes das implementações de estratégias que são muitas vezes mal mencionadas ou ignoradas. Também vamos considerar como tornar o processo de backtesting mais realista, incluindo as idiossincrasias de uma troca comercial. Em seguida, discutiremos os custos de transação e como modelá-los corretamente em uma configuração de backtest. Vamos terminar com uma discussão sobre o desempenho de nossos backtests e, finalmente, fornecer um exemplo de uma estratégia de quant comum, conhecido como um meio-reverting pares comércio. Começamos por discutir o que é o backtesting e por que devemos realizá-lo em nossa negociação algorítmica. O que é Backtesting A negociação algorítmica se destaca dos outros tipos de classes de investimento, porque podemos fornecer expectativas mais confiáveis ​​sobre o desempenho futuro do desempenho passado, como conseqüência da disponibilidade abundante de dados. O processo pelo qual este é realizado é conhecido como backtesting. In simple terms, backtesting is carried out by exposing your particular strategy algorithm to a stream of historical financial data, which leads to a set of trading signals . Each trade (which we will mean here to be a 8217round-trip8217 of two signals) will have an associated profit or loss. The accumulation of this profitloss over the duration of your strategy backtest will lead to the total profit and loss (also known as the 8216PampL8217 or 8216PnL8217). That is the essence of the idea, although of course the 8220devil is always in the details8221 What are key reasons for backtesting an algorithmic strategy Filtration 8211 If you recall from the article on Strategy Identification. our goal at the initial research stage was to set up a strategy pipeline and then filter out any strategy that did not meet certain criteria. Backtesting provides us with another filtration mechanism, as we can eliminate strategies that do not meet our performance needs. Modelling 8211 Backtesting allows us to (safely) test new models of certain market phenomena, such as transaction costs, order routing, latency, liquidity or other market microstructure issues. Optimisation 8211 Although strategy optimisation is fraught with biases, backtesting allows us to increase the performance of a strategy by modifying the quantity or values of the parameters associated with that strategy and recalculating its performance. Verification 8211 Our strategies are often sourced externally, via our strategy pipeline . Backtesting a strategy ensures that it has not been incorrectly implemented. Although we will rarely have access to the signals generated by external strategies, we will often have access to the performance metrics such as the Sharpe Ratio and Drawdown characteristics. Thus we can compare them with our own implementation. Backtesting provides a host of advantages for algorithmic trading. However, it is not always possible to straightforwardly backtest a strategy. In general, as the frequency of the strategy increases, it becomes harder to correctly model the microstructure effects of the market and exchanges. This leads to less reliable backtests and thus a trickier evaluation of a chosen strategy. This is a particular problem where the execution system is the key to the strategy performance, as with ultra-high frequency algorithms. Unfortunately, backtesting is fraught with biases of all types. We have touched upon some of these issues in previous articles, but we will now discuss them in depth. Biases Affecting Strategy Backtests There are many biases that can affect the performance of a backtested strategy. Unfortunately, these biases have a tendency to inflate the performance rather than detract from it. Thus you should always consider a backtest to be an idealised upper bound on the actual performance of the strategy. It is almost impossible to eliminate biases from algorithmic trading so it is our job to minimise them as best we can in order to make informed decisions about our algorithmic strategies. There are four major biases that I wish to discuss: Optimisation Bias, Look-Ahead Bias, Survivorship Bias and Psychological Tolerance Bias . Optimisation Bias This is probably the most insidious of all backtest biases. It involves adjusting or introducing additional trading parameters until the strategy performance on the backtest data set is very attractive. However, once live the performance of the strategy can be markedly different. Another name for this bias is 8220curve fitting8221 or 8220data-snooping bias8221. Optimisation bias is hard to eliminate as algorithmic strategies often involve many parameters. 8220Parameters8221 in this instance might be the entryexit criteria, look-back periods, averaging periods (i. e the moving average smoothing parameter) or volatility measurement frequency. Optimisation bias can be minimised by keeping the number of parameters to a minimum and increasing the quantity of data points in the training set. In fact, one must also be careful of the latter as older training points can be subject to a prior regime (such as a regulatory environment) and thus may not be relevant to your current strategy. One method to help mitigate this bias is to perform a sensitivity analysis . This means varying the parameters incrementally and plotting a 8220surface8221 of performance. Sound, fundamental reasoning for parameter choices should, with all other factors considered, lead to a smoother parameter surface. If you have a very jumpy performance surface, it often means that a parameter is not reflecting a phenomena and is an artefact of the test data. There is a vast literature on multi-dimensional optimisation algorithms and it is a highly active area of research. I won8217t dwell on it here, but keep it in the back of your mind when you find a strategy with a fantastic backtest Look-Ahead Bias Look-ahead bias is introduced into a backtesting system when future data is accidentally included at a point in the simulation where that data would not have actually been available. If we are running the backtest chronologically and we reach time point N . then look-ahead bias occurs if data is included for any point N k . where k gt 0 . Look-ahead bias errors can be incredibly subtle. Here are three examples of how look-ahead bias can be introduced: Technical Bugs 8211 Arraysvectors in code often have iterators or index variables. Incorrect offsets of these indices can lead to a look-ahead bias by incorporating data at N k for non-zero k . Parameter Calculation 8211 Another common example of look-ahead bias occurs when calculating optimal strategy parameters, such as with linear regressions between two time series. If the whole data set (including future data) is used to calculate the regression coefficients, and thus retroactively applied to a trading strategy for optimisation purposes, then future data is being incorporated and a look-ahead bias exists. MaximaMinima 8211 Certain trading strategies make use of extreme values in any time period, such as incorporating the high or low prices in OHLC data. However, since these maximalminimal values can only be calculated at the end of a time period, a look-ahead bias is introduced if these values are used - during - the current period. It is always necessary to lag highlow values by at least one period in any trading strategy making use of them. Survivorship Bias Survivorship bias is a particularly dangerous phenomenon and can lead to significantly inflated performance for certain strategy types. It occurs when strategies are tested on datasets that do not include the full universe of prior assets that may have been chosen at a particular point in time, but only consider those that have 8220survived8221 to the current time. As an example, consider testing a strategy on a random selection of equities before and after the 2001 market crash. Some technology stocks went bankrupt, while others managed to stay afloat and even prospered. If we had restricted this strategy only to stocks which made it through the market drawdown period, we would be introducing a survivorship bias because they have already demonstrated their success to us. In fact, this is just another specific case of look-ahead bias, as future information is being incorporated into past analysis. There are two main ways to mitigate survivorship bias in your strategy backtests: Survivorship Bias Free Datasets 8211 In the case of equity data it is possible to purchase datasets that include delisted entities, although they are not cheap and only tend to be utilised by institutional firms. In particular, Yahoo Finance data is NOT survivorship bias free, and this is commonly used by many retail algo traders. One can also trade on asset classes that are not prone to survivorship bias, such as certain commodities (and their future derivatives). Use More Recent Data 8211 In the case of equities, utilising a more recent data set mitigates the possibility that the stock selection chosen is weighted to 8220survivors8221, simply as there is less likelihood of overall stock delisting in shorter time periods. One can also start building a personal survivorship-bias free dataset by collecting data from current point onward. After 3-4 years, you will have a solid survivorship-bias free set of equities data with which to backtest further strategies. We will now consider certain psychological phenomena that can influence your trading performance. We will now consider certain psychological phenomena that can influence your trading performance. Psychological Tolerance Bias This particular phenomena is not often discussed in the context of quantitative trading. However, it is discussed extensively in regard to more discretionary trading methods. It has various names, but I8217ve decided to call it 8220psychological tolerance bias8221 because it captures the essence of the problem. When creating backtests over a period of 5 years or more, it is easy to look at an upwardly trending equity curve, calculate the compounded annual return, Sharpe ratio and even drawdown characteristics and be satisfied with the results. As an example, the strategy might possess a maximum relative drawdown of 25 and a maximum drawdown duration of 4 months. This would not be atypical for a momentum strategy. It is straightforward to convince oneself that it is easy to tolerate such periods of losses because the overall picture is rosy. However, in practice, it is far harder If historical drawdowns of 25 or more occur in the backtests, then in all likelihood you will see periods of similar drawdown in live trading. These periods of drawdown are psychologically difficult to endure. I have observed first hand what an extended drawdown can be like, in an institutional setting, and it is not pleasant 8211 even if the backtests suggest such periods will occur. The reason I have termed it a 8220bias8221 is that often a strategy which would otherwise be successful is stopped from trading during times of extended drawdown and thus will lead to significant underperformance compared to a backtest. Thus, even though the strategy is algorithmic in nature, psychological factors can still have a heavy influence on profitability. The takeaway is to ensure that if you see drawdowns of a certain percentage and duration in the backtests, then you should expect them to occur in live trading environments, and will need to persevere in order to reach profitability once more. Software Packages for Backtesting The software landscape for strategy backtesting is vast. Solutions range from fully-integrated institutional grade sophisticated software through to programming languages such as C, Python and R where nearly everything must be written from scratch (or suitable 8216plugins8217 obtained). As quant traders we are interested in the balance of being able to 8220own8221 our trading technology stack versus the speed and reliability of our development methodology. Here are the key considerations for software choice: Programming Skill 8211 The choice of environment will in a large part come down to your ability to program software. I would argue that being in control of the total stack will have a greater effect on your long term PampL than outsourcing as much as possible to vendor software. This is due to the downside risk of having external bugs or idiosyncrasies that you are unable to fix in vendor software, which would otherwise be easily remedied if you had more control over your 8220tech stack8221. You also want an environment that strikes the right balance between productivity, library availability and speed of execution. I make my own personal recommendation below. Execution CapabilityBroker Interaction 8211 Certain backtesting software, such as Tradestation, ties in directly with a brokerage. I am not a fan of this approach as reducing transaction costs are often a big component of getting a higher Sharpe ratio. If you8217re tied into a particular broker (and Tradestation 8220forces8221 you to do this), then you will have a harder time transitioning to new software (or a new broker) if the need arises. Interactive Brokers provide an API which is robust, albeit with a slightly obtuse interface. Customisation 8211 An environment like MATLAB or Python gives you a great deal of flexibility when creating algo strategies as they provide fantastic libraries for nearly any mathematical operation imaginable, but also allow extensive customisation where necessary. Strategy Complexity 8211 Certain software just isn8217t cut out for heavy number crunching or mathematical complexity. Excel is one such piece of software. While it is good for simpler strategies, it cannot really cope with numerous assets or more complicated algorithms, at speed. Bias Minimisation 8211 Does a particular piece of software or data lend itself more to trading biases You need to make sure that if you want to create all the functionality yourself, that you don8217t introduce bugs which can lead to biases. Speed of Development 8211 One shouldn8217t have to spend months and months implementing a backtest engine. Prototyping should only take a few weeks. Make sure that your software is not hindering your progress to any great extent, just to grab a few extra percentage points of execution speed. C is the 8220elephant in the room8221 here Speed of Execution 8211 If your strategy is completely dependent upon execution timeliness (as in HFTUHFT) then a language such as C or C will be necessary. However, you will be verging on Linux kernel optimisation and FPGA usage for these domains, which is outside the scope of this article Cost 8211 Many of the software environments that you can program algorithmic trading strategies with are completely free and open source. In fact, many hedge funds make use of open source software for their entire algo trading stacks. In addition, Excel and MATLAB are both relatively cheap and there are even free alternatives to each. Now that we have listed the criteria with which we need to choose our software infrastructure, I want to run through some of the more popular packages and how they compare: Note: I am only going to include software that is available to most retail practitioners and software developers, as this is the readership of the site. While other software is available such as the more institutional grade tools, I feel these are too expensive to be effectively used in a retail setting and I personally have no experience with them. Description . WYSIWYG (what-you-see-is-what-you-get) spreadsheet software. Extremely widespread in the financial industry. Data and algorithm are tightly coupled. Execution . Yes, Excel can be tied into most brokerages. Customisation . VBA macros allow more advanced functionality at the expense of hiding implementation. Strategy Complexity . More advanced statistical tools are harder to implement as are strategies with many hundreds of assets. Bias Minimisation . Look-ahead bias is easy to detect via cell-highlighting functionality (assuming no VBA). Development Speed . Quick to implement basic strategies. Execution Speed . Slow execution speed 8211 suitable only for lower-frequency strategies. Cost . Cheap or free (depending upon license). Alternatives . OpenOffice Description . Programming environment originally designed for computational mathematics, physics and engineering. Very well suited to vectorised operations and those involving numerical linear algebra. Provides a wide array of plugins for quant trading. In widespread use in quantitative hedge funds. Execution . No native execution capability, MATLAB requires a separate execution system. Customisation . Huge array of community plugins for nearly all areas of computational mathematics. Strategy Complexity . Many advanced statistical methods already available and well-tested. Bias Minimisation . Harder to detect look-ahead bias, requires extensive testing. Development Speed . Short scripts can create sophisticated backtests easily. Execution Speed . Assuming a vectorisedparallelised algorithm, MATLAB is highly optimised. Poor for traditional iterated loops. Cost . Description . High-level language designed for speed of development. Wide array of libraries for nearly any programmatic task imaginable. Gaining wider acceptance in hedge fund and investment bank community. Not quite as fast as CC for execution speed. Execution . Python plugins exist for larger brokers, such as Interactive Brokers. Hence backtest and execution system can all be part of the same 8220tech stack8221. Customisation . Python has a very healthy development community and is a mature language. NumPySciPy provide fast scientific computing and statistical analysis tools relevant for quant trading. Strategy Complexity: Many plugins exist for the main algorithms, but not quite as big a quant community as exists for MATLAB. Bias Minimisation . Same bias minimisation problems exist as for any high level language. Need to be extremely careful about testing. Development Speed . Pythons main advantage is development speed, with robust in built in testing capabilities. Execution Speed . Not quite as fast as C, but scientific computing components are optimised and Python can talk to native C code with certain plugins. Cost . FreeOpen Source Alternatives . Ruby. Erlang. Haskell Description . Environment designed for advanced statistical methods and time series analysis. Wide array of specific statistical, econometric and native graphing toolsets. Large developer community. Execution . R possesses plugins to some brokers, in particular Interactive Brokers. Thus an end-to-end system can written entirely in R. Customisation . R can be customised with any package, but its strengths lie in statisticaleconometric domains. Strategy Complexity . Mostly useful if performing econometric, statistical or machine-learning strategies due to available plugins. Bias Minimisation . Similar level of bias possibility for any high-level language such as Python or C. Thus testing must be carried out. Development Speed . R is rapid for writing strategies based on statistical methods. Execution Speed . R is slower than C, but remains relatively optimised for vectorised operations (as with MATLAB). Cost . FreeOpen Source Alternatives . SPSS. Stata Description . Mature, high-level language designed for speed of execution. Wide array of quantitative finance and numerical libraries. Harder to debug and often takes longer to implement than Python or MATLAB. Extremely prevalent in both the buy - and sell-side. Execution . Most brokerage APIs are written in C and Java. Thus many plugins exist. Customisation . CC allows direct access to underlying memory, hence ultra-high frequency strategies can be implemented. Strategy Complexity . C STL provides wide array of optimised algorithms. Nearly any specialised mathematical algorithm possesses a free, open-source CC implementation on the web. Bias Minimisation . Look-ahead bias can be tricky to eliminate, but no harder than other high-level language. Good debugging tools, but one must be careful when dealing with underlying memory. Development Speed . C is quite verbose compared to Python or MATLAB for the same algorithmm. More lines-of-code (LOC) often leads to greater likelihood of bugs. Execution Speed . CC has extremely fast execution speed and can be well optimised for specific computational architectures. This is the main reason to utilise it. Cost . Various compilers: LinuxGCC is free, MS Visual Studio has differing licenses. Alternatives . C. Java. Scala Different strategies will require different software packages. HFT and UHFT strategies will be written in CC (these days they are often carried out on GPUs and FPGAs ), whereas low-frequency directional equity strategies are easy to implement in TradeStation, due to the 8220all in one8221 nature of the softwarebrokerage. My personal preference is for Python as it provides the right degree of customisation, speed of development, testing capability and execution speed for my needs and strategies. If I need anything faster, I can 8220drop in8221 to C directly from my Python programs. One method favoured by many quant traders is to prototype their strategies in Python and then convert the slower execution sections to C in an iterative manner. Eventually the entire algo is written in C and can be 8220left alone to trade8221 In the next few articles on backtesting we will take a look at some particular issues surrounding the implementation of an algorithmic trading backtesting system, as well as how to incorporate the effects of trading exchanges. We will discuss strategy performance measurement and finally conclude with an example strategy. 8212 By Michael Halls-Moore from QuantStart About the Author Mike Halls-Moore Michael graduated with a MMath in Mathematics from the University of Warwick, gained a PhD from Imperial College London in Fluid Dynamics, and was working in a hedge fund as a quantitative trading developer for the last few years in Mayfair, London. He now spends time on research, development, backtesting and implementation of intraday algorithmic trading strategies. Time really flies it is hard to believe that it has been over a month since my last post. Work and life in general have consumed much of my time lately and left little time for research and blog posts. Anyway, on to the post This post will be the first in a series of to cover a momentum strategy using R. One of my favorite strategies is a momentum or relative strength strategy. Here are just a few of the reasons why I like momentum: Simple to implement Long only or longshort portfolios Many ways to define the strength or momentum measure It just works Also, a momentum strategy lends itself well to potential for diversification. The universe of instruments can be infinite, but the instruments traded are finite. Think about it this way Investor A looks at 10 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor B looks at 100 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor A is limiting his potential for diversification by only having a universe of 10 instruments. Investor B has a much larger universe of instruments and can in theory be more diversified. Theoretically speaking, you can trade an infinite number of instruments with a finite amount of trading capital using a momentum or relative strength strategy. Check out these links for further reading In this first post of the series on momentum, I will go over some of the basic setup and functions we will be using. The first step is to get data from yahoo. Note that the for loop converts the data to monthly and subsets the data so that the only column we keep is the adjusted close column. We now have four objects (XLY, XLP, XLE, XLF) that have the Adjusted Close price. The next step is to merge these four objects into a single object holding the Adjusted Close price. We can do this in a simple one-liner in R For the factor that will be ranked, I will use the 3 period rate of change (ROC). Here8217s another way to create the symbolsclose object. create new environment to store data symEnv lt - new. env() getSymbols assigns to new environment getSymbols(symbols, from0392000-01-01039, envsymEnv) function aggregates and returns Adjusted column f lt - function(x) sym lt - sub(quot..quot, quotquot, names(x)1) Ad(to. monthly(x, indexAt039lastof039,drop. timeTRUE, namesym)) use eapply to call f() on each symbol symbolsclose lt - do. call(merge, eapply(symEnv, f)) I have problems replicating this analysis. First of all, the to. monthly(x, indexAt8221lastof8221) does not get me the last day of the month, as I would expect, for example: gt x to. monthly(x, indexAt8221lastof8221) x. Open x. High x. Low x. Close x. Volume 2012-12-29 69.71 71.44 69.57 71.42 16384800 2013-01-29 72.95 78.59 72.00 77.35 195100300 2013-02-26 77.76 79.51 77.16 77.70 128912200 x. Adjusted 2012-12-29 71.42 2013-01-29 77.35 2013-02-26 77.70 If I run the first part of code and type head(XLE) I get the following: gt head(XLE) XLE. Adjusted 2000-01-29 22.67 2000-02-27 21.71 2000-03-29 24.33 2000-04-28 23.96 2000-05-29 26.78 2000-06-28 25.30 as you can see this is totally different from what is shown in the article above, the prices are different and the index is different (not the last day of the month). Can someone explain why this is like that Why is data different Why indexAt8221lastof8221 produces the above results What is the difference between 8220lastof8221 and 8220endof8221 Thank you Oh, 8220x8221 in the above is XLE.

No comments:

Post a Comment