Estou tentando testar uma estratégia comercial com o pacote Quantstrat. Minha estratégia é composta por 4 indicadores, 3 EMAs diferentes e 1 EMA atrasado. Eu quero ir muito tempo quando: EMA1 EMA2 amp EMA1 EMA3 amp EMA1lag lt EMA1 Quero sair e ir plano quando: EMA1 lt EMA3 É bastante simples, mas não consigo gravá-lo no ambiente Quantstrat. Heres uma função de verificação de integridade de dados usada em ambos os exemplos: Aqui está o código de borrão que faz o que eu quero: tentei replicar a estratégia acima com quantstrat (usando add. indicator. Add. signal. Add. rule), mas os resultados são Definitivamente diferente. Aqui, o segundo código com quantstrat: Alguém poderia me ajudar a entender por que o segundo código não fornece resultados idênticos. Eu acho que meus erros estão dentro do add. indicator. Add. signal. Add. rule setup, mas não consigo descobrir exatamente isso. Perguntou 23 de agosto 15 às 17:02 O código baseado em Quanstrat não fornecerá resultados idênticos por vários motivos. Uma delas é que suas colunas não estão corretas nas suas primeiras 3 ligações de add. signal. Todas as colunas precisam ter uma EMA. Prefixo: outra questão, e provavelmente a maior causa de diferenças, é o próximo sinal: isso cria um sinal para cada observação em que a fórmula é verdadeira, não apenas as observações onde a fórmula cruza de falso a verdadeiro. Você só quer as observações em que a fórmula cruza, então você deve usar: Outra fonte de diferenças é que você sempre usa 100 de sua equidade disponível para sua transação longa de abertura na versão blotter, mas você sempre compra 900 ações na versão quantstrat. Você pode fazer algo semelhante no quantstrat usando uma função de dimensionamento de ordem personalizada (veja osOoOp e osMaxPos para obter exemplos de como escrever uma função de dimensionamento de pedidos personalizada). O pessoal do Rstudio fez algum trabalho incrível com o pacote brilhante. A partir da página inicial brilhante, 8220Shiny torna super simples para os usuários de R como você transformar as análises em aplicativos web interativos que qualquer pessoa pode usar.8221 O desenvolvimento de aplicativos da web sempre me atraiu, mas hospedar, aprender javascript, html, etc. me fez colocar Isto é muito baixo na minha lista de prioridades. Com brilhante, pode-se escrever aplicações web em R. Este exemplo usa o conjunto de dados dos gerentes com chamadas para charts. PerformanceSummary e table. Stats do pacote PerformanceAnalytics para exibir um gráfico e uma tabela no aplicativo brilhante. Você precisa ter pacotes brilhantes e do Analys de desempenho instalados para executar o aplicativo. Uma vez instalados, abra o seu prompt R e execute: Há um excelente tutorial brilhante do Rstudio, bem como exemplos do SystematicInvestor para aqueles que estão interessados em aprender mais. Os últimos posts sobre impulso com R focados em uma maneira relativamente simples de estratégias de impulso de retorno. Na parte 4, uso o framework quantstrat para testar uma estratégia momentum. Usando quantstrat abre a porta para vários recursos e opções, bem como um livro de pedidos para verificar os negócios na conclusão do backtest. Eu apresento algumas novas funções que são usadas para preparar os dados e calcular as classificações. Eu ganho 8217t passar por eles em detalhes, essas funções estão disponíveis no meu github repo na pasta rank-functions. Este primeiro pedaço de código apenas carrega as bibliotecas, os dados necessários e aplica a função ave3ROC para classificar os ativos com base na média dos retornos de 2, 4 e 6 meses. Observe que você precisará carregar as funções em Rank. R e mensalmente-fun. R. O próximo fragmento de código é um passo crítico na preparação dos dados a serem usados no quantstrat. Com as classificações computadas, o próximo passo é vincular as classificações aos dados reais do mercado para serem usados com o quantstrat. Também é importante alterar os nomes das colunas para, por exemplo, XLY. Rank porque isso será usado como a coluna de sinal comercial quando o quantstrat é usado. Agora, o backtest pode ser executado. A função qstratRank é apenas uma função de conveniência que esconde a implementação do quantstrat para minha estratégia de Rank. Para este primeiro backtest, estou negociando os dois principais ativos com um tamanho de posição de 1000 unidades. Alterar o argumento para max. levels2 fornece a flexibilidade de 8220scaling8221 em uma negociação. Neste exemplo, diga que o recurso ABC é classificado 1 no primeiro mês 8212. Compre 500 unidades. No mês 2, o recurso ABC ainda está classificado em 1 8212, eu compro outras 500 unidades. Na publicação anterior, demonstrei backtests simples para negociação de uma série de ativos classificados com base em seus retornos simples de 3, 6, 9 ou 12 (ou seja, períodos de lookback). Embora não tenha sido um teste exaustivo, os resultados mostraram que ao negociar os 8 melhores ativos classificados, o ranking com base em 3, 6, 9 e 12 meses resultou em desempenho similar. Se os resultados fossem semelhantes para os diferentes períodos de lookback, qual período de lookback eu deveria escolher para minha estratégia. Minha resposta é incluir vários períodos de lookback no método de classificação. Isso pode ser feito tomando a média dos retornos de 6, 9 e 12 meses, ou qualquer outro retorno de n-mês. Isso nos dá o benefício de diversificar em vários períodos de lookback. Se eu acredito que o período de lookback dos retornos de 9 meses é melhor do que o dos 6 e 12 meses, posso usar uma média ponderada para dar ao retorno de 9 meses um peso maior para que ele tenha mais influência na determinação do ranking. Isso pode ser implementado facilmente com o que eu chamo a função WeightAve3ROC () mostrada abaixo. A função é bastante auto-explicativa, mas sinta-se a vontade para perguntar se você tem alguma dúvida. Agora, para os resultados do teste. O gráfico abaixo mostra os resultados usando retornos de 6, 9 e 12 meses, bem como uma média de 6, 9 e 12 meses de retorno e média ponderada de 6, 9 e 12 meses de retorno. Caso 1: teste de impulso simples com base no ROC de 6 meses para classificar o Caso 2: teste de momentum simples com base no ROC de 9 meses para classificar o Caso 3: teste de momento simples baseado em ROC de 12 meses para classificar Caso 4: teste de momento simples com base na média de 6 , 9 e ROC de 12 meses para classificar o Caso 5: teste de impulso simples com base na média ponderada de ROC de 6, 9 e 12 meses para classificar. Os pesos são 16, 23, 16 para 6, 9 e 12 meses de retorno. Aqui está uma tabela dos retornos e remessas máximas para o teste. Este teste demonstra como pode ser possível obter melhores retornos ajustados ao risco (CAGR mais elevado e reduções menores neste caso) considerando vários períodos de lookback no método de classificação. O código R completo está abaixo. Incluí todas as funções no script R abaixo para tornar mais fácil para você reproduzir os testes e tentar as coisas, mas eu recomendaria colocar as funções em um arquivo separado e usando a fonte () para carregar as funções para manter o código limpador. Muitos dos sites que eu liguei na publicação anterior têm artigos ou documentos sobre o impulso de investir que investigam os típicos fatores de classificação 3, 6, 9 e 12 meses de retorno. A maioria (nem todos) dos artigos procura encontrar qual é o melhor período de look-back para classificar os ativos. Diga que o resultado do artigo é que o look-back de 6 meses tem os maiores retornos. A negociação de uma estratégia que apenas usa um período de 6 meses para avaliar os ativos deixa-me vulnerável ao excesso de ajuste com base nos resultados do backtest. O backtest não nos diz nada mais do que a estratégia desempenhada o melhor no passado, não nos diz nada sobre o futuro8230 duh Sempre que analiso os resultados dos backtests, sempre me pergunto muito se perguntas. Aqui estão 3 e se as perguntas que eu pediria para este backtest são: E se a estratégia com base em um look-back de 6 meses em execução e os 9 meses ou 3 meses começando a superar. E se as estratégias baseadas em 3, 6, E os períodos de retorno de 9 meses têm sobre o mesmo perfil de retorno e risco, qual estratégia devo trocar? E se os ativos com alta volatilidade dominarem os rankings e, portanto, gerando os retornos. Os testes de retorno apresentados são backtestes simples para demonstrar a variabilidade nos retornos Com base em períodos de look-back e número de ativos negociados. Os gráficos abaixo mostram o desempenho de uma estratégia de impulso usando retornos de 3, 6, 9 e 12 meses e comercializando os ativos classificados Top 1, 4 e 8. Você notará que existe uma volatilidade e variabilidade significativa nos retornos apenas negociando 1 ativo. A variabilidade entre os períodos de look-back é reduzida, mas ainda não há um melhor período de look-back. Há períodos de desempenho inferior e desempenho superior para todos os períodos de retrocesso no teste. Aqui está o código R usado para os backtests e as parcelas. Deixe um comentário se tiver alguma dúvida sobre o código abaixo. O tempo realmente voa é difícil acreditar que há mais de um mês desde a minha última publicação. O trabalho e a vida em geral consumiram muito do meu tempo ultimamente e deixaram pouco tempo para pesquisa e postagens de blog. De qualquer forma, para a postagem Esta publicação será a primeira de uma série para cobrir uma estratégia de impulso usando R. Uma das minhas estratégias favoritas é uma estratégia de força momentânea ou relativa. Aqui estão apenas algumas das razões pelas quais eu gosto do impulso: Simples de implementar Cartas longas ou longshort Muitas maneiras de definir a força ou a medida de impulso. Simplesmente funciona. Além disso, uma estratégia de impulso se presta bem ao potencial de diversificação. O universo dos instrumentos pode ser infinito, mas os instrumentos negociados são finitos. Pense nisso desta forma O Investidor A olha para 10 instrumentos e investe 1000 nos 5 melhores instrumentos classificados por impulso. O investidor B olha para 100 instrumentos e investe 1000 nos 5 melhores instrumentos classificados por impulso. O investidor A está limitando seu potencial de diversificação ao ter apenas um universo de 10 instrumentos. O investidor B tem um universo de instrumentos muito maior e, em teoria, pode ser mais diversificado. Teoricamente falando, você pode negociar um número infinito de instrumentos com uma quantidade finita de capital comercial usando uma estratégia de força momentânea ou relativa. Confira esses links para leitura adicional. Nesta primeira publicação da série sobre o impulso, examinarei algumas das configurações básicas e as funções que usaremos. O primeiro passo é obter dados do yahoo. Observe que o loop for converte os dados em menstruação e subconta os dados para que a única coluna que mantemos seja a coluna de ajuste ajustada. Agora temos quatro objetos (XLY, XLP, XLE, XLF) que possuem o preço Ajustado Fechar. O próximo passo é mesclar esses quatro objetos em um único objeto que contém o preço Ajustado Fechar. Podemos fazer isso de forma simples em R Para o fator que será classificado, usarei a taxa de variação de 3 períodos (ROC).
No comments:
Post a Comment