Forex Mecânico
Negociação no mercado de câmbio usando estratégias de negociação mecânicas.
Usando o R no Algorithmic Trading: caracterização simples de séries temporais. Parte um.
Na semana passada, usamos o pacote estatístico R para analisar uma matriz de características do sistema de IS / OS e derivar algumas conclusões simples sobre as correlações históricas de IS / OS. Hoje vamos usar o R para fazer uma análise mais fundamental que deve ser feita antes da geração do sistema. Esta análise corresponde à caracterização básica da série temporal financeira, que nos fornece algumas informações fundamentais sobre os símbolos que vamos comercializar. Ao fazer essa análise, poderemos descobrir onde poderia ser mais fácil desenvolver estratégias algorítmicas tradicionais de busca alfa e se existem algumas coisas (um viés fundamental a longo prazo) dentro de um determinado símbolo. Neste primeiro tutorial, abordaremos algumas características estatísticas básicas de séries temporais financeiras, se houver alguma característica útil que você achar que está faltando, por favor poste um comentário com sua observação (eu certamente as incluirei nas próximas partes).
Antes de mais nada, devemos garantir que nossos dados estejam contidos em um arquivo csv amigável para R. Queremos ter colunas Open / High / Low / Close, bem como uma coluna Date que contenha os horários de abertura das velas em um formato adequado para R (por exemplo 1986-03-23). Lembre-se que R precisa ter cabeçalhos de coluna adequados, então a primeira linha de nosso csv deve ler algo como & ldquo; Data, Abrir, Alto, Baixo, Fechar & # 8221 ;. É importante que os dados sejam formatados dessa maneira, pois usaremos outras bibliotecas que exigem essa formatação expressa (como quantmod) nos próximos posts desta série (quando realizaremos uma análise mais avançada, como o expoente de Hurst). estimativas). Certifique-se de ter instalado a biblioteca do  e1071 R antes de prosseguir, pois precisaremos de alguns cálculos estatísticos básicos. Uma vez que você tenha seus dados prontos, você pode agora carregá-los em R e plotar para confirmar se ele está carregado corretamente (note que vamos aprender como plotar gráficos de velas mais bonitos quando usamos quantmod:
R cran forex
Esta Tarefa do CRAN contém uma lista de pacotes úteis para o trabalho empírico em Finanças, agrupados por tópico.
Além desses pacotes, uma variedade muito grande de funções adequadas para o trabalho empírico em Finanças é fornecida tanto pelo sistema R básico (e seu conjunto de pacotes principais recomendados), quanto por vários outros pacotes na Comprehensive R Archive Network (CRAN). Conseqüentemente, vários dos outros modos de exibição do CRAN podem conter pacotes adequados, em particular os modos de visualização Econetrics, Multivariate, Optimization, Robust, SocialSciences e TimeSeries.
O pacote ctv suporta essas visualizações de tarefas. Suas funções install. views e update. views permitem, respectivamente, a instalação ou atualização de pacotes de uma determinada Task View; a opção coreOnly pode restringir as operações aos pacotes rotulados como core abaixo.
As contribuições são sempre bem-vindas e incentivadas. Desde o início desta visão de tarefas do CRAN em abril de 2005, a maioria das contribuições chegou como sugestões por e-mail. O arquivo de origem para este arquivo de visão de tarefa particular agora também reside em um repositório GitHub (veja abaixo) para que pedidos pull também sejam possíveis.
Modelos de regressão padrão.
Uma visão geral detalhada das metodologias de regressão disponíveis é fornecida pela visão de tarefa da Econometria. Isso é complementado pela visão de tarefa robusta, que se concentra em métodos mais robustos e resistentes. Modelos lineares como mínimos quadrados ordinários (OLS) podem ser estimados por lm () (pelo pacote stats contido na distribuição R básica). A estimativa da Máxima Verossimilhança (ML) pode ser realizada com a função padrão optim (). Muitos outros métodos adequados são listados na visualização Otimização. Os mínimos quadrados não lineares podem ser estimados com a função nls (), assim como com nlme () do pacote nlme. Para o modelo linear, uma variedade de testes de diagnóstico de regressão é fornecida pelos pacotes car, lmtest, strucchange, urca e sandwich. Os pacotes Rcmdr e Zelig fornecem interfaces de usuário que podem ser de interesse também.
Uma visão geral detalhada das ferramentas para análise de séries temporais pode ser encontrada na visão de tarefa TimeSeries. Abaixo, uma breve visão geral dos métodos mais importantes em finanças é dada. A funcionalidade de série temporal clássica é fornecida pelos comandos arima () e KalmanLike () na distribuição R básica. Os pacotes dse e timsac fornecem uma variedade de métodos de estimativa mais avançados; o fracdiff pode estimar séries fracionariamente integradas; longmemo abrange material relacionado. O fractal fornece funcionalidade de modelagem de série temporal fractal. Para modelagem de volatilidade, o modelo padrão GARCH (1,1) pode ser estimado com a função garch () no pacote tseries. Rmetrics (veja abaixo) contém o pacote fGarch que possui modelos adicionais. O pacote rugarch pode ser usado para modelar uma variedade de modelos GARCH univariados com extensões como ARFIMA, regressores externos médios e várias outras especificações; com métodos de ajuste, previsão, simulação, inferência e plotagem são fornecidos também. O rmgarch baseia-se nele para fornecer a capacidade de estimar vários modelos GARCH multivariados. O pacote betategarch pode estimar e simular o modelo Beta-t-EGARCH de Harvey. O pacote bayesGARCH pode realizar uma estimativa bayesiana de um modelo GARCH (1,1) com as inovações t de Student. Para modelos multivariados, o pacote ccgarch pode estimar (multivariada) modelos GARCH de Correlação Condicional, enquanto o pacote gogarch fornece funções para modelos GARCH ortogonais generalizados. O pacote gets (que foi precedido por um pacote relacionado, o AutoSEARCH), fornece uma seleção automatizada de modelo geral para específico da média e volatilidade de log de um modelo log-ARCH-X. O pacote GEVStableGarch pode ajustar-se aos modelos ARMA-GARCH ou ARMA-APARCH com distribuições condicionais estáveis e GEV. O pacote lgarch pode estimar e ajustar os modelos log-Garch. Testes de raiz unitária e cointegração são fornecidos por tseries e urca. Os pacotes Rmetrics timeSeries e fMultivar contêm um número de funções de estimativa para ARMA, GARCH, modelos de memória longa, raízes unitárias e muito mais. O pacote CADFtest implementa o teste da raiz unitária de Hansen. MSBVAR fornece estimativa bayesiana de modelos vetoriais autorregressivos. O pacote dlm fornece análises Bayesiana e de probabilidade de modelos lineares dinâmicos (isto é, modelos de espaço de estado gaussiano linear). O pacote vars oferece estimativa, diagnóstico, previsão e decomposição de erros do modelo VAR e SVAR em uma estrutura clássica. Os pacotes dyn e dynlm são adequados para modelos de regressão dinâmicos (lineares). Vários pacotes fornecem funcionalidade de análise wavelet: rwt, wavelets, waveslim, wavethresh. Alguns métodos da teoria do caos são fornecidos pelo pacote tseriesChaos. tsDyn adiciona análise de séries temporais baseada na teoria de sistemas dinâmicos. O pacote de previsão adiciona funções para problemas de previsão. O pacote tsfa fornece funções para análise fatorial de séries temporais. O pacote stochvol implementa a estimativa Bayesiana da volatilidade estocástica usando o Monte Carlo da Cadeia de Markov e a factorstochvol estende isso para o caso multivariado. O pacote MSGARCH adiciona métodos para ajustar (por Máxima Verossimilhança ou Bayesiana), simular e prever vários processos GARCH Markov-Switching.
O conjunto de pacotes Rmetrics compreende fAssets, fBasics, fBonds, timeDate (anteriormente: fCalendar), fCopulae, fExoticOptions, fExtremes, fGarch, fImport, fNonlinear, fOptions, fPortfolio, fRegression, timeSeries (anteriormente: fSeries), fTrading e contém um grande número de funções relevantes para diferentes aspectos de finanças empíricas e computacionais. O pacote RQuantLib oferece várias funções de precificação de opções, bem como algumas funcionalidades de renda fixa do projeto QuantLib para R. O RcppQuantuccia fornece um subconjunto menor de funcionalidade QuantLib como uma biblioteca somente de cabeçalho; Atualmente, apenas algumas funcionalidades de calendário são expostas. O pacote quantmod oferece várias funções para modelagem quantitativa em finanças, bem como aquisição de dados, plotagem e outras utilidades. O pacote de portfólio contém classes para gerenciamento de portfólio de ações; o portfolioSim constrói um framework de simulação relacionado. O backtest oferece ferramentas para explorar hipóteses baseadas em portfólio sobre instrumentos financeiros. O pacote pa oferece funcionalidade de atribuição de desempenho para carteiras de ações. O pacote PerformanceAnalytics contém um grande número de funções para cálculos de desempenho de portfólio e gerenciamento de riscos. O TTR contém funções para construir regras técnicas de negociação em R. O pacote financeiro pode calcular valores presentes, fluxos de caixa e outros cálculos financeiros simples. O pacote sde fornece funcionalidade de simulação e inferência para equações diferenciais estocásticas. Os pacotes termstrc e YieldCurve contêm métodos para a estimação de curvas de juros de cupom zero e curvas de spread baseadas no método paramétrico de Nelson e Siegel (1987) com a extensão de Svensson (1994). O pacote anterior adiciona a abordagem de splines cúbicos de McCulloch (1975), o último pacote adiciona a abordagem de Diebold e Li. O SmithWilsonYieldCurve constrói a curva de juros usando a abordagem Smith-Wilson baseada nas taxas LIBOR e SWAP. O pacote vrtest contém vários testes de razão de variância para a forma fraca da hipótese de mercados eficientes. O pacote gmm fornece a função de estimativas de método de momentos generalizados (GMM) que são frequentemente usadas quando se estimam os parâmetros das condições de momento implícitas por um modelo de precificação de ativos. O pacote tawny contém um estimador baseado na teoria de matriz aleatória, bem como métodos de encolhimento para remover o ruído de amostragem ao estimar matrizes de covariância de amostra. O pacote maRketSim oferece um simulador de mercado, projetado inicialmente em torno do mercado de títulos. O pacote BurStFin e BurStMisc possui uma coleção de funções para Finanças, incluindo a estimativa de matrizes de covariância. O pacote AmericanCallOpt contém um pricer para diferentes opções de chamadas americanas. O pacote VarSwapPrice pode precificar um swap de variação através de um portfólio de contratos de opções europeus. O pacote FinAsym implementa os testes de Lee e Ready (1991) e Easley e O'Hara (1987) para, respectivamente, direção comercial e probabilidade de negociação informada. O pacote parma fornece suporte para aplicativos de gerenciamento de risco e alocação de portfólio. O pacote GUIDE fornece uma GUI para os rivatives DE e contém numerosos exemplos de pricer e plotagens interativas 2D e 3D para estudar essas funções de precificação. O pacote SharpeR contém uma coleção de ferramentas para analisar a significância das estratégias de negociação, com base na proporção de Sharpe e na superposição do mesmo. O pacote RND implementa várias funções para extrair densidades neutras ao risco dos preços das opções. O pacote LSMonteCarlo pode precificar as Opções Americanas através do método de Monte Carlo dos Mínimos Quadrados. O pacote BenfordTests fornece sete testes estatísticos e funções de suporte para determinar se os dados numéricos podem estar em conformidade com a lei de Benford. O pacote OptHedging valoriza o portfólio de opções call and put e implementa uma estratégia de hedge ótima. O pacote markovchain fornece funcionalidade para manipular e analisar facilmente cadeias distintas de Markov. Os modelos de embalagem ycinterextra permitem a interpolação e a extrapolação da curva usando os modelos de Nelson-Siegel, Svensson ou Smith-Wilson, bem como as splines cúbicas de Hermite. Os modelos de pacote tvm fornecem funções para o valor do dinheiro no tempo, como fluxos de caixa e curvas de juros. O pacote MarkowitzR fornece funções para testar a significância estatística dos portfólios de Markowitz. O pacote pbo modela a probabilidade de overfitting de backtest, degradação do desempenho, probabilidade de perda e dominância estocástica ao analisar estratégias de negociação. O pacote OptionPricing implementa algoritmos Monte Carlo eficientes para o preço e as sensibilidades das opções asiáticas e européias sob o movimento Browniano Geométrico. O pacote matchingMarkets implementa um estimador estrutural para corrigir o viés resultante da correspondência endógena (por exemplo, formação de grupo em microfinanças ou combinação de firmas e capitalistas de risco). O pacote restimizeapi faz a interface da API em estimize, que fornece estimativas de ganhos de origem coletiva. O pacote credule é outro pricer para swaps de crédito. O pacote covmat fornece vários métodos diferentes para calcular as matrizes de covariância. O pacote obAnalytics analisa e visualiza informações de eventos em dados de pedidos limitados. O pacote derivmkts adiciona um conjunto de funções de precificação e exposição úteis no ensino de mercados de derivativos. O pacote PortfolioEffectHFT fornece uma análise de portfólio adequada para dados intra-dia e de alta frequência e também faz a interface do serviço PortfolioEffect. O preço dos pacotes de produtos de balcão é derivado de uma extensão para Black e Scholes, apoiando a inadimplência sob um preço de ligação de lei de poder e taxa de risco. O pacote sharpeRratio adiciona uma estimativa livre de momentos das taxas de Sharpe. O pacote QuantTools oferece ferramentas aprimoradas de negociação quantitativa e modelagem. O pacote pinbasic adiciona ferramentas para estimativas rápidas e estáveis da probabilidade de negociação informada (PIN) por Easley et al, e oferece factorizations da probabilidade do modelo. Os pacotes InfoTrad também estimam o PIN e o prolongam em diferentes algoritmos de fatoração e estimativa. O pacote FinancialMath contém funções de cálculo de preço de derivativos e matemática, conforme exigido pelos exames atuariais pelo exame "Matemática financeira" da Society of Actuaries and Casualty Society Actuarial. O pacote tidyquant reorganiza a funcionalidade de vários outros pacotes de chaves para uso no chamado tidyverse. O BCC1997 precifica as opções européias sob o modelo de Bakshi, Cao e Chen (1997) para volatilidade estocástica, taxas estocásticas e saltos aleatórios. O pacote Sim. DiffProc fornece funções para simular e analisar cálculos estocásticos multidimensionais de Itґ e Stratonovitch para modelos de tempo contínuo. O pacote rpgm oferece uma rápida simulação de variáveis aleatórias normais e exponenciais e equações diferenciais estocásticas. O pacote BLModel calcula a distribuição posterior em um modelo Black-Litterman a partir de uma distribuição anterior dada por retornos de ativos e distribuição contínua de visualizações dada por uma função externa. O pacote rpatrec visa reconhecer padrões de gráficos em dados de séries temporais (financeiros). O PortfolioOptim pode resolver a otimização de portfólio de amostras pequenas e grandes. O pacote estudy2 implementa os testes de metodologia de estudo de eventos paramétricos e não paramétricos mais comumente usados.
O Task View ExtremeValue reagrupa vários pacotes relevantes. Os pacotes CreditMetrics e crp. CSFP fornecem função para modelar os riscos de crédito. O pacote mvtnorm fornece código para distribuições normal e t multivariadas. Os pacotes Rmetrics fPortfolio e fExtremes também contêm várias funções relevantes. Os pacotes copula e fgac cobrem estruturas de dependências multivariadas usando métodos copula. O pacote actuar fornece uma perspectiva atuarial para a gestão de risco. O pacote ghyp fornece funções generalizadas de distribuição hibernética, bem como procedimentos para otimizações de portfólio VaR, CVaR ou target-return. O pacote ChainLadder fornece funções para modelagem de reservas de sinistro de seguro; e o pacote lifecontingencies fornece funções para avaliações financeiras e atuariais de contingências de vida. O pacote frmqa visa coletar funções para Gerenciamento de Risco Financeiro e Análise Quantitativa. O pacote ESG pode ser usado para modelar a projeção de ativos, uma abordagem de simulação baseada em cenários. O pacote riskSimul fornece procedimentos de simulação eficientes para estimar probabilidades de perda de cauda e excesso condicional para uma carteira de ações onde log-retornos são considerados como seguindo um modelo de t-cópula com hiperbólicas generalizadas ou t marginais. O pacote GCPM analisa o risco de inadimplência da carteira de crédito usando abordagens analíticas e de simulação. O pacote FatTailsR fornece uma família de quatro distribuições adaptadas para distribuição com caudas grossas simétricas e assimétricas. O pacote Dowd contém funções portadas da caixa de ferramentas "MMR2" oferecida no livro de Kevin Dowd "Measuring Market Risk". O pacote PortRisk calcula a atribuição de risco do portfólio. O pacote NetworkRiskMeasures implementa algumas medidas de risco para redes financeiras, tais como DebtRank, Susceptibility, Impact Diffusion e Impact Fluidity. O pacote de risco calcula 26 medidas de risco financeiro para qualquer distribuição contínua. O pacote RiskPortfolios constrói portfólios baseados em risco de acordo com os documentos correspondentes de Ardia et al. Os modelos de pacote resseguradorR resseguram uma classe Reclamações cujo objetivo é armazenar sinistros e prêmios, sobre os quais diferentes tratados podem ser aplicados.
O pacote NMOF fornece funções, exemplos e dados de Métodos Numéricos e Otimização em Finanças por Manfred Gilli, Dietmar Maringer e Enrico Schumann (2011), incluindo as diferentes heurísticas de otimização, como Evolução Diferencial, Algoritmos Genéticos, Enxames de Partículas e Aceitação de Limites. O pacote FRAPO fornece conjuntos de dados e código para o livro Financial Risk Modeling e Portfolio Optimization with R por Bernhard Pfaff (2013).
Análise Técnica com R.
Tabela De Conteúdo.
Neste post, vamos dar uma olhada em como um trader poderia usar R para calcular alguns indicadores básicos de análise técnica. R é uma linguagem de programação e ambiente de análise estatística livre e de código aberto. Está disponível para sistemas operacionais Windows, Mac OS e Linux. A instalação é fácil e rápida. Para obter instruções de download e instalação, acesse: cran. r-project.
Ao desenvolver uma estratégia de negociação, é útil poder analisar e visualizar dados e testar suas regras de geração de negócios e suas variações e modelos rapidamente e com um mínimo de retorno. Enquanto muitas plataformas de negociação, como Interactive Brokers, etc., fornecem acesso a dados históricos via API ou download de arquivo direto & # 8211; Analisar que as estratégias de negociação de dados e protótipos geralmente exigem a escrita de centenas de linhas de código em linguagens de programação, como Java ou C ++, ou a escrita de fórmulas difíceis de testar no Excel. Isso requer um investimento de tempo significativo, independentemente de quão experiente programador você é. Por outro lado, uma linguagem de programação de nível superior, como R ou Matlab, juntamente com seus ambientes de programação interativa, permite que seus usuários dividam, analisem e analisem dados em uma fração de tempo com C ++, C # ou Java. A quantidade de código necessária para desenvolver uma estratégia de negociação em R é tipicamente uma ordem de magnitude menor também.
Neste exemplo, usaremos um arquivo separado por vírgula simples contendo colunas de preço aberto, alto, baixo e preço de fechamento (também conhecido como OHLC), juntamente com valores de volume e registro de data e hora para o SPY ETF. Nesta postagem, demonstraremos como usar uma biblioteca R gratuita para calcular indicadores de análise técnica de média móvel simples (SMA), média móvel exponencial (EMA), bandas de Bollinger (BBands), RSI e MACD. Anexaremos os indicadores calculados como novas colunas ao nosso arquivo de entrada para que ele possa ser usado para análise adicional ou prototipagem de estratégia de negociação no Excel, R ou qualquer outro pacote de software compatível com CSV de sua escolha.
Instalando a Biblioteca de Análise Técnica para R.
1. Para calcular a Análise Técnica com R, usaremos uma biblioteca de código aberto gratuita chamada & # 8220; TTR & # 8221; (Regras Técnicas de Negociação). Esta etapa inclui instruções para instalar a biblioteca TTR, supondo que você já tenha instalado o R no seu computador. Essas etapas só precisam ser executadas uma vez por instalação R em um computador.
Para instalar a biblioteca no seu computador:
1) Inicie o ambiente R no seu computador e, em seguida, no menu, selecione: Packages & # 038; Dados -> Instalador de Pacotes.
2) No tipo de instalador do pacote & # 8220; TTR & # 8221; no campo Pesquisa de pacotes e clique em & # 8220; Obter lista & # 8221; botão.
3) Selecione o pacote & # 8220; TTR & # 8221; e clique em & # 8220; Instalar Selected & # 8221 ;.
Carregando dados históricos (entrada)
Para fins de demonstração, usaremos os preços históricos diários para o SPY ETF de setembro de 2013 a maio de 2014. Clique aqui para baixar o arquivo de dados. Este arquivo de entrada para este exemplo foi gerado usando o IB Historical Data Downloader.
2. Vamos começar abrindo a biblioteca R e carregando “TTR”, que é uma extensão R livre que contém funções para calcular alguns dos indicadores mais comuns.
3. O próximo passo é importar nosso arquivo de dados com preços históricos para o ambiente R. Carregaremos os dados do arquivo CSV de amostra no ambiente R e armazenaremos um “quadro de dados”, que é um tipo de variável R para armazenar dados no formato de tabela na memória.
Para exibir as primeiras linhas da tabela "data":
Por padrão, isso mostra as primeiras 6 linhas de dados juntamente com os nomes das colunas (cabeçalho da tabela). Para ver quantas linhas você tem na tabela "data":
Isso mostra que temos 187 registros de dados em nosso arquivo de dados SPY, por 187 dias úteis entre 3 de setembro de 2013 e # 8211; 31 de maio de 2014.
Podemos também listar os nomes das colunas da tabela usando as funções “colnames” da seguinte forma:
Médias Móveis.
4. Agora vamos calcular a média móvel simples de 20 dias (SMA) da coluna de preço CLOSE usando a função R da biblioteca TTR "SMA":
Agora, vamos ver os primeiros 50 valores da matriz "sma20":
Aqui usamos a função SMA da biblioteca TTR que carregamos acima, informando para calcular a média de 20 dias (valor do parâmetro “n”), da coluna “CLOSE” do quadro de dados “data”. A função retorna uma matriz de valores SMA e a armazena em uma nova variável chamada “sma20”.
Você pode trazer a ajuda com uma descrição detalhada da função e seus parâmetros usando? seguido pelo nome da função, como abaixo. É sempre uma boa ideia ler as páginas de ajuda para as funções que você está usando, pois elas listarão todos os parâmetros opcionais que você pode usar para ajustar a saída. Além disso, muitas funções têm variações ou funções relacionadas, que podem ser úteis em várias circunstâncias e serão listadas na página de ajuda.
5. Calcular a média móvel exponencial é igualmente fácil, basta usar uma função diferente, desta vez EMA (). Observe que calculamos o EMA para um período de 14 períodos.
Bandas de Bollinger.
6. Para calcular o indicador Bollinger Bands, usamos a função BBands. Há diversos parâmetros opcionais necessários, por isso forneceremos vários exemplos. No exemplo abaixo, chamamos BBands de passar "dados" do frame de dados com uma consulta que especifica que queremos usar valores da coluna "CLOSE", da mesma forma que fizemos acima para os cálculos de SMA e EMA acima. O segundo parâmetro "sd" leva o número de desvios padrão para as bandas superior e inferior. Como não passamos valor para "n" e # 8211; O BBands usa a média móvel de 20 períodos por padrão. A saída contém várias colunas: 'dn' para a banda "inferior", 'mavg' para a média móvel, 'up' para a banda "superior" e pctB, que quantifica o preço de uma segurança em relação à banda superior e Bollinger Band inferior, uma descrição detalhada do mesmo pode ser encontrada aqui.
% B é igual a 1 quando o preço está na faixa superior% B é igual a 0 quando o preço está na faixa inferior% B está acima de 1 quando o preço está acima da faixa superior% B está abaixo de 0 quando o preço está abaixo da faixa inferior .50 quando o preço está acima da faixa do meio (SMA de 20 dias)% B está abaixo de 0,50 quando o preço está abaixo da faixa do meio (SMA de 20 dias)
> bb20 = BBands (dados, dp = 2,0)
6.1 Agora, gostaríamos de criar um novo quadro de dados contendo todos os dados de entrada do campo & # 8216; data & # 8217; frame, mais os dados da Bollinger Bands que acabamos de calcular.
A função data. frame () pega qualquer número de quadros de dados e os associa a um novo quadro de dados, de modo que os elementos das linhas correspondentes são “unidos” juntos no resultado.
6.2 Banda de Bollinger:
> linhas (dataPlusBB $ CLOSE, col = & # 8216; vermelho & # 8217;)
> linhas (dataPlusBB $ up, col = & # 8216; roxo & # 8217;)
> linhas (dataPlusBB $ dn, col = & # 8216; marrom & # 8217;)
> linhas (dataPlusBB $ mavg, col = & # 8216; azul & # 8217;)
6.3 Como alternativa, podemos especificar explicitamente que tipo de média móvel deve ser usado como base para Bollinger Bands usando o parâmetro de função "maType", que simplesmente usa um nome de função de média móvel. Consulte a página de ajuda do SMA para ver os diferentes tipos de médias móveis suportados na biblioteca TTR. Por exemplo, se você quiser calcular um EMA Bollinger Bands, poderá transmitir o EMA para maType. Observe que neste exemplo estamos substituindo o parâmetro de comprimento padrão para a média móvel, usando a média de 14 períodos desta vez.
> bbEMA = BBands (dados, sd = 2,0, n = 14, maType = EMA)
RSI & # 8211; Indicador de Força Relativa.
7. RSI. Para calcular o RSI, usamos a função RSI (). Você pode usar o comando RSI no shell R para obter detalhes sobre os parâmetros da função. Basicamente, é muito semelhante às funções que usamos acima para gerar médias móveis. Ele tem dois parâmetros obrigatórios: séries temporais (como a coluna "FECHAR" de nosso quadro de dados de "dados" e o valor inteiro "n" para o "comprimento" do indicador RSI.
> rsi14 = RSI (dados, n = 14)
Aqui o primeiro parâmetro para a função RSI é: data, que é uma instrução que diz “pegue a coluna chamada 'CLOSE' da tabela 'data' e retorne como uma lista de valores, e o segundo parâmetro é n = 14, onde o nome do parâmetro é 'n' e o valor 14 indica que queremos calcular valores de RSI de 14 dias nos preços de fechamento.
8. A função MACD leva vários argumentos:
séries de dados de entrada (como o preço "FECHADO") número de períodos para o número médio de movimentos "rápidos" para o número médio de períodos móveis "lentos" para a linha "sinal".
Você também pode, opcionalmente, especificar a função de média móvel que deseja usar para médias móveis do MACD. Veja uma captura de tela da página de ajuda abaixo (você também pode usar o comando MACD no shell R para abrir a página de ajuda):
Vamos calcular um indicador MACD padrão (12,26,9) usando essa função. Utilizaremos médias móveis simples padrão. Assim, especificaremos a função SMA no parâmetro "maType":
macd = MACD (dados, nFast = 12, nSlow = 26, nSig = 9, maType = SMA)
Junte todos os dados juntos.
9. Agora, juntamos todos os indicadores calculados acima com os dados de entrada originais em um único quadro de dados:
A função data. frame () pega qualquer número de quadros de dados e os une em linha, de forma que os elementos das linhas correspondentes são “colados” juntos no data. frame resultante, 'allData'.
Escreva para arquivo de texto.
E, finalmente, escrevemos o conteúdo do quadro de dados "allData" em um arquivo de valores separados por vírgula. Usamos a função write. table (), que contém um grande número de parâmetros opcionais. Uma página de ajuda detalhada está disponível usando o comando “? Write. table” no shell R.
> write. table (allData, file = "spy_with_indicators. csv", na = "", sep = ",", row. names = FALSE)
Quando chamamos a função write. table () passamos os seguintes argumentos:
allData & # 8211; isso é simplesmente uma referência ao quadro de dados que contém dados a serem gravados no arquivo de saída. arquivo = “& # 8230;” & # 8211; este é o caminho e o nome do arquivo que estamos criando. na = “” & # 8211; garante que as células no quadro de dados que contêm o valor R “NA” conterão valores vazios no arquivo de saída. Algumas células possuem NA para linhas onde não havia dados suficientes para gerar um valor de indicador correspondente (por exemplo, primeiras 19 linhas para SMA de 20 dias). sep = “,” & # 8211; Define o separador de coluna para vírgula (portanto, arquivo de valores separados por vírgula). Para criar um arquivo separado por tabulação (realmente um formato preferido para sistemas de software sérios) & # 8211; use: sep = “\ t”. row. names = FALSO & # 8211; é importante definir esse valor, caso contrário, a primeira coluna no arquivo de saída conterá números de linha.
O arquivo resultante está disponível aqui. Clique com o botão direito do mouse e selecione "Salvar arquivo vinculado como ...". # 8221; Arquivo baixado pode ser aberto no Excel ou editor de texto.
10. Existem mais funções e recursos disponíveis na biblioteca “TTR”. Você pode descobrir mais atualizando a página de ajuda do TTR:
CONCLUSÃO.
R fornece um ambiente conveniente e versátil para análise de dados e cálculos. Além de milhares de bibliotecas e algoritmos matemáticos e estatísticos gratuitos de código aberto, o R contém um grande número de funções e bibliotecas para ler e gravar dados para / de arquivos, bancos de dados, URLs, Web Services, etc ... Isso combinado com a concisão. da linguagem, é uma combinação poderosa que pode ajudar os comerciantes a economizar tempo precioso. Os traders podem reduzir significativamente o tempo necessário para criar protótipos e fazer backtest de estratégias de negociação usando o R. Também existem métodos para integrar o R com linguagens de programação mainstream, como Java e C ++. Não hesite em postar um comentário ou enviar como uma mensagem através do formulário Fale Conosco se você tiver alguma dúvida sobre este material.
Por fim, gostaríamos de mencionar alguns livros que foram muito úteis em nossos esforços de desenvolvimento. O primeiro livro & # 8211; & # 8220; Negociação quantitativa com R & # 8221; é uma ótima combinação de insights de análise de dados financeiros e aplicação de R para backtesting, exploração de dados e análise. Ele possui vários exemplos de código e passa por vários pacotes R úteis. Este é um bom livro de nível intro para intermediário para pessoas que gostariam de construir e backtest suas próprias estratégias de negociação.
O segundo livro & # 8211; "Mastering R for Quantitative Finance" & # 8221; & # 8211; é uma verdadeira jóia. Ele contém informações mais avançadas para traders com um bom entendimento dos instrumentos derivativos e um sólido background matemático. Descobrimos que este livro é um ótimo acompanhamento para o "Comércio Quantitativo com o R & # 8221 ;. Além de ótimos exemplos e pacotes de código R, ele contém visões gerais de vários modelos e algoritmos de finanças quantitativos avançados (e práticos!) E permite que você receba o código R imediatamente.
O Trader R.
Usando R e ferramentas relacionadas em Finanças Quantitativas.
Visualizando dados de séries temporais em R.
É com muito prazer que anuncio meu curso do DataCamp sobre Visualização de Dados de Séries Temporais em R. Esse curso também faz parte da série de Períodos Temporais com a faixa de habilidades R. Sinta-se livre para dar uma olhada, o primeiro capítulo é grátis!
Descrição do Curso.
Como diz o ditado, "Um gráfico vale mais que mil palavras". É por isso que a visualização é a maneira mais usada e poderosa de entender melhor seus dados. Após este curso, você terá uma visão geral muito boa dos recursos de visualização da série temporal R e poderá decidir melhor qual modelo escolher para a análise subsequente. Você também poderá transmitir a mensagem que deseja transmitir de maneira eficiente e bonita.
Esboço de Curso.
Capítulo 1: Ferramentas de Visualização da Série Temporal.
Este capítulo apresentará as ferramentas básicas de visualização da série temporal R.
Capítulo 2: Séries Temporais Univariadas.
Gráficos univariados são projetados para aprender o máximo possível sobre a distribuição, a tendência central e a disseminação dos dados disponíveis. Neste capítulo, você será presenteado com algumas ferramentas visuais usadas para diagnosticar séries de tempos univariados.
Capítulo 3: Séries Temporais Multivariadas.
O que fazer se você tiver que lidar com séries temporais multivariadas? Neste capítulo, você aprenderá como identificar padrões na distribuição, tendência central e se espalhar sobre pares ou grupos de dados.
Capítulo 4: Estudo de caso: selecionando visualmente um estoque que melhora seu portfólio existente.
Vamos colocar tudo que você aprendeu até agora na prática! Imagine que você já possui uma carteira de ações e você tem algum dinheiro disponível para investir, como você sabiamente pode selecionar uma nova ação para investir seu dinheiro adicional? Analisar as propriedades estatísticas dos estoques individuais versus um portfólio existente é uma boa maneira de abordar o problema.
Vinculando R ao IQFeed com o pacote QuantTools.
O IQFeed fornece serviços de dados de fluxo contínuo e soluções de negociação que cobrem o mercado agrícola, de energia e financeiro. É um provedor de feed de dados bem conhecido e reconhecido, voltado para usuários de varejo e pequenas instituições. O preço da assinatura começa em cerca de US $ 80 / mês.
Stanislav Kovalevsky desenvolveu um pacote chamado QuantTools. É um pacote tudo em um projetado para melhorar a modelagem de negociação quantitativa. Ele permite baixar e organizar dados históricos de mercado de várias fontes, como Yahoo, Google, Finam, MOEX e IQFeed. O recurso que mais me interessa é a capacidade de vincular o IQFeed à R. Eu uso o IQFeed há alguns anos e estou feliz com ele (não estou afiliado à empresa em nenhum caminho). Mais informações podem ser encontradas aqui. Eu tenho procurado uma integração dentro de R por um tempo e aqui está. Como resultado, depois que fiz alguns testes, mudei meu código que ainda estava em Python para R. Apenas para completar, aqui está um link que explica como baixar dados históricos do IQFeed usando Python.
A QuantTools oferece quatro funcionalidades principais: Obter dados de mercado, Armazenar / Recuperar dados de mercado, Dados de séries temporais de plotagem e Testes reversos.
Primeiro, verifique se o IQfeed está aberto. Você pode baixar dados diários ou intradiários. O código abaixo faz o download dos preços diários (Aberto, Alto, Baixo, Fechado) para o SPY de 1º de janeiro de 2017 a 1º de junho de 2017.
O código abaixo faz o download dos dados intraday de 1º de maio de 2017 a 3 de maio de 2017.
Observe o parâmetro do período. Pode usar qualquer um dos seguintes valores: tick, 1min, 5min, 10min, 15min, 30min, hora, dia, semana, mês, dependendo da freqüência que você precisa.
O QuantTools facilita o processo de gerenciar e armazenar dados do mercado de ticks. Você acabou de configurar os parâmetros de armazenamento e está pronto para começar. Os parâmetros são onde, desde que data e quais símbolos você gostaria de armazenar. Sempre que você puder adicionar mais símbolos e se eles não estiverem presentes em um armazenamento, o QuantTools tentará obter os dados da data de início especificada. O código abaixo salvará os dados no seguinte diretório: & # 8220; C: / Usuários / Arnaud / Documentos / Dados de Mercado / iqfeed & # 8221 ;. Há uma subpasta por instrumento e os dados são exibidos em arquivos. rds.
Você também pode armazenar dados entre datas específicas. Substitua a última linha de código acima por uma das abaixo.
Agora, se você quiser recuperar alguns dos dados armazenados, basta executar algo como:
Observe que apenas os ticks são suportados no armazenamento local, portanto, o período deve ser & # 8216; tick & # 8217;
O QuantTools fornece a função plot_ts para plotar dados de séries temporais sem fins de semana, feriados e lacunas durante a noite. No exemplo abaixo, primeiro recupero os dados armazenados acima, depois seleciono as primeiras 100 observações de preço e, finalmente, desenho o gráfico.
Duas coisas para notar: primeiro espião é um objeto data. table, portanto, a sintaxe acima. Para obter uma visão geral rápida dos recursos do data. table, dê uma olhada nesta excelente folha de dicas do DataCamp. Segundo, o parâmetro local é TRUE, pois os dados são recuperados do armazenamento interno.
O QuantTools permite escrever sua própria estratégia de negociação usando sua API C ++. Eu não vou elaborar sobre isso, pois isso é basicamente código C ++. Você pode consultar a seção Exemplos no site da QuantTools.
No geral, acho o pacote extremamente útil e bem documentado. O único bit faltante é o feed ao vivo entre R e IQFeed, que fará do pacote uma solução real de ponta a ponta.
Como de costume, qualquer comentário é bem-vindo.
BERT: um recém-chegado na conexão R Excel.
Há alguns meses, um leitor me mostrou essa nova maneira de conectar R e Excel. Eu não sei há quanto tempo isso acontece, mas nunca me deparei com isso e nunca vi nenhum post ou artigo de blog sobre isso. Então eu decidi escrever um post enquanto a ferramenta realmente vale a pena e antes que alguém pergunte, eu não estou relacionado à empresa de forma alguma.
BERT significa Basic Excel R Toolkit. É gratuito (licenciado sob a GPL v2) e foi desenvolvido pela Structured Data LLC. No momento em que escrevo, a versão atual do BERT é 1.07. Mais informações podem ser encontradas aqui. De uma perspectiva mais técnica, o BERT é projetado para suportar a execução de funções R a partir de células da planilha do Excel. Em termos do Excel, é para escrever Funções definidas pelo usuário (UDFs) em R.
Neste post eu não vou mostrar como R e Excel interagem via BERT. Há muito bons tutoriais aqui, aqui e aqui. Em vez disso, quero mostrar como usei BERT para construir uma torre de controle & # 8220; & # 8221; para minha negociação.
Meus sinais de negociação são gerados usando uma longa lista de arquivos R, mas eu preciso da flexibilidade do Excel para exibir os resultados de forma rápida e eficiente. Como mostrado acima, o BERT pode fazer isso para mim, mas também quero adaptar o aplicativo às minhas necessidades. Combinando o poder do XML, VBA, R e BERT, posso criar um aplicativo bonito, mas poderoso, na forma de um arquivo do Excel com código VBA mínimo. Em última análise, eu tenho um único arquivo do Excel reunindo todas as tarefas necessárias para gerenciar meu portfólio: atualização de banco de dados, geração de sinal, submissão de pedidos etc & # 8230; Minha abordagem pode ser dividida nos três passos abaixo:
Use XML para criar menus e botões definidos pelo usuário em um arquivo do Excel. Os menus e botões acima são essencialmente chamadas para funções do VBA. Essas funções do VBA são encapsuladas em torno das funções R definidas usando BERT.
Com essa abordagem, posso manter uma clara distinção entre o núcleo do meu código mantido em R, SQL e Python e tudo o que é usado para exibir e formatar os resultados mantidos no Excel, VBA & amp; XML Nas próximas seções, apresento o pré-requisito para desenvolver tal abordagem e um guia passo a passo que explica como o BERT poderia ser usado para simplesmente passar dados de R para o Excel com o mínimo de código VBA.
1 & # 8211; Baixe e instale o BERT neste link. Quando a instalação estiver concluída, você deve ter um novo menu Add-Ins no Excel com os botões, conforme mostrado abaixo. É assim que o BERT se materializa no Excel.
2 & # 8211; Faça o download e instale o editor de interface do usuário personalizada: O Editor de interface do usuário personalizado permite criar menus e botões definidos pelo usuário na faixa de opções do Excel. Um procedimento passo a passo está disponível aqui.
1 & # 8211; Código R: A função R abaixo é um código muito simples apenas para fins ilustrativos. Calcula e retorna os resíduos de uma regressão linear. É isso que queremos recuperar no Excel. Salve isso em um arquivo chamado myRCode. R (qualquer outro nome é bom) em um diretório de sua escolha.
2 & # 8211; functions. R em BERT: No Excel selecione Add-Ins - & gt; Diretório base e abra o arquivo chamado functions. R. Neste arquivo, cole o seguinte código. Certifique-se de inserir o caminho correto.
Isso é apenas o fornecimento de BERT no arquivo R que você criou acima. Em seguida, salve e feche as funções do arquivo. Se você quiser fazer qualquer alteração no arquivo R criado na etapa 1, terá que recarregá-lo usando o botão BERT & # 8220; Recarregar o arquivo de inicialização & # 8221; do menu Add-Ins no Excel.
3 & # 8211; No Excel: Crie e salve um arquivo chamado myFile. xslm (qualquer outro nome é bom). Este é um arquivo habilitado para macro que você salva no diretório de sua escolha. Depois que o arquivo for salvo, feche-o.
4 & # 8211; Abra o arquivo criado acima no editor da interface do usuário personalizada: Depois que o arquivo estiver aberto, cole o código abaixo.
Você deve ter algo parecido com isto no editor de XML:
Essencialmente, este pedaço de código XML cria um menu adicional (RTrader), um novo grupo (My Group) e um botão definido pelo usuário (New Button) na faixa de opções do Excel. Quando terminar, abra myFile. xslm no Excel e feche o Custom UI Editor. Você deveria ver algo assim.
5 & # 8211; Abra o editor VBA: Em myFile. xlsm, insira um novo módulo. Cole o código abaixo no módulo recém-criado.
Isso apaga os resultados anteriores na planilha antes de lidar com os novos.
6 & # 8211; Clique no botão New: Agora volte para a planilha e no menu RTrader, clique no botão & # 8220; New Button & # 8221; botão. Você deve ver algo como o abaixo aparece.
O guia acima é uma versão muito básica do que pode ser obtido usando o BERT, mas mostra como combinar o poder de várias ferramentas específicas para criar seu próprio aplicativo personalizado. Da minha perspectiva, o interesse de tal abordagem é a capacidade de colar R e Excel, obviamente, mas também incluir pedaços de código XML (e em lote) do Python, SQL e muito mais. Isso é exatamente o que eu precisava. Por fim, gostaria de saber se alguém tem alguma experiência com o BERT?
Estratégia de negociação: aproveitando ao máximo os dados da amostra.
Ao testar estratégias de negociação, uma abordagem comum é dividir o conjunto de dados inicial em dados de amostra: a parte dos dados projetados para calibrar o modelo e os dados de amostra: a parte dos dados usada para validar a calibração e garantir que o desempenho criado na amostra será refletido no mundo real. Como regra geral, cerca de 70% dos dados iniciais podem ser usados para calibração (ou seja, na amostra) e 30% para validação (ou seja, fora da amostra). Em seguida, uma comparação entre os dados de entrada e de saída ajuda a decidir se o modelo é suficientemente robusto. Este post visa dar um passo adiante e fornece um método estatístico para decidir se os dados fora da amostra estão alinhados com o que foi criado na amostra.
No gráfico abaixo, a área azul representa o desempenho fora da amostra de uma das minhas estratégias.
Uma inspeção visual simples revela um bom ajuste entre o desempenho de entrada e saída da amostra, mas que grau de confiança eu tenho nisso? Nesta fase não muito e esta é a questão. O que é realmente necessário é uma medida de similaridade entre os conjuntos de dados de entrada e de saída. Em termos estatísticos, isso pode ser traduzido como a probabilidade de que os números de desempenho dentro e fora da amostra sejam provenientes da mesma distribuição. Existe um teste estatístico não paramétrico que faz exatamente isso: o teste de Kruskall-Wallis. Uma boa definição deste teste pode ser encontrada no R-Tutor Uma coleção de amostras de dados é independente se eles vêm de populações não relacionadas e as amostras não afetam umas às outras. Usando o Teste de Kruskal-Wallis, podemos decidir se as distribuições populacionais são idênticas, sem presumir que elas sigam a distribuição normal. & # 8221; O benefício adicional desse teste não está assumindo uma distribuição normal.
Existem outros testes da mesma natureza que poderiam se encaixar nessa estrutura. O teste de Mann-Whitney-Wilcoxon ou os testes de Kolmogorov-Smirnov se encaixam perfeitamente na estrutura descrita aqui, porém isso está além do escopo deste artigo para discutir os prós e contras de cada um desses testes. Uma boa descrição junto com exemplos de R pode ser encontrada aqui.
Aqui está o código usado para gerar o gráfico acima e a análise:
No exemplo acima, o período de amostragem é maior do que o período de amostragem, portanto, eu criei aleatoriamente 1.000 subconjuntos dos dados da amostra, cada um deles tendo o mesmo comprimento que os dados fora da amostra. Então, testei cada um em um subconjunto de amostras em relação aos dados fora da amostra e gravei os valores p. Esse processo não cria um único valor p para o teste Kruskall-Wallis, mas uma distribuição que torna a análise mais robusta. Neste exemplo, a média dos valores de p é bem acima de zero (0,478), indicando que a hipótese nula deve ser aceita: há fortes evidências de que os dados de entrada e saída da amostra são provenientes da mesma distribuição.
Como de costume, o que é apresentado neste post é um exemplo de brinquedo que apenas arranha a superfície do problema e deve ser adaptado às necessidades individuais. No entanto, penso que propõe um quadro estatístico interessante e racional para avaliar os resultados fora da amostra.
Este post é inspirado nos dois artigos seguintes:
Vigier Alexandre, Chmil Swann (2007), "Efeitos de várias funções de otimização no desempenho fora da amostra de estratégias de negociação geneticamente evoluídas", prevendo a conferência sobre mercados financeiros.
Vigier Alexandre, Chmil Swann (2010), «Um processo de otimização para melhorar a consistência da amostra, um caso da Bolsa de Valores», JP Morgan Cazenove Equity Quantitative Conference, Londres, outubro de 2010.
Apresentando o fidlr: LoanceR de Dados Financeiros.
O fidlr é um suplemento do RStudio projetado para simplificar o processo de download de dados financeiros de vários provedores. Esta versão inicial é um wrapper em torno da função getSymbols no pacote quantmod e somente o Yahoo, Google, FRED e Oanda são suportados. Eu provavelmente adicionarei funcionalidades ao longo do tempo. Como de costume, com essas coisas apenas um lembrete: "O SOFTWARE É FORNECIDO" COMO ESTÁ, SEM GARANTIA DE NENHUM TIPO "# 8230; & # 8221;
Como instalar e usar o fidlr?
Você pode obter o addin / package do seu repositório Github aqui (eu vou registrá-lo no CRAN mais tarde) Instale o addin. Existe um excelente tutorial para instalar o RStudio Addins aqui. Depois que o addin é instalado, ele deve aparecer no menu Addin. Basta escolher fidlr no menu e uma janela como abaixo deve aparecer. Escolha um provedor de dados no menu suspenso Origem. Selecione um intervalo de datas no menu Data Insira o símbolo que você deseja baixar na caixa de texto do instrumento. Para baixar vários símbolos basta digitar os símbolos separados por vírgulas. Use os botões de opção para escolher se deseja baixar o instrumento em um arquivo csv ou no ambiente global. O arquivo csv será salvo no diretório de trabalho e haverá um arquivo csv por instrumento. Pressione Executar para obter os dados ou Fechar para fechar o suplemento.
Mensagens de erro e avisos são manipulados pelos pacotes subjacentes (quantmod e Shiny) e podem ser lidos no console.
Esta é uma primeira versão do projeto, então não espere a perfeição, mas esperamos que melhore com o tempo. Por favor, informe qualquer comentário, sugestão, erro etc & # 8230; para: thertrader @ gmail.
Manter um banco de dados de arquivos de preços em R.
Fazer pesquisa quantitativa implica muita análise de dados e é preciso dados limpos e confiáveis para conseguir isso. O que é realmente necessário são dados limpos que sejam facilmente acessíveis (mesmo sem uma conexão com a Internet). A maneira mais eficiente de fazer isso para mim foi manter um conjunto de arquivos csv. Obviamente, este processo pode ser tratado de várias maneiras, mas eu achei um tempo extra muito eficiente e simples para manter um diretório onde eu armazeno e atualizo arquivos csv. Eu tenho um arquivo csv por instrumento e cada arquivo é nomeado após o instrumento que ele contém. A razão pela qual eu faço isso é dupla: Primeiro, eu não quero baixar dados (de preço) do Yahoo, Google, etc & # 8230; toda vez que eu quiser testar uma nova ideia, mas mais importante, uma vez que eu identifiquei e consertei um problema, eu não quero ter que fazer isso novamente na próxima vez que eu precisar do mesmo instrumento. Simples, mas muito eficiente até agora. O processo é resumido no gráfico abaixo.
Em tudo o que se segue, presumo que os dados estão vindo do Yahoo. O código terá que ser alterado para os dados do Google, Quandl, etc & # 8230; Além disso, apresento o processo de atualização dos dados diários de preços. A configuração será diferente para dados de frequência mais alta e outro tipo de conjunto de dados (ou seja, diferente dos preços).
1 & # 8211; Download de dados inicial (listOfInstruments. R & amp; historicalData. R)
O arquivo listOfInstruments. R é um arquivo contendo apenas a lista de todos os instrumentos.
Se um instrumento não é parte da minha lista (ou seja, nenhum arquivo csv na minha pasta de dados) ou se você fizer isso pela primeira vez, você terá que baixar o conjunto de dados históricos inicial. O exemplo abaixo faz o download de um conjunto de cotações diárias dos ETFs do Yahoo Finance até janeiro de 2000 e armazena os dados em um arquivo csv.
2 & # 8211; Atualizar dados existentes (updateData. R)
O código abaixo começa a partir de arquivos existentes na pasta dedicada e atualiza todos eles um após o outro. Eu costumo executar este processo todos os dias, exceto quando eu estou de férias. Para adicionar um novo instrumento, basta executar o passo 1 acima apenas para este instrumento.
3 & # 8211; Crie um arquivo de lote (updateDailyPrices. bat)
Outra parte importante do trabalho é criar um arquivo em lotes que automatize o processo de atualização acima (eu sou um usuário do Windows). Isso evita abrir o R / RStudio e executar o código a partir dele. O código abaixo é colocado em um arquivo. bat (o caminho deve ser alterado com a configuração do leitor). Note que eu adicionei um arquivo de saída (updateLog. txt) para rastrear a execução.
O processo acima é extremamente simples, pois descreve apenas como atualizar dados diários de preços. Eu tenho usado isso por um tempo e tem funcionado muito bem para mim até agora. Para dados mais avançados e / ou freqüências mais altas, as coisas podem ficar muito mais complicadas.
Como de costume, qualquer comentário é bem-vindo.
A ascensão dos robôs (Advisors & # 8230;)
A indústria de gerenciamento de ativos está à beira de uma grande mudança. Nos últimos dois anos, os Robots Advisors (RA) surgiram como novos jogadores. O termo em si é difícil de definir, pois engloba uma grande variedade de serviços. Alguns são projetados para ajudar consultores tradicionais a alocar melhor o dinheiro de seus clientes e outros são “black box” real. O usuário insere alguns critérios (idade, renda, filhos etc & # 8230;) e o robô propõe uma alocação feita sob medida. Entre esses dois extremos, uma gama completa de ofertas está disponível. Eu achei a definição da Wikipedia muito boa. & # 8220; Eles são uma classe de consultor financeiro que fornece gerenciamento de portfólio online com intervenção humana mínima & # 8221;. Mais precisamente, eles usam o gerenciamento de portfólio baseado em algoritmo para oferecer o espectro completo de serviços que um consultor tradicional ofereceria: reinvestimento de dividendos, relatórios de conformidade, rebalanceamento de carteira, extração de impostos etc. & # 8230; (bem, isso é o que a comunidade de investimento quantitativo está fazendo há décadas!). A indústria ainda está em sua infância, com a maioria dos jogadores ainda gerenciando uma pequena quantia de dinheiro, mas eu só percebi o quão profunda a mudança foi quando eu estava em Nova York há alguns dias. Quando RA receber seus nomes na TV ou no telhado do táxi de Nova York, você sabe que algo grande está acontecendo & # 8230;
está recebendo cada vez mais atenção da mídia e, acima de tudo, faz muito sentido a partir de uma perspectiva de investidor. Na verdade, existem duas vantagens principais no uso do RA:
Taxas significativamente mais baixas em relação aos consultores tradicionais O investimento é mais transparente e mais simples, o que é mais atraente para pessoas com conhecimento financeiro limitado.
Neste post R é apenas uma desculpa para apresentar bem o que é uma grande tendência no setor de gestão de ativos. O gráfico abaixo mostra as participações de mercado do RA mais popular no final de 2014. O código usado para gerar o gráfico abaixo pode ser encontrado no final deste post e os dados estão aqui.
Esses números são um pouco datados, dada a rapidez com que essa indústria evolui, mas ainda é muito informativa. Não é de surpreender que o mercado seja dominado por provedores dos EUA como Wealthfront e Betterment, mas RA surgem em todo o mundo: Ásia (8Now!), Suíça (InvestGlass), França (Marie Quantier) & # 8230; .. Está começando a afetar significativamente o modo como os gerentes de ativos tradicionais estão fazendo negócios. Um exemplo proeminente é a parceria entre Fidelidade e Melhoria. Desde dezembro de 2014, a Betterment ultrapassou a marca de US $ 2 bilhões do AUM.
Apesar de tudo isso, acho que a verdadeira mudança está à nossa frente. Porque eles usam menos intermediários e produtos de baixa comissão (como ETFs) eles cobram taxas muito mais baixas do que consultores tradicionais. A RA certamente ganhará participações de mercado significativas, mas também reduzirá as taxas cobradas pela indústria como um todo. Em última análise, isso afetará o modo como as empresas de investimento tradicionais fazem negócios. O gerenciamento ativo do portfólio, que está com dificuldades há alguns anos, vai sofrer ainda mais. As altas taxas que cobra serão ainda mais difíceis de justificar, a menos que se reinvente. Outro impacto potencial é o aumento de ETFs e produtos financeiros de baixa comissão em geral. Obviamente, isso começou há um tempo, mas acho que o efeito será ainda mais pronunciado nos próximos anos. Novas gerações de ETFs rastreiam índices mais complexos e estratégias customizadas. Esta tendência ficará mais forte inevitavelmente.
Como de costume, qualquer comentário é bem-vindo.
R dicas de séries temporais financeiras que todos devem conhecer.
Há muitos tutoriais de séries temporais de R circulando na web que este post não foi projetado para ser um deles. Em vez disso, quero apresentar uma lista dos truques mais úteis que encontrei ao lidar com séries temporais financeiras em R. Algumas das funções apresentadas aqui são incrivelmente poderosas, mas infelizmente enterradas na documentação, portanto, meu desejo de criar um post dedicado. Eu só abordo séries de tempos diários ou de frequência mais baixa. Lidar com dados de frequência mais alta requer ferramentas específicas: pacotes data. table ou highfrequency são alguns deles.
xts: O pacote xts é o que se deve ter quando se trata de séries temporais em R. O exemplo abaixo carrega o pacote e cria uma série temporal diária de 400 dias de retornos normalmente distribuídos.
merge. xts (pacote xts): Isso é incrivelmente poderoso quando se trata de unir duas ou mais séries de tempo se elas têm o mesmo tamanho ou não. O argumento de união faz a mágica! determina como a ligação é feita.
apply. yearly / apply. monthly (package xts): Aplica uma função especificada a cada período distinto em um determinado objeto de série temporal. O exemplo abaixo calcula retornos mensais e anuais da segunda série no objeto tsInter. Note que eu uso a soma dos retornos (sem composição)
pontos de extremidade (pacote xts): Extrai os valores de índice de um determinado objeto xts correspondente às últimas observações, dado um período especificado por on. O exemplo fornece o último dia do mês retorna para cada série no objeto tsInter usando o ponto final para selecionar a data.
na. locf (pacote zoológico): Função genérica para substituir cada NA por um não-AN mais recente anterior a ele. Extremamente útil quando se lida com uma série temporal com alguns furos & # 8221; e quando esta série temporal é subsequentemente usada como entrada para uma função R que não aceita argumentos com NAs. No exemplo, crio uma série temporal de preços aleatórios e, artificialmente, incluo alguns NAs e os substituo pelo valor mais recente.
charts. PerformanceSummary (package PerformanceAnalytics): Para um conjunto de devoluções, crie um gráfico de índice de riqueza, barras para desempenho por período e gráfico submerso para redução. Isso é incrivelmente útil, pois exibe em uma única janela todas as informações relevantes para uma rápida inspeção visual de uma estratégia de negociação. O exemplo abaixo transforma a série de preços em um objeto xts e exibe uma janela com os 3 gráficos descritos acima.
A lista acima não é de forma alguma exaustiva, mas uma vez que você domine as funções descritas neste post, torna a manipulação de séries temporais financeiras muito mais fácil, o código mais curto e a legibilidade do código melhor.
Como de costume, qualquer comentário é bem-vindo.
Avaliação fatorial na gestão quantitativa de portfólios.
Quando se trata de gerenciar uma carteira de ações versus um benchmark, o problema é muito diferente de definir uma estratégia de retorno absoluto. No primeiro, é preciso manter mais estoques do que no segundo, onde nenhuma ação pode ser detida se não houver oportunidade suficiente. A razão para isso é o erro de rastreamento. Isso é definido como o desvio padrão do retorno da carteira menos o retorno de referência. Quanto menos ações forem mantidas em relação a um benchmark, maior será o erro de rastreamento (por exemplo, maior risco).
A análise a seguir é amplamente inspirada no livro "Active Portfolio Management" # 8221; por Grinold & amp; Kahn Esta é a bíblia para qualquer pessoa interessada em administrar um portfólio em relação a um benchmark. Eu encorajo fortemente qualquer pessoa com interesse no tópico a ler o livro do começo ao fim. É muito bem escrito e estabelece as bases da gestão sistemática de carteiras ativas (não tenho nenhuma afiliação ao editor ou aos autores).
Aqui, estamos tentando classificar com a maior precisão possível as ações no universo de investimento em uma base de retorno a termo. Muitas pessoas criaram muitas ferramentas e inúmeras variantes dessas ferramentas foram desenvolvidas para conseguir isso. Neste post concentro-me em duas métricas simples e amplamente utilizadas: Coeficiente de Informação (IC) e Quantiles Return (QR).
O CI fornece uma visão geral da capacidade de previsão do fator. Mais precisamente, isso é uma medida de quão bem o fator classifica os estoques em uma base de retorno a termo. O IC é definido como a correlação de classificação (ρ) entre a métrica (por exemplo, fator) e o retorno para a frente. Em termos estatísticos, a correlação de postos é uma medida não paramétrica da dependência entre duas variáveis. Para uma amostra de tamanho n, as n pontuações brutas são convertidas em classificações e ρ é calculado a partir de:
O horizonte para o retorno para frente tem que ser definido pelo analista e é uma função do turnover da estratégia e da decadência alfa (isso tem sido objeto de extensa pesquisa). Obviamente, os CIs devem ser o mais alto possível em termos absolutos.
Para o leitor atento, no livro de Grinold & amp; Kahn é uma fórmula que liga a Relação de Informação (IR) e IC: com amplitude sendo o número de apostas independentes (trades). Essa fórmula é conhecida como a lei fundamental do gerenciamento ativo. O problema é que, muitas vezes, definir com precisão a amplitude não é tão fácil quanto parece.
Para ter uma estimativa mais precisa do fator poder preditivo, é necessário dar um passo além e agrupar os estoques por quantis de valores de fatores e, em seguida, analisar o retorno médio a termo (ou qualquer outra métrica de tendência central) de cada um deles. quantis. A utilidade desta ferramenta é simples. Um fator pode ter um bom IC, mas seu poder preditivo pode ser limitado a um pequeno número de ações. Isso não é bom, pois um gerente de portfólio terá que escolher ações dentro de todo o universo para cumprir sua restrição de erro de rastreamento. Bons retornos quantílicos são caracterizados por uma relação monótona entre os quantis individuais e os retornos futuros.
Todas as ações no índice S & amp; P500 (no momento da redação). Obviamente, há um viés de sobrevivência: a lista de ações no índice mudou significativamente entre o início e o final do período de amostragem, no entanto, é bom o suficiente apenas para fins ilustrativos.
O código abaixo faz o download dos preços das ações individuais no S & amp; P500 entre janeiro de 2005 e hoje (leva um tempo) e transforma os preços brutos em retorno nos últimos 12 meses e no último mês. O primeiro é o nosso fator, o último será usado como medida de retorno para frente.
Abaixo está o código para calcular o Coeficiente de Informação e o Retorno de Quantiles. Observe que eu usei quintis neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles, etc.) pode ser usado. isso realmente depende do tamanho da amostra, do que você quer capturar e do tempo em que deseja ter uma visão geral ampla ou se concentrar nas caudas de distribuição. Para estimar os retornos dentro de cada quintil, a mediana tem sido usada como o estimador de tendência central. Essa medida é muito menos sensível a outliers do que a média aritmética.
E finalmente o código para produzir o gráfico de retorno Quantiles.
3 & # 8211; Como explorar as informações acima?
No gráfico acima, o Q1 é mais baixo nos últimos 12 meses e o Q5, o mais alto. Há um aumento quase monótono no retorno dos quantis entre Q1 e Q5, o que indica claramente que os estoques que caem em Q5 superam aqueles que caem em Q1 em cerca de 1% ao mês. Isso é muito significativo e poderoso para um fator tão simples (não é realmente uma surpresa, ainda que & # 8230;). Portanto, há maiores chances de vencer o índice superpondo as ações no Q5 e subestimando as que caem no primeiro trimestre em relação ao benchmark.
Um IC de 0,0206 pode não significar muito em si, mas é significativamente diferente de 0 e indica um bom poder de previsão dos últimos 12 meses de retorno geral. Testes de significância formal podem ser avaliados, mas isso está além do escopo deste artigo.
A estrutura acima é excelente para avaliar a qualidade dos fatores de investimento, no entanto, há várias limitações práticas que precisam ser abordadas para a implementação na vida real:
Reequilíbrio: Na descrição acima, é assumido que no final de cada mês a carteira é totalmente reequilibrada. Isso significa que todas as ações que caíram no 1T estão abaixo do peso e todas as ações que caíram no 5ºT estão com sobrepeso em relação ao benchmark. Isso nem sempre é possível por razões práticas: algumas ações podem ser excluídas do universo de investimentos, existem restrições sobre o peso da indústria ou do setor, há restrições no volume de negócios etc. & # 8230; Custos de Transação: Isso não foi levado em conta na análise acima e isso é um sério freio para a implementação da vida real. Considerações de rotatividade são geralmente implementadas na vida real em uma forma de penalidade na qualidade do fator. Coeficiente de transferência: Esta é uma extensão da lei fundamental da gestão ativa e relaxa a suposição do modelo de Grinold de que os gerentes não enfrentam restrições que os impeçam de traduzir suas percepções de investimentos diretamente em apostas de portfólio.
E, finalmente, estou espantado com o que pode ser alcançado em menos de 80 linhas de código com o R & # 8230;
Como de costume, qualquer comentário é bem-vindo.
Risco como uma Variável de Sobrevivência & # 8221;
Me deparo com muitas estratégias na blogosfera, algumas são interessantes, algumas são uma completa perda de tempo, mas a maioria compartilha uma característica comum: pessoas desenvolvendo essas estratégias fazem sua lição de casa em termos de análise do retorno, mas muito menos atenção é dada ao lado do risco sua natureza aleatória. Eu vi comentários como "um rebaixamento de 25% em 2011, mas um excelente retorno geral". Bem, a minha aposta é que ninguém na terra permitirá que você experimente uma perda de 25% com seu dinheiro (a menos que acordos especiais estejam em vigor). No mundo dos fundos de hedge, as pessoas têm muito pouca tolerância ao saque. Geralmente, como um novo operador em um fundo de hedge, supondo que você não tenha reputação, você tem muito pouco tempo para se provar. Você deve ganhar dinheiro a partir do primeiro dia e continuar fazendo isso por alguns meses antes de ganhar um pouco de credibilidade.
Primeiro, digamos que você começou mal e perdeu dinheiro no começo. Com um rebaixamento de 10%, você certamente está fora, mas mesmo com um rebaixamento de 5%, as chances de ver sua alocação reduzida são muito altas. Isso tem implicações significativas em suas estratégias. Suponhamos que, se você perder 5%, sua alocação será dividida por 2 e você voltará à sua alocação inicial somente quando ultrapassar a marca d'água alta novamente (por exemplo, o levantamento voltará a 0). No gráfico abaixo, simulei o experimento com uma das minhas estratégias.
Você começa a operar em 1º de junho de 2003 e tudo vai bem até 23 de julho de 2003, onde sua curva de rebaixamento atinge o limite de -5% (** 1 **). Sua alocação é reduzida em 50% e você não cruza o limite máximo até 05 de dezembro de 2003 (** 3 **). Se você mantiver a alocação inalterada, o nível da marca d'água alta teria sido ultrapassado em 28 de outubro de 2003 (** 2 **) e até o final do ano você teria ganho mais dinheiro.
Mas vamos empurrar o raciocínio um pouco mais. Ainda no gráfico acima, suponha que você tenha muito azar e comece a negociar em meados de junho de 2003. Você atingiu o limite de rebaixamento de 10% no início de agosto e está provavelmente fora do jogo. Você teria começado no início de agosto a sua alocação não teria sido cortada e você acaba fazendo um bom ano em apenas 4 meses completos de negociação. Nesses dois exemplos, nada mudou, mas sua data de início & # 8230 ;.
O sucesso comercial de qualquer indivíduo tem alguma forma de dependência de caminho e não há muito o que fazer sobre isso. No entanto, você pode controlar o tamanho do drawdown de uma estratégia e isso deve ser tratado com muito cuidado. Um portfólio deve ser diversificado em todas as dimensões possíveis: classes de ativos, estratégias de investimento, frequências de negociação, etc & # 8230 ;. Dessa perspectiva, o risco é a sua "variável de sobrevivência". Se gerenciado corretamente, você tem a chance de permanecer no jogo por tempo suficiente para perceber o potencial de sua estratégia. Caso contrário, você não estará lá no próximo mês para ver o que acontece.
Dados Financeiros Acessíveis a partir da R - parte III.
Me deparei com uma nova fonte de dados que acho que vale a pena compartilhar: ThinkNum. Ele reúne cerca de 2.000 fontes de dados, mas mais importante, permite que o usuário manipule esses dados por meio de funções e gráficos, e há um pacote R disponível no CRAN. Os leitores interessados podem encontrar um post muito bom explorando algumas das funcionalidades aqui.
Yahoo: Cotações de ações grátis, notícias atualizadas, recursos de gerenciamento de portfólio, dados do mercado internacional, quadros de mensagens e taxas de hipoteca que ajudam a gerenciar sua vida financeira FRED: Faça o download, gráfico e acompanhe 149.000 séries temporais econômicas de 59 fontes Oanda: Moeda informações, ferramentas e recursos para investidores, empresas e viajantes Google Cotações do mercado de ações, notícias, conversões de moeda e mais. Quandl: Cotações de futuros, diariamente. O Quandl é um mecanismo de busca de dados numéricos. O site oferece acesso a vários milhões de conjuntos de dados financeiros, econômicos e sociais TrueFX: Tick-By-Tick em tempo real e taxas históricas do mercado, preços agregados e revendedores Bloomberg: notícias financeiras, notícias de negócios, notícias econômicas, cotações de ações, cotações de mercados , ações de finanças, mercados financeiros, futuros de ações, finanças pessoais, finanças pessoais, fundos mútuos, calculadoras financeiras, negócios mundiais, pequenas empresas, tendências financeiras, forex trading, notícias de tecnologia, notícias financeiras bloomberg Interactive Broker: Interactive Brokers Group, Inc. é uma corretora de descontos on-line nos Estados Unidos Datastream: Datastream Professional é uma ferramenta poderosa que integra pesquisa econômica e estratégia com análise cruzada de ativos para unir de cima para baixo e de baixo para cima em uma única aplicação integrada pwt: A Penn World Table fornece paridade do poder de compra e contas de renda nacional convertidas em preços internacionais para 189 países / territórios para alguns ou todos dos anos 1950-2010 Thinknum: Thinknum traz dados financeiros de uma variedade de fontes úteis juntos em uma plataforma. Usamos esses dados para desenvolver aplicativos.
Quantmod: Especifique, construa, negoceie e analise estratégias quantitativas de negociação financeira. Quandl: Este pacote interage diretamente com a API Quandl para oferecer dados em vários formatos utilizáveis em R, bem como a capacidade de fazer upload e pesquisa de TFX: TrueFX (tm) para streaming gratuito em tempo real e dados históricos do mercado tick-by-tick para taxas interbancárias de câmbio com detalhes em milissegundos Rbbg: Lida com dados do aplicativo de dados financeiros Bloomberg IBrokers: Fornece acesso R nativo à Interactive Interkers Trader Workstation API rdatastream: O RDatastream é uma interface R para a API SOAP do Thomson Dataworks Entreprise (não gratuita), com algumas funções convenientes para recuperar dados do Datastream especificamente. Este pacote requer credenciais válidas para esta API pwt: A Penn World Table fornece paridade de poder de compra e contas de renda nacional convertidas em preços internacionais para 189 países / territórios por alguns ou todos os anos 1950-2010 fImport: Rmetrics é o principal software de código aberto solução para o ensino e treinamento de finanças quantitativas. fImport é o pacote para Importação de dados econômicos e financeiros Thinknum: Este pacote interage diretamente com a API do Thinknum para oferecer dados em vários formatos utilizáveis em R.
Backtesting uma estratégia de negociação.
Pedi Análise de Séries Temporais e Suas Aplicações: Com Exemplos R (Textos Springer em Estatísticas) para me ajudar na série temporal em curva de aprendizado R. Até agora, o que eu vi parece bom. O autor tem uma boa página com os problemas em R e séries temporais. O livro deve chegar até o final da semana.
Nesse meio tempo, me deparei com uma estratégia de negociação enquanto lia um artigo sobre o serviço “Over My Shoulder” de John Mauldin (que recomendo muito). O ponto crucial disso foi que no mercado de urso que começou com o crash da bolha tecnológica, uma estratégia de apostar na reversão da média do S & P500 gerou retornos significativos. Naturalmente eu queria testar.
Por favor note, eu não estou recomendando nada que se segue. Faça sua lição de casa e fale com um profissional de investimento se tiver dúvidas.
A estratégia é prolongar o S & P500 quando o mercado fechar ao máximo nos últimos 3 dias. Inverta o negócio e vá muito longe quando o mercado fechar no mínimo nos últimos 3 dias. Os ETFs tornam essa estratégia relativamente fácil de negociar. O SPY será o nosso veículo por ser comprido o S & P500 e o SH será o nosso veículo para ser curto.
O SH começou a operar em 21/06/2006. Nós focamos nosso backtesting a partir desse ponto até agora.
Usando a função importSeries () que criamos anteriormente, obtenha todos os valores para SPY e SH.
Precisamos criar mais timeSeries para segurar.
Comments
Post a Comment