Tuesday 7 May 2019

Arima model in stata forex


Qualquer um usou modelos ARMA GARCH na negociação forex Estou atualmente explorando usando ARMA GARCH para prever a posição dos próximos dias. Agora estou executando alguns modelos nas últimas duas semanas. Vai demorar algum tempo para completar, então eu pensei que eu pediria à comunidade da fábrica de forex se alguém explorasse isso, mas parece ter fornecido alguns bons resultados no SPY em uma publicação que eu li no quintuitive2017082. S-for-trading e estava pensando se alguém conseguiu obter o mesmo resultado com os pares de moedas, tentei publicar meus resultados quando estiverem fazendo a computação. Registrado em outubro de 2008 Status: PIP Slayer. Gostaria de poder manter em 268 Posts Para o teste de duas semanas, parece ótimo. O teste tentou prever os próximos dias e retornou um 1, 0 ou -1, com base nesse valor, abriria um comércio longo ou nenhum comércio. O modelo armagarch leva olhares para as últimas 40 barras e escolhe o modelo de arma que tem o AIC mais baixo. Em seguida, aplique um garch 1,1 para explicar a volatilidade. A linha azul representa o retorno do preço de fechamento do gráfico EURUSD 4 hr como se você fosse comprar e manter um longo comércio. A linha verde representa o modelo ARMAGARCH no qual foi comprado um comércio longo ou curto. Isso é apenas cerca de duas semanas. O valor de 72 barras dos dados analisados ​​parece promissor. Imagem anexa (clique para ampliar) Não tenho certeza por que levar tanto tempo isso pode acontecer talvez desde que eu tenha aumentado tanto a história. Sua previsão de cada barra e, em seguida, reafirma cada barra. Executa uma série de modelos arima (0,0) - gt (5,5) para que cada barra gere algo como 35 modelos e escolha o melhor ajuste daqueles baseados no AIC. Então se adapta a um garch (0,0) para se certificar de que a volatilidade estava lá e para não ter que fazer computação adicional. Não viajo por ordens para o garch. Ganho bastante pesado, gerando o backtest. Mesmo funcionando no Linux para utilizar. Olá Depois de alguns meses de trabalho, você trouxe algo de Id interresting para dar outra tentativa aos modelos AR (F) (I) MA - () GARCH, mas eu sempre bloqueado no grande número de amostras necessárias (como 10000 para ARFIMA). Estou interessado em medir não prever. Minha decomposição wavelet me dá resultados ruins quando o volatil de repente varia, então demora algum tempo (sempre demais) para convergir novamente. Eu gostaria de ver se eu posso combinar os dois métodos (não sei como ainda). Sem ganância. Sem medo. Apenas matemática. Gostaria de compartilhar com você o que estou fazendo usando o modelo ARMA e a análise residual do modelo. Estou trabalhando no EURUSD, e estou tentando encontrar uma maneira de fazer pedidos com base no modelo ARMA. Coleta de dados, transformação de dados e montagem do modelo: estou coletando cada EOD Close do instrumento EURUSD e eu calculo a diferenciação de log para transformar esta série de tempo em um processo estacionário. Então, usando Box Jenkins, ajuste os parâmetros do modelo ARMA. Imagem anexada (clique para ampliar) Imagem anexa (clique para ampliar) Após o modelo instalado, analiso os resíduos do modelo. O processo dos resíduos do modelo é um processo estacionário e segue uma distribuição normal. Imagem anexa (clique para ampliar) Modelos ARMA para negociação Neste tutorial, vou compartilhar meu R038D e experiência comercial usando o conhecido modelo estatístico autônomo (ARMA). Há muito escrito sobre esses modelos, no entanto, eu recomendo a série de tempos introdutórios com R., que eu acho que é uma combinação perfeita entre fundo teórico leve e implementações práticas em R. Outra boa leitura é o e-book on-line Previsão: 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 usando principalmente 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 uma história 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 2017, calculamos os últimos 500 retornos diários. Usando esses 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 este 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 do 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 saber 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 às vezes o armaFit não consegue encontrar um ajuste e retorna um erro, deixando assim 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 rughar, por exemplo, fornecem uma função similar auto. arima fora da caixa. Portanto, pode-se construir sua infraestrutura em torno de um desses. 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 de um dia antes, se a previsão é negativa (lembre-se da série em que estamos operando é o retorno diário), então a posição desejada é curta, senão o tempo é longo. Agora, para construir um indicador para o teste de volta, pode-se andar a série de retorno diário e, em cada ponto, executar 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 multi-core. 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 a 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, ele 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 fornecidos em seu modelo. Além disso, é interessante ver outros números como 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, eu tenho usado a estratégia ARMAGARCH para trocar 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. wordpress201707), 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-contentuploads201708gspcInd3.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 guiar 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 Eu referente a como fazer o mesmo Além disso, você poderia me ajudar em relação aos pontos de entrada e saída do indicador gerado por você acima. Olá, esse é o meu melhor esforço (sem fornecer o próprio código-fonte) para explicar como usar o garchFit. Você pode querer tentar as outras 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 requer uma quantidade significativa de trabalho adicional. O meu único aconselhamento, que descrevi em outras postagens, é 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 modelo 8211 ARMA (p, q) e depois use o modelo para prever a direção do dia seguinte8217s. Em seguida, 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) e o 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 heteroscedasticidade. 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 do C que você está se referindo. Eu, eu mesmo, gosto bastante 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 de ARMA procuração (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 sua ARMAsearch, mas, no entanto, conseguiu muitos lucros em torno da crise do 821708, bem 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 minha memória estiver correta) por cerca de 50 anos de dados. Ele faz todo o trabalho para prever decisões próximas de 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 em grande número de decisões apenas, e talvez não seja 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 por 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, isso 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) Se assim for, como você define esses limiares 8211 Você poderia citar alguns dos motivos por que 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 assumo que sou capaz de executar os negócios no final, o que é realizável na vida real. Mais fácil é trocar os futuros (aberto 247), no entanto, é necessário fazer um teste adequado. ARMAGARCH é usado em séries temporárias 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 resposta

No comments:

Post a Comment