Thursday, 19 April 2018

Estratégia de negociação em r


Estratégia de negociação em r
Obter via App Store Leia este post em nosso aplicativo!
R: Backtesting uma estratégia de negociação. Iniciantes para quantmod e R.
Sou muito novo em R e estou tentando fazer backtest de uma estratégia que já programei no WealthLab.
Várias coisas que eu não entendo (e isso não funciona, obviamente :)
Eu não obtenho os Preços Fechar bem em um vetor. ou algum tipo de vetor, mas começa com estrutura e eu realmente não entendo o que essa função faz. É por isso que a minha série [1] provavelmente não funciona.
n & lt; - nrow (série) também não funciona, mas eu preciso disso para o Loop.
Então eu acho que se eu obtiver essas 2 perguntas respondidas, minha estratégia deve funcionar. Eu sou muito grato por qualquer ajuda .. R parece bastante complicado, mesmo com a experiência de programação em outras línguas.
Começando com a segunda questão.
Então, se você quer trabalhar no objeto xts real, você precisa usar get.
Sobre sua primeira pergunta - eu não acho que você realmente precise puxar os dados como um vetor - o objeto xts é uma matriz indexada por data e é fácil trabalhar com ela. Se você ainda deseja obter os dados que você pode usar.
Agora, para começar com simples back testing de estratégias, sugiro trabalhar nas etapas a seguir.
defina sua estratégia. 2. crie uma matriz ou adicione uma coluna ao seu objeto xts que representará sua posição para cada dia. 1 para long, 0 para no position e -1 para short (mais tarde você pode jogar com o número de alavancagem). 3. multiplique cada dia de retorno com a posição e você obterá o seu vetor de retorno da estratégia. 4. examinar os resultados - minha recomendação é PerformanceAnalytics.
estratégia simples - compre quando estiver perto da SMA20, venda abaixo.

Negociação FOSS.
Negociação Algorítmica com Software Livre de Código Aberto.
Sábado, 26 de março de 2011.
Como backtest uma estratégia em R.
A função getSymbols no quantmod simplifica essa etapa se você puder usar dados diários do Yahoo Finance. Existem também "métodos" (não no sentido estrito) para extrair dados de outras fontes (FRED, Google, Oanda, R salvar arquivos, bancos de dados, etc.). Você também pode usá-los como um modelo para escrever uma função personalizada para um determinado fornecedor que você usa.
Etapa 2: crie seu indicador.
O pacote TTR contém uma infinidade de indicadores. Os indicadores são escritos para facilitar a sua combinação de maneiras criativas e não convencionais. Começando com a revisão 106 na R-forja, o TTR possui um indicador DVI.
Etapa 3: construa sua regra de negociação.
Como essa regra de negociação é simples - estamos 100% compridos, se o DVI estiver abaixo de 0,5 e 100% curto, caso contrário - pode ser escrito em uma única linha. Regras mais elaboradas e / ou tamanhos de posição também podem ser feitos, mas exigem mais código (RSI (2) com o dimensionamento de posição é um exemplo de regras de dimensionamento de posição mais complexas). Observe também que o vetor de sinal está defasado, o que evita o viés de antecipação.
Etapa 4: As regras de negociação / curva de capital.
Como no exemplo de Damian, o código abaixo é uma abordagem simplificada que é sem atrito e não leva em conta o escorregamento. O código abaixo recebe o retorno percentual de hoje e o multiplica pelo tamanho do sinal / posição de ontem (sempre +/- 100% neste exemplo). Eu também subconjunto o sistema retorna para coincidir com os resultados no arquivo do Excel.
Etapa 5: avaliar o desempenho da estratégia.
Damian mencionou a importância de avaliar sua estratégia. Felizmente para usuários de R, o pacote PerformanceAnalytics facilita isso. Com algumas linhas de código, podemos visualizar os levantamentos, os riscos negativos e um resumo de desempenho.
Isso é tudo o que há para fazer backtesting de uma estratégia simples em R. Não foi tão intimidante, foi? Por favor, deixe um feedback se você está movendo o seu backtesting do Excel para o R e há algo que você está pendurado ou você tem uma dica incrível que você gostaria de compartilhar.

Estratégia de Negociação Quantitativa Usando R: Um Guia Passo a Passo.
Neste post vamos discutir sobre a construção de uma estratégia de negociação usando R. Antes de nos concentrarmos nos jargões de negociação usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Existem mais de 4000 pacotes adicionais, 18.000 mais membros do grupo do LinkedIn e cerca de 80 grupos Meetup atualmente existentes. É uma ferramenta perfeita para análise estatística, especialmente para análise de dados. A configuração concisa do Comprehensive R Archive Network sabe como CRAN fornece a lista de pacotes, juntamente com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise que precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.
Processo de quatro etapas de qualquer estratégia básica de negociação.
Teste de formação de hipóteses.
Nossa hipótese é formulada como “mercado é revertido à média”. A reversão à média é uma teoria que sugere que os preços acabam voltando ao valor médio. A segunda etapa envolve testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e calculamos indicadores, sinais e métricas de desempenho. A fase de testes pode ser dividida em três etapas, obtendo os dados, escrevendo a estratégia e analisando a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. NSE tem um volume enorme para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço do Open-High-Low-Close do mesmo.
Nós definimos um nível de limiar para comparar as flutuações no preço. Se o preço aumenta / diminui, atualizamos a coluna de limite. O preço de fechamento é comparado com a faixa superior e com a faixa inferior. Quando a banda superior é cruzada, é um sinal para vender. Da mesma forma quando a banda inferior é cruzada, é um sinal para vender.
A seção de codificação pode ser resumida como segue,
Uma visão de helicóptero para a saída da estratégia é dada no diagrama abaixo.
Assim, nossa hipótese de que o mercado é a reversão da média é suportada. Como este é o back-testing, temos espaço para refinar os parâmetros de negociação que melhorariam nossos retornos médios e os lucros realizados. Isso pode ser feito definindo diferentes níveis de limite, regras de entrada mais restritas, stop loss etc. Pode-se escolher mais dados para back-testing, usar abordagem bayseiana para configurar o limiar, considerar a volatilidade.
Uma vez que você esteja confiante sobre a estratégia de negociação apoiada pelos resultados do backtesting, você pode entrar em negociações ao vivo. O ambiente de produção é um grande tópico em si e está fora do escopo no contexto do artigo. Para explicar em breve isso envolveria escrever a estratégia em uma plataforma de negociação.
Como mencionado anteriormente, estaríamos construindo o modelo usando o pacote quantstrat. O Quantstrat fornece uma infraestrutura genérica para modelar e fazer backtest de estratégias quantitativas baseadas em sinal. É uma camada de abstração de alto nível (construída em xts, FinancialInstrument, blotter, etc.) que permite construir e testar estratégias em poucas linhas de código.
As principais características do quantstrat são,
Suporta estratégias que incluem indicadores, sinais e regras Permite que estratégias sejam aplicadas a portfólios de múltiplos ativos Suporta os tipos de pedidos de mercado, limite, stoplimit e stoptrailing Suporta o dimensionamento de pedidos e a otimização de parâmetros.
Neste post, construímos uma estratégia que inclui indicadores, sinais e regras.
Para um modelo baseado em sinal genérico, seguem os objetos que devem ser considerados,
Instrumentos - Contém indicadores de dados de mercado - Valores quantitativos derivados de dados de mercado Sinais - Resultado da interação entre dados de mercado e indicadores Regras - Gerar ordens usando dados de mercado, indicadores e sinais.
Sem muita demora, vamos discutir a parte de codificação. Nós preferimos R studio para codificação e insistimos que você use o mesmo. Você precisa ter certos pacotes instalados antes de programar a estratégia.
O seguinte conjunto de comandos instala os pacotes necessários.
Depois de instalar os pacotes, importe-os para uso posterior.
Leia os dados do arquivo csv e converta-os em objeto xts.
Inicializamos o portfólio com o estoque, a moeda, o patrimônio inicial e o tipo de estratégia.
Adicione o limite de posição se você deseja negociar mais de uma vez no mesmo lado.
Crie o objeto de estratégia.
Nós construímos uma função que calcula os limiares que queremos trocar. Se o preço se mover pelo thresh1, atualizamos o limite para o novo preço. Novas bandas para negociação são Threshold +/- Thresh2. A saída é um objeto xts, embora usemos a função reclass para garantir.
Adicione o indicador, o sinal e a regra de negociação.
Execute a estratégia e dê uma olhada no livro de pedidos.
Atualize o portfólio e visualize as estatísticas do comércio.
Aqui está o código completo.
Uma vez que você esteja familiarizado com essas noções básicas, dê uma olhada em como começar a usar o pacote quantimod em R. Ou, caso você seja bom em C ++, dê uma olhada em uma estratégia de exemplo codificada em C ++.
Se você é um profissional de varejo ou um profissional da área de tecnologia que deseja iniciar sua própria agência de negociação automatizada, comece a aprender o comércio de algoritmos hoje mesmo! Comece com conceitos básicos como arquitetura de negociação automatizada, microestrutura de mercado, sistema de backtesting de estratégia e sistema de gerenciamento de pedidos.
Comentários estão fechados.
Posts populares recentes.
Artigos mais visitados da semana.
Jobs para usuários de R.
É alimentado por WordPress usando um design bavotasan.
Direitos autorais & copy; 2017 R-blogueiros. Todos os direitos reservados. Termos e Condições para este site.

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.

Troca Algorítmica no R Tutorial.
Neste post, mostrarei como usar o R ​​para coletar as ações listadas no loyal3, obter dados históricos do Yahoo e, em seguida, executar uma estratégia de negociação algorítmica simples. Ao longo do caminho, você aprenderá alguns scraping da web, uma função atingindo uma API de finanças e uma htmlwidget para criar um gráfico interativo de séries temporais.
Para este post, um algoritmo de negociação é definido como um conjunto de regras que acionam um evento de compra ou venda, em vez de um modelo preditivo ou previsão de série temporal. Este é o tipo mais simples de algoritmo de negociação, mas se você estiver interessado em aprofundar as finanças com R, eu o encorajaria a fazer o curso do DataCamp na modelagem de uma estratégia de negociação quantitativa em R.
Fundo.
Em 2015, comecei a investir um pouco na leal3. Seu serviço é incomum e um ótimo lugar para começar sua jornada de investimento. Em vez de cobrar do investidor pelos negócios, o loyal3 cobra das empresas a lista em sua plataforma. A premissa é que as pessoas que gostam do serviço de uma empresa também compram as ações e, ao fazê-lo, tornam-se fortes defensores da marca. Tornar a plataforma mais atraente é que você pode comprar ações fracionárias. Então, você pode entrar nessa ação de US $ 800 por apenas US $ 10 e comprar outra fração de US $ 10 cada vez que tiver um pouco de dinheiro extra no final do mês. Claro que há custos de fricção, já que você tem que negociar no Windows e todo o seu portfólio está limitado a.
70 ações, mas loyal3 representa uma maneira divertida e de baixo custo de explorar o treinamento de capital. Você pode colocar pele real no jogo por tão pouco quanto $ 10!
Para ser claro, eu tenho as contas típicas de aposentadoria e investimento, mas eu gosto da interface limpa do loyal3 no aplicativo e da falta de taxas. Acabo verificando meu portfólio feal3 divertido com mais frequência do que meus fundos mútuos, simplesmente porque é fácil e divertido ver o desempenho das ações que escolhi diretamente.
As ações que estão disponíveis no loyal3.
Configurando seu espaço de trabalho.
Para começar, carregue as bibliotecas em seu ambiente. Eu quase sempre uso rvest para web scraping nos dias de hoje. Existem outros pacotes que funcionam, incluindo o RSelenium, mas eu gosto da facilidade com que a rvest pode ser executada.
O segundo pacote, pbapply, é opcional porque simplesmente adiciona uma barra de progresso às funções de aplicação. Como você pode estar raspando centenas de páginas da Web, uma barra de progresso pode ser útil para estimar o tempo.
Em seguida, o TTR é um pacote que comecei a explorar. A biblioteca é usada para construir "Regras de negociação técnica". Embora você aprenda um simples algoritmo de negociação neste post, o pacote TTR pode realizar cálculos mais sofisticados e vale a pena aprender.
A biblioteca de gráficos é um wrapper para uma biblioteca de gráficos JavaScript de código-fonte aberto e rápida. É um dos htmlwidgets que torna o gráfico R mais dinâmico e parte de um arquivo html em vez de uma imagem estática. Por último, o pacote de lubridate é usado para fácil manipulação de data.
Coleção de dados.
Todas as ações loyal3 estão listadas em uma única página. Antes de poder consultar os preços das ações diárias individuais para construir o seu algoritmo de negociação, você precisa coletar todos os tickers de stockers disponíveis. A primeira coisa a fazer é declarar stock. list como uma string de URL. Em seguida, use read_html () para que sua sessão R crie uma sessão da Internet e colete todas as informações html na página como um conjunto de nós XML. A página CSS tem um ID chamado "nome da empresa". Use isso como um parâmetro ao chamar html_nodes () para selecionar apenas os dados XML associados a esse nó. Por fim, use html_text () para que os valores de texto reais dos nomes das empresas sejam coletados.
Para examinar as ações disponíveis no loyal3, você pode imprimir o objeto stockss. names no seu console. Isso retorna o nome da empresa como um vetor de texto.
A fim de pesquisar os preços das ações, você precisa obter o primeiro símbolo. Quando você está no site loyal3, pode clicar no bloco da empresa para carregar uma página com um símbolo e outras informações da empresa.
Usando html_nodes () em estoques, você puxa todos os nós marcados com um "a". Em HTML, o & lt; a & gt; tag define um hiperlink que é usado para vincular o formulário de uma página a outra. Dentro da tag de hyperlink, o "href" refere-se ao endereço exato da URL. Então html_attr () irá extrair o URL para todos os links da página se você passar em "href".
Depois de fazer uma inspeção manual, descobri que os links 54 a 123 da página representam as páginas da empresa de que preciso para obter as informações do ticker. A última linha usa paste0 () para concatenar a string de URL base "loyal3" às páginas específicas da empresa, como "/ WALMART". Por exemplo, loyal3 / WALMART:
Em cada uma das páginas da empresa, há uma descrição, um preço de fechamento recente e o ticker. Todas as páginas da empresa são organizadas da mesma forma que a função personalizada get. ticker () pode ser usada para extrair o símbolo do ticker.
Dentro de uma página da empresa, há uma tabela chamada "preço do vendedor". A função irá navegar para uma página da empresa, identificar a tabela apropriada, extrair o texto com html_text (). Por fim, usando sub () juntamente com a expressão regular ^ ([[: alpha:]] *). * E \\ 1 manterá todos os caracteres alfabéticos. O resultado é que os caracteres especiais, como $ e qualquer caractere numérico, como o preço de fechamento, são removidos. Como a função lê cada uma das 70 páginas, ela coletará apenas o ticker de ações.
A página de estoque loyal3 para o Alibaba, onde você vê a tabela que contém o ticker da ação, BABA, está abaixo do texto em negrito.
Armado com sua função personalizada, use o pblapply () para aplicá-la a cada um dos links do estoque. Esses links contêm a página de cada empresa. O objeto resultante, stock. tickers, é uma lista de códigos de ações individuais com cada elemento correspondente a uma empresa individual.
Uma maneira de alterar uma lista de elementos em um objeto simples é com do. call (). Aqui, você está aplicando o rbind para enfileirar cada elemento da lista em um único vetor. Por último, você cria um quadro de dados com as informações de símbolo e nome da empresa.
Para ser consistente em sua análise, você pode querer limitar a quantidade de informações históricas coletadas em cada ação. A função Sys. Data () armazenará um objeto de data como ano, mês e dia. Usar anos com um inteiro é uma maneira de subtrair uma quantidade específica de tempo do objeto start. date.
Para obter os dados de finanças do Yahoo, o objeto de data deve ser alterado para objetos de caractere simples sem traço. Usando a função de substituição global gsub () em start. date e end. date irá mudar a classe e simultaneamente remover traços. Dentro de gsub (), passe o padrão de caracteres para procurar e, em seguida, os caracteres de substituição. Nesse caso, o padrão substituto é um caractere vazio entre aspas. O último parâmetro é o objeto ao qual o gsub () será aplicado.
A função TTR () getYahooData () aceita um símbolo de ação e uma data inicial e final. A função retorna um quadro de dados que contém informações sobre séries temporais. Cada linha é uma data e as colunas contêm informações como os preços "Abrir", "Alto", "Baixo" e "Fechar" para um patrimônio. Como você está procurando várias empresas, pode usar o lapply () ou o pblapply (). Passe o vetor de símbolos da empresa e, em seguida, a função getYahooData () e, em seguida, a informação da data. Os objetos de data são reciclados a cada vez que getYahooData () é aplicado a um símbolo de ação.
Para fazer a seleção da lista retornada, stocks. ts, mais fácil de navegar, você pode adicionar nomes aos elementos da lista. Usando nomes com o objeto stocks. ts, declare os nomes como o vetor de símbolo $ original.
Ao trabalhar com listas grandes, gosto de examinar o objeto resultante para garantir que o resultado seja o esperado. Agora que os elementos têm nomes, você pode referenciá-los diretamente. Neste exemplo, você está examinando as 6 primeiras linhas da AMC Entertainment Holdings (AMC). Usar head () na lista enquanto faz referência a $ AMC retornará uma parte da série temporal para este estoque:
Examinando os dados de estoque.
Quando ouço comentaristas de notícias financeiras, muitas vezes se referem a gráficos. Apesar da negociação de alta frequência e gestão ativa realizada por outros, muitos pequenos investidores ainda se referem a gráficos para obter uma visão. O objeto da série temporal pode ser exibido rapidamente usando o gráfico. Passe na lista referindo-se ao elemento nomeado, como $ AMC e, em seguida, à coluna que você deseja exibir, aqui $ Close.
O gráfico anterior é estático e não é muito interessante.
Vamos usar uma biblioteca JavaScript para criar um gráfico que você possa explorar. Nesse trecho de código, você pode observar o operador% g% & gt;% Ђќ ou pipe. O operador de pipe é uma boa maneira de escrever código conciso. Ele encaminha um objeto para a próxima função sem forçá-lo a reescrever um nome de objeto como você fez anteriormente neste post.
Neste exemplo, você cria um gráfico que se refere ao estoque do Twitter, $ TWTR e, em seguida, a coluna que deseja plotar, $ Close. Dentro do dygraph, main adiciona um título que é especificado entre as aspas. Usando o% em% este objeto inteiro é encaminhado para a próxima função dyRangeSelector (). Você pode especificar um intervalo de datas padrão usando c () com uma cadeia de data inicial e final. O objeto HTML resultante é uma série temporal dinâmica para o estoque do Twitter com um controle deslizante de data na parte inferior.
Lembre-se, para alterar o patrimônio exibido, altere o símbolo do ticker na lista stocks. ts e, em seguida, o título do gráfico.
Este é um dygraph básico para o estoque do Twitter.
Uma estratégia de negociação simples: tendência seguinte.
Operadores de alta frequência e fundos de hedge usam modelos sofisticados e abordagens baseadas em regras para executar negociações. Se você quiser aprender mais, sugiro visitar o quantopian para abordagens avançadas. Para abordagens mais simples, comece com esta página na Investopedia.
No código abaixo, você visualizará uma estratégia de negociação de momentum simples. Basicamente, você desejaria calcular as médias móveis de 200 dias e 50 dias para um preço de ação. Em qualquer dia em que a média móvel de 50 dias estiver acima da média móvel de 200 dias, você compraria ou manteria sua posição. Nos dias em que a média de 200 dias é superior à média móvel de 50 dias, você venderia suas ações. Essa estratégia é chamada de estratégia de acompanhamento de tendências. A natureza positiva ou negativa entre as duas médias baseadas no tempo representa o momento do estoque.
O pacote TTR fornece SMA () para calcular a média móvel simples. Neste snippet de código, você está examinando os primeiros 6 valores para as médias móveis de 200 e 50 dias do Twitter. SMA () funciona passando os dados da série temporal para um estoque e uma coluna específica, como Close. Este é um único vetor de preços de fechamento para o estoque de TWTR. O segundo parâmetro é um inteiro representando o número de observações para a média móvel. Sem usar head (), a função SMA () retornará todos os valores.
Agora que você examinou a função de média móvel em detalhes, é necessário aplicar a cada uma das 70 ações. stocks. ts é uma lista de 70 quadros de dados contendo dados de estoque individuais. A quarta coluna de cada quadro de dados contém o preço de fechamento que queremos usar para as médias móveis.
A função personalizada mov. avgs () aceita um único quadro de dados de estoque para calcular as médias móveis. A primeira linha seleciona os preços de fechamento porque indexa [, 4] para criar stock. close. Em seguida, a função usa ifelse para verificar o número de linhas no quadro de dados. Especificamente, se a nota no quadro de dados for menor que (2 * 260), a função criará um quadro de dados de médias móveis com ЂњNAЂќ.
Eu escolhi esse número porque há cerca de 250 dias de negociação por ano, então isso irá verificar se a série temporal tem cerca de 2 anos ou mais de duração. Às vezes, o Loyal3 pode obter acesso a IPOs e, se o estoque for público recente, não haverá dados suficientes para uma média móvel de 200 dias. No entanto, se o valor nrow for maior que 2 * 260, a função criará um quadro de dados com os dados originais, juntamente com as médias móveis de 200 e 50 dias como novas colunas. Usando colnames, declaro os nomes das colunas. A última parte da função usa complete. cases para verificar os valores na coluna média móvel de 200 dias. Todas as linhas que não possuem um valor são descartadas no resultado final.
Armado com esta função mov. avgs (), você pode usar o pblapply () para adicionar os cálculos da média móvel a cada um dos 70 quadros de dados.
Use o código abaixo para visualizar as médias móveis de um estoque usando um gráfico. Mais uma vez, esse código está usando o operador %% para encaminhar objetos. A função dygraph () aceita o quadro de dados stocks. ts $ FOX. Especificamente, o quadro de dados é indexado pelo nome da coluna com c ('sma_200', 'sma_50'). Este objeto é passado para dySeries () nas próximas 2 linhas. Você pode referir-se a uma coluna pelo nome, de modo que dySeries () represente uma linha para os valores "sma" 50 e "sma200" nas linhas 2 e 3. Esse objeto é encaminhado novamente para o dyRangeSelector () para ajustar a altura do seletor. Por fim, adicionei alguns sombreados para definir os períodos em que você gostaria de comprar ou manter o patrimônio e um período em que deveria ter vendido suas ações ou ficado fora, dependendo de sua posição.
Aqui está o resultado final em uma série temporal interativa.
As médias móveis da FOX com regiões sombreadas para compra / manutenção versus venda.
Conclusão.
Como um operador algorítmico iniciante, você não precisa plotar todas as 70 ações. Em vez disso, você deseja executar o código todos os dias e adicionar uma maneira programática de identificar ações que se ajustem ao método baseado em regras, "compre se a média móvel de 50 dias estiver acima da média móvel de 200 dias". Ao revisar o gráfico anterior, a seção verde é uma ocasião em que você compraria o patrimônio da FOX. A seção vermelha representa a hora de vender suas ações e não entrar novamente.
Como o gráfico é interativo, você pode usar o controle deslizante para redimensionar o visual. Com base nessa abordagem de negociação de algo simples, agora pode ser um bom momento para comprar a FOX! 30 de dezembro de 2016 foi um dia de negociação em que a média móvel de 50 dias movimentou US $ 0,01 acima da média móvel de 200 dias!
A seção ampliada do capital da FOX.
Claro, lembre-se que todos os investimentos podem perder valor. Para saber mais sobre finanças e comércio de algoritmos, confira os cursos do DataCamp aqui.

O Trader R.
Usando R e ferramentas relacionadas em Finanças Quantitativas.
Arquivo para as Estratégias de Negociação & # 8216; & # 8217; Categoria.
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.
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.
Como de costume, qualquer comentário é bem-vindo.
Um aplicativo simples e brilhante para monitorar as estratégias de negociação & # 8211; Parte II.
Esta é uma continuação do meu post anterior & # 8220; Um aplicativo simples e simples para monitorar as estratégias de negociação & # 8220 ;. Eu adicionei algumas melhorias que tornam o aplicativo um pouco melhor (pelo menos para mim!). Abaixo está a lista de novos recursos:
Um arquivo. csv de amostra (aquele que contém os dados brutos) A & # 8220; EndDate & # 8221; caixa suspensa que permite especificar o final do período. A & # 8220; Risco & # 8221; página contendo uma análise de VaR e um gráfico de pior desempenho ao longo de vários horizontes A & # 8220; How To & # 8221; página explicando como usar e adaptar o aplicativo às necessidades individuais.
Eu também fiz o aplicativo totalmente auto-contido. Agora ele está disponível como um produto autônomo e não é necessário ter o R ​​/ RStudio instalado em seu computador para executá-lo. Ele pode ser baixado da conta do Google R Trader Google. Esta versão do aplicativo é executada usando o R portátil e o Chrome portátil. Para o leitor atento, este link explica detalhadamente como empacotar um aplicativo Shiny em um aplicativo de desktop (somente Windows por enquanto).
1 & # 8211; Como instalar o & amp; execute o aplicativo no seu computador.
Criar uma pasta específica Descompacte o conteúdo do arquivo. zip nessa nova pasta. Altere os caminhos no arquivo runShinyApp para corresponder às suas configurações Para executar o aplicativo, basta ativar o arquivo run. vbs. Eu também incluí um ícone (RTraderTradingApp. ico) se você quiser criar um atalho na sua área de trabalho.
ui. R: controla o layout e a aparência do servidor de aplicativos. R: contém as instruções necessárias para criar o aplicativo. Você pode carregar quantas estratégias quiser, contanto que o arquivo csv correspondente tenha o formato correto (veja abaixo). shinyStrategyGeneral. R: carrega os pacotes necessários e inicia o aplicativo.
3 & # 8211; Como adicionar uma estratégia de negociação?
Crie o arquivo. csv correspondente no diretório direito Crie uma nova entrada na função reativa de dados (dentro do arquivo server. R) Adicione um elemento extra ao parâmetro choice na primeira selectInput no sidebarPanel (dentro do arquivo ui. R) . O nome do elemento deve corresponder ao nome da nova entrada acima.
Remova a entrada na função reativa de dados correspondente à estratégia que você deseja remover (dentro do arquivo server. R). Remova o elemento no parâmetro choice na primeira selectInput no sidebarPanel correspondente à estratégia que você deseja remover (dentro da interface do usuário). Arquivo. R).
Por favor, sinta-se à vontade para entrar em contato caso tenha alguma sugestão.
Um aplicativo simples e brilhante para monitorar as estratégias de negociação.
Em um post anterior, mostrei como usar R, Knitr e LaTeX para criar um relatório de estratégia de modelo. Este post vai um passo além, tornando a análise interativa. Além da interatividade, o Aplicativo Brilhante também resolve dois problemas:
Agora posso acessar todas as minhas estratégias de negociação a partir de um único ponto, independentemente do instrumento negociado. Juntamente com a interatividade brilhante, permite uma comparação mais fácil. Eu posso me concentrar em um período de tempo específico.
O código usado neste post está disponível em um repositório Gist / Github. Existem essencialmente 3 arquivos.
ui. R: controla o layout e a aparência do aplicativo. server. R: contém as instruções necessárias para criar o aplicativo. Ele carrega os dados e os formata. Há um arquivo csv por estratégia, cada um contendo pelo menos duas colunas: date e retorna com o seguinte formato: (& # 8220; 2010-12-22 & # 8243;, & # 8221; 0.04% & # 8221;). Você pode carregar quantas estratégias quiser, desde que elas tenham o formato correto. shinyStrategyG eneral. R: carrega os pacotes necessários e inicia o aplicativo.
Este aplicativo está provavelmente longe de ser perfeito e certamente o aprimorarei no futuro. Sinta-se à vontade para entrar em contato caso tenha alguma sugestão.
Um grande obrigado à equipe do RStudio / Shiny por uma ótima ferramenta.
Usando Algoritmos Genéticos no Comércio Quantitativo.
A pergunta que se deve sempre fazer quando se utiliza indicadores técnicos é o que seria um critério objetivo para selecionar os parâmetros dos indicadores (por exemplo, por que usar uma RSI de 14 dias em vez de 15 ou 20 dias?). Algoritmos genéticos (GA) são ferramentas adequadas para responder a essa pergunta. Neste post eu vou mostrar como configurar o problema em R. Antes de prosseguir, o lembrete usual: O que eu apresento neste post é apenas um exemplo de brinquedo e não um convite para investir. Também não é uma estratégia acabada, mas uma ideia de pesquisa que precisa ser mais pesquisada, desenvolvida e adaptada às necessidades individuais.
O que são algoritmos genéticos?
A melhor descrição do GA que eu descobri vem da Cybernatic Trading, um livro de Murray A. Ruggiero. Os algoritmos genéticos foram inventados por John Holland em meados da década de 1970 para resolver problemas difíceis de otimização. Este método usa a seleção natural, sobrevivência do mais apto & # 8221;. O processo geral segue as etapas abaixo:
Codifique o problema em cromossomos Usando a codificação, desenvolva uma função de adequação para avaliar o valor de cada cromossomo na solução de um determinado problema Inicialize uma população de cromossomos Avalie cada cromossomo na população Crie novos cromossomos acasalando dois cromossomos. Isso é feito mutando e recombinando dois pais para formar dois filhos (os pais são selecionados aleatoriamente, mas influenciados por sua aptidão) Avaliar o novo cromossomo Excluir um membro da população que está menos apto do que o novo cromossomo e inserir o novo cromossomo na população . Se o critério de parada for atingido (número máximo de gerações, os critérios de aptidão são bons o suficiente & # 8230;) então retorne o melhor cromossomo ou vá para o passo 4.
De uma perspectiva de negociação, GA é muito útil porque é bom em lidar com problemas altamente não-lineares. No entanto, eles exibem algumas características desagradáveis ​​que valem a pena mencionar:
Over fitting: Este é o principal problema e cabe ao analista configurar o problema de forma a minimizar esse risco. Tempo de computação: Se o problema não for definido corretamente, pode ser extremamente longo para chegar a uma solução decente e a complexidade aumenta exponencialmente com o número de variáveis. Daí a necessidade de selecionar cuidadosamente os parâmetros.
Existem vários pacotes R lidando com GA, eu escolhi usar o mais comum: rgenoud.
Preços de fechamento diários para a maioria dos ETFs líquidos do Yahoo finance, que remontam a janeiro de 2000. O período de amostragem vai de janeiro de 2000 a dezembro de 2010. O período fora da amostra começa em janeiro de 2011.
A lógica é a seguinte: a função de adequação é otimizada durante o período de amostragem para obter um conjunto de parâmetros ótimos para os indicadores técnicos selecionados. O desempenho desses indicadores é então avaliado no período fora da amostra. Mas antes disso, os indicadores técnicos devem ser selecionados.
O mercado de ações apresenta duas características principais que são familiares para qualquer pessoa com alguma experiência de negociação. Momento de longo prazo e reversão de curto prazo. Essas características podem ser traduzidas em termos de indicadores técnicos por: médias móveis cross over e RSI. Isto representa um conjunto de 4 parâmetros: Períodos de look-back para médias móveis de longo e curto prazo, período de retorno para o RSI e limiar RSI. Os conjuntos de parâmetros são os cromossomos. O outro elemento-chave é a função de fitness. Podemos querer usar algo como: máximo retorno ou taxa de Sharpe ou rebaixamento médio mínimo. A seguir, optei por maximizar o índice de Sharpe.
A implementação de R é um conjunto de 3 funções:
FunçãoFuncional: define a função de adequação (por exemplo, o índice máximo de Sharpe) a ser usado no mecanismo de negociação do Google Analytics: resumo das estatísticas de negociação para dentro e fora dos períodos de amostra para fins de comparação genoud: o mecanismo GA do pacote rgenoud.
A função genoud é bastante complexa, mas eu não vou explicar o que cada parâmetro significa, pois quero manter este post curto (e a documentação é realmente boa).
Na tabela abaixo, apresento para cada instrumento os parâmetros ótimos (período de retorno do RSI, limiar do RSI, média móvel de curto prazo e média móvel de longo prazo) juntamente com as estatísticas de entrada e saída da amostra.
Antes de comentar os resultados acima, quero explicar alguns pontos importantes. Para corresponder à lógica definida acima, limitei os parâmetros para garantir que o período de look-back para a média móvel de longo prazo seja sempre maior que a média móvel mais curta. Eu também limitei o otimizador a escolher apenas as soluções com mais de 50 negociações no período de amostragem (por exemplo, significância estatística).
No geral, os resultados fora da amostra estão longe de serem impressionantes. Os retornos são baixos mesmo se o número de negociações for pequeno para tornar o resultado realmente significativo. No entanto, há uma perda significativa de eficiência entre o período de amostragem dentro e fora do Japão (EWJ), o que muito provavelmente significa um ajuste excessivo.
Este post é destinado a dar ao leitor as ferramentas para usar corretamente o GA em uma estrutura de negociação quantitativa. Mais uma vez, é apenas um exemplo que precisa ser mais refinado. Algumas melhorias potenciais para explorar seriam:
função de fitness: maximizar o índice de Sharpe é muito simplista. A & # 8220; mais inteligente & # 8221; A função certamente melhoraria o padrão de estatísticas de negociação fora da amostra: tentamos capturar um padrão muito simples. Uma pesquisa de padrões mais aprofundada é definitivamente necessária. otimização: há muitas maneiras de melhorar a maneira como a otimização é conduzida. Isso melhoraria tanto a velocidade de cálculo quanto a racionalidade dos resultados.
O código usado neste post está disponível em um repositório Gist.

No comments:

Post a Comment