Sistema Comercial De Garch


Estratégia de Negociação ARIMAGARCH no Índice de Mercado de Valores da SampP500 Usando R Neste artigo, quero mostrar-lhe como aplicar todos os conhecimentos adquiridos nas postagens anteriores da análise de séries temporais para uma estratégia de negociação no índice de mercado de ações da SampP500 nos EUA. 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 a leitura das 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 uma Dia n, os dias anteriores dos retornos logarítmicos diferenciados de um índice de mercado de ações são usados ​​como uma janela para montar um modelo ARIMA e GARCH ideal. O modelo combinado é usado para fazer uma previsão para os retornos do dia seguinte. Se a predição é negativa, o estoque é curto no fechamento anterior, enquanto que se for positivo, é desejável. Se a previsão é a mesma direção que o dia anterior, nada será alterado. Para esta estratégia usei o máximo de dados disponíveis do Yahoo Finance para o SampP500. Peguei o k500, 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. Não foi implementado no backtester baseado em eventos Python até o momento. Daí 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 da Estratégia Para implementar a estratégia, vamos usar alguns dos códigos que criamos anteriormente na série de artigos de análise de séries temporais, bem como algumas novas bibliotecas, incluindo o rugarch. O 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 ARIMAGARCH. 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 próprio código não é muito complexo, embora leve algum tempo para simular se você Realizá-lo na íntegra. A primeira tarefa é instalar e importar as bibliotecas necessárias em R: Se você já possui as bibliotecas instaladas, pode simplesmente importá-las: com isso será aplicado a estratégia para o SampP500. 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 SampP500 e eliminar 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 loop a cada dia nos dados de negociação e caber um modelo ARIMA e GARCH apropriado para a janela de rolagem de Comprimento k. Dado que nós tentamos 24 ajustes ARIMA separados e se encaixam em 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 do SampP500 e selecionando os valores entre 1d e kd, onde k500 para esta estratégia: Nós usamos o Mesmo procedimento no artigo ARIMA para pesquisar todos os modelos ARMA com p e q em, com exceção de p, q0. 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 avançamos para a próxima combinação de p e q. Note-se que definimos o valor integrado de d0 (este é um d diferente para o nosso parâmetro de indexação) e, como tal, estamos realmente adaptando um modelo ARMA. Em vez de um ARIMA. O procedimento de looping nos proporcionará o melhor modelo ARMA, em termos do Critério de Informação Akaike, que podemos usar para alimentar nosso modelo GARCH: no próximo bloco de código, usaremos a biblioteca do rugarch, com o Modelo GARCH (1,1). A sintaxe para isso exige que configuremos um objeto de especificação ugarchspec que leva 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 ARMAGARCH usando o comando ugarchfit, que leva o objeto de especificação, os k retornos do SampP500 e um solucionador de otimização numérica. Optamos por 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 direção de predição de data e 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 subseqüente. 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, tal como seria, nós realmente estaríamos introduzindo 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 à frente. Descobriu que isso era mais direto usando o Python. Como não quero assumir que você tenha instalado bibliotecas especiais (como pandas), eu continuei a ser Python puro. Aqui está o breve 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 previsõesw. cc. Uma vez que isso leva uma quantidade substancial de tempo para calcular, eu forneci o arquivo completo aqui para você se descarregar: Resultados da Estratégia Agora que geramos o nosso arquivo CSV indicador, precisamos comparar seu desempenho com o amplificador de compra. Em primeiro lugar, lemos o indicador do arquivo CSV e o armazenamos como spArimaGarch: Criamos então uma interseção das datas para as previsões ARIMAGARCH e o conjunto original de retornos do SampP500. Podemos então calcular os retornos para a estratégia ARIMAGARCH multiplicando o sinal de previsão (ou -) pelo próprio retorno: depois de ter os retornos da estratégia ARIMAGARCH, podemos criar curvas de equidade tanto para o modelo ARIMAGARCH quanto para o Buy Amp. Hold. Finalmente, nós os combinamos em uma única estrutura de dados. Finalmente, podemos usar o comando xyplot para traçar as duas curvas de ações no mesmo gráfico: a curva de equidade até 6 de outubro de 2015 é a seguinte: como você pode ver, ao longo de 65 anos Período, a estratégia ARIMAGARCH superou significativamente o valor do amplificador de compra. 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 excelente desempenho ao longo de todo o período. No entanto, essa estratégia realmente teria sido negociável. Em primeiro lugar, consideramos o fato de que o modelo ARMA só foi publicado em 1951. Não foi amplamente utilizado até a década de 1970, quando a Caixa 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 GARCH em si, foi publicado pela Bollerslev em 1986. Em terceiro lugar, esse 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 SampP500 ou uma réplica do Fundo Trocado Negociado (ETF), como o 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: como você pode ver, a curva de equidade permanece abaixo de uma estratégia de compra de expansão de acumuladores por quase 3 anos, mas durante a queda no mercado de ações de 20082009 Extremamente bem. Isso faz sentido porque provavelmente haverá uma correlação serial significativa nesse período e será bem capturado 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óximas etapas Agora que acabamos de discutir a família de modelos ARIMA e GARCH, quero continuar a discussão de 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 aqui apresentamos, o que aumentará significativamente a nossa rentabilidade comercial e / ou reduzirá o risco. Aqui está a listagem completa para a geração de indicadores, backtesting e plotting: E ​​o código Python para aplicar a forecast. csv antes de reimportar: Modelos ARMA para negociação Neste tutorial, vou compartilhar meu R038D e experiência comercial usando o bem conhecido de Estatísticas de Modelo Médio Motivo Autoregressivo (ARMA). Há muito escrito sobre esses modelos, no entanto, eu recomendo a série de tempos introdutórios com a R. que eu acho é uma combinação perfeita entre fundo teórico leve e implementações práticas em R. Outra boa leitura é o online e-book Forecasting: princípios e Prática escrita por Rob Hyndman. Um especialista em previsão estatística e o autor do excelente pacote R de previsão. Começando em R, estou principalmente usando o pacote fArma, que é um bom invólucro com funcionalidade estendida em torno da função arima do pacote de estatísticas (usado no livro acima mencionado). Aqui está uma sessão simples de montagem de um modelo ARMA para os retornos diários do S038P 500: Para mais detalhes, consulte a literatura e os pacotes, eu só quero enfatizar alguns pontos: modelamos os retornos diários em vez dos preços . Existem múltiplos motivos: desta forma, as séries financeiras geralmente se tornam estacionárias, precisamos de alguma forma para 8220normalize8221 uma série, etc. Usamos a função diff e log para calcular os retornos diários em vez das porcentagens. Não só isso é uma prática padrão em estatísticas, mas também fornece uma boa aproximação aos retornos discretos. A abordagem que vou apresentar aqui é uma forma de backtesting walk-forward. Ao caminhar a série dia a dia, usaremos um histórico de certo comprimento para encontrar o melhor modelo. Então, usaremos esse modelo para prever o retorno do dia seguinte8217s. Se a predição é negativa, assumimos posição curta, caso contrário, assumimos uma posição longa. Um exemplo tornará as coisas mais claras: após o encerramento de 11 de junho de 2012, calculamos os últimos 500 retornos diários. Usando estes retornos, procuramos no espaço dos modelos ARMA e selecionamos o modelo de melhor ajuste (em relação a algumas métricas e alguns requisitos). Finalmente, usamos esse modelo para calcular a previsão para o retorno do tomorrow8217s e usar o sinal do retorno para decidir a posição apropriada. Escolhendo um bom modelo O primeiro obstáculo para este método antes que ele possa ser útil para nós, é selecionar os parâmetros do modelo. No caso de ARMA, existem dois parâmetros. Em outras palavras, há um número infinito de escolhas: (0,1), (1,0), (1,1), (2,1), etc. Como sabemos quais parâmetros usar? Uma abordagem comum em As estatísticas para quantificar a qualidade do teste de ajuste são a estatística AIC (para Akaike Information Criteria). Uma vez que o ajuste está pronto, o valor das estatísticas aic é acessível através de: Existem outras estatísticas, é claro, no entanto, geralmente os resultados são bastante semelhantes. Para resumir, tudo o que precisamos é um loop para passar por todas as combinações de parâmetros que consideramos razoáveis, por exemplo, de (0,0) a (5,5), inclusive, para cada par de parâmetros, ajuste o modelo e, finalmente, escolha o modelo com O AIC mais baixo ou alguma outra estatística. Observe que, por vezes, o armaFit não consegue encontrar um ajuste e retorna um erro, deixando o loop imediatamente. ArmaSearch lida com este problema usando a função tryCatch para capturar qualquer erro ou aviso e retornar um valor lógico (FALSE) em vez de interromper tudo e sair com um erro. Assim, podemos distinguir um retorno de função errado e normal apenas por verificar o tipo de resultado. Um pouco confuso provavelmente, mas funciona. Alguns pacotes R, previsão e rugarch, por exemplo, fornecem uma função similar auto. arima fora da caixa. Assim, pode-se construir sua infraestrutura em torno de uma delas. Previsão Uma vez que os parâmetros são selecionados, it8217s tempo para determinar a posição ao fechar. Uma maneira de fazer isso é por uma previsão um dia antes, se a predição é negativa (lembre-se da série em que estamos operando é o retorno diário), então a posição desejada é curta, senão it8217s de longa. Agora, para construir um indicador para o teste de volta, pode-se caminhar a série de retorno diário e, em cada ponto, execute as etapas que cobrimos até agora. O loop principal parece ser (abreviado de propósito): onde o histórico é o período de reflexão a considerar em cada ponto, geralmente uso 500, que é cerca de dois anos de dados. Em outras palavras, para determinar a posição em cada dia individual (o dia anterior próximo ao fechamento do dia atual determina o retorno) usamos o histórico de 500 dias, atrasado por dias atrasados. Você verá mais tarde como os atrasos entram em prática na prática. Observe que essa previsão também deve ser cercada por um bloco tryCatch. A armaSearch também possui o bom recurso para determinar se um modelo tem uma previsão ou não (prever sucesso ou não, este teste é controlado através do parâmetro forForecast). Melhorando o desempenho O número de cálculos que temos a fazer, acrescenta-se rapidamente. Por exemplo, por 10 anos de dados históricos, precisamos calcular cerca de 2.520 dias de negociação. Para cada dia, vamos ajustar e prever pelo menos 35 (3566-1, 0 a 5, tanto para o componente AR e MA, mas excluindo os modelos (0,0)). Multiplicando o número de modelos pelo número de dias, e já estamos olhando mais de 88 mil modelos que se encaixam em 8211, que são muitos cálculos. Uma maneira de melhorar o desempenho desses cálculos necessários pode ser conseguida através da utilização de CPUs de múltiplos núcleos. Minha abordagem é paralelizar a seleção do modelo, a função armaSearch no código acima. Embora esta não seja a abordagem mais eficiente, certamente é mais prática, pois também aumentará o desempenho do armaSearch quando usado de forma independente. Eu ganho8217t postar a versão final do código aqui devido ao comprimento do it8217s. Eu lhe darei o link GIST em vez disso, a Volatilidade de Modelagem com as séries temporais do GARCH Financial são aleatórias em geral. Uma das poucas propriedades que exibem é o agrupamento de volatilidade. Isso geralmente é alcançado estendendo a previsão ARMA com um modelo GARCH. Soa complexo, e os detalhes teóricos são complexos de fato, mas resulta ser bastante direto em R: É claro, também precisamos modificar todas as funções relevantes, como armaSearch. As chamadas para garchFit e prever também precisam ser tratadas através do tryCatch. Observe também que prever retorna uma matriz para modelos GARCH. O código fonte completo está disponível a partir de um GitHub Gist. S038P 500 Performance Let8217s começam com a curva de equidade da aplicação da estratégia ARMAGARCH ao longo dos 60 anos completos (desde 1950) dos dados históricos S038P 500. ARMA vs Buy-and-Hold Parece fantástico Na verdade, isso me impressionou tanto que procurei erros no código por algum tempo. Mesmo em um gráfico logarítmico, o desempenho deste método é deslumbrante 8211 CAGR de 18,87 e a estratégia ARMAGARCH atinge esse desempenho com uma redução máxima comparável de 56. Para calcular o crescimento da estratégia ARMA, primeiro precisamos do indicador diário (esse indicador leva aproximadamente Dois dias para calcular com todas as otimizações abordadas nesta publicação). A primeira coluna é a data, a segunda a posição para este dia: 1 para longo, -1 para breve, 0 para nenhum. Observe que a posição já está alinhada com o dia do retorno (é calculada no final do dia anterior), ou seja, o indicador está alinhado corretamente com os retornos 8211, não é necessário mudar para a direita através do atraso. O indicador, a primeira coluna, precisa ser multiplicado com os retornos diários S038P 500. O resto das colunas são irrelevantes e espero que seja auto-explicativo. Let8217s encerra o post com o código que carrega o indicador e traça o gráfico: Olá Apenas por curiosidade aqui, os resultados que você publicou foram produzidos examinando os retornos diários em um determinado período de lookback e depois tentando prever o retorno no dia seguinte. Você já experimentou sua estratégia ARMA em retornos semanais. Como os resultados se acumulam contra a estratégia, onde os retornos diários são alimentados em seu modelo. Além disso, é interessante ver alguns outros números, como os vencedores, por exemplo. Você está usando este modelo atualmente para trocar dinheiro real. Ótimo post e continue com o bom trabalho. Olá. Eu não tentei retornos semanais, provavelmente vale a pena olhar para ele, embora para retornos semanais eu prefiro usar um modelo levando em consideração outros recursos além de retornos. Mais adequado para um SVM ou uma Rede Neural. Sim, usei a estratégia ARMAGARCH para negociar um instrumento financeiro único (não o SPY) há mais de um ano. Esta é a principal razão pela qual estou relutante em compartilhar o código. Por último, estou olhando para atualizar a publicação com mais resumos e estatísticas de negócios, mas haven8217t feito até agora, porque eu não poderia apresentar um formato satisfatório (eu sou exigente). :) Olá, ivannp, estou extremamente grato a você Para colocar códigos e informações úteis para análise quantitativa. Eu não assisti a procedimentos e códigos organizados para R para análises quantitativas em qualquer outro lugar. Tenho visitado seu blog há muito tempo. Estou tentando seguir os códigos aqui, mas tenho medo de que eu definitivamente esteja faltando alguns passos aqui. A função de armasearch me dá arma (5,2) para 8216SPY8217, mas você está usando arma (0,2) para garchfit. Posso saber porquê. Se estou faltando algo, guie-me e você pode me enviar o código completo para prabinsethgmail. Agradeço antecipadamente oi Prabin, sempre feliz de ouvir as pessoas que gostam do blog, me inspira a não negligenciá-lo. :) O código ao qual você está se referindo é apenas uma ilustração de como usar o garchFit. O (0,2) é completamente aleatório 8211 Eu apenas escolho alguns números. Para o uso da vida real, é preciso criar uma função garchSearch, semelhante à armaSearch mostrada. É semelhante, mas há diferença: os modelos possíveis consistem em quatro elementos, os dois primeiros são (AR, MA), mas também há dois componentes GARCH, garchFit substitui o armaFit e também os resultados do garchFit são um pouco mais detalhados (Uma matriz versus um número). O código não é totalmente funcional como está. A razão pela qual eu não quero postar o código completo é que eu uso diariamente. Os resultados da execução diária no SPY estão disponíveis na página S038P 500. Possui a posição diária baseada em ARMAGARCH, bem como, a tabela de ação para o final do dia. Esse é o estado sobre ARMAGARCH, mas eu prometo que ganhei 8217t fazer o mesmo por coisas novas (SVMs estão chegando). Vou publicar a versão totalmente funcional do código, embora eu não tenha atualizado com melhorias. Oi, postagem muito interessante. Tenho uma pergunta sobre a função armaComputeForecasts que produz previsões contínuas. Quando isso produz uma previsão, a data do previsão (ou seja, o índice na linha xts correspondente) corresponde à data em que foi criada ou à data em que está prevista, ou seja, eu precisaria atrasar a prorrogação como de costume com um indicador ou Isso já é cuidado. Uma vez que o desempenho superior da ARMA parece bastante específico para o período (a grande maioria dos retornos em excesso parece ser gerada entre 1965-75), seria muito mais útil ver um gráfico de retornos cumulativos contínuos para cada um Estratégia (ou seja, mais de 3 ou 5 anos). Além disso, os retornos de ARMA são presumivelmente brutos de t-cost aqui, então a rotação da estratégia é outra consideração muito importante (você pode compartilhar o que era). Oi, no meu antigo blog (theaverageinvestor. wordpress201107), mencionei que houve um comércio em média a cada 2,35 dias. Lembro-me de contar os negócios e dividir os dias. O indicador para a série está disponível aqui: quintuitivewp-contentuploads201208gspcInd3.csv. Ele precisa ser comparado com o índice de caixa S038P 500, sem atraso, mas pode-se obter todos os tipos de estatísticas. Certamente vou fazer isso um dia, não tenho certeza quando. Com esta estratégia, não estou muito preocupado com os custos de transação. Usando uma conta regular e de varejo em Interactive Brokers, pode-se trocar uma parcela de SPY por 0,005. Ao preço atual de 140, que 8217s são insignificantes, a menos que seja feito algumas vezes por dia. Oi, seu post não é apenas interessante para ler, mas também atua como um guia para pessoas novas no campo das finanças quantitativas. Com um iniciante neste campo, seu blog parece ser uma mina de ouro. Tenho algumas perguntas, no entanto , Eu usei seu código de Armasearch em um instrumento específico e descobriu isso com os indicadores, não deu um desempenho melhor do que comprar e manter, então, eu tenho tentado encaixar no código garchFit usando o garch (1,1) como Os erros do garch, você poderia me orientar gentilmente para que eu pudesse fazer isso. Os exemplos ou links relevantes seriam muito úteis. Além disso, não entendi do seu código, como exatamente para executar o comércio, ou seja, pontos de entrada e saída, você poderia me orientar gentilmente no mesmo. Olá. Seu blog não é apenas interessante, mas também informativo para pessoas novas no mundo de Finanças quantitativas. Eu tenho algumas perguntas, usei a função de armadura para um determinado instrumento e, após testar a prova, os resultados foram inferiores para comprar e segurar, então estou tentando ajustar o garch (1,1), você poderia guia gentilmente Sobre o que fazer, também pode me ajudar em relação aos pontos de entrada e saída do indicador gerado por você. Olá, esse é meu melhor esforço (sem fornecer o próprio código fonte) para explicar como usar o garchFit. Você pode querer tentar as primeiras abordagens de arma, eu recomendaria o pacote de previsão e seu livro author8217s (otextsfpp) ou o pacote de rugisc. Ambos os pacotes fornecem uma abordagem mais científica e avançada para a seleção do modelo de arma. Aplicar as idéias neste blog na prática exige uma quantidade significativa de trabalho adicional. Meu único aconselhamento, que descrevi em outros posts, é pensar em se aplicar em prática real em cada etapa. Muito obrigado pelas excelentes apresentações que você fornece para iniciantes (como eu) em finanças quantitativas. No seu trabalho, você está caminhando as séries temporais dia a dia, encontrando o melhor modelo ARMA 8211 ARMA (p, q) e depois use o modelo para prever a direção do dia seguinte8217s. Então, para melhorar o desempenho, você usa os melhores paremeters de arma (p, q) para esse tempo com o GARCH (1,1) para criar um novo modelo e usá-lo para prever a direção do dia seguinte8217s. Então você tem um modelo com 4 parâmetros usados ​​no garchFit. Estou usando uma biblioteca GARCH diferente (não em R, está em C) e nela os parâmetros para o modelo são apenas 2 (em vez de 4): o número de parâmetros auto-regressivos (AR) eo número de média móvel (MA) parâmetros. Você poderia avisar sobre como usar seu método no meu cenário (como sempre criando um GRACH (1,1) sem considerar o ARMA (P, Q) é diferente). Parece que a razão pela qual você tem apenas 2 parâmetros para o seu modelo é porque você está tentando ajustar sua data a um modelo ARMA sem o componente de heterocedasticidade. O método GarchFit dentro da biblioteca fGarch em R permite caber em um modelo autoregressivo generalizado (daí Os 4 parâmetros) Pergunta rápida (relacionada) para você: você poderia me apontar para a biblioteca C que você está se referindo Eu, eu mesmo, sou bastante gostoso de C (como eu tenho uma arquitetura inteira construída em torno dela) e eu gostaria de incorporar Uma biblioteca de montagem de dados que permite chamar um modelo ARMA. Suas postagens são realmente ótimas e têm uma grande quantidade de informações valiosas. Eu tentei olhar para o indicador diário csv, mas it8217s não estão mais acordados. Poderia ter uma cópia para inspecionar I8217m atualmente testando o código arma completo e quer saber como avaliar os resultados corretamente antes de passar para tentar implementar o componente GARCH. Adorei ler seu blog sobre isso. Utilizei a função alternativa auto. arima () em vez da sua função ARMAsearch (muito mais lenta e mais cara), mas essa deu backtests drasticamente diferentes e apresentou desempenho pior do que Buy-and-Hold. Ele não replicou seus resultados com base em seu ARMAsearch, mas, no entanto, conseguiu muitos lucros em torno da crise 821708, assim como o seu ARMAsearch fez, mas ainda não se compara realmente. Isso foi interessante para mim. Por enquanto estou lendo o código-fonte auto. arima () e comparando-o com o ARMAsearch. Parece que você fez uma pesquisa de grade auto. arima () faz uma pesquisa local (o que explica a velocidade). Posso perguntar quais tipos de hardware você está usando hoje em dia Você faz algum cálculo de GPU Olá, feliz que você goste meu blog. Para o meu uso, acho que as CPUs da Intel oferecem desempenho e paralelização suficientes. O hardware que uso é quad-core i7 com hyperthreading, o que o torna 8220modo8221 8-way. Em tal máquina, um backtest ARMAGARCH leva menos de um dia (se a minha memória estiver correta) por cerca de 50 anos de dados. Ele faz todo o trabalho para prever decisões on-close para um dia específico (ou seja, o trabalho necessário para se preparar para um dia de negociação) em aproximadamente algumas horas. Na verdade, você está certo, a função auto. arima usa um algoritmo diferente, que não analisa todos os resultados. Da minha experiência, it8217s não é direto para replicar 100 resultados entre pacotes. Especialmente quando se envolve a distribuição dos resíduos. Notei o mesmo quando, em algum momento, tentei brevemente o pacote de rugiscas. Oi Ivan, sou um novato para as finanças matemáticas. Eu estava apenas discutindo com meu professor sobre o uso do modelo ARMA na negociação real na semana passada. Eu achei o seu modelo de detalhe muito interessante. Então eu tento estudá-lo linha a linha. Tentei imprimir o erro padrão junto com a predição e descobriu que a magnitude do erro padrão é muito maior do que a previsão. Eu estava pensando se isso colocaria muito risco na decisão individual, limitando o modelo a funcionar apenas em grande número de decisões, e talvez não fosse assim ao usar a estratégia por um curto período de tempo. A esperança pode ter sua idéia. Obrigado. Isso é um problema e já foi discutido em outros comentários. Se alguém não quiser usar esse método devido à falta de mérito estatístico, então seja ele. Uma abordagem alternativa seria desenvolver um sistema que use um método enquanto o 8220it funciona8221. Ei, ivannp, ótimo blog, obrigado. Eu tenho usado seu código para alguma pesquisa8230 você estaria disposto a publicar o código-fonte para criar a matriz do indicador Obrigado. Mclapply leva modelos, uma lista de todos os modelos (e cada modelo também é uma lista, portanto, temos uma lista de listas) queremos calcular como seu primeiro argumento, então ele chama garchAutoTryFit para cada modelo individual desta lista, passando O modelo como o primeiro argumento de it8217s. A seguinte linha adiciona um novo modelo à lista em garchAuto: modelslength (models) 1 list (orderc (p, q, r, s), distdist) Cada modelo também é uma lista, contendo a ordem (acessada via ordem) e a Distribuição (acessada via dist). Agora eu sinto que é um pouco de uma maneira feia de fazer as coisas, mas isso faz o trabalho. :) Ok8230 que faz sentido para mim, mas o que realmente está construindo o ll garchAutoTryFit e o garchAuto estão permitindo otimizar os parâmetros para a previsão Você faz com garchfit8230. Sei que o 8220data8221 ou o 8220xx8221 no código são as séries de retorno, mas eu não consigo ver como executar as funções sem uma inicial ll. Obrigado está construído dentro do garchAuto, usando min. order, max. order e alguns outros parâmetros passados ​​para a rotina pelo usuário. Se min. order for (0,0,1,1) e max. order for (5,5,1,1), garchAuto constrói um ll que contém todas as variações possíveis dentro desses limites, por exemplo, conterá (0 , 0,1,1), (0,1,1,1), etc. Por padrão, a rotina escolhe o melhor modelo dentro (0,0,1,1) e (5,5,1,1). Ok8230 obrigado. Eu tenho tentado executar o garchAuto usando uma série de retorno como a entrada xx, mas só recebo o blog NULL Muito informativo, estou planejando usar uma estratégia similar usando auto. arima (), sem sucesso até agora, apenas começando. 8211 Qual foi o seu CAGR aproximado usando apenas modelos ARIMA sem Garch 8211 Como você decide qual posição tomar: você compra assim que a previsão no retorno é positiva e vende se 8211 negativo ou você implementa limiares mínimos (para evitar Vendendo ou comprando se a diferença for muito pequena) Em caso afirmativo, como você define esses limiares 8211 Você poderia citar algumas das razões pelas quais você não calcula a série original. É uma condição crítica IYO 8211. Você consegue sobre como eu poderia Prossiga com a minha (atualmente) estratégia sem êxito de auto. arima () ARIMA sem o GARCH não é muito bom no SPY. Nem em outros ETFs. Mesmo com o GARCH, precisa de trabalho adicional para encontrar algo comercial. Eu suponho que eu sou capaz de executar os negócios no final, o que é realizável na vida real. Mais fácil é negociar o futuro (aberto 247), no entanto, é necessário fazer uma prova adequada. ARMAGARCH é usado em séries temporais estacionárias. Os retornos são estacionários, os preços de fechamento não são. Eu sou um comerciante novato que procura aplicar um diploma em estatísticas para o mundo dos mercados financeiros. Eu vi que você não queria compartilhar o código há alguns anos atrás, mas se houver algum formuláriocript que eu possa examinar e usar para aprender melhor R, então ficaria mais do que grato se você pudesse enviá-lo no meu caminho. Obrigado novamente pelo post, foi excelente. Deixe uma resposta Cancelar respostaQuantum Financier escreveu um artigo interessante 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. Two model are examined: one using the historical volatility and another using the Garch(1,1) Volatility Forecast. The mean-reversion strategy is modeled with RSI(2): Long when RSI(2), and Short otherwise. The trend-following strategy is modeled with SMA 50200 crossover: Long when SMA(50) gt SMA(200), and Short otherwise. I want show how to implement these ideas using the backtesting library in the Systematic Investor Toolbox. Following code loads historical prices from Yahoo Fiance and compares performance of the Buy and Hold, Mean-Reversion, and Trend-Following strategies using the backtesting library in the Systematic Investor Toolbox : Next, lets create a strategy that switches between mean-reversion and trend-following strategies based on historical market volatility. Next, lets create a GARCH(1,1) Volatility Forecast. I would recommend reading following articles for anyone who wants to find what GARCH is all about or to refresh their knowledge: GARCH(1,1) by by David Harper 8211 a very good introductory article with lots of visual diagrams. Practical Issues in Univariate GARCH Modelling by Y. Chalabi, D. Wurtz 8211 step by step example of fitting GARCH(1,1) model with full R code. Basic Introduction to GARCH by Quantum Financier 8211 is a series of posts that goes in to the details and assumptions of GARCH and EGARCH. There are a few R packages to fit GARCH models. I will consider garch function from tseries package and garchFit function from fGarch package. The garch function from tseries package is fast but does not always find solution. The garchFit function from fGarch package is slower but does converge more consistently. To demonstrate the speed difference between garch function and garchFit function I created a simple benchmark: The garchFit function is on average 6 times slower than garch function. So to forecast volatility I will try to use garch function whenever it can find a solution and garchFit function otherwise. Now, lets create a strategy that switches between mean-reversion and trend-following strategies based on GARCH(1,1) volatility forecast. The switching strategy that uses GARCH(1,1) volatility forecast performed slightly better than the one that uses historical volatility. There many different approaches you can take to incorporate forecasting into your models and trading strategies. R has a very rich set of packages to model and forecast time series. Here are some examples that I found interesting: To view the complete source code for this example, please have a look at the bt. volatility. garch() function in bt. test. r at github .

Comments

Popular Posts