Saturday 26 August 2017

Trading Estratégia Backtesting In R


Im muito novo para R e tentar backtest uma estratégia Ive programado já em WealthLab. Várias coisas que eu não entendo (e não funciona obviamente :) Eu não entendo os Preços Fechar bem em um vetor. Ou algum tipo de vetor, mas ele começa com a estrutura e eu realmente não entendo o que esta função faz. É por isso que minha série, uma chamada provavelmente não funciona. N lt - nrow (série) não funciona, mas eu preciso que para o Loop Então eu acho que se eu chegar Estas 2 perguntas respondidas minha estratégia deve funcionar. Estou muito grato por qualquer ajuda .. R parece muito complicado, mesmo com a experiência de programação em outras línguas yeah I Tipo de copiado algumas linhas de código a partir deste tutorial e don39t realmente entender esta linha. Quero dizer série, 1 eu pensei que iria aplicar a função f para quotcolumnquot 1 da série. Mas desde que esta série é alguma compley com a estrutura etc. não trabalha. I39m falando sobre este tutorial: r-bloggersbacktesting-a-negociação-estratégia ndash MichiZH Jun 6 13 às 14: 22O pessoal do Rstudio ter feito um 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 análises em aplicações web interativas que qualquer um pode usar.8221 Desenvolver aplicações web sempre me atraiu, mas hospedar, aprender javascript, html, etc. me fez colocar Este consideravelmente baixo em minha lista da prioridade. Com brilhante, pode-se escrever aplicações web em R. Este exemplo usa o conjunto de dados gerentes com chamadas para charts. PerformanceSummary e table. Stats do pacote PerformanceAnalytics para exibir um gráfico e uma tabela na aplicação brilhante. Você precisa ter pacotes brilhantes e Performance Analytics instalados para executar o aplicativo. Uma vez instalados, abra o prompt R e execute: Há um grande tutorial brilhante do Rstudio, bem como exemplos do SystematicInvestor para aqueles interessados ​​em aprender mais. Os últimos posts sobre impulso com R focada em uma maneira relativamente simples de backtest estratégias de impulso. Na parte 4, eu uso o framework quantstrat para testar uma estratégia de momentum. Usando quantstrat abre a porta para vários recursos e opções, bem como um livro de encomendas para verificar os comércios na conclusão do backtest. Eu introduzo algumas novas funções que são usadas para preparar os dados e calcular as fileiras. Eu não vou passar por eles em detalhes, essas funções estão disponíveis no meu repositório github na pasta rank-functions. Este primeiro pedaço de código apenas carrega as bibliotecas necessárias, dados 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 mensais-fun. R. O próximo pedaço de código é uma etapa crítica na preparação dos dados a serem usados ​​em quantstrat. Com as fileiras calculadas, o próximo passo é vincular os rankings aos dados reais do mercado a serem usados ​​com quantstrat. Também é importante alterar os nomes das colunas para, p. XLY. Rank porque isso será usado como a coluna de sinal de comércio quando quantstrat é usado. Agora o backtest pode ser executado. A função qstratRank é apenas uma função de conveniência que oculta a implementação quantstrat para a minha estratégia Rank. Para este primeiro backtest, estou negociando os 2 principais ativos com um tamanho de posição de 1000 unidades. Alterando o argumento para max. levels2 dá a flexibilidade de 8220scaling8221 em um comércio. Neste exemplo, digamos que o ABC do recurso está classificado 1 no primeiro mês 8212 Eu compro 500 unidades. No mês 2, ABC activo ainda é classificado 1 8212 eu comprar mais 500 unidades. No post anterior, eu demonstrei backtests simples para a negociação de um número de ativos classificados com base em seus 3, 6, 9, ou 12 (ou seja, períodos de lookback) meses retorna simples. Embora não tenha sido um backtest exaustivo, os resultados mostraram que ao negociar os 8 melhores classificados ativos, o ranking com base em 3, 6, 9 e 12 meses retorna resultou em desempenho semelhante. Se os resultados foram semelhantes para os diferentes períodos de lookback, que período de lookback devo escolher para a 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 meses. Isso nos dá o benefício de diversificar em vários períodos de lookback. Se eu acredito que o período de lookback de 9 meses retorna é melhor que o dos 6 e 12 meses, posso usar uma média ponderada para dar o retorno de 9 meses um peso maior para que ele tem mais influência na determinação da classificação. Isso pode ser implementado facilmente com o que eu estou chamando a função WeightAve3ROC () mostrada abaixo. A função é bastante auto-explicativo, mas não hesite em perguntar se você tiver alguma dúvida. Agora para os resultados do teste. O gráfico abaixo mostra os resultados do uso de retornos de 6, 9 e 12 meses, bem como uma média de retornos de 6, 9 e 12 meses e média ponderada de retornos de 6, 9 e 12 meses. Caso 1: teste de momentum simples baseado em ROC de 6 meses para classificar Caso 2: teste de momentum simples baseado em ROC de 9 meses para classificar Caso 3: teste de momentum simples baseado em ROC de 12 meses para classificar Caso 4: teste de momentum simples com base na média de 6 , 9 e 12 meses ROC para classificar o Caso 5: teste de momentum simples baseado na média ponderada de ROC de 6, 9 e 12 meses para classificação. Os pesos são 16, 23, 16 para retornos de 6, 9 e 12 meses. Aqui está uma tabela de retornos e levantamentos máximos para o teste. Este teste demonstra como é possível obter melhores retornos ajustados ao risco (maior CAGR e menores abatimentos neste caso) considerando vários períodos de retrocesso no método de classificação. O código completo R está abaixo. Eu incluí todas as funções no script R abaixo para tornar mais fácil para você reproduzir os testes e tentar coisas, mas eu recomendo colocar as funções em um arquivo separado e usando source () para carregar as funções para manter o código limpador. Muitos dos sites que eu liguei no post anterior têm artigos ou artigos sobre investir momentum que investigam os fatores de classificação típicos 3, 6, 9 e retornos de 12 meses. A maioria (não todos) dos artigos procuram encontrar qual é o melhor período de look-back para classificar os ativos. Digamos que o resultado do artigo é que o look-back de 6 meses tem os retornos mais altos. Uma negociação de uma estratégia que apenas usa um período de 6 meses de look-back para classificar os ativos deixa-me vulnerável a over-fitting com base nos resultados backtest. O backtest não nos diz nada mais do que estratégia realizada o melhor no passado, ele não nos diz nada sobre o future8230 duh Sempre que eu rever os resultados de backtests, eu sempre me pergunto um monte de que se perguntas. Aqui estão 3 o que se perguntas que eu iria pedir para este backtest são: O que se a estratégia baseada em um 6 meses look-back under executa e os 9 meses ou 3 meses começa a executar mais E se as estratégias baseadas em 3, 6, E os períodos de retorno de 9 meses têm aproximadamente o mesmo retorno e perfil de risco, que estratégia devo negociar. E se os ativos com alta volatilidade estão dominando os rankings e, portanto, conduzindo os retornos Os backtests mostrados são backtests simples destinados a demonstrar a variabilidade nos retornos Com base nos períodos de análise e no 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 negociando os ativos classificados como Top 1, 4 e 8. Você notará que há uma volatilidade e variabilidade significativas nos retornos que negociam apenas 1 ativo. A variabilidade entre os períodos de look-back é reduzida, mas ainda não há um melhor período de reflexão. Há períodos de desempenho inferior e desempenho superior para todos os períodos olhar para trás no teste. Aqui está o código R usado para os backtests e as parcelas. Deixe um comentário se você tiver alguma dúvida sobre o código abaixo. Tempo realmente voa é difícil acreditar que tem sido mais de um mês desde o meu último post. Trabalho e vida em geral têm consumido muito do meu tempo ultimamente e deixou pouco tempo para pesquisa e posts do blog. De qualquer forma, para o post Este post será o primeiro de uma série de para cobrir uma estratégia de impulso usando R. Uma das minhas estratégias favoritas é um impulso ou estratégia de força relativa. Aqui estão apenas algumas das razões pelas quais eu gosto de momentum: Simples de implementar longas ou longas carteiras Muitas maneiras de definir a força ou medida de momento Ele só funciona Além disso, uma estratégia de impulso empresta-se bem ao potencial de diversificação. O universo dos instrumentos pode ser infinito, mas os instrumentos negociados são finitos. Pense nisso desta forma Investor 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 por ter apenas um universo de 10 instrumentos. O investidor B tem um universo muito maior de instrumentos e, teoricamente, pode ser mais diversificado. Teoricamente falando, você pode negociar um número infinito de instrumentos com uma quantidade finita de capital de negociação usando um impulso ou estratégia de força relativa. Confira esses links para mais leitura Neste primeiro post da série sobre o momento, vou passar por cima de algumas das configurações básicas e funções que estaremos usando. O primeiro passo é obter dados do yahoo. Observe que o loop for converte os dados em mensais e subconjuntos os dados de modo que a única coluna que mantemos é a coluna fechada ajustada. Agora temos quatro objetos (XLY, XLP, XLE, XLF) que têm o preço de fechamento ajustado. O próximo passo é mesclar esses quatro objetos em um único objeto com o preço de fechamento ajustado. Podemos fazer isso em um simples one-liner em R Para o fator que será classificado, vou usar a taxa de 3 período de mudança (ROC).Backtesting uma Estratégia de Negociação I8217ve ordenou Análise de Séries Temporais e suas Aplicações: Com R Exemplos Springer Texts in Statistics) para me ajudar a subir a série de tempo em R curva de aprendizagem. Até agora, o que eu vi, parece bom. O autor tem uma boa página com as questões em R e séries temporais. O livro deve chegar até o final da semana. Enquanto isso, me deparei com uma estratégia de negociação ao ler um artigo fornecer sobre John Mauldin8217s 8220Over My Shoulder8221 serviço (que eu recomendo). O ponto crucial foi que no mercado de ursos que começou com o crash da bolha tecnológica, uma estratégia de apostas na reversão média do SampP500 gerou retornos significativos. Naturalmente eu queria testar. Por favor note, eu não estou recomendando qualquer coisa que segue. Faça sua lição de casa e fale com um profissional de investimento se você tiver dúvidas. A estratégia é ir muito tempo o SampP500 quando o mercado fecha em um máximo nos últimos 3 dias. Reverter o comércio e ir muito tempo quando o mercado fecha no mínimo nos últimos 3 dias. ETFs tornar esta estratégia relativamente fácil de comércio. SPY será nosso veículo para ser longo o SampP500 e SH será nosso veículo para ir curto. O SH começou a negociar em 06212006. Nós focalizamos nosso backtesting desse ponto até agora. Usando a função importSeries () que criamos anteriormente, obter todos os valores para SPY e SH. Spy importSeries (8220spy8221, toto, fromfrom) sh importSeries (8220sh8221, toto, fromfrom) série mesclar (espião, sh), c (8220spy. Open8221. 8220spy. Close8221 8220spy. Return8221 8220sh. Open8221 8220sh. Close8221 8220sh. Return8221) Precisamos criar algum timeSeries adicional para manter LongShort Flag 8212 nos permite saber o status atual de nossas participações. Trade Flag 8212 indica que instituímos um comércio nesta data. Strat. Returns 8212 retorno nominal para o dia com a estratégia. Dólar Valor 8212 um valor bruto do dólar da carteira assumindo um valor de 10.000 dólares em 06212006, e uma taxa de 2 transações quando o comércio. Depois de calcular a estratégia, também criaremos uma série de retorno bruto a partir da série de Montante do Dólar. F função (x) 0 x ls fapply (série 1, FUNf) Portanto, parece haver algo para essa estratégia. O retorno anual e tabelas CAPM estão perto do total. Alguns anos são melhores do que outros. Vou deixar para você para criá-los e estudá-los (principalmente para economizar espaço aqui). Há coisas para pensar: Deve-se notar que esta estratégia não é eficiente de impostos 8212 quaisquer ganhos serão tributados na taxa de ganhos de capital a curto prazo. Havia 411 negócios. Um comércio envolve a compra e venda, então 822 vezes você seria cobrado uma taxa de corretagem. Eu assumi 1 dólar por buysell 8212 o que é cobrado por Interactive Brokers. Usar alguém como TD Ameritrade custaria mais. Isso também pressupõe que você pode comprar e vender ao preço de fechamento do mercado. Algo que é possível, mas o deslizamento ocorrerá. Nunca perca uma atualização Assine os R-blogueiros para receber e-mails com as últimas postagens R. (Você não verá esta mensagem novamente.) Como Backtest uma estratégia em R Vamos explorar as capacidades backtesting de R. Em um post anterior, desenvolvemos algumas oportunidades de entrada simples para o USDCAD usando um algoritmo de aprendizado de máquina e técnicas de um Subconjunto de mineração de dados chamada aprendizagem de regra de associação. Neste post, vamos explorar como fazer um backtest completo em R usando nossas regras do post anterior e implementar lucros e parar as perdas. Permite mergulhar diretamente: Nota: o backtest é construído fora das barras de 4 horas em nosso conjunto de dados e não tem uma visão mais granular. A CAGR (taxa de crescimento anual composta) é o percentual de perda anualizada, o que significa que suaviza o crescimento em parcelas iguais a cada ano. Desde o nosso teste foi mais Vamos ver se podemos melhorar o desempenho, adicionando uma perda de parada e ter lucro. Com apenas um stop loss, o desempenho caiu. Parece que estamos sendo levados para fora de nossos comércios antes que eles são capazes de recuperar. A fim de bloquear os nossos lucros, vamos em frente e implementar um lucro take. Travar em nossos ganhos com um lucro da tomada melhorou ligeiramente o desempenho, mas não drasticamente. Permite incorporar uma perda de stop e um lucro de tomada. Agora vamos comparar a linha de base Long Short estratégia, com apenas um stop loss, apenas uma tomada de lucro, e tanto um take stop perda e ter lucro. Agora você sabe como adicionar um lucro de tomada e parar a perda, eu recomendo que você brincar com os dados e testar diferentes valores com base em seus próprios parâmetros de risco pessoal e usando suas próprias regras. Mesmo com algoritmos poderosos e ferramentas sofisticadas, é difícil construir uma estratégia bem-sucedida. Para cada boa idéia, tendemos a ter muitos mais maus. Armado com as ferramentas certas e conhecimento, você pode testar suas idéias de forma eficiente até chegar aos bons. Nós simplificamos esse processo em TRAIDE. Weve desenvolveu uma infra-estrutura de teste que permite que você veja onde estão os padrões em seus dados e em tempo real veja como eles teriam realizado sobre seus dados históricos. Bem estar liberando TRAIDE para 7 pares principais no mercado de FX com indicadores técnicos em duas semanas. Se você estiver interessado em testar o software e fornecer feedback, envie um e-mail para infoinovancetech. Temos 50 lugares disponíveis.

No comments:

Post a Comment