Sistema de comércio usando r


Página de Desenvolvimento R.
Pacotes R contributivos.
Abaixo está uma lista de todos os pacotes fornecidos pelo projeto Trading System Modeling.
Nota importante para binários do pacote: o R-Forge fornece esses binários apenas para a versão mais recente do R, mas não para versões mais antigas. Para instalar com êxito os pacotes fornecidos no R-Forge, você deve alternar para a versão mais recente de R ou, alternativamente, instalar a partir das fontes do pacote (.tar. gz).
Modelagem do Sistema de Negociação.
Crie códigos de status.
0 - Corrente: o pacote está disponível para download. O pacote correspondente passou verificações na plataforma Linux e Windows sem ERRORs.
1 - Programado para compilação: o pacote foi reconhecido pelo sistema de compilação e fornecido na área de teste.
2 - Construção: o pacote foi enviado para as máquinas de construção. Será construído e verificado usando a versão mais recente de Rched. Tenha em atenção que está incluído em um lote de vários pacotes. Assim, esse processo levará algum tempo para terminar.
3 - Falha na compilação: o pacote falhou ao construir ou não passou as verificações na plataforma Linux e / ou Windows. Não está disponível porque não cumpre as políticas.
4 - Conflitos: existem dois ou mais pacotes do mesmo nome. Nenhum deles será construído. Os empresários são convidados a negociar novas ações.
5 - Offline: o pacote não está disponível. O sistema de compilação pode estar offline ou o mantenedor de pacotes não desencadeou uma reconstrução (feito, por exemplo, via compromisso no repositório de pacotes).
Se o seu pacote não for exibido nesta página ou não estiver construindo, verifique o relatório de status do sistema de compilação.

QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 7 de outubro de 2018.
Neste artigo, quero mostrar-lhe como aplicar todo o conhecimento adquirido nas postagens anteriores da análise de séries temporais para uma estratégia de negociação no índice de mercado de ações S & amp; P500.
Veremos que, ao combinar os modelos ARIMA e GARCH, podemos superar de forma significativa uma abordagem "Buy-and-Hold" a longo prazo.
Visão geral da estratégia.
A idéia da estratégia é relativamente simples, mas se você quiser experimentar com isso, eu sugiro muito ler as postagens anteriores na análise de séries temporais para entender o que você está modificando!
A estratégia é realizada de forma contínua:
Para cada dia, $ n $, os dias anteriores de $ k $ dos retornos logarítmicos diferenciados de um índice de mercado de ações são usados ​​como uma janela para ajustar um ótimo modelo ARIMA e GARCH. O modelo combinado é usado para fazer uma previsão para os retornos do dia seguinte. Se a previsão é negativa, o estoque é curto no fechamento anterior, enquanto que se for positivo é desejado. Se a predição é a mesma direção que o dia anterior, nada será alterado.
Para essa estratégia usei o máximo de dados disponíveis do Yahoo Finance para o S & amp; P500. Eu peguei $ k = 500 $, mas este é um parâmetro que pode ser otimizado para melhorar o desempenho ou reduzir a redução.
O backtest é realizado de forma direta e vetorial usando R. Ele não foi implementado no backtester baseado em eventos Python até o momento. Assim, o desempenho alcançado em um sistema de comércio real seria provavelmente um pouco menor do que você poderia alcançar aqui, devido à comissão e derrapagem.
Implementação estratégica.
Para implementar a estratégia, vamos usar alguns dos códigos que criamos anteriormente na série de artigos de análise da série temporal, bem como algumas novas bibliotecas, incluindo o rugarch, que me foi sugerido por Ilya Kipnis no QuantStrat Trader.
Passarei pela sintaxe de uma forma passo a passo e apresentarei a implementação completa no final, bem como um link para o meu conjunto de dados para o indicador ARIMA + GARCH. Eu incluí o último porque me levou alguns dias no meu PC dekstop para gerar os sinais!
Você deve ser capaz de replicar meus resultados na íntegra, pois o código em si não é muito complexo, embora leve algum tempo para simular se você executá-lo na íntegra.
A primeira tarefa é instalar e importar bibliotecas necessárias em R:
Se você já possui as bibliotecas instaladas, basta importá-las:
Com isso feito, vamos aplicar a estratégia ao S & amp; P500. Podemos usar quantmod para obter dados que datam de 1950 para o índice. O Yahoo Finance usa o símbolo "^ GPSC".
Podemos então criar os retornos logarítmicos diferenciados do "Preço de fechamento" do S & amp; P500 e retirar o valor inicial de NA:
Precisamos criar um vetor, previsões para armazenar nossos valores de previsão em datas específicas. Definimos o comprimento do comprimento anterior para ser igual ao comprimento dos dados de negociação que temos menos $ k $, o comprimento da janela:
Nesta fase, precisamos fazer um ciclo todos os dias nos dados de negociação e ajustar um modelo adequado ARIMA e GARCH para a janela de rolamento de comprimento $ k $. Dado que tentamos 24 ajustes ARIMA separados e ajustamos um modelo GARCH, para cada dia, o indicador pode levar muito tempo para gerar.
Usamos o índice d como uma variável de loop e loop de $ k $ para o comprimento dos dados de negociação:
Em seguida, criamos a janela de rolagem, levando os retornos S & P500 e selecionando os valores entre $ 1 + d $ e $ k + d $, onde $ k = 500 $ para esta estratégia:
Usamos o mesmo procedimento que no artigo ARIMA para pesquisar todos os modelos ARMA com $ p \ in \ $ e $ q \ in \ $, com a exceção de $ p, q = 0 $.
Nós envolvemos a chamada arimaFit em um bloco de tratamento de exceção R tryCatch para garantir que, se não conseguirmos um ajuste para um valor particular de $ p $ e $ q $, ignoramos e seguimos para a próxima combinação de $ p $ e $ q $.
Tenha em atenção que definimos o valor "integrado" de $ d = 0 $ (este é um $ d $ diferente para o nosso parâmetro de indexação!) E, como tal, nós somos realmente um modelo ARMA, em vez de um ARIMA.
O procedimento de looping nos fornecerá o modelo ARMA "melhor", em termos do Critério de Informação Akaike, que podemos usar para alimentar nosso modelo GARCH:
No próximo bloco de código, vamos usar a biblioteca do rugarch, com o modelo GARCH (1,1). A sintaxe para isso exige que configuremos um objeto de especificação ugarchspec que leve um modelo para a variância e a média. A variância recebe o modelo GARCH (1,1) enquanto a média leva um modelo ARMA (p, q), onde $ p $ e $ q $ são escolhidos acima. Também escolhemos a distribuição sged para os erros.
Uma vez que escolhemos a especificação, realizamos o ajuste real do ARMA + GARCH usando o comando ugarchfit, que leva o objeto de especificação, os retornos $ k $ do S & amp; P500 e um solucionador numérico de otimização. Escolhemos usar o híbrido, que tenta diferentes solucionadores para aumentar a probabilidade de convergência:
Se o modelo GARCH não converge, simplesmente estabelecemos o dia para produzir uma previsão "longa", o que é claramente um palpite. No entanto, se o modelo converge, então emitimos a data e a direção de previsão de amanhã (+1 ou -1) como uma seqüência de caracteres em que ponto o ciclo está fechado.
Para preparar a saída para o arquivo CSV, criei uma seqüência de caracteres que contém os dados separados por uma vírgula com a direção de previsão para o dia seguinte:
O penúltimo passo é a saída do arquivo CSV para o disco. Isso nos permite levar o indicador e usá-lo em software de backtesting alternativo para análise posterior, se assim desejar:
No entanto, há um pequeno problema com o arquivo CSV como está no momento. O arquivo contém uma lista de datas e uma previsão para a direção de amanhã. Se nós estivéssemos a carregar isso no código de backtest abaixo, como seria o caso, nós realmente estaríamos apresentando um viés avançado porque o valor de previsão representaria dados não conhecidos no momento da predição.
Para explicar isso, precisamos simplesmente mover o valor previsto um dia antes. Descobriu que isso era mais direto usando o Python. Como não quero assumir que você tenha instalado bibliotecas especiais (como os pandas), eu mantive o Python puro.
Aqui está o pequeno script que traz esse procedimento. Certifique-se de executá-lo no mesmo diretório que o arquivo forecast. csv:
Neste ponto, agora temos o arquivo de indicador corrigido armazenado em forecast_new. csv. Uma vez que isso leva uma quantidade substancial de tempo para calcular, forneci o arquivo completo aqui para você se baixar:
Resultados da Estratégia.
Agora que geramos o nosso arquivo CSV indicador, precisamos comparar seu desempenho com "Comprar e aguardar".
Em primeiro lugar, lemos o indicador do arquivo CSV e o armazenamos como spArimaGarch:
Em seguida, criamos uma interseção das datas para as previsões ARIMA + GARCH e o conjunto original de retornos da S & P500. Podemos então calcular os retornos para a estratégia ARIMA + GARCH multiplicando o sinal de previsão (+ ou -) pelo próprio retorno:
Uma vez que temos os retornos da estratégia ARIMA + GARCH, podemos criar curvas de equidade para o modelo ARIMA + GARCH e "Comprar e aguardar". Finalmente, nós os combinamos em uma única estrutura de dados:
Finalmente, podemos usar o comando xyplot para traçar as duas curvas de equidade no mesmo gráfico:
A curva patrimonial até 6 de outubro de 2018 é a seguinte:
Curva de capital da estratégia ARIMA + GARCH vs "Comprar e manter" para o S & P500 a partir de 1952.
Como você pode ver, ao longo de um período de 65 anos, a estratégia ARIMA + GARCH superou significativamente "Buy & amp; Hold". No entanto, você também pode ver que a maior parte do ganho ocorreu entre 1970 e 1980. Observe que a volatilidade da curva é bastante mínima até o início dos anos 80, altura em que a volatilidade aumenta significativamente e os retornos médios são menos impressionantes.
Claramente, a curva de equidade promete ótimo desempenho durante todo o período. No entanto, essa estratégia realmente teria sido negociável?
Em primeiro lugar, consideremos o fato de que o modelo ARMA só foi publicado em 1951. Não foi amplamente utilizado até a década de 1970, quando Box & amp; Jenkins discutiu isso em seu livro.
Em segundo lugar, o modelo ARCH não foi descoberto (publicamente!) Até o início dos anos 80, pela Engle, e o próprio GARCH foi publicado por Bollerslev em 1986.
Em terceiro lugar, este "backtest" realmente foi realizado em um índice de mercado de ações e não um instrumento fisicamente negociável. Para obter acesso a um índice como este, teria sido necessário negociar futuros S & P500 ou uma réplica Exchange Traded Fund (ETF), como SPDR.
Por isso, é realmente apropriado aplicar esses modelos a uma série histórica antes da invenção? Uma alternativa é começar a aplicar os modelos a dados mais recentes. Na verdade, podemos considerar o desempenho nos últimos dez anos, de 1 de janeiro de 2005 a hoje:
Curva de capital da estratégia ARIMA + GARCH vs "Comprar e manter" para o S & P500 de 2005 até hoje.
Como você pode ver, a curva de equidade permanece abaixo de um Buy & amp; Mantenha a estratégia por quase 3 anos, mas durante a queda no mercado de ações de 2008/2009, ela supera demais. Isso faz sentido porque é provável que haja uma correlação serial significativa nesse período e será bem capturada pelos modelos ARIMA e GARCH. Uma vez que o mercado se recuperou após 2009 e entra no que parece ser mais uma tendência estocástica, a performance do modelo começa a sofrer mais uma vez.
Note-se que esta estratégia pode ser facilmente aplicada a diferentes índices do mercado de ações, ações ou outras classes de ativos. Eu o encorajo a tentar pesquisar outros instrumentos, pois você pode obter melhorias substanciais nos resultados aqui apresentados.
Próximos passos.
Agora que terminamos de discutir a família de modelos ARIMA e GARCH, quero continuar a discussão da análise de séries temporais considerando processos de memória longa, modelos de espaço estadual e séries temporais cointegradas.
Estas áreas subsequentes de séries temporais nos apresentarão modelos que podem melhorar nossas previsões além das que eu mostrei aqui, o que aumentará significativamente nossa lucratividade comercial e / ou reduzirá o risco.
Aqui está a listagem completa para geração de indicadores, backtesting e traçado:
E o código Python para aplicar a forecast. csv antes de reimportar:
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.

O R Trader.
Usando R e ferramentas relacionadas em Finanças Quantitativas.
Visualizando dados da série temporal em R.
Estou muito satisfeito em anunciar o meu curso DataCamp sobre Visualização de Dados da Série Temporal em R. Este curso também faz parte da série Time com R habilidades. Sinta-se livre para dar uma olhada, o primeiro capítulo é gratuito!
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 utilizada e poderosa de obter uma melhor compreensão dos seus dados. Após este curso, você terá uma ótima visão geral das capacidades de visualização da série R e você poderá decidir melhor qual modelo escolher para uma análise posterior. Você também poderá transmitir a mensagem que deseja entregar de forma eficiente e linda.
Esboço de Curso.
Capítulo 1: R Time Series Visualization Tools.
Este capítulo irá apresentá-lo às ferramentas básicas de visualização da série R.
Capítulo 2: séries temporais univariadas.
Os 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 em questão. Neste capítulo, você receberá 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 propagação em pares ou grupos de dados.
Capítulo 4: Estudo de caso: selecionando visualmente um estoque que melhora sua carteira existente.
Deixe colocar tudo o que aprendeu até agora na prática! Imagine que você já possui um portfólio de ações e você tem algum dinheiro extra para investir, como você pode escolher com sabedoria um novo estoque para investir seu dinheiro adicional? Analisar as propriedades estatísticas das ações individuais versus um portfólio existente é uma boa maneira de abordar o problema.
Vinculando R para IQFeed com o pacote QuantTools.
O IQFeed fornece serviços de transmissão de dados e soluções de negociação que cobrem o mercado agrícola, energético e financeiro. É um fornecedor bem conhecido e reconhecido de feed de dados voltado para usuários de varejo e pequenas instituições. O preço da assinatura começa em torno 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. I & # 8217; tenho usado o IQFeed há alguns anos e estou feliz com ele (eu não sou afiliado à empresa em nenhum caminho). Mais informações podem ser encontradas aqui. Eu procurei uma integração dentro de R por um tempo e aqui está. Como resultado, depois de executar alguns testes, mudei meu código que ainda estava em Python em R. Apenas por completude, aqui é um link que explica como baixar dados históricos do IQFeed usando o Python.
O QuantTools oferece quatro funcionalidades principais: Obter dados de mercado, armazenar / recuperar dados do mercado, traçar dados da série temporal e testar as costas.
Primeiro, certifique-se de que o IQfeed esteja aberto. Você pode baixar dados diários ou intraday. O código abaixo baixa os preços diários (Open, High, Low, Close) para a SPY de 1 de janeiro de 2017 a 1 de junho de 2017.
O código abaixo baixa dados intraday de 1 de maio de 2017 a 3 de maio de 2017.
Observe o parâmetro do período. Pode levar qualquer um dos seguintes valores: tick, 1min, 5min, 10min, 15min, 30min, hora, dia, semana, mês, dependendo da frequência que você precisa.
O QuantTools torna o processo de gerenciamento e armazenamento de dados do mercado de tiques fácil. Você apenas configura parâmetros de armazenamento e está pronto para ir. Os parâmetros são onde, desde que data e quais símbolos você gostaria de ser armazenado. Sempre que você pode adicionar mais símbolos e se eles não estiverem presentes em um armazenamento, o QuantTools tenta 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 / Documents / Market Data / iqfeed & # 8221 ;. Existe uma sub-pasta por instrumento e os dados são aved em arquivos. rds.
Você também pode armazenar dados entre datas específicas. Substitua a última linha de código acima com uma das seguintes.
Agora, você deseja recuperar alguns dos dados armazenados, basta executar algo como:
Observe que apenas os tiques são suportados no armazenamento local, pelo que o período deve ser & # 8216; assinalar & # 8217;
O QuantTools fornece a função plot_ts para traçar dados da série temporal sem fins de semana, feriados e intervalos overnight. No exemplo abaixo, primeiro recupero os dados armazenados acima, selecione as primeiras 100 observações de preços e, finalmente, desenhe o gráfico.
Duas coisas a notar: primeiro espião é um objeto data. table daí a sintaxe acima. Para obter uma visão geral rápida das capacidades de data. table, veja esta excelente folha de truques da DataCamp. Segundo, o parâmetro local é VERDADEIRO à medida que os dados são recuperados do armazenamento interno.
O QuantTools permite escrever sua própria estratégia comercial usando sua API C ++. Eu não vou elaborar sobre isso, pois este é basicamente o código C ++. Você pode consultar a seção Exemplos no site QuantTools.
No geral, considero o pacote extremamente útil e bem documentado. O único bit faltante é o feed ao vivo entre R e IQFeed, o que tornará o pacote uma solução de fim a fim real.
Como de costume, todos os comentários são bem-vindos.
BERT: um recém-chegado na conexão do R Excel.
Alguns meses atrás, um leitor me apontou essa nova maneira de conectar R e Excel. Eu não sei por quanto tempo isso aconteceu, mas nunca encontrei isso e eu nunca vi nenhuma postagem no blog ou artigo sobre isso. Então eu decidi escrever uma publicação, pois a ferramenta realmente vale a pena e, antes que alguém pergunte, eu não estou relacionado à empresa de nenhuma maneira.
BERT significa Basic Excel R Toolkit. É grátis (licenciado sob a GPL v2) e foi desenvolvido pela Structured Data LLC. No momento da redação, a versão atual do BERT é 1.07. Mais informações podem ser encontradas aqui. De uma perspectiva mais técnica, o BERT foi projetado para suportar a execução de funções R a partir de células da planilha do Excel. Em termos de Excel, ele é para escrever funções definidas pelo usuário (UDFs) em R.
Nesta publicação, não vou mostrar-lhe como o R e o Excel interagem através do BERT. Há muito bons tutoriais aqui, aqui e aqui. Em vez disso, quero mostrar-lhe como usei o BERT para criar uma torre de controle # 8222; para minha negociação.
Meus sinais comerciais são gerados usando uma longa lista de arquivos R, mas eu preciso da flexibilidade do Excel para exibir resultados de forma rápida e eficiente. Como mostrado acima, o BERT pode fazer isso por mim, mas eu também quero adaptar o aplicativo às minhas necessidades. Ao combinar o poder de XML, VBA, R e BERT, posso criar uma aplicação bem parecida e poderosa na forma de um arquivo Excel com código VBA mínimo. Em última análise, tenho um único arquivo do Excel reunindo todas as tarefas necessárias para gerenciar meu portfólio: atualização do banco de dados, geração de sinal, envio de ordens etc e # 8230; Minha abordagem poderia ser dividida nas 3 etapas 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 VBA. Essas funções VBA estão envolvidas em torno de funções R definidas usando o BERT.
Com esta abordagem, posso manter uma distinção clara entre o núcleo do meu código mantido em R, SQL e Python e tudo usado para exibir e formatar resultados mantidos no Excel, VBA e amp; XML. Nas próximas seções, apresento o pré-requisito para desenvolver essa abordagem e um guia passo a passo que explica como o BERT poderia ser usado para simplesmente passar dados de R para Excel com um código mínimo de VBA.
1 & # 8211; Baixe e instale o BERT a partir deste link. Uma vez que a instalação foi concluída, você deve ter um novo menu de suplementos no Excel com os botões como mostrado abaixo. É assim que o BERT se materializou no Excel.
2 & # 8211; Baixe e instale o editor de UI personalizado: O Editor de UI personalizado permite criar menus e botões definidos pelo usuário na faixa de 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. Ele calcula e retorna os resíduos de uma regressão linear. Isto é o que queremos recuperar no Excel. Salve isso em um arquivo chamado myRCode. R (qualquer outro nome está bem) em um diretório de sua escolha.
2 & # 8211; functions. R em BERT: do Excel, selecione Add-Ins - & gt; Diretório inicial e abra o arquivo chamado functions. R. Neste arquivo cole o seguinte código. Certifique-se de inserir o caminho correto.
Isso está apenas fornecendo o arquivo RERT que você criou acima. Em seguida, salve e feche as funções do arquivo. R. Se você quiser fazer alguma alteração no arquivo R criado na etapa 1, você terá que recarregá-lo usando o botão BERT & # 8220; Recarregar arquivo de inicialização e # 8221; no menu Complementos no Excel.
3 & # 8211; No Excel: Crie e salve um arquivo chamado myFile. xslm (qualquer outro nome está bem). Este é um arquivo ativado por macro que você salva no diretório de sua escolha. Uma vez que o arquivo é salvo, feche-o.
4 & # 8211; Abra o arquivo criado acima no editor UI personalizado: depois que o arquivo estiver aberto, cole o código abaixo.
Você deve ter algo assim no editor XML:
Essencialmente, essa parte do código XML cria um menu adicional (RTrader), um novo grupo (Meu Grupo) e um botão definido pelo usuário (Novo botão) na faixa do Excel. Depois de concluir, abra myFile. xslm no Excel e feche o Editor de UI personalizado. Você deve ver algo assim.
5 & ​​# 8211; Abra o editor VBA: no 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 novos.
6 & # 8211; Clique no botão Novo: Agora volte para a planilha e no menu do RTrader clique no & # 8220; Novo botão & # 8221; botão. Você deve ver algo como o que aparece abaixo.
O guia acima é uma versão muito básica do que pode ser alcançado usando o BERT, mas mostra como combinar o poder de várias ferramentas específicas para criar sua própria aplicação personalizada. Do meu ponto de vista, o interesse de tal abordagem é a capacidade de colar R e Excel, obviamente, mas também para incluir via XML (e lote) partes de código de Python, SQL e muito mais. Isso é exatamente o que eu precisava. Finalmente, ficaria curioso para 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 as 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 fora dos dados de amostra: a parte dos dados utilizados 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 utilizados para calibração (isto é, na amostra) e 30% para validação (isto é, fora da amostra). Em seguida, uma comparação dos dados de entrada e saída da amostra ajuda a decidir se o modelo é robusto o suficiente. Esta publicação pretende 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 para uma das minhas estratégias.
Uma simples inspeção visual revela um bom ajuste entre o desempenho dentro e fora da amostra, mas o grau de confiança que 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 dentro e fora da amostra. Em termos estatísticos, isso pode ser traduzido como a probabilidade de os números de desempenho dentro e fora da amostra serem provenientes da mesma distribuição. Existe um teste estatístico não paramétrico que faz exatamente isso: o teste Kruskall-Wallis. Uma boa definição deste teste pode ser encontrada no R-Tutor & # 8220; Uma coleção de amostras de dados são independentes se elas vierem de populações não relacionadas e as amostras não se afetam. Usando o teste de Kruskal-Wallis, podemos decidir se as distribuições de população são idênticas sem assumir que elas sigam a distribuição normal. & # 8221; O benefício adicional deste teste não está assumindo uma distribuição normal.
Existe outros testes da mesma natureza que podem enquadrar-se nesse quadro. O teste de Mann-Whitney-Wilcoxon ou os testes de Kolmogorov-Smirnov adequam-se perfeitamente à estrutura descreve aqui no entanto, 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 R podem ser encontradas aqui.
Aqui, o código usado para gerar o gráfico acima e a análise:
No exemplo acima, o período de amostra é mais longo do que o período fora da amostra, portanto, criei aleatoriamente 1000 subconjuntos dos dados de amostra, cada um deles com o mesmo comprimento que os dados fora da amostra. Então eu testei cada um em subconjunto de amostra contra os dados fora da amostra e gravei os valores p. Este processo não cria um único valor de p para o teste de 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: existem fortes evidências de que os dados dentro e fora da amostra são provenientes da mesma distribuição.
Como de costume, o que é apresentado nesta publicação é um exemplo de brinquedo que apenas arranha a superfície do problema e deve ser adaptado às necessidades individuais. No entanto, acho que propõe um quadro estatístico interessante e racional para avaliar os resultados da amostra.
Esta publicação é inspirada nos dois artigos seguintes:
Vigier Alexandre, Chmil Swann (2007), "Efeitos de várias funções de otimização sobre o desempenho da amostra de estratégias de negociação desenvolvidas genéticamente", Conferência de mercados financeiros de previsão.
Vigier Alexandre, Chmil Swann (2018), "Um processo de otimização para melhorar dentro / fora da consistência da amostra, um caso do mercado de ações", JP Morgan Cazenove Equity Quantitative Conference, Londres, outubro de 2018.
Apresentando fidlr: FInancial Data LoadeR.
fidlr é um complemento do RStudio projetado para simplificar o processo de download de dados financeiros de vários provedores. Esta versão inicial é um invólucro em torno da função getSymbols no pacote quantmod e apenas o Yahoo, Google, FRED e Oanda são suportados. Provavelmente vou adicionar funcionalidades ao longo do tempo. Como de costume com essas coisas apenas um lembrete amável: & # 8220; O SOFTWARE É FORNECIDO & # 8220; COMO ESTÁ & # 8221 ;, SEM GARANTIA DE QUALQUER TIPO & # 8230; & # 8221;
Como instalar e usar o fidlr?
Você pode obter o addin / pacote de seu repositório Github aqui (Eu vou registrá-lo em CRAN mais tarde) Instale o addin. Existe um excelente tutorial para instalar o RStudio Addins aqui. Uma vez que o addin está instalado, ele deve aparecer no menu Addin. Basta escolher fidlr no menu e uma janela como ilustrada abaixo deve aparecer. Escolha um fornecedor de dados no menu suspenso Origem. Selecione um intervalo de datas no menu Data Digite o símbolo que deseja baixar na caixa de texto do instrumento. Para baixar vários símbolos, basta inserir os símbolos separados por vírgulas. Use os botões de rádio 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 addin.
Mensagens de erro e avisos são tratados pelos pacotes subjacentes (quantmod e Shiny) e podem ser lidos a partir do console.
Esta é uma primeira versão do projeto, então não espere perfeição, mas espero que melhore com o tempo. Informe qualquer comentário, sugestão, erro, etc. & # 8230; para: thertrader @ gmail.
Mantendo um banco de dados de arquivos de preços em R.
Fazer pesquisas quantitativas implica uma grande quantidade de dados crunching e um precisa de dados limpos e confiáveis ​​para conseguir isso. O que é realmente necessário é a limpeza de dados facilmente acessíveis (mesmo sem conexão à internet). A maneira mais eficiente de fazer isso por mim tem sido manter um conjunto de arquivos csv. Obviamente, esse processo pode ser tratado de várias maneiras, mas eu encontrei horas extras muito eficientes e simples para manter um diretório onde eu armazeno e atualize 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 (preço) do Yahoo, Google etc e # 8230; Toda vez que eu quero testar uma nova ideia, mas mais importante, uma vez que eu identifiquei e corrigi um problema, 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 está resumido no quadro abaixo.
Em tudo o que se segue, suponho que os dados sejam provenientes do Yahoo. O código terá que ser alterado para dados do Google, Quandl etc e # 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 freqüência mais alta e outro tipo de conjunto de dados (ou seja, diferente dos preços).
1 & # 8211; Transferência inicial de dados (listOfInstruments. R & amp; historicalData. R)
O arquivo fileOfInstruments. 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 que você precisa baixar o conjunto de dados históricos inicial. O exemplo abaixo baixa um conjunto de preços diários dos ETFs do Yahoo Finance de volta para 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. Costumo executar esse processo todos os dias, exceto quando eu estiver no feriado. Para adicionar um novo instrumento, basta executar o passo 1 acima para este instrumento sozinho.
3 & # 8211; Crie um arquivo em lote (updateDailyPrices. bat)
Outra parte importante do trabalho é criar um arquivo em lote que automatiza o processo de atualização acima (I & # 8217; m um usuário do Windows). Isso evita abrir o R ​​/ RStudio e executar o código a partir daí. O código abaixo é colocado em um arquivo. bat (o caminho deve ser alterado com a configuração do leitor). Observe que eu adicionei um arquivo de saída (updateLog. txt) para rastrear a execução.
O processo acima é extremamente simples porque ele apenas descreve como atualizar os dados de preços diários. Eu já usei isso por um tempo e tem funcionado muito bem para mim até agora. Para dados mais avançados e / ou frequências mais elevadas, as coisas podem ficar muito mais complicadas.
Como de costume, todos os comentários são bem-vindos.
The Rise of the Robots (Advisors & # 8230;)
A indústria de gerenciamento de ativos está à beira de uma grande mudança. Ao longo dos últimos anos, os Robots Advisors (RA) emergiram 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 conselheiros tradicionais a alocar melhor o dinheiro de seus clientes e alguns são reais & # 8220; caixa preta & # 8221 ;. O usuário insere alguns critérios (idade, renda, filhos, etc. & # 8230;) e o robô propõe uma alocação personalizada. Entre esses dois extremos, está disponível uma gama completa de ofertas. Encontrei a definição da Wikipedia muito boa. & # 8220; Eles são uma classe de consultor financeiro que fornece gerenciamento de portfólio on-line com uma intervenção humana mínima & # 8221 ;. Mais precisamente, eles usam gerenciamento de portfólio baseado em algoritmos para oferecer todo o espectro de serviços que um conselheiro tradicional ofereceria: reinvestimento de dividendos, relatórios de conformidade, reequilíbrio de portfólio, colheita de perda de impostos, etc. & # 8230; (Bem, isso é o que a comunidade de investimentos quantitativos está fazendo há décadas!). A indústria ainda está em sua infância, com a maioria dos jogadores ainda gerenciando uma pequena quantidade de dinheiro, mas eu só percebi o quão profunda era a mudança quando eu estava em Nova York há alguns dias. Quando a RA recebe seus nomes na TV adiciona ou no telhado do taxi de Nova York você sabe que algo grande está acontecendo e # 8230;
Está ficando cada vez mais atenção da mídia e, acima de tudo, faz muito sentido da perspectiva do investidor. Na verdade, existem duas vantagens principais na utilização da RA:
Taxas significativamente mais baixas sobre os conselheiros tradicionais O investimento é mais transparente e mais simples, o que é mais atraente para pessoas com conhecimentos financeiros limitados.
Nesta publicação, R é apenas uma desculpa para apresentar bem o que é uma grande tendência no setor de gerenciamento de ativos. O gráfico abaixo mostra as partes de mercado da RA mais popular do final de 2017. O código usado para gerar o gráfico abaixo pode ser encontrado no final desta publicação e os dados estão aqui.
Esses números são um pouco datados, desde 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 a RA surge em todo o mundo: Ásia (8Now!), Suíça (InvestGlass), França (Marie Quantier) e # 8230; .. Ele está começando a afetar significativamente da forma como os gestores de ativos tradicionais estão fazendo negócios. Um exemplo proeminente é a parceria entre Fidelity e Betterment. Desde dezembro de 2017, além da marca AUM de US $ 2 bilhões.
Apesar de tudo acima, acho que a verdadeira mudança está à nossa frente. Como eles usam menos intermediários e produtos de baixa comissão (como ETFs) eles cobram taxas muito mais baixas do que os conselheiros tradicionais. A RA certamente ganhará quotas de mercado significativas, mas também reduzirá as taxas cobradas pela indústria como um todo. Em última análise, isso afetará a forma como as empresas de investimento tradicionais fazem negócios. O gerenciamento de portfólio ativo que está tendo um tempo difícil por alguns anos agora sofrerá ainda mais. As taxas elevadas 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 atrás, mas acho que o efeito será ainda mais pronunciado nos próximos anos. Novas gerações de ETF acompanham índices mais complexos e estratégias customizadas. Essa tendência ficará mais forte inevitavelmente.
Como de costume, todos os comentários são bem-vindos.
R séries de séries de tempo financeiras que todos devem conhecer.
Há muitos tutoriais da série R que flutuam na web, este post não foi projetado para ser um deles. Em vez disso, eu 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 uma publicação dedicada. Eu só dirijo séries de tempos de frequência diária ou baixa. Lidar com dados de freqüência mais alta requer ferramentas específicas: pacotes de dados ou de alta freqüência são alguns deles.
xts: O pacote xts é o que deve ter quando se trata de séries de tempos em R. O exemplo abaixo carrega o pacote e cria uma série de tempo diária de 400 dias, normalmente retornados distribuídos.
merge. xts (pacote xts): Isso é incrivelmente poderoso quando se trata de vincular duas ou mais vezes as séries, se elas têm o mesmo comprimento ou não. O argumento de junção faz a magia! Ele determina como a ligação é feita.
apply. yearly / apply. monthly (pacote xts): aplique uma função específica para cada período distinto em um determinado objeto de séries temporais. O exemplo abaixo calcula os retornos mensais e anuais da segunda série no objeto tsInter. Observe que eu uso a soma dos retornos (sem composição)
pontos de extremidade (pacote xts): extrair valores de índice de um determinado objeto xts correspondente às últimas observações, dado um período especificado por on. O exemplo dá 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 com o mais recente não-NA antes dele. Extremamente útil ao lidar com uma série de tempo com alguns furos # 8221; e quando esta série de tempo é posteriormente utilizada como entrada para funções R que não aceita argumentos com NAs. No exemplo, crio uma série temporal de preços aleatórios, em seguida, inclui artificialmente alguns NAs e substitui-los pelo valor mais recente.
charts. PerformanceSummary (pacote PerformanceAnalytics): para um conjunto de retornos, crie um gráfico de índice de riqueza, barras para desempenho por período e gráfico subaquático 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, em seguida, exibe uma janela com os 3 gráficos descritos acima.
A lista acima não é de forma alguma exaustiva, mas uma vez que você domina as funções descritas nesta publicação torna a manipulação das séries temporais financeiras muito mais fácil, o código mais curto e a legibilidade do código melhor.
Como de costume, todos os comentários são bem-vindos.
Avaliação do fator na gestão quantitativa da carteira.
Quando se trata de gerenciar um portfólio de ações versus um benchmark, o problema é muito diferente de definir uma estratégia de retorno absoluto. No primeiro, é necessário manter mais ações do que no final, onde nenhum estoque pode ser realizado se não houver uma 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 do benchmark. Menos estoques são mantidos em comparação com um benchmark quanto maior o erro de rastreamento (por exemplo, maior risco).
A análise que se segue é amplamente inspirada no livro # 8220; Gerenciamento de portfólio ativo # 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 interessada no tópico a ler o livro desde o início até o fim. É muito bem escrito e estabelece as bases do gerenciamento sistemático de portfólio ativo (não tenho 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 para a frente. Muitas pessoas criaram muitas ferramentas e inúmeras variantes dessas ferramentas foram desenvolvidas para conseguir isso. Nesta publicação, foco em duas métricas simples e amplamente utilizadas: Coeficiente de Informações (IC) e Quantiles Return (QR).
O IC fornece uma visão geral da capacidade de previsão de fator. Mais precisamente, esta é uma medida de quão bem o fator classifica os estoques em uma base de retorno para a frente. O IC é definido como a correlação de classificação (ρ) entre a métrica (por exemplo, fator) e o retorno direto. Em termos estatísticos, a correlação de classificação é uma medida não paramétrica de 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 a frente deve ser definido pelo analista e é uma função da rotação da estratégia e da decaimento alfa (este tem sido objeto de pesquisa extensiva). Obviamente, os ICs devem ser o mais alto possível em termos absolutos.
Para o leitor afiado, no livro de Grinold & amp; Kahn é dada uma fórmula que liga Relação de informação (IR) e IC: com a amplitude sendo o número de apostas independentes (trades). Esta fórmula é conhecida como a lei fundamental do gerenciamento ativo. O problema é que muitas vezes, definir a amplitude com precisão não é tão fácil quanto parece.
Para ter uma estimativa mais precisa do poder preditivo do fator, é necessário avançar um pouco e agrupar os estoques por quantile de fatores de fator, em seguida, analise o retorno direto médio (ou qualquer outra métrica de tendência central) de cada um desses quantiles. A utilidade desta ferramenta é direta. 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 do universo inteiro para atender a sua restrição de erro de rastreamento. O bom retorno dos quantiles é caracterizado por uma relação monótona entre os quantiles individuais e os retornos diretos.
Todas as ações no índice S & P500 (no momento da redação). Obviamente, há um viés de navio de sobrevivência: a lista de ações no índice mudou significativamente entre o início e o final do período de amostragem, porém é bom o suficiente para fins de ilustração apenas.
O código abaixo baixa os preços das ações individuais no S & 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 a medida de retorno direto.
Abaixo está o código para calcular Coeficiente de Informações e Quantiles Return. Note-se que usei quintios neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles, etc. & # 8230;) pode ser usado. Depende realmente do tamanho da amostra, do que você deseja capturar e da sua vontade de ter uma visão ampla ou foco nas caudas de distribuição. Para estimar os retornos dentro de cada quintil, a mediana foi utilizada como estimador de tendência central. Esta medida é muito menos sensível a valores aberrantes 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 Q1 é mais baixo após 12 meses de retorno e Q5 mais alto. Existe um aumento quase monotônico no retorno de quantiles entre Q1 e Q5, o que indica claramente que os estoques que caíram em Q5 superam aqueles que caíram em Q1 em cerca de 1% por mês. Isso é muito significativo e poderoso para um fator tão simples (não é realmente uma surpresa e # 8230;). Portanto, há maiores chances de vencer o índice por sobreponderar os estoques caindo no Q5 e subponderar aqueles que caem no Q1 em relação ao benchmark.
Um IC de 0,0206 pode não significar um ótimo negócio em si, mas é significativamente diferente de 0 e indica um bom poder preditivo dos últimos 12 meses em geral. Os 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 do fator de investimento, porém existem várias limitações práticas que devem ser abordadas para a implementação da vida real:
Reequilíbrio: na descrição acima, considerou que, no final de cada mês, o portfólio é totalmente reequilibrado. Isso significa que todas as ações que caem no primeiro trimestre estão abaixo do peso e todas as ações que caem no Q5 estão com sobrepeso em relação ao benchmark. Isso nem sempre é possível por razões práticas: alguns estoques podem ser excluídos do universo de investimento, existem restrições ao peso da indústria ou do setor, existem restrições sobre o roteamento etc & # 8230; Custos de transação: isso não foi levado em consideração na análise acima e isso é um travão grave para a implementação da vida real. As considerações sobre o volume de negócios geralmente são implementadas na vida real sob uma forma de penalidade na qualidade dos fatores. Coeficiente de transferência: esta é uma extensão da lei fundamental da gestão ativa e relaxa a suposição do modelo de Grinold & # 8217; que os gerentes não enfrentam restrições que impedem que eles traduzam seus insights de investimentos diretamente em apostas de portfólio.
E, finalmente, estou impressionado com o que pode ser alcançado em menos de 80 linhas de código com R & # 8230;
Como de costume, todos os comentários são bem-vindos.
Risco como uma Variação de Sobrevivência & # 8220; # 8221;
Eu me deparo com muitas estratégias na blogosfera, algumas são interessantes, algumas são um completo desperdício de tempo, mas a maioria compartilha uma característica comum: as pessoas que desenvolvem essas estratégias fazem seu dever de casa em termos de análise do retorno, mas muito menos atenção é paga ao lado do risco é natureza aleatória. Eu comentei um comentário como "# 8220; uma redução de 25% em 2018, mas excelente retorno em geral" # 8221 ;. Bem, minha aposta é que ninguém na terra vai deixar você experimentar uma perda de 25% com seu dinheiro (a menos que acordos especiais estejam em vigor). No fundo hedge, as pessoas do mundo têm uma tolerância muito baixa para redução. Geralmente, como um novo comerciante em um hedge fund, assumindo que você não possui reputação, você tem muito pouco tempo para provar a si mesmo. Você deve ganhar dinheiro a partir do dia 1 e continuar fazendo isso por alguns meses antes de ganhar um pouco de credibilidade.
Diga primeiro que você tenha um mau começo e você perca dinheiro no início. Com uma redução de 10%, você certamente estará fora, mas mesmo com uma redução de 5%, as chances de ver sua alocação reduzida são muito altas. Isso tem implicações significativas em suas estratégias. Deixe assumir que, se você perder 5%, sua alocação é dividida por 2 e você retorna à sua alocação inicial somente quando você passou a marca de água alta novamente (por exemplo, a retirada volta para 0). No gráfico abaixo, simulei a experiência com uma das minhas estratégias.
Você começa a operar em 1º de junho de 2003 e tudo corre bem até 23 de julho de 2003, onde sua curva de retirada atinge o limite de -5% (** 1 **). Sua alocação é reduzida em 50% e você não recupera o nível da marca de água até o 05 de dezembro de 2003 (** 3 **). Se você manteve a alocação inalterada, o nível da marca de água alta teria sido cruzado em 28 de outubro de 2003 (** 2 **) e, no final do ano, você teria feito mais dinheiro.
Mas vamos empurrar o raciocínio um pouco mais. Ainda no gráfico acima, suponha que você tenha realmente uma azarada e você começa a operar até meados de junho de 2003. Você atingiu o limite de retirada de 10% no início de agosto e você provavelmente estará fora do jogo. Você teria começado no início de agosto sua alocação não teria sido cortada e você acabou fazendo um bom ano em apenas 4 meses completos de negociação. Nesses dois exemplos, nada mudou, mas sua data de início e # 8230 ;.
O sucesso comercial de qualquer indivíduo tem alguma forma de dependência do caminho e não há muito que você possa fazer sobre isso. No entanto, você pode controlar o tamanho da retirada de uma estratégia e isso deve ser abordado com muito cuidado. Um portfólio deve ser diversificado em todas as dimensões possíveis: classes de ativos, estratégias de investimento, freqüências de negociação, etc. & # 8230 ;. A partir dessa perspectiva, o risco é a sua variável de sobrevivência # 8221 ;. Se for gerenciado adequadamente, você tem a chance de permanecer no jogo o suficiente para perceber o potencial de sua estratégia. Caso contrário, você ganhou o mês que vem para ver o que acontece.

Repetição de uma estratégia simples de negociação de ações.
Nota: Esta publicação NÃO é um conselho financeiro! Esta é apenas uma maneira divertida de explorar alguns dos recursos que R tem para importar e manipular dados.
Recentemente, li uma publicação no ETF Prophet que explorou uma estratégia de negociação de ações interessante no Excel. A estratégia é simples: encontre o ponto alto do estoque nos últimos 200 dias e conte o número de dias decorridos desde aquela alta. Se tiver sido mais de 100 dias, possui o estoque. Se tiverem decorrido mais de 100 dias, não seja o próprio. Esta estratégia é muito simples, mas produz alguns resultados impressionantes. (Nota, no entanto, que este exemplo usa dados que não foram ajustados de divisões ou dividendos e podem conter outros erros. Além disso, estamos ignorando custos de negociação e atrasos de execução, que afetam o desempenho da estratégia.)
Implementar esta estratégia em R é simples e oferece inúmeras vantagens sobre o Excel, cujo principal é que tirar dados do mercado de ações em R é fácil e podemos testar essa estratégia em uma ampla gama de índices com relativamente pouco esforço.
Em primeiro lugar, baixamos dados para GSPC usando quantmod. (GSPC significa índice S & P 500). Em seguida, construímos uma função para calcular o número de dias desde a alta de n-dia em uma série de tempo e uma função para implementar nossa estratégia de negociação. A última função leva 2 parâmetros: o máximo de n-dia que você deseja usar, e os números de dias depois dessa altura você segurará o estoque. O exemplo é 200 e 100, mas você poderia facilmente mudar isso para o máximo de 500 dias e ver o que acontece se você armazenar o estoque 300 dias depois antes de sair. Uma vez que esta função está parametrizada, podemos testar facilmente muitas outras versões da nossa estratégia. Assumimos o início da nossa estratégia com zeros, por isso será o mesmo comprimento que os nossos dados de entrada. (Se desejar uma explicação mais detalhada da função daysSinceHigh, veja a discussão sobre validação cruzada).
Multiplicamos nosso vetor de posição (0,1) pelos retornos do índice para obter os retornos da nossa estratégia. Agora, construímos uma função para retornar algumas estatísticas sobre uma estratégia comercial e comparamos nossa estratégia com o benchmark. Um pouco arbitrariamente, eu decidi olhar para o retorno cumulativo, o retorno anual médio, a proporção de sharpe, o% vencedor, a volatilidade anual média, a redução máxima e a redução do comprimento máximo. Outras estatísticas seriam fáceis de implementar.
Como você pode ver, esta estratégia se compara favoravelmente à abordagem padrão "buy and hold".
Finalmente, testamos nossa estratégia em 3 outros índices: FTSE que representa a Irlanda e o Reino Unido, o Dow Jones Industrial Index, que se remonta a 1896, e o N225, que representa o Japão. Eu funcionei todo o processo, então você pode testar cada nova estratégia com 1 linha de código:
Comentários estão fechados.
Posts populares recentes.
Artigos mais visitados da semana.
Empregos para usuários R.
É alimentado pelo WordPress usando um design bavotasan.
Direitos autorais e cópia; 2017 R-bloggers. Todos os direitos reservados. Termos e Condições para este site.

Sistema de negociação usando r
Puxe pedidos 0.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
Sistema de negociação mecânica usando R (protótipo para fins de diversão e aprendizagem)
R (quantmod, RSQLite) SQLite3 Node. js (sqlite3, node-static) jqPlot JQuery UI.
Do interior do R-trader / diretório de dados, crie uma amostra de digitação de base de dados:
IMPORTANTE: dados reais (balanço) da BOVESPA desde 1994-01-03 (até 2018-06-17)
Depois de instalar pacotes R (comando: install. packages (c ("RSQLite", "quantmod"))), do tipo de diretório base R-trader interno:
Para ver todos os gráficos de análise técnica, digite dentro de R:
IMPORTANTE: lembre-se de alterar o diretório do projeto dentro dos arquivos:
Depois de instalar o node. js, instale o gerenciador de pacotes node. js digitando npm:
Instale as dependências do node. js digitando:
Para plotar o gráfico de castiçal, do diretório R-trader / js, digite:
Copyright 2018 Ivan Ribeiro Rocha.
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em.
A menos que seja exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "TAL COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para o idioma específico que rege as permissões e limitações sob a Licença.
&cópia de; 2017 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.

Comments

Popular Posts