Sistema de comércio quantmod
sistema de comércio Quantmod
Obter através da App Store Leia esta publicação em nosso aplicativo!
R: Backtesting uma estratégia de negociação. Iniciantes para quantmod e R.
Eu sou muito novo para a R e tentando testar uma estratégia que já programei no WealthLab.
Várias coisas que eu não entendo (e isso não funciona obviamente :)
Eu não consigo os Close Prices muito bem em um vetor. ou algum tipo de vetor, mas ele começa com a estrutura e eu realmente não entendo o que essa função faz. É por isso que a minha série [, 1] provavelmente não funciona.
n & lt; - nrow (series) 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.
Começando com a segunda pergunta.
Então, se você quiser trabalhar no objeto xts real, você precisa usar get.
Sobre sua primeira pergunta - eu não acho que você realmente precisa puxar os dados como um vetor - o objeto xts é uma matriz indexada por data e é fácil de trabalhar. Se você ainda deseja obter os dados que você pode usar.
Agora, para que você comece com um simples teste de respostas de estratégias, sugerirei trabalhar nas seguintes etapas.
defina sua estratégia. 2. Crie uma matriz ou adicione uma coluna ao seu objeto xts que representará sua posição para cada dia. 1 por muito tempo, 0 para nenhuma posição e -1 para breve (mais tarde você pode jogar com o número de alavancagem). 3. multiplique cada dia retorna com a posição e você obterá seu vetor de retorno de estratégia. 4. examine os resultados - minha recomendação é PerformanceAnalytics.
Estratégia simples - compre quando estiver perto da SMA20, venda abaixo.
sistema de comércio Quantmod
Obter através da App Store Leia esta publicação em nosso aplicativo!
R quantmod trading sinais e simulação.
Gostaria de usar o pacote quantmod da R para testar alguns indicadores técnicos para negociação de ações. Meu objetivo é executar automaticamente um indicador sobre um símbolo de estoque e o resultado me diz qual seria o meu desempenho se eu tivesse seguido rigorosamente o indicador (por exemplo MACD).
O site quantmod é muito interessante, no entanto, parece que o autor parou de atualizá-lo há alguns anos atrás.
O que posso fazer até agora: obter símbolos de estoque através do pacote "quantmod" usando as funções de traçado e interpretá-los visualmente. por exemplo. Usando o MACD, um sinal comercial é quando as duas linhas se cruzam.
O que não posso fazer (mas gostaria de fazer): - indicando visualmente automaticamente o sinal (exibindo), e. com uma seta ou qualquer símbolo gráfico no enredo - a simulação: troca automaticamente (compra ou venda) cada vez que o sinal chega e me diz no final se este indicador técnico é útil para o estoque ou índice específico.
Aqui está um código básico para o planejamento:
Espero que eu possa explicar o que estou procurando.
Desde já, obrigado.
Você pode querer ver o borrão e os pacotes quantstrat. A. o. A função chart. Posn () irá fornecer-lhe o gráfico que você está procurando, e inclui curvas PL e DD também.
Existem várias peças para o que você está perguntando. Vou tentar responder peça por peça.
indicando visualmente automaticamente o sinal (exibindo), e. com uma seta ou qualquer símbolo gráfico na trama.
Você pode traçar símbolos com par (new = TRUE); pontos(. ) . Confira? Pch.
a simulação: troca automática (compra ou venda)
Não está claro se você quer simular negócios ou negociar. Se o último, então, é outra bola de cera para se conectar à sua plataforma de negociação. Se for o primeiro, o quantstrat fornece uma infra-estrutura genérica para modelo e estratégias quantitativas baseadas em sinal de backtest.
cada vez que o sinal chega.
De onde vem o seu dado? Estes são alguns outros fios que você precisa conectar para si mesmo; não será "automático".
e me diz no final se este indicador técnico é útil.
QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 7 de outubro de 2015.
Neste artigo, quero mostrar-lhe como aplicar todo o conhecimento adquirido nas postagens anteriores da análise de séries temporais para uma estratégia de negociação no índice de mercado de ações S & amp; P500.
Veremos que, ao combinar os modelos ARIMA e GARCH, podemos superar de forma significativa uma abordagem "Buy-and-Hold" a longo prazo.
Visão geral da estratégia.
A idéia da estratégia é relativamente simples, mas se você quiser experimentar com isso, eu sugiro muito ler as postagens anteriores na análise de séries temporais para entender o que você está modificando!
A estratégia é realizada de forma contínua:
Para cada dia, $ n $, os dias anteriores de $ k $ dos retornos logarítmicos diferenciados de um índice de mercado de ações são usados como uma janela para ajustar um ótimo modelo ARIMA e GARCH. O modelo combinado é usado para fazer uma previsão para os retornos do dia seguinte. Se a previsão é negativa, o estoque é curto no fechamento anterior, enquanto que se for positivo é desejado. Se a predição é a mesma direção que o dia anterior, nada será alterado.
Para essa estratégia usei o máximo de dados disponíveis do Yahoo Finance para o S & amp; P500. Eu peguei $ k = 500 $, mas este é um parâmetro que pode ser otimizado para melhorar o desempenho ou reduzir a redução.
O backtest é realizado de forma direta e vetorial usando R. Ele não foi implementado no backtester baseado em eventos Python até o momento. Assim, o desempenho alcançado em um sistema de comércio real seria provavelmente um pouco menor do que você poderia alcançar aqui, devido à comissão e derrapagem.
Implementação estratégica.
Para implementar a estratégia, vamos usar alguns dos códigos que criamos anteriormente na série de artigos de análise da série temporal, bem como algumas novas bibliotecas, incluindo o rugarch, que me foi sugerido por Ilya Kipnis no QuantStrat Trader.
Passarei pela sintaxe de uma forma passo a passo e apresentarei a implementação completa no final, bem como um link para o meu conjunto de dados para o indicador ARIMA + GARCH. Eu incluí o último porque me levou alguns dias no meu PC dekstop para gerar os sinais!
Você deve ser capaz de replicar meus resultados na íntegra, pois o código em si não é muito complexo, embora leve algum tempo para simular se você executá-lo na íntegra.
A primeira tarefa é instalar e importar bibliotecas necessárias em R:
Se você já possui as bibliotecas instaladas, basta importá-las:
Com isso feito, vamos aplicar a estratégia ao S & amp; P500. Podemos usar quantmod para obter dados que datam de 1950 para o índice. O Yahoo Finance usa o símbolo "^ GPSC".
Podemos então criar os retornos logarítmicos diferenciados do "Preço de fechamento" do S & amp; P500 e retirar o valor inicial de NA:
Precisamos criar um vetor, previsões para armazenar nossos valores de previsão em datas específicas. Definimos o comprimento do comprimento anterior para ser igual ao comprimento dos dados de negociação que temos menos $ k $, o comprimento da janela:
Nesta fase, precisamos fazer um ciclo todos os dias nos dados de negociação e ajustar um modelo adequado ARIMA e GARCH para a janela de rolamento de comprimento $ k $. Dado que tentamos 24 ajustes ARIMA separados e ajustamos um modelo GARCH, para cada dia, o indicador pode levar muito tempo para gerar.
Usamos o índice d como uma variável de loop e loop de $ k $ para o comprimento dos dados de negociação:
Em seguida, criamos a janela de rolagem, levando os retornos S & P500 e selecionando os valores entre $ 1 + d $ e $ k + d $, onde $ k = 500 $ para esta estratégia:
Usamos o mesmo procedimento que no artigo ARIMA para pesquisar todos os modelos ARMA com $ p \ in \ $ e $ q \ in \ $, com a exceção de $ p, q = 0 $.
Nós envolvemos a chamada arimaFit em um bloco de tratamento de exceção R tryCatch para garantir que, se não conseguirmos um ajuste para um valor particular de $ p $ e $ q $, ignoramos e seguimos para a próxima combinação de $ p $ e $ q $.
Tenha em atenção que definimos o valor "integrado" de $ d = 0 $ (este é um $ d $ diferente para o nosso parâmetro de indexação!) E, como tal, nós somos realmente um modelo ARMA, em vez de um ARIMA.
O procedimento de looping nos fornecerá o modelo ARMA "melhor", em termos do Critério de Informação Akaike, que podemos usar para alimentar nosso modelo GARCH:
No próximo bloco de código, vamos usar a biblioteca do rugarch, com o modelo GARCH (1,1). A sintaxe para isso exige que configuremos um objeto de especificação ugarchspec que leve um modelo para a variância e a média. A variância recebe o modelo GARCH (1,1) enquanto a média leva um modelo ARMA (p, q), onde $ p $ e $ q $ são escolhidos acima. Também escolhemos a distribuição sged para os erros.
Uma vez que escolhemos a especificação, realizamos o ajuste real do ARMA + GARCH usando o comando ugarchfit, que leva o objeto de especificação, os retornos $ k $ do S & amp; P500 e um solucionador numérico de otimização. Escolhemos usar o híbrido, que tenta diferentes solucionadores para aumentar a probabilidade de convergência:
Se o modelo GARCH não converge, simplesmente estabelecemos o dia para produzir uma previsão "longa", o que é claramente um palpite. No entanto, se o modelo converge, então emitimos a data e a direção de previsão de amanhã (+1 ou -1) como uma seqüência de caracteres em que ponto o ciclo está fechado.
Para preparar a saída para o arquivo CSV, criei uma seqüência de caracteres que contém os dados separados por uma vírgula com a direção de previsão para o dia seguinte:
O penúltimo passo é a saída do arquivo CSV para o disco. Isso nos permite levar o indicador e usá-lo em software de backtesting alternativo para análise posterior, se assim desejar:
No entanto, há um pequeno problema com o arquivo CSV como está no momento. O arquivo contém uma lista de datas e uma previsão para a direção de amanhã. Se nós estivéssemos a carregar isso no código de backtest abaixo, como seria o caso, nós realmente estaríamos apresentando um viés avançado porque o valor de previsão representaria dados não conhecidos no momento da predição.
Para explicar isso, precisamos simplesmente mover o valor previsto um dia antes. Descobriu que isso era mais direto usando o Python. Como não quero assumir que você tenha instalado bibliotecas especiais (como os pandas), eu mantive o Python puro.
Aqui está o pequeno script que traz esse procedimento. Certifique-se de executá-lo no mesmo diretório que o arquivo forecast. csv:
Neste ponto, agora temos o arquivo de indicador corrigido armazenado em forecast_new. csv. Uma vez que isso leva uma quantidade substancial de tempo para calcular, forneci o arquivo completo aqui para você se baixar:
Resultados da Estratégia.
Agora que geramos o nosso arquivo CSV indicador, precisamos comparar seu desempenho com "Comprar e aguardar".
Em primeiro lugar, lemos o indicador do arquivo CSV e o armazenamos como spArimaGarch:
Em seguida, criamos uma interseção das datas para as previsões ARIMA + GARCH e o conjunto original de retornos da S & P500. Podemos então calcular os retornos para a estratégia ARIMA + GARCH multiplicando o sinal de previsão (+ ou -) pelo próprio retorno:
Uma vez que temos os retornos da estratégia ARIMA + GARCH, podemos criar curvas de equidade para o modelo ARIMA + GARCH e "Comprar e aguardar". Finalmente, nós os combinamos em uma única estrutura de dados:
Finalmente, podemos usar o comando xyplot para traçar as duas curvas de equidade no mesmo gráfico:
A curva patrimonial até 6 de outubro de 2015 é a seguinte:
Curva de capital da estratégia ARIMA + GARCH vs "Comprar e manter" para o S & P500 a partir de 1952.
Como você pode ver, ao longo de um período de 65 anos, a estratégia ARIMA + GARCH superou significativamente "Buy & amp; Hold". No entanto, você também pode ver que a maior parte do ganho ocorreu entre 1970 e 1980. Observe que a volatilidade da curva é bastante mínima até o início dos anos 80, altura em que a volatilidade aumenta significativamente e os retornos médios são menos impressionantes.
Claramente, a curva de equidade promete ótimo desempenho durante todo o período. No entanto, essa estratégia realmente teria sido negociável?
Em primeiro lugar, consideremos o fato de que o modelo ARMA só foi publicado em 1951. Não foi amplamente utilizado até a década de 1970, quando Box & amp; Jenkins discutiu isso em seu livro.
Em segundo lugar, o modelo ARCH não foi descoberto (publicamente!) Até o início dos anos 80, pela Engle, e o próprio GARCH foi publicado por Bollerslev em 1986.
Em terceiro lugar, este "backtest" realmente foi realizado em um índice de mercado de ações e não um instrumento fisicamente negociável. Para obter acesso a um índice como este, teria sido necessário negociar futuros S & P500 ou uma réplica Exchange Traded Fund (ETF), como SPDR.
Por isso, é realmente apropriado aplicar esses modelos a uma série histórica antes da invenção? Uma alternativa é começar a aplicar os modelos a dados mais recentes. Na verdade, podemos considerar o desempenho nos últimos dez anos, de 1 de janeiro de 2005 a hoje:
Curva de capital da estratégia ARIMA + GARCH vs "Comprar e manter" para o S & P500 de 2005 até hoje.
Como você pode ver, a curva de equidade permanece abaixo de um Buy & amp; Mantenha a estratégia por quase 3 anos, mas durante a queda no mercado de ações de 2008/2009, ela supera demais. Isso faz sentido porque é provável que haja uma correlação serial significativa nesse período e será bem capturada pelos modelos ARIMA e GARCH. Uma vez que o mercado se recuperou após 2009 e entra no que parece ser mais uma tendência estocástica, a performance do modelo começa a sofrer mais uma vez.
Note-se que esta estratégia pode ser facilmente aplicada a diferentes índices do mercado de ações, ações ou outras classes de ativos. Eu o encorajo a tentar pesquisar outros instrumentos, pois você pode obter melhorias substanciais nos resultados aqui apresentados.
Próximos passos.
Agora que terminamos de discutir a família de modelos ARIMA e GARCH, quero continuar a discussão da análise de séries temporais considerando processos de memória longa, modelos de espaço estadual e séries temporais cointegradas.
Estas áreas subsequentes de séries temporais nos apresentarão modelos que podem melhorar nossas previsões além das que eu mostrei aqui, o que aumentará significativamente nossa lucratividade comercial e / ou reduzirá o risco.
Aqui está a listagem completa para geração de indicadores, backtesting e traçado:
E o código Python para aplicar a forecast. csv antes de reimportar:
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
sistema de comércio Quantmod
Modelagem Financeira Quantitativa & amp; Quadro de negociação para R.
O pacote quantmod para R é projetado para auxiliar o comerciante quantitativo no desenvolvimento, teste e implantação de modelos de negociação com base na estatistica.
Qual é o quantmod.
Um ambiente de prototipagem rápida, onde os comerciantes quant podem explorar e construir modelos comerciais de forma rápida e limpa.
O quantmod não é.
Um substituto para qualquer coisa estatística. Não possui rotinas de modelagem "novas" nem ferramentas de análise para falar. Ele agora oferece gráficos que não estão atualmente disponíveis em outros lugares em R, mas a maioria de tudo mais é mais um invólucro para o que você já conhece e ama sobre o idioma e os pacotes que você usa atualmente.
o quantmod torna a modelagem mais fácil, removendo os problemas de fluxo de trabalho repetitivo em torno de gerenciamento de dados, interfaces de modelagem e análise de desempenho.
Explore o que é atualmente possível nos exemplos.
Obter através da App Store Leia esta publicação em nosso aplicativo!
R quantmod trading sinais e simulação.
Gostaria de usar o pacote quantmod da R para testar alguns indicadores técnicos para negociação de ações. Meu objetivo é executar automaticamente um indicador sobre um símbolo de estoque e o resultado me diz qual seria o meu desempenho se eu tivesse seguido rigorosamente o indicador (por exemplo MACD).
O site quantmod é muito interessante, no entanto, parece que o autor parou de atualizá-lo há alguns anos atrás.
O que posso fazer até agora: obter símbolos de estoque através do pacote "quantmod" usando as funções de traçado e interpretá-los visualmente. por exemplo. Usando o MACD, um sinal comercial é quando as duas linhas se cruzam.
O que não posso fazer (mas gostaria de fazer): - indicando visualmente automaticamente o sinal (exibindo), e. com uma seta ou qualquer símbolo gráfico no enredo - a simulação: troca automaticamente (compra ou venda) cada vez que o sinal chega e me diz no final se este indicador técnico é útil para o estoque ou índice específico.
Aqui está um código básico para o planejamento:
Espero que eu possa explicar o que estou procurando.
Desde já, obrigado.
Você pode querer ver o borrão e os pacotes quantstrat. A. o. A função chart. Posn () irá fornecer-lhe o gráfico que você está procurando, e inclui curvas PL e DD também.
Existem várias peças para o que você está perguntando. Vou tentar responder peça por peça.
indicando visualmente automaticamente o sinal (exibindo), e. com uma seta ou qualquer símbolo gráfico na trama.
Você pode traçar símbolos com par (new = TRUE); pontos(. ) . Confira? Pch.
a simulação: troca automática (compra ou venda)
Não está claro se você quer simular negócios ou negociar. Se o último, então, é outra bola de cera para se conectar à sua plataforma de negociação. Se for o primeiro, o quantstrat fornece uma infra-estrutura genérica para modelo e estratégias quantitativas baseadas em sinal de backtest.
cada vez que o sinal chega.
De onde vem o seu dado? Estes são alguns outros fios que você precisa conectar para si mesmo; não será "automático".
e me diz no final se este indicador técnico é útil.
QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 7 de outubro de 2015.
Neste artigo, quero mostrar-lhe como aplicar todo o conhecimento adquirido nas postagens anteriores da análise de séries temporais para uma estratégia de negociação no índice de mercado de ações S & amp; P500.
Veremos que, ao combinar os modelos ARIMA e GARCH, podemos superar de forma significativa uma abordagem "Buy-and-Hold" a longo prazo.
Visão geral da estratégia.
A idéia da estratégia é relativamente simples, mas se você quiser experimentar com isso, eu sugiro muito ler as postagens anteriores na análise de séries temporais para entender o que você está modificando!
A estratégia é realizada de forma contínua:
Para cada dia, $ n $, os dias anteriores de $ k $ dos retornos logarítmicos diferenciados de um índice de mercado de ações são usados como uma janela para ajustar um ótimo modelo ARIMA e GARCH. O modelo combinado é usado para fazer uma previsão para os retornos do dia seguinte. Se a previsão é negativa, o estoque é curto no fechamento anterior, enquanto que se for positivo é desejado. Se a predição é a mesma direção que o dia anterior, nada será alterado.
Para essa estratégia usei o máximo de dados disponíveis do Yahoo Finance para o S & amp; P500. Eu peguei $ k = 500 $, mas este é um parâmetro que pode ser otimizado para melhorar o desempenho ou reduzir a redução.
O backtest é realizado de forma direta e vetorial usando R. Ele não foi implementado no backtester baseado em eventos Python até o momento. Assim, o desempenho alcançado em um sistema de comércio real seria provavelmente um pouco menor do que você poderia alcançar aqui, devido à comissão e derrapagem.
Implementação estratégica.
Para implementar a estratégia, vamos usar alguns dos códigos que criamos anteriormente na série de artigos de análise da série temporal, bem como algumas novas bibliotecas, incluindo o rugarch, que me foi sugerido por Ilya Kipnis no QuantStrat Trader.
Passarei pela sintaxe de uma forma passo a passo e apresentarei a implementação completa no final, bem como um link para o meu conjunto de dados para o indicador ARIMA + GARCH. Eu incluí o último porque me levou alguns dias no meu PC dekstop para gerar os sinais!
Você deve ser capaz de replicar meus resultados na íntegra, pois o código em si não é muito complexo, embora leve algum tempo para simular se você executá-lo na íntegra.
A primeira tarefa é instalar e importar bibliotecas necessárias em R:
Se você já possui as bibliotecas instaladas, basta importá-las:
Com isso feito, vamos aplicar a estratégia ao S & amp; P500. Podemos usar quantmod para obter dados que datam de 1950 para o índice. O Yahoo Finance usa o símbolo "^ GPSC".
Podemos então criar os retornos logarítmicos diferenciados do "Preço de fechamento" do S & amp; P500 e retirar o valor inicial de NA:
Precisamos criar um vetor, previsões para armazenar nossos valores de previsão em datas específicas. Definimos o comprimento do comprimento anterior para ser igual ao comprimento dos dados de negociação que temos menos $ k $, o comprimento da janela:
Nesta fase, precisamos fazer um ciclo todos os dias nos dados de negociação e ajustar um modelo adequado ARIMA e GARCH para a janela de rolamento de comprimento $ k $. Dado que tentamos 24 ajustes ARIMA separados e ajustamos um modelo GARCH, para cada dia, o indicador pode levar muito tempo para gerar.
Usamos o índice d como uma variável de loop e loop de $ k $ para o comprimento dos dados de negociação:
Em seguida, criamos a janela de rolagem, levando os retornos S & P500 e selecionando os valores entre $ 1 + d $ e $ k + d $, onde $ k = 500 $ para esta estratégia:
Usamos o mesmo procedimento que no artigo ARIMA para pesquisar todos os modelos ARMA com $ p \ in \ $ e $ q \ in \ $, com a exceção de $ p, q = 0 $.
Nós envolvemos a chamada arimaFit em um bloco de tratamento de exceção R tryCatch para garantir que, se não conseguirmos um ajuste para um valor particular de $ p $ e $ q $, ignoramos e seguimos para a próxima combinação de $ p $ e $ q $.
Tenha em atenção que definimos o valor "integrado" de $ d = 0 $ (este é um $ d $ diferente para o nosso parâmetro de indexação!) E, como tal, nós somos realmente um modelo ARMA, em vez de um ARIMA.
O procedimento de looping nos fornecerá o modelo ARMA "melhor", em termos do Critério de Informação Akaike, que podemos usar para alimentar nosso modelo GARCH:
No próximo bloco de código, vamos usar a biblioteca do rugarch, com o modelo GARCH (1,1). A sintaxe para isso exige que configuremos um objeto de especificação ugarchspec que leve um modelo para a variância e a média. A variância recebe o modelo GARCH (1,1) enquanto a média leva um modelo ARMA (p, q), onde $ p $ e $ q $ são escolhidos acima. Também escolhemos a distribuição sged para os erros.
Uma vez que escolhemos a especificação, realizamos o ajuste real do ARMA + GARCH usando o comando ugarchfit, que leva o objeto de especificação, os retornos $ k $ do S & amp; P500 e um solucionador numérico de otimização. Escolhemos usar o híbrido, que tenta diferentes solucionadores para aumentar a probabilidade de convergência:
Se o modelo GARCH não converge, simplesmente estabelecemos o dia para produzir uma previsão "longa", o que é claramente um palpite. No entanto, se o modelo converge, então emitimos a data e a direção de previsão de amanhã (+1 ou -1) como uma seqüência de caracteres em que ponto o ciclo está fechado.
Para preparar a saída para o arquivo CSV, criei uma seqüência de caracteres que contém os dados separados por uma vírgula com a direção de previsão para o dia seguinte:
O penúltimo passo é a saída do arquivo CSV para o disco. Isso nos permite levar o indicador e usá-lo em software de backtesting alternativo para análise posterior, se assim desejar:
No entanto, há um pequeno problema com o arquivo CSV como está no momento. O arquivo contém uma lista de datas e uma previsão para a direção de amanhã. Se nós estivéssemos a carregar isso no código de backtest abaixo, como seria o caso, nós realmente estaríamos apresentando um viés avançado porque o valor de previsão representaria dados não conhecidos no momento da predição.
Para explicar isso, precisamos simplesmente mover o valor previsto um dia antes. Descobriu que isso era mais direto usando o Python. Como não quero assumir que você tenha instalado bibliotecas especiais (como os pandas), eu mantive o Python puro.
Aqui está o pequeno script que traz esse procedimento. Certifique-se de executá-lo no mesmo diretório que o arquivo forecast. csv:
Neste ponto, agora temos o arquivo de indicador corrigido armazenado em forecast_new. csv. Uma vez que isso leva uma quantidade substancial de tempo para calcular, forneci o arquivo completo aqui para você se baixar:
Resultados da Estratégia.
Agora que geramos o nosso arquivo CSV indicador, precisamos comparar seu desempenho com "Comprar e aguardar".
Em primeiro lugar, lemos o indicador do arquivo CSV e o armazenamos como spArimaGarch:
Em seguida, criamos uma interseção das datas para as previsões ARIMA + GARCH e o conjunto original de retornos da S & P500. Podemos então calcular os retornos para a estratégia ARIMA + GARCH multiplicando o sinal de previsão (+ ou -) pelo próprio retorno:
Uma vez que temos os retornos da estratégia ARIMA + GARCH, podemos criar curvas de equidade para o modelo ARIMA + GARCH e "Comprar e aguardar". Finalmente, nós os combinamos em uma única estrutura de dados:
Finalmente, podemos usar o comando xyplot para traçar as duas curvas de equidade no mesmo gráfico:
A curva patrimonial até 6 de outubro de 2015 é a seguinte:
Curva de capital da estratégia ARIMA + GARCH vs "Comprar e manter" para o S & P500 a partir de 1952.
Como você pode ver, ao longo de um período de 65 anos, a estratégia ARIMA + GARCH superou significativamente "Buy & amp; Hold". No entanto, você também pode ver que a maior parte do ganho ocorreu entre 1970 e 1980. Observe que a volatilidade da curva é bastante mínima até o início dos anos 80, altura em que a volatilidade aumenta significativamente e os retornos médios são menos impressionantes.
Claramente, a curva de equidade promete ótimo desempenho durante todo o período. No entanto, essa estratégia realmente teria sido negociável?
Em primeiro lugar, consideremos o fato de que o modelo ARMA só foi publicado em 1951. Não foi amplamente utilizado até a década de 1970, quando Box & amp; Jenkins discutiu isso em seu livro.
Em segundo lugar, o modelo ARCH não foi descoberto (publicamente!) Até o início dos anos 80, pela Engle, e o próprio GARCH foi publicado por Bollerslev em 1986.
Em terceiro lugar, este "backtest" realmente foi realizado em um índice de mercado de ações e não um instrumento fisicamente negociável. Para obter acesso a um índice como este, teria sido necessário negociar futuros S & P500 ou uma réplica Exchange Traded Fund (ETF), como SPDR.
Por isso, é realmente apropriado aplicar esses modelos a uma série histórica antes da invenção? Uma alternativa é começar a aplicar os modelos a dados mais recentes. Na verdade, podemos considerar o desempenho nos últimos dez anos, de 1 de janeiro de 2005 a hoje:
Curva de capital da estratégia ARIMA + GARCH vs "Comprar e manter" para o S & P500 de 2005 até hoje.
Como você pode ver, a curva de equidade permanece abaixo de um Buy & amp; Mantenha a estratégia por quase 3 anos, mas durante a queda no mercado de ações de 2008/2009, ela supera demais. Isso faz sentido porque é provável que haja uma correlação serial significativa nesse período e será bem capturada pelos modelos ARIMA e GARCH. Uma vez que o mercado se recuperou após 2009 e entra no que parece ser mais uma tendência estocástica, a performance do modelo começa a sofrer mais uma vez.
Note-se que esta estratégia pode ser facilmente aplicada a diferentes índices do mercado de ações, ações ou outras classes de ativos. Eu o encorajo a tentar pesquisar outros instrumentos, pois você pode obter melhorias substanciais nos resultados aqui apresentados.
Próximos passos.
Agora que terminamos de discutir a família de modelos ARIMA e GARCH, quero continuar a discussão da análise de séries temporais considerando processos de memória longa, modelos de espaço estadual e séries temporais cointegradas.
Estas áreas subsequentes de séries temporais nos apresentarão modelos que podem melhorar nossas previsões além das que eu mostrei aqui, o que aumentará significativamente nossa lucratividade comercial e / ou reduzirá o risco.
Aqui está a listagem completa para geração de indicadores, backtesting e traçado:
E o código Python para aplicar a forecast. csv antes de reimportar:
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
Комментарии
Отправить комментарий