Wednesday 29 November 2017

Variação média móvel


Mover médias em R Para o melhor de meu conhecimento, R não tem uma função interna para calcular médias móveis. Usando a função de filtro, no entanto, podemos escrever uma função curta para médias móveis: Podemos então usar a função em qualquer dado: mav (dados) ou mav (data, 11) se quisermos especificar um número diferente de pontos de dados Do que o padrão 5 plotando obras como esperado: plot (mav (dados)). Além do número de pontos de dados sobre os quais a média, também podemos alterar o argumento de lados das funções de filtro: sides2 usa ambos os lados, sides1 usa apenas valores passados. Compartilhe este: Navegação do borne Observação do comentário Navegação do comentárioWant para fazer alguma análise técnica rápida, em profundidade do preço das ações de Apple usando R Theres um pacote para aquele O pacote de Quantmod permite que você desenvolva, testando, e implante de modelos negociando estatisticamente baseados. Ele fornece a infra-estrutura para download / importação de dados de uma variedade de locais, analisar esses dados e produzir gráficos que ajudam a determinar as tendências estatísticas. Eu apreciei o gajo de Digitas que chama este pacote a minha atenção em um comentário recente. Também notei que a Revolution Analytics havia destacado o pacote em sua página de finanças. Na verdade, eu tinha me deparado com quantmod há alguns meses - e instantaneamente me entusiasmou com o poder da R. Para te dar uma idéia do uso típico, o seguinte cria um gráfico de ações dos últimos três meses de dados da Apple. GetSymbols (quotAAPLquot) chartSeries (AAPL, subset39last 3 months39) addBBands () A função getSymbols é usada para recuperar dados de estoque. Os dados podem ser originados em vários locais. No exemplo acima, estamos obtendo um único estoque, a Apple. Se você deseja fazer o download de várias cotações de ações diferentes, você pode fazê-lo em um único comando. Depois de ter recuperado dados de estoque, você pode se concentrar em subconjuntos de datas rapidamente. Você também pode mesclar dados para ver comparações. O comando chartSeries cria o gráfico ilustrado acima. Ele captura uma grande quantidade de informações, a data, preço de abertura e fechamento e volume de negociação para cada dia. Finalmente, a chamada addBBands () adiciona Bollinger Bands ao gráfico. Informalmente, isso equivale a uma linha indicando média móvel e duas linhas um desvio padrão acima e abaixo dessa média móvel. Para os não iniciados, os indicadores técnicos (e sobreposições) podem ser divididos em quatro categorias - Tendência, Volatilidade, Momentum e Volume. Os disponíveis no Quantmod estão listados abaixo. O pacote de quantmod para R é projetado para auxiliar o comerciante quantitativo no desenvolvimento, teste e implantação de modelos de negociação estatisticamente baseados. É um ambiente de prototipagem rápida onde os entusiastas podem explorar vários indicadores técnicos com o mínimo esforço. Ele oferece recursos de gráficos que não está disponível em outros lugares no pacote R. Quantmod torna a modelagem mais fácil e análise simples. Este artigo pretende apresentar algumas funções de quantmod usando dados de mercado de amostra. As características de quantmod são apresentadas em três seções, download de dados, gráficos, indicadores técnicos e outras funções. Sem muito esforço, vamos ver o uso do pacote de quantmod. Baixando dados Uma vez que o pacote de quantmod é instalado e a biblioteca é carregada, execute o seguinte comando para obter os dados do estoque de maçã no console de thr. Trading Médias móveis com menos Whipsaws O sistema de média móvel é melhor de longe. Primeiro, podemos alavancá-lo 2: 1 (assim, trazendo CAGR até aproximadamente 13) e ainda, nosso drawdown máximo vai ser comparável ao buy and hold. Além disso, no mercado apenas 70 8211 menos risco e, provavelmente, os retornos podem ser ainda mais impulsionado por colocar o dinheiro para trabalhar em ativos alternativos. Um problema com este tipo de sistemas são whipsaws. O sistema funciona bem quando o preço permanece longe da média móvel. No entanto, em estreita proximidade, pode-se ter para entrar / sair em sucessão perder dinheiro no caminho. Uma maneira de resolver esse problema é usar uma 8220line8221 alternativa para acionar as saídas (ou as entradas, para esse assunto). Poderia ser uma banda de porcentagem, mas esse número quase não é universal. Melhor trazer volatilidade no retrato. Vamos fazer algo mais robusto como ilustração. Primeiro, aplicamos a média móvel não aos preços, mas aos retornos (uma interpretação de David Varadi8217s Error Adjusted Momentum). O 8220cushioned8221 sistema vai longo quando a média torna-se positivo, mas para sair, deixa alguma almofada abaixo da média móvel. O que nós ganhamos Despesa anual média Para comparar maçãs com maçãs, adicionamos dois sistemas. O primeiro (dublado EA) usa retornos ajustados de erro para calcular o SMA, mas entra e sai quando o SMA cruza a linha 0. A versão 8220cushioned8221 é o sistema implementado pelo código acima. Mesmo depois de ter em conta que as novas estratégias permanece mais tempo no mercado, parece haver uma ligeira melhoria. Mas isso não é o ponto. A abordagem 8220cushioned8221 fez 4 transações no total 8211 que saiu para os dois mercados de baixa. That8217s cerca de 4 comércios. A abordagem não amortecida tinha 80 negócios. Missão cumprida em outras palavras. Comentários Oi, você poderia explicar a lógica por trás da fórmula retornos ajustados adj. rets sqrt (runSum (retsrets, 10) / 9). Também onde o peso 10/9 vem de Por que não 10/10 Graças devo estar faltando alguma coisa em seu código: rets são positivos e negativos, mas adj. rets são todos positivos (você quadrado os rets), portanto, sma é sempre positivo E, portanto, nunca há um sinal de venda. Seu Adj. rets vai mais alto como os retornos ficam menores (ou seja, pico adj. rets em direção ao final dos mercados de urso). Eu apenas perdi um sinal em algum lugar Não executando R, mas implementando isso como um teste em meu próprio sistema e não obtendo o que eu estava esperando. Ps. Nunca ouvi falar de usar um simples SMA 200 como este (provavelmente por causa de todos os whipsaws), então teria esperado que você testasse uma cruz de morte / cruz de ouro (SMA 50/200) em vez disso. A cruz de ouro / morte é quase comparável aos seus resultados de EA relatados (tanto para o CAGR como para o máximo) por meu teste8230, mas eu gostaria de fazer o EA trabalhar para ver por mim mesmo. Ah! Acho que você queria colocar 8220rets8221 no cálculo sma em vez de 8220adj. rets8221. It8217s não é claro a partir deste código R o que o período é para o seu rets (ou seja, um retorno de um dia 1 mês de retorno), mas se eu usar um retorno de 21 barras com dados diários, recebo um EA que é comparável ao seu (CAGR 9,5, exposição 75, DD máx. 19,3). Mas até agora não pode obter EA amortecido acima de 10 CAGR, por isso vai trabalhar mais para ver se I8217m corretamente duplicando seu algoritmo. Bem, eu tinha um bug no código 8211 ver os comentários, eo código. Me desculpe. Sim, pode-se usar os retornos diretamente, mas de minha experiência é melhor para normalizá-los para a volatilidade. Uma maneira de fazê-lo, é tomar um SD curto (ou SD usando 0 para a média, como eu) e dividir o retorno por esse valor. Lets Get Rich Veja como E R pode enriquecer o seu conhecimento dos mercados financeiros Confira A minha nova classe de análise quantitativa e técnica com quantmod e dados financeiros: 25 cupom para o meu novo curso Udemy - Ciência de Dados Prático: Analisando dados de mercado de ações com R pacotes utilizados neste passo a passo - dados financeiros e ferramentas de modelagem - Este tutorial tem duas partes: A primeira parte é uma introdução muito básica para o quantmod e, se você havent usado antes e precisa de acesso básico para dados diários do mercado de ações e gráficos, Então você está dentro para um deleite enorme. A segunda parte vai mais fundo em finanças quantitativas, alavancando quantmod para acessar todas as ações que compõem o NASDAQ 100 Index para construir um vocabulário de movimentos de mercado e tentar prever se os dias de negociação volumne será maior ou menor. Quantmod significa Quantitative Financial Modeling e Trading Framework for R Ele tem muitos recursos para verificar o arquivo de ajuda para uma cobertura completa ou o site oficial Quantmods. Vamos ver como a Amazon tem feito ultimamente: A função getSymbols baixou dados diários indo todo o caminho de volta a janeiro de 2007. A função barChart exibe os dados de uma forma limpa e agradável seguindo um parâmetro baseado em tema (veja o arquivo de ajuda para mais). Não é ruim para 2 linhas de código. Ele fica melhor - vamos ver como é fácil exibir um gráfico de ações completo com indicadores em apenas 3 linhas de código: quantmod usa o Yahoo para obter seus dados financeiros. No exemplo acima GSPC representa o SampP 500 Index. A maioria dos símbolos de produtos financeiros são diretos como MSFT para a Microsoft. Para índices e outros símbolos esotéricos, consulte finance. yahoo/lookup para ver como eles o abreviaram. ChartSeries é direto e irá traçar qualquer símbolo que tenha sido baixado para a memória usando getSymbols. AddBBands função irá plot Bollinger Bands em torno de sua série de preços. Há muitas maneiras de personalizar a exibição, para alguns exemplos, consulte a Galeria Quantmod. Indo mais fundo em finanças quantitativas, vamos projetar um sistema baseado em padrões para prever se um determinado produto financeiro verá um aumento ou uma queda no volume no dia de negociação a seguir. Bem use quantmod para baixar todas as ações que compõem o Índice NASDAQ 100. Em seguida, bem mesclar juntos todas as nossas séries de tempo para sincronizá-los. Isto irá reunir os dados por tempo e preencher todos os dados em falta com NA s: Ser avisado, que isso leva um pouco de tempo como quantmod irá acelerar o download. Cada símbolo é carregado na memória sob o nome do símbolo, portanto, temos mais de 100 novos objetos carregados na memória cada um com anos de dados de mercado diários. Como estas são séries temporais independentes, temos de unir tudo e preencher os dados em falta para que tudo encaixe bem em um quadro de dados. Bem, use a função merge. xts para mesclar por tempo todos esses objetos em um quadro de dados: Agora que temos um punhado de anos de dados de mercado para cada estoque atualmente no NASDAQ 100 Index. Precisamos fazer algo com ele. Iriam criar uma variedade de medidas entre pontos de preço e volume. A idéia é quantificar movimentos de ações como padrões, subtraindo um dia em relação a um anterior. Bem, crie uma série de diferenças: 1 dia versus 2 dias atrás 1 dia versus 3 dias atrás 1 dia versus 5 dias atrás 1 dia versus 20 dias atrás (semelhante a uma média móvel de 20 dias) Criando a variável de resultado Este é o coração do sistema E é um pouco tedioso para segurar. O que estamos tentando prever Se o próximo volume de dias de negociação para um símbolo escolhido será maior ou menor do que o dia de negociação atual (isso não deve ser o campo de volume de FISV. Poderia ser o alto ou fechar de qualquer outro símbolo para Que temos dados): Shift o resultado estava tentando prever um dia de negociação usando a função lag. Isso irá adicionar o campo de volume do nosso símbolo de resultado com um atraso de 1 dia de negociação, de modo que o seu na mesma linha como os preditores. Confiaremos neste valor para fins de treinamento e teste. Um valor de 1 significa que o volume subiu e um 0. que ele foi para baixo: Lançar o campo de data para digitar data como é atualmente de tipo de caractere e classificar por ordem decrescente: Aqui está a função de criação de padrão. Isso levará nossos dados de mercado cru e dimensioná-lo para que possamos comparar qualquer símbolo com qualquer outro símbolo. Em seguida, subtrai as diferentes faixas de dias solicitadas pelo parâmetro days usando as chamadas diff e lag e as coloca todas na mesma linha junto com o resultado. Para tornar as coisas ainda mais compatíveis, o parâmetro roundByScaler pode arredondar os resultados. Chame a função com as seguintes diferenças e reduza-a para 2 pontos decimais (isso demora um pouco para ser executado): Eliminamos a última linha do nosso quadro de dados, uma vez que não tem uma variável de resultado (no futuro):

No comments:

Post a Comment