Negociando e viajando e outras coisas.
Uma estratégia de negociação que podemos adotar é primeiro modelar o mercado, prever os retornos para o próximo dia de negociação e, em seguida, ir longo ou curto com base em se os retornos previstos são positivos ou negativos. Modelar o mercado, você diz? Que tolice! Quem pode possivelmente esperar capturar milhões de decisões individuais (humanas e de máquina), que elas mesmas ocorrem em resposta a milhões de estímulos externos, que interagem uns com os outros de formas misteriosas e mágicas para levar a resultados do mercado.
Mas isso não é o que um modelo faz - nós construímos um modelo para capturar o essencial do que impulsiona o processo em que nos interessamos. Resumimos os detalhes que achamos desnecessários ou complica demais nossa vida. Esses detalhes podem ser controversos, já que alguém pode considerá-los críticos e seu modelo inútil se ele não capturá-los. Eu pessoalmente não tenho muita fé na previsão de retornos, mas graças à tecnologia moderna, podemos testar o sucesso das nossas previsões. E, além disso, se os macroeconomistas podem tentar modelar economias inteiras, por que escolher um graduado que tenta modelar o mercado de ações?
Estarei usando os modelos ARMA (Auto Regressive Moving Average) e GARCH (Generalized Auto Regressive Conditionet Heteroskedasticity) em combinação para calcular as previsões. Isso foi feito anteriormente pelo Quintuitive, que administra um blog extremamente informativo e útil. Aprendi muito de seus escritos e devo muito da minha aprendizagem a ele. Ele também hospedou generosamente o código para testar esses modelos. Usei seu código com algumas modificações muito pequenas, que eu detalharei mais detalhadamente.
Antes disso, uma breve introdução ao ARMA e ao GARCH está em ordem. Estamos usando o modelo ARMA (com os parâmetros p-q otimizados a serem otimizados) para especificar a média adicional do retorno do mercado de ações eo modelo GARCH (1,1) para especificar a variação condicional desses retornos. Condicional em que, você pergunta? Condicional no conjunto de informações com o qual oferecemos o modelo. Então, por exemplo, digamos que temos dados de estoque de 2001-01-01 a 2005-01-01. Se hoje for 2004-12-01, a previsão para amanhã será baseada nos retornos de hoje e em uma janela predeterminada de retornos de estoque, por exemplo nos últimos 500 dias. Por que criamos uma janela para o conjunto de informações, em vez de usar todos os dados disponíveis? Isto é para permitir-nos ser mais flexíveis na determinação do processo que estamos tentando modelar - para permitir que ele evolua em vez de apenas atualizar com cada novo ponto de dados. Ele permite que o modelo seja mais responsivo após a mudança estrutural no Processo Gerador de Dados (DGP). Este artigo fornece mais informações sobre como selecionar o conjunto de informações.
O modelo ARMA (p, q) consiste em uma parte auto-regressiva e uma parte média móvel, com p termos auto-regressivos e q termos médios móveis. Os valores de p e q também são referidos como a ordem do modelo. O modelo ARMA é bom para situações de modelagem em que um sistema é vulnerável a choques exógenos e inexplicados (um mercado de ações!), Mas também mostra comportamento de reversão média (você disse que o mercado de ações?). A parte da média móvel ajuda a modelar os choques exógenos para o retorno do mercado e a parte auto-regressiva nos permite torná-lo significar-reverter. O bit de reversão média também é o motivo pelo qual é melhor ter uma janela rolante para o nosso conjunto de informações.
O modelo GARCH (1,1) é útil para modelar séries temporais quando a variância hoje é uma função de alguma variância anterior. Isso ajuda a modelar o & # 8216; grupo de volatilidade & # 8217; nós vemos no mercado de ações, onde os períodos de alta volatilidade são agrupados um ao redor do outro e demorar algum tempo a decair. Existem muitas variações do modelo ARCH (o GARCH é apenas um deles), alguns dos quais podem ser mais adequados para emparelhamento com ARMA, mas eu não conheço os mesmos, então não os usei. Aqui é um papel fácil de ler em modelos ARCH.
Um bom livro didático que encontrei para entender e implementar esses modelos é a Análise de séries temporais e suas aplicações: com exemplos de R.
Na próxima publicação, vou passar pelo código publicado pela Quintuitive para testar as previsões feitas por este modelo.
estratégia comercial da Garch
Obter através da App Store Leia esta publicação em nosso aplicativo!
Como negociar a volatilidade?
Estou analisando a volatilidade dos retornos das ações financeiras e digamos que eu tenho um modelo bastante bom para prever a volatilidade dos retornos das ações nos nossos dias. Então, digamos por razões de simplicidade, eu tenho um GARCH (1,1). Com este modelo, eu previu a volatilidade amanhã e agora quero trocar com isso. A volatilidade me diz o quanto o estoque retorna e, portanto, o estoque em si irá "mudar" / flutuar. Se eu tiver a volatilidade e se eu tiver certeza da probabilidade de minha correção, como devo trocar isso? Devo eu, e. investir em um estrondo? E se sim, como devo determinar as melhores opções / opções que eu deveria usar?
EDIT: Então, minha pergunta básica é: eu tenho o valor da previsão de volatilidade e sei que há certas combinações de opções para trocas em alta e baixa volatilidade, mas como posso conectar essas estratégias ao meu valor previsto, ao meu valor real Eu calculo?
Uma vez que você está falando sobre o uso da volatilidade das ações, você poderia usar apenas a estratégia straddle em longo ou curto.
Vou responder apenas com a teoria sobre as estratégias de negociação.
Se você é 100% certo (sabemos que isso não é possível, mas vamos tomar isso como uma suposição apenas por causa da matéria teórica) da volatilidade, você pode seguir duas maneiras:
Alta volatilidade: você ficará há muito tempo, isso significa que você compraria uma chamada e uma opção de venda com preços similares para tirar proveito de qualquer direção.
Baixa Volatilidade: você pode ser curto em um straddle, isso significa que você venderia ambos, peça uma opção de venda com preços realmente semelhantes e ganhe o prêmio das opções.
Uma coisa que está faltando nesta discussão - apenas compre o straddle se sua previsão de volatilidade futura realizada for maior do que a volatilidade implícita para a qual as estradas estão atualmente sendo vendidas. No entanto, ter uma previsão de um dia antes não é muito bom sem saber pelo menos o caminho esperado de volatilidade implícita com preço de opções, pois a volatilidade implícita não é uma constante.
Ao comprar ou vender seu straddle, você quer se certificar de que é delta-neutral. É assim que você escolhe a greve, ou o tempo das compras.
Quanto ao que outros instrumentos funcionam melhor, existem "swaps de variância" citados pelos corretores, que são derivados lineares sobre a variância realizada no futuro. Pode também valer a pena examinar as ETPs listadas em vários índices de volatilidade, como os futuros VIX, ou VIX, se você estiver confortável com eles. Existem inúmeras sutilezas para o preço do índice VIX e todos os índices relacionados.
Não se esqueça dos buracos de liquidez e dos custos de transação. Você pode usar estruturas mais complicadas, para negociar a volatilidade; No entanto, todos eles vêm com seus próprios problemas. Você precisa se concentrar em todos os custos e calcular a sua vantagem contra a sua previsão e tanto a entrada como a saída para as estradas mais possíveis outros fatores de risco. Concentre-se em estrangulamentos ATM para começar.
Investidor sistemático.
Blog de Investidores Sistemáticos.
Negociação usando a Previsão de volatilidade do Garch.
O Quantum Financier escreveu um artigo interessante, o Regime Switching System Using Volatility Forecast. O artigo apresenta um algoritmo elegante para alternar entre as estratégias de retorno médio e tendência seguindo a volatilidade do mercado. Dois modelos são examinados: um usando a volatilidade histórica e outro usando a previsão de volatilidade Garch (1,1). A estratégia de reversão média é modelada com RSI (2): Long quando RSI (2), e Short, de outra forma. A estratégia de tendência seguinte é modelada com cronômetro SMA 50/200: Longo quando SMA (50) & gt; SMA (200) e Short caso contrário.
Quero mostrar como implementar essas idéias usando a biblioteca backtesting na caixa de ferramentas Systematic Investor.
O código seguinte carrega os preços históricos do Yahoo Fiance e compara o desempenho das estratégias de Compra e retenção, Mean-Reversion e Trend-Following usando a biblioteca backtesting na Systematic Investor Toolbox:
Em seguida, vamos criar uma estratégia que mude entre as estratégias de retorno médio e tendência seguindo a volatilidade histórica do mercado.
Em seguida, vamos criar uma previsão de volatilidade GARCH (1,1). Eu recomendaria ler os seguintes artigos para quem quer encontrar o que GARCH é ou para atualizar seus conhecimentos:
Existem alguns pacotes R para se adequarem aos modelos GARCH. Considerarei a função garch do pacote tseries e da função garchFit do pacote fGarch. A função garch do pacote tseries é rápida, mas nem sempre encontra solução. A função garchFit do pacote fGarch é mais lenta, mas converge mais consistentemente. Para demonstrar a diferença de velocidade entre a função garch e a função garchFit, criei um benchmark simples:
A função garchFit é, em média, 6 vezes mais lenta do que a função garch. Então, para prever a volatilidade, vou tentar usar a função garch sempre que possa encontrar uma solução e a função garchFit de outra forma.
Agora, vamos criar uma estratégia que mude entre as estratégias de reversão média e tendência seguindo a previsão de volatilidade GARCH (1,1).
A estratégia de comutação que usa a previsão de volatilidade GARCH (1,1) foi melhorada do que a volatilidade histórica.
Há muitas abordagens diferentes que você pode tomar para incorporar a previsão em seus modelos e estratégias de negociação. R tem um conjunto muito rico de pacotes para modelar e prever séries temporais. Aqui estão alguns exemplos que eu achei interessante:
Para ver o código-fonte completo para este exemplo, dê uma olhada na função bt. volatility. garch () no bt. test. r no github.
Compartilhar isso:
Relacionados.
Pós-navegação.
Deixe uma resposta Cancelar resposta.
Apenas um leve esclarecimento: usei o Garch para tentar calibrar o significado das previsões de outras pessoas e # 8212; Eu também não estou fazendo nenhuma previsão.
Pat, obrigado por esclarecimentos. Eu atualizei a postagem.
Obrigado pela postagem.
A estratégia parece boa à primeira vista. Embora quando eu olho mais de perto, parece seguir muito bem o índice (ou comprar e segurar ...) quando os tempos são bons e as bordas mais altas e # 8220; apenas & # 8221; de evitar as reduções, com um aumento distinto que vem do período de crise de 2008, que pode ser considerado como não padronizado.
Obrigado por seu excelente blog.
Como eu mudo o código para que eu possa usar um arquivo csv (Date, O, H, L, C, V) para ler os dados em vez de yahoo?
getSymbols (tickers, src = & # 039; yahoo & # 039 ;, from = & # 039; 1970-01-01 & # 039 ;, env = dados, auto. assign = T)
para (i em ls (dados)) dados [[i]] = adjustOHLC (dados [[i]], use. Adjusted = T)
Obrigado pela ajuda.
Obrigado por ler meu blog. Existe uma função getSymbols. csv no pacote quantmod que lê dados do arquivo csv local.
Mais uma vez, uma postagem muito interessante!
No entanto, tenho uma pergunta sobre o período de tempo que é usado para calcular a classificação de volatilidade.
Se eu entender este exemplo corretamente, olhamos nos últimos 21 dias e classificamos eles em comparação com os últimos 252 dias?
Se eu estiver correto, acredito que isso tenha alguns efeitos colaterais indesejados. Isso significaria que, nos anos de 2003 a 2006 (quando a volatilidade era muito baixa), esse sistema iria comercializar metade do tempo um sistema destinado a períodos de alta volatilidade. Isso também significaria que, durante os períodos altamente voláteis de 2007 a 2009, metade do tempo seria negociar um sistema destinado a baixa volatilidade.
Análise de séries temporais para dados financeiros VI - Modelo GARCH e previsão de retorno do SPX.
Nesta mini série sobre modelagem da Time Series para dados financeiros, até agora usamos AR, MA e uma combinação desses modelos nos preços dos ativos para tentar modelar como nosso ativo se comporta. Descobrimos que conseguimos modelar certos períodos de tempo bem com esses modelos e falharam em outros momentos.
Isso ocorreu devido à acumulação de volatilidade ou heterocedasticidade. Nesta publicação, discutiremos a heterocedasticidade condicional, levando-nos ao nosso primeiro modelo condicional heterossegástico, conhecido como ARCH. Então, vamos discutir extensões para o ARCH, levando-nos ao famoso modelo de Heterosqueticidade condicional autorregressiva generalizada da ordem p, q, também conhecido como GARCH (p, q). O GARCH é usado extensivamente no setor financeiro, pois muitos preços dos ativos são condicionais heterossegativos.
Vamos fazer um breve recapitulo primeiro:
Consideramos os seguintes modelos até agora nesta série (recomenda-se ler as séries em ordem se você ainda não fez isso):
Agora estamos no último pedaço do quebra-cabeça. Precisamos de um modelo para examinar a heterocedasticidade condicional em séries financeiras que exibem a acumulação de volatilidade.
O que é heterocedasticidade condicional?
Existe heterocedasticidade condicional no financiamento, porque os retornos dos ativos são voláteis.
Uma coleção de variáveis aleatórias é heterossicástica se houver subconjuntos de variáveis dentro do conjunto maior que tenham variância diferente das demais variáveis.
Considere um dia em que os mercados de ações sofrem uma queda substancial. O mercado entra em modo de pânico, os sistemas automatizados de gerenciamento de riscos começam a obter suas posições longas vendendo suas posições e tudo isso leva a uma queda adicional nos preços. Um aumento na variação da queda inicial de preços leva a uma maior volatilidade descendente significativa.
Ou seja, um aumento na variação está correlacionado em série a um aumento adicional na variação em tal período de "venda". Ou olhando para o outro lado, um período de variação aumentada é condicional a uma venda inicial. Assim, dizemos que tais séries são condicionais heterocedasticas.
As séries condicionalmente heterossejadas (CH) não são estacionárias, pois sua variação não é constante no tempo. Um dos aspectos desafiadores da série heterossegativa condicional é as parcelas ACF de uma série com volatilidade que ainda pode parecer uma realização de ruído branco discreto estacionário.
Como podemos incorporar CH em nosso modelo? Uma maneira poderia ser criar um modelo AR para a variância em si - um modelo que realmente explica as mudanças na variância ao longo do tempo usando valores passados da variância.
Esta é a base do modelo Heteroskedastic condicional autorregressivo (ARCH).
Modelos Autoregressivos Condicionalmente Heteroskedastic - ARCH (p)
O modelo ARCH (p) é simplesmente um modelo AR (p) aplicado à variância de uma série temporal.
ARCH (1) é dado por:
A série de tempo real é dada por:
onde w (t) é ruído branco.
Quando aplicar ARCH (p)?
Digamos que nós encaixamos um modelo de AR (p) e os resíduos parecem quase o ruído branco, mas estamos preocupados com a decadência da p lag em um gráfico ACF da série. Se acharmos que podemos aplicar AR (p) ao quadrado de resíduos também, então temos uma indicação de que um processo ARCH (p) pode ser apropriado.
Note-se que o ARCH (p) só deve ser aplicado em uma série que tenha já possuído um modelo apropriado adequado para deixar os resíduos como ruído branco discreto. Uma vez que só podemos dizer se o ARCH é apropriado ou não ao esquadrinhar os resíduos e examinar o ACF, também precisamos garantir que a média dos resíduos seja zero.
O ARCH só deve ser aplicado em séries que não tenham tendências ou efeitos sazonais, isto é, que não possui correlação serial (evidente). O ARIMA é frequentemente aplicado a tal série, momento em que o ARCH pode ser um bom ajuste.
Observe que a série temporal se parece com o ruído branco. No entanto, vejamos o que acontece quando traçamos o quadrado da série.
Agora, o ACF e o PACF parecem mostrar significância no intervalo 1, indicando que um modelo AR (1) para a variância pode ser apropriado.
Uma pergunta óbvia a perguntar nesta etapa é se vamos aplicar um processo AR (p) à variância, por que não é um modelo MA (q) em média móvel? Ou um modelo misto, como ARMA (p, q)?
Esta é realmente a motivação para o modelo ARCH generalizado, conhecido como GARCH.
Modelos Autoregressivos Heterosquizados Condicionados Generalizados - GARCH (p, q)
Assim como ARCH (p) é AR (p) aplicado à variância de uma série temporal, o GARCH (p, q) é um modelo ARMA (p, q) aplicado à variância de uma série temporal. O AR (p) modela a variância dos resíduos (erros quadrados) ou simplesmente nossa série temporal ao quadrado. A porção MA (q) modela a variância do processo.
O modelo GARCH (1,1) é:
(a + b) deve ser inferior a 1 ou o modelo é instável. Podemos simular um processo GARCH (1, 1) abaixo.
Mais uma vez, note que, em geral, este processo parece muito parecido com o ruído branco, no entanto, dê uma olhada quando visualizamos a série de eps quadrados.
Há evidências substanciais de um processo condicionalmente heterosquimático através da decadência de atrasos sucessivos. O significado dos atrasos tanto no ACF como no PACF indicam que precisamos dos componentes AR e MA para o nosso modelo. Vamos ver se podemos recuperar nossos parâmetros de processo usando um modelo GARCH (1, 1). Aqui fazemos uso da função arch_model a partir do pacote ARCH.
Podemos ver que os parâmetros verdadeiros se enquadram nos respectivos intervalos de confiança.
Aplicação ao Financial Time Series.
Agora, aplique o procedimento a uma série de tempo financeiro. Aqui vamos usar os retornos do SPX. O processo é como se segue:
Iterate através de combinações de modelos ARIMA (p, d, q) para se adequarem melhor às nossas séries temporais. Escolha as encomendas do modelo GARCH de acordo com o modelo ARIMA com menor AIC. Ajuste o modelo GARCH (p, q) para nossa série temporal. Examine os resíduos do modelo e os resíduos quadrados para autocorrelação.
Aqui, primeiro tentamos ajustar o SPX para um processo ARIMA e encontrar a melhor ordem.
aic: -11323.07 | ordem: (3, 0, 3)
Uma vez que já tomamos o log de retornos, devemos esperar que nosso componente integrado d seja igual a zero, o que ele faz. Achamos que o melhor modelo é ARIMA (3,0,3). Agora, traçamos os resíduos para decidir se possuem evidência de comportamento condicional heterossexual.
Achamos que os resíduos se parecem com ruído branco. Vejamos o quadrado dos resíduos.
Podemos ver evidências claras de autocorrelação em resíduos quadrados. Vamos caber um modelo GARCH e ver como ele faz.
Vamos traçar os resíduos novamente.
As parcelas parecem uma realização de um processo discreto de ruído branco, indicando um bom ajuste. Vamos traçar um quadrado de resíduos para ter certeza.
Temos o que parece ser uma realização de um processo discreto de ruído branco, indicando que "explicamos" a correlação serial presente nos resíduos quadrados com uma mistura apropriada de ARIMA (p, d, q) e GARCH (p, q).
Próximas etapas - Estratégia de troca de exemplo.
Estamos agora no ponto da nossa análise de séries temporais, onde estudamos ARIMA e GARCH, permitindo-nos combinar esses modelos com um índice de mercado de ações e determinar se conseguimos um bom ajuste ou não.
O próximo passo é realmente produzir previsões de futuros valores de retorno diário dessa combinação e usá-la para criar uma estratégia básica de negociação para a S & P500.
Visão geral da estratégia.
Procuremos criar uma estratégia simples usando nosso conhecimento até agora sobre os modelos ARIMA e GARCH. A idéia dessa estratégia é a seguinte:
Ajustar um modelo ARIMA e GARCH todos os dias no log de retornos S & amp; P 500 para dias T anteriores. Use o modelo combinado para fazer uma previsão para o retorno do próximo dia. Se a predição for positiva, compre o estoque e, se negativo, reduza o estoque no dia de hoje fechar Se a previsão é igual ao dia anterior, então não faça nada.
Implementação estratégica.
Vamos começar escolhendo uma janela apropriada Nos dias anteriores, vamos usar para fazer uma previsão. Vamos usar T = 252 (1 ano), mas este parâmetro deve ser otimizado para melhorar o desempenho ou reduzir a redução.
Agora tentaremos gerar um sinal de negociação para o comprimento (dados) - T dias.
Para acompanhar a nossa estratégia, vejamos todos os dias os dados de negociação e adaptemos um modelo ARIMA e GARCH adequado à janela de rolamento do comprimento 252. Definimos as funções para caber ARIMA e GARCH acima (Dado que tentamos 32 ARIMA separados se adapta a um modelo GARCH, para cada dia, o indicador pode levar muito tempo para gerar)
Nota: O backtest não tem como ver comissão ou atraso, portanto, o desempenho alcançado em um sistema comercial real seria menor que o que você vê aqui.
Resultados da Estratégia.
Agora que geramos nossos sinais, precisamos comparar seu desempenho com 'Buy and Hold': quais seriam nossos retornos se simplesmente comprarmos o S & amp; P 500 no início do período de backtest.
Nós achamos que o modelo supera a estratégia ingênua de compra e retenção. No entanto, o modelo não funciona bem o tempo todo, você pode ver que a maioria dos ganhos aconteceu durante curtas durações em 2000-2001 e 2008. Parece que existem certas condições de mercado quando o modelo está muito bem.
Em períodos de alta volatilidade, ou quando S & amp; P 500 tiveram períodos de "liquidação", como 2000-2002 ou o acidente de 2008-09, a estratégia é extremamente boa, possivelmente porque nosso modelo GARCH captura bem a volatilidade condicional . Durante os períodos de tendência de alta em S & P500, como a corrida de touro de 2002-2007, o modelo executa a par com S & amp; P 500.
Na corrida de touro atual de 2009, o modelo apresentou-se mal em comparação com S & amp; P 500. O índice se comportou como o que parece ser mais uma tendência estocástica, a performance do modelo sofrida nessa duração.
Existem algumas ressalvas aqui: não contamos por derrapagens ou custos de negociação aqui, o que significativamente consumirá lucros. Além disso, realizamos um backtest em um índice de mercado de ações e não um instrumento negociável. Idealmente, devemos realizar a mesma modelagem e backtest nos futuros S & amp; P500 ou um Exchange Traded Fund (ETF), como o SPY.
Esta estratégia pode ser facilmente aplicada a outros índices do mercado de ações, outras regiões, ações ou outras classes de ativos.
Você deve tentar pesquisar outros instrumentos, jogar com os parâmetros da janela e ver se você pode fazer melhorias nos resultados apresentados aqui. Outras melhorias na estratégia podem incluir a compra / venda apenas se os retornos previstos forem mais ou menos que um certo limiar, incorporando variação de previsão na estratégia, etc.
Se você encontrar estratégias interessantes, participe da nossa concorrência, a QuantQuest e obtenha ganhos nas suas estratégias!
Ao bater palmas mais ou menos, você pode nos indicar quais são as histórias que realmente se destacam.
Equipe Auquan.
A Auquan pretende envolver pessoas de diversas origens para aplicar as habilidades de seus respectivos campos para desenvolver estratégias de negociação de alta qualidade. Acreditamos que pessoas extremamente talentosas equipadas com conhecimento e atitude adequados podem projetar algoritmos de negociação bem-sucedidos.
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 2018.
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 2018 é 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:
Equity curve of ARIMA+GARCH strategy vs "Buy & Hold" for the S&P500 from 2005 until today.
As you can see the equity curve remains below a Buy & Hold strategy for almost 3 years, but during the stock market crash of 2008/2009 it does exceedingly well. This makes sense because there is likely to be a significant serial correlation in this period and it will be well-captured by the ARIMA and GARCH models. Once the market recovered post-2009 and enters what looks to be more a stochastic trend, the model performance begins to suffer once again.
Note that this strategy can be easily applied to different stock market indices, equities or other asset classes. I strongly encourage you to try researching other instruments, as you may obtain substantial improvements on the results presented here.
Próximos passos.
Now that we've finished discussing the ARIMA and GARCH family of models, I want to continue the time series analysis discussion by considering long-memory processes, state-space models and cointegrated time series.
These subsequent areas of time series will introduce us to models that can improve our forecasts beyond those I've presented here, which will significantly increase our trading profitability and/or reduce risk.
Here is the full listing for the indicator generation, backtesting and plotting:
And the Python code to apply to forecasts. csv before reimporting:
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de 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.
No comments:
Post a Comment