Tuesday 3 April 2018

Sistema de comércio em r


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 o modelo a ser escolhido para análise subseqüente. 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 quotas de mercado da RA mais popular do final de 2018. 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 2018 Melhoramento após a 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.


Tarefa Algorítmica de Negociação em R.


Nesta publicação, vou mostrar como usar R para coletar os estoques listados em leais3, obter dados históricos do Yahoo e depois executar uma estratégia de negociação algorítmica simples. Ao longo do caminho, você aprenderá alguma raspagem na web, uma função atingindo uma API de finanças e um htmlwidget para fazer um gráfico de séries de tempo interativo.


Para esta publicação, um algoritmo de negociação é definido como um conjunto de regras que desencadeiam um evento de compra ou venda, em vez de um modelo preditivo ou uma previsão de séries temporais. Este é o tipo mais simples de troca de algo, mas se você estiver interessado em investigar mais profundamente em finanças com R, eu encorajaria você a tomar o curso da DataCamp na modelagem de uma estratégia de negociação quantitativa em R.


Fundo.


Em 2018, comecei a investir um pouco em loyal3. O seu serviço é incomum e um ótimo lugar para iniciar sua jornada de investimento. Em vez de cobrar ao investidor por negociações, leal3 cobra as empresas para listar em sua plataforma. A premissa é que as pessoas que gostam do serviço de uma empresa também comprarão o estoque e, assim, se tornarão defensoras fortes da marca. Fazer a plataforma mais atraente é que você pode comprar partes fracionárias. Então, você pode entrar nesse estoque de $ 800 amazon por apenas US $ 10 e comprar outra fração de US $ 10 cada vez que você tiver um pouco de dinheiro extra no final do mês. Claro que há custos de fricção, uma vez que você precisa negociar no Windows e seu portfólio inteiro está limitado.


70 ações, mas leais3 representa uma maneira divertida e de baixo custo para explorar o treinamento de capital. Você pode colocar a pele real no jogo por apenas US $ 10!


Para ser claro, tenho as contas típicas de aposentadoria e investimento, mas eu gosto da interface limpa do leal no aplicativo e da falta de taxas. Eu acabo checando minha carteira de lealdade e diversão mais frequentemente do que meus fundos mútuos, simplesmente porque é fácil e divertida ver o desempenho dos estoques que escolhi diretamente.


Os estoques disponíveis em loyal3.


Configurando seu espaço de trabalho.


Para começar, carregue as bibliotecas no seu ambiente. Eu quase sempre uso rvest for web scraping estes dias. Existem outros pacotes que funcionam, incluindo o RSelenium, mas eu gosto do quão fácil pode ser executado.


O segundo pacote, pbapply, é opcional porque simplesmente adiciona uma barra de progresso às funções de aplicação. Como você poderia estar raspando centenas de páginas da web, uma barra de progresso pode ser útil para estimar o tempo.


Em seguida, a TTR é um pacote que acabei de começar a explorar. A biblioteca é usada para construir "Regras de Negociação Técnicas". Embora você aprenda um algoritmo de negociação simples nesta publicação, o pacote TTR pode realizar cálculos mais sofisticados e vale a pena aprender.


A biblioteca dygraphs é um invólucro para uma biblioteca de gráficos de JavaScript rápida e aberta. É um dos htmlwidgets que torna o R mais dinâmico e faz parte de um arquivo html em vez de uma imagem estática. Por fim, o pacote lubridate é usado para facilitar a manipulação da data.


Coleção de dados.


Todos os estoques loyal3 estão todos listados em uma única página. Antes de pesquisar os preços diários individuais das ações para construir seu algoritmo de negociação, você precisa coletar todos os tickers disponíveis. A primeira coisa a fazer é declarar stock. list como uma string de URL. O próximo uso read_html () para que sua sessão R crie uma sessão na Internet e colete todas as informações html na página como um conjunto de nós XML. A página CSS tem uma ID chamada "nome da empresa". Use isso como um parâmetro ao chamar html_nodes () para selecionar apenas os dados XML associados a este nó. Por fim, use html_text () para que os valores de texto reais para os nomes das empresas sejam coletados.


Para examinar os estoques disponíveis em loyal3, você pode imprimir o objeto stocks. names no seu console. Isso retorna o nome da empresa como um vetor de texto.


Para pesquisar os preços das ações, você precisa primeiro obter o símbolo do ticker. Quando você está no site leal3, você pode clicar no tile da empresa para carregar uma página com um símbolo de ticker e outras informações da empresa.


Usando html_nodes () em ações, você puxa todos os nós marcados com um "Em HTML" & lt; a & gt; tag define um hiperlink que é usado para vincular a página de um formulário a outro. Dentro da tag de hiperlink, o "href" refere-se ao endereço de URL exato. Então, html_attr () irá extrair o URL de TODOS os links na página, se você passar em "href ...".


Depois de fazer uma inspeção manual, achei que os links 54 a 123 na página representam as páginas da empresa que eu preciso para raspar as informações do ticker. A última linha usa paste0 () para concatenar a seqüência de URL base "loyal3" para as 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 o mesmo, de modo 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-marcador". 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ão todos os caracteres alfabéticos. O resultado é que todos os caracteres especiais, como $, e quaisquer caracteres numéricos, como o preço de fechamento, são removidos. Como a função lê cada uma das 70 páginas, ela somente coletará o ticker de estoque.


A página de estoque leal3 para Alibaba, onde você vê a tabela que contém o ticker do estoque, BABA, está abaixo do texto em negrito.


Armado com sua função personalizada, use pblapply () para aplicá-lo a cada um dos stock. links que contêm a página de cada empresa. O objeto resultante, stock. tickers, é uma lista de tickers de ações individuais com cada elemento correspondente a uma empresa individual.


Uma maneira de alterar uma lista de elementos em um objeto plano é com do. call (). Aqui, você está aplicando rbind para row bind cada elemento de lista em um único vetor. Por fim, você cria um quadro de dados com o símbolo e a informação do nome da empresa.


Para ser consistente em sua análise, você pode querer limitar a quantidade de informações históricas que você coleciona em cada estoque. A função Sys. Data () armazenará um objeto de data como ano, mês e dia. Usar anos com um número inteiro é uma maneira de subtrair uma quantidade de tempo específica do objeto start. date.


Para obter os dados de finanças do Yahoo, o objeto da data deve ser alterado para objetos de personagem simples sem um traço. Usando a função de substituição global gsub () em start. date e end. date mudará a classe e simultaneamente removerá traços. Dentro de gsub (), passe o padrão de personagem para procurar, então os caracteres de substituição. Neste caso, o padrão de substituição é um caractere vazio entre citações. O último parâmetro é o objeto ao qual gsub () será aplicado.


A função TTR () getYahooData () aceita um símbolo de estoque e uma data inicial e final. A função retorna um quadro de dados que possui informações de séries temporais. Cada linha é uma data e as colunas contêm informações como o "Por favor", "Alto", "Por favor" e "encerrando" o preço por uma equidade. Como você está pesquisando várias empresas, você pode usar o lapply () ou o pblapply (). Passe no vetor dos símbolos da empresa, então a função, getYahooData (), e depois a data da informação. Os objetos de data são parâmetros reciclado sempre que getYahooData () é aplicado a um símbolo de estoque.


Para fazer a seleção da lista retornada, stocks. ts, mais fácil de navegar, você pode adicionar nomes aos elementos da lista. O uso de nomes com o objeto stocks. ts declara os nomes como o vetor de símbolo $ original.


Ao trabalhar com grandes listas, eu gosto de examinar o objeto resultante para garantir que o resultado seja o que eu esperava. Agora que os elementos têm nomes, você pode fazer referência diretamente a eles. Neste exemplo, você está examinando as 6 primeiras linhas para AMC Entertainment Holdings (AMC). Usar head () na lista ao fazer referência a $ AMC retornará uma parte da série temporal para este estoque:


Examinando os dados de estoque.


Quando eu ouço as notícias financeiras, os comentadores geralmente se referem a gráficos. Apesar da negociação de alta freqüência e da gestão ativa realizada por outros, muitos pequenos investidores ainda se referem a gráficos para obter informações. O objeto da série temporal pode ser exibido rapidamente com o enredo. Passe na lista referente ao elemento nomeado, como $ AMC e depois a coluna que deseja exibir, aqui $ Close.


O enredo anterior é estático e não muito interessante.


Vamos usar uma biblioteca de JavaScript para criar um gráfico que você possa explorar. Neste trecho de código, você pode observar o "% & gt;%" ou operador de tubulação. O operador de tubulação é uma boa maneira de escrever um código conciso. Ele encaminha um objeto para a próxima função sem forçar você a reescrever um nome de objeto como você fez anteriormente nesta publicação.


Neste exemplo, você cria um dygraph referente ao estoque do Twitter, $ TWTR e, em seguida, a coluna que deseja traçar, $ Close. Dentro do dygraph, main adiciona um título especificado entre as cotações. Usando o "% & gt;%" este objeto inteiro é encaminhado para a próxima função dyRangeSelector (). Você pode especificar um intervalo de datas padrão usando c () com uma string de data de início e fim. O objeto HTML resultante é uma série de tempo dinâmico 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 dígrafo básico para o estoque do Twitter.


Uma Estratégia de Negociação Simples: Trend Following.


Os comerciantes de alta freqüência e os hedge funds usam modelos sofisticados e abordagens baseadas em regras para executar negócios. Se você quiser saber mais, sugiro visitar a parapian para abordagens avançadas. Para abordagens mais simples, comece com esta página na Investopedia.


No código abaixo, você irá visualizar uma estratégia de negociação de impulso simples. Basicamente, você gostaria de calcular as médias móveis de 200 dias e 50 dias para um preço de ações. Em qualquer dia em que a média móvel de 50 dias esteja 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. Esta estratégia é chamada de estratégia seguindo estratégia. A natureza positiva ou negativa entre as duas médias médias temporais representa o impulso do estoque.


O pacote TTR fornece SMA () para calcular a média móvel simples. Neste trecho de código, você está examinando os primeiros 6 valores para as médias móveis de Twitter e 200 dias. 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 do estoque TWTR. O segundo parâmetro é um número inteiro que representa 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 detalhadamente a função da média móvel, você precisa se inscrever para 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 o nrow no quadro de dados for inferior a (2 * 260), então a função criará uma moldura 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. Loyal3 às vezes pode ter acesso a IPOs e, se o estoque for recém-público, não haverá dados suficientes para uma média móvel de 200 dias. No entanto, se o valor nrow for superior a 2 * 260, a função criará um quadro de dados com os dados originais juntamente com médias móveis de 200 e 50 dias como novas colunas. Usando colnames, eu declaro os nomes das colunas. A última parte da função usa full. cases para verificar os valores na coluna média móvel de 200 dias. Quaisquer linhas que não tenham 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 dígrafo. Mais uma vez, esse código está usando o operador "% & gt;%" para encaminhar objetos. A função dygraph () aceita a estrutura 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 se referir a uma coluna por nome para que dySeries () traçam uma linha para os valores "40 e 40" nas linhas 2 e 3. Este objeto é reenviado novamente para o dyRangeSelector () para ajustar a altura do seletor. Por fim, adicionei algum sombreamento para definir períodos em que você quisesse comprar ou manter o patrimônio líquido e um período em que você deveria ter vendido suas ações ou ficado afastado, dependendo da sua posição.


Aqui está o resultado final em uma série de tempo interativa.


As médias móveis FOX com regiões sombreadas para comprar / segurar versus vender.


Conclusão.


Como comerciante algorítmico de brotação, você não precisa traçar todos os 70 compartilhamentos. Em vez disso, você gostaria de executar o código todos os dias e adicionar uma maneira programática para identificar estoques que se encaixam no método baseado em regras, "compre se a média móvel de 50 dias está acima da média móvel de 200 dias". À medida que você revisa o gráfico anterior, a seção verde é uma hora em que você compraria o capital da FOX. A seção vermelha representa o tempo para vender suas ações e não voltar a entrar.


Como o gráfico é interativo, você pode usar o controle deslizante para redimensionar o visual. Com base nesta abordagem simples de troca de algo, agora pode ser um bom momento para comprar FOX! 30 de dezembro de 2018 foi um dia de negociação em que a média móvel de 50 dias mudou US $ 0,01 maior do que a média móvel de 200 dias!


A seção ampliada da equidade FOX.


Claro, lembre-se de todos os investimentos podem perder valor. Para saber mais sobre finanças e trocas comerciais, cheque os cursos da DataCamp aqui.


Estratégia de Negociação Quantitativa Usando R: Um Guia Passo a Passo.


Nesta publicação, discutiremos sobre a construção de uma estratégia de negociação usando R. Antes de morar nos jargões comerciais usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Existem mais de 4000 extras em pacotes, mais 18000 membros do grupo do LinkedIn e perto de 80 R grupos Meetup atualmente existentes. É uma ferramenta perfeita para análise estatística, especialmente para análise de dados. A configuração concisa da Rede de Arquivo Abrangente R sabe que o CRAN fornece a lista de pacotes junto com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.


Processo em Quatro Passos de qualquer Estratégia de Negociação Básica.


Formação de hipóteses Testando a produção de refinação.


Nossa hipótese é formulada como "o mercado é reversão". A reversão média é uma teoria que sugere que os preços eventualmente retornem ao seu valor médio. O segundo passo consiste em testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e computamos indicadores, sinais e métricas de desempenho. A fase de teste pode ser dividida em três etapas, obter os dados, escrever a estratégia e analisar a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. A NSE tem um enorme volume para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço Open-High-Low-Close do mesmo.


Nós estabelecemos um nível limiar para comparar as flutuações no preço. Se o preço aumentar / diminuir, atualizamos a coluna do limite. O preço de fechamento é comparado com a banda superior e com a banda inferior. Quando a banda superior é cruzada, é um sinal para venda. Da mesma forma, quando a banda inferior é cruzada, é um sinal de venda.


A seção de codificação pode ser resumida da seguinte forma,


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 é um retorno significativo é suportada. Uma vez que este é o teste de volta, 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 configurando níveis de limiar diferentes, regras de entrada mais rígidas, perda de parada, etc. Pode-se escolher mais dados para back-testing, usar a abordagem bayseiana para configuração de limite, ter em conta a volatilidade.


Uma vez que você está confiante sobre a estratégia de negociação apoiada pelos resultados dos back-testing, você pode entrar em negociação 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 infra-estrutura genérica para modelo e estratégias quantitativas baseadas em sinal de backtest. É uma camada de abstração de alto nível (construída em xts, FinancialInstrument, blotter, etc.) que permite que você crie e teste 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 carteiras de ativos múltiplos Suporta tipos de ordem de mercado, limite, stoplimit e stoptrailing Suporta dimensionamento de ordem e otimização de parâmetros.


Nesta publicação, construímos uma estratégia que inclui indicadores, sinais e regras.


Para um modelo baseado em sinal genérico, os seguintes objetos devem ser considerados,


Instrumentos - Contém dados de mercado Indicadores - 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 muito tempo, vamos discutir a parte de codificação. Preferimos o estúdio R para codificação e insistimos em usar o mesmo. Você precisa ter determinados pacotes instalados antes de programar a estratégia.


O seguinte conjunto de comandos instala os pacotes necessários.


Depois de instalar os pacotes, você os importa para uso posterior.


Leia os dados do arquivo csv e converta-o em objeto xts.


Inicializamos o portfólio com o estoque, moeda, capital inicial e o tipo de estratégia.


Adicione o limite de posição se desejar negociar mais de uma vez no mesmo lado.


Crie o objeto de estratégia.


Construímos uma função que calcula os limiares que queremos negociar. Se o preço se move por 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 veja o caderno de pedidos.


Atualize o portfólio e veja as estatísticas comerciais.


Aqui está o código completo.


Uma vez que você esteja familiarizado com esses conceitos básicos, você poderia dar uma olhada em como começar a usar o pacote quantimod em R. Ou no caso de você ser bom no C ++, veja uma estratégia de exemplo codificada em C ++.


Se você é um comerciante de varejo ou um profissional de tecnologia que procura iniciar sua própria mesa de negociação automatizada, comece a aprender algo trading hoje! 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.


QuantStrat TradeR.


Comércio, QuantStrat, R e muito mais.


A Hammer Trading System & # 8212; Demonstrando Ordens Limitadas Baseadas em Indicadores Personalizados em Quantstrat.


Por isso, várias semanas atrás, eu decidi ouvir um webinar (e eu mesmo vou dar um sobre o uso do quantstrat no 3 de setembro para o Big Trading de Mike & # 8217; veja o link). Entre algumas dessas conversas, havia um sistema de negociação denominado "Tendência do comércio de tendências" # 8201; sistema. Este é o sistema dele:


Defina uma tendência de alta como um SMA10 acima de um SMA30.


Defina um pullback como um SMA5 abaixo de um SMA10.


Defina um martelo como uma vela com uma sombra superior inferior a 20% da sombra inferior e um corpo inferior a 50% da sombra inferior. Entre no alto do martelo, com a perda de parada ajustada na parte inferior do martelo e um terço adicional da faixa. O objetivo do lucro obtido é de 1,5 a 1,7 vezes a distância entre a entrada e o preço de parada.


Além disso (não testado aqui) foi o padrão de engarrafamento de alta, que é um padrão de duas barras com as condições de um dia abaixo seguido de um dia em que o dia aberto do dia foi inferior ao fim do dia abaixo, e o fim do dia foi maior do que o dia anterior aberto, com a parada ajustada ao mínimo do padrão e o alvo de lucro no mesmo local.


Este sistema foi anunciado para ser correto cerca de 70% do tempo, com negócios cujas vitórias foram 1,6 vezes mais do que as perdas, então eu decidi investigar isso.


O lado positivo desta postagem, além de investigar o sistema de outra pessoa, é que isso me permitirá demonstrar como criar mais pedidos nuanced com quantstrat. O ponto mais vendido para o quantstrat, na minha opinião, é que ele fornece uma estrutura para fazer qualquer coisa que você quiser, desde que você saiba como fazê-lo (não trivial). Em qualquer caso, a coisa saliente a seguir nesta estratégia é que é possível criar alguns pedidos personalizados interessantes com alguma sintaxe matizada.


Aqui é a sintaxe para esta estratégia:


Eu adicionei uma regra adicional à estratégia em que, se a tendência reverte (SMA10 & lt; SMA30), para sair do comércio.


Primeiro, deixe examinar mais de perto as regras de entrada e saída.


As regras usadas aqui usam alguns novos conceitos que eu não usei em postagens de blog anteriores. Primeiro, o argumento do orderset coloca todas as ordens dentro de uma ordem definida como um mecanismo de cancelamento único. Em seguida, a sintaxe order. price funciona de forma semelhante à sintaxe de dados de mercado na especificação de indicadores & # 8212; EG add. indicator (strategy. st, name = & # 8221; SMA & # 8221 ;, arguments = list (x = quote (Cl (mktdata)), etc & # 8230;), exceto esse tempo, especifica uma determinada coluna em os dados de mercado (o que é, de fato, o que o Cl (mktdata) faz, ou HLC (mktdata) e assim por diante), mas também a sintaxe [timestamp] é necessária para saber a que quantidade específica é enviada .


Para ordens de lucro, como você quer vender acima do mercado, ou comprar abaixo do mercado, o tipo correto de ordem (ou seja, o argumento da ordem) é uma ordem limitada. Com stop-loss ou stop (não mostrado aqui), uma vez que você deseja vender abaixo do mercado ou comprar acima do mercado, o tipo de ordem correto é uma ordem stoplimit.


Finalmente, a regra que eu adicionei (a saída SMA) realmente melhora o desempenho da estratégia (eu queria dar a este sistema o benefício da dúvida).


Aqui estão os resultados, com a estratégia alavancada em .1 pctATR (as estratégias usuais I do intervalo de teste entre .02 e .04):


Em suma, olhando para as estatísticas do comércio, este sistema é # 8230, longe do que foi anunciado. Na verdade, aqui é a curva de equidade.


Qualquer coisa, exceto espectacular nos últimos anos, é por isso que eu suponho que foi livre para distribuí-lo em um webinar. No geral, no entanto, nos últimos anos acabaram de ver o S & amp; P apenas continuar a alcançar esta estratégia. No final do dia, é um sistema altamente imortável na minha opinião, e ganhei não estivesse explorando os outros aspectos disso. No entanto, como um exercício em mostrar algumas características nuançadas do quantstrat, acho que esse foi um esforço que valeu a pena.


Obrigado pela leitura.


Compartilhar isso:


Relacionados.


Pós-navegação.


11 pensamentos sobre & ldquo; A Hammer Trading System & # 8212; Demonstrando Ordens Limitadas Baseadas em Indicadores Personalizados em Quantstrat & rdquo;


Eu posso interpretar os resultados dos últimos 7 anos (o que é muito curto de um período de tempo para mim) como trabalhando MUITO efetivamente para limitar as perdas quando você está preocupado com você perto do topo de um mercado de touro ou em um mercado urso.


Uma análise diferente, em que você a aplicou mais tarde no mercado de touro, seria interessante.


Eu penso em aplicá-lo agora depois de ter desfrutado vários anos de bons retornos.


Um bom ponto, Alan, mas de todos os sistemas que eu negociei, nenhum deles teve as suas curvas de equidade, apenas as coisas que tem. Quanto aos últimos sete anos, a questão é que os ETFs não retornam tão longe e eu hesito em usar os preços ajustados das ações, devido a que os dividendos sejam tidos em conta quando o sistema talvez não tenha estado realmente em uma posição para receber o dividendo, mas, por outro lado, você tem a questão das divisões de ações, e assim por diante.


Além disso, eu suponho que meus padrões para sistemas de negociação também podem ser mais rigorosos. Se um sistema perde mais do que dizer, 5% em um ano, já é um sinal preocupante para mim.


Veja, a maneira como eu me aproximo dos sistemas de negociação não é que eles deveriam bater em corridas domésticas, tanto quanto em solteiros de morcegos consistentes, também têm uma boa relação Sharpe e bom retorno às métricas de retirada.


Um sistema ruim é um sistema ruim, mas um sistema, mesmo com baixos retornos absolutos, mas um excelente retorno para o risco pode ser alavancado para satisfazer o apetite de retorno / risco apropriado.


Oi Ilya, como posso acessar barras anteriores no indicador?


Por exemplo, eu quero construir o indicador fractal de Bill Williams, que precisa ler 5 barras para construí-lo.


Eu sei como fazer referência à barra atual (como você tem em seu exemplo acima), mas como olhar para trás?


Eu camino em R e Quantstrat e todos os outros módulos neste contexto recentemente e também assisti seu webinar Big Mike, o que foi muito útil.


Relacionado a esta publicação, não estou interessado na estratégia em si, mas o que eu preciso para os meus backtests é ter pedidos de limite de parada no alto da vela (assim como aqui) e uma perda de parada no fundo de uma vela.


Eu apliquei seu exemplo para o estoque de maçã e verifiquei muitas negociações manualmente e o que eu vi é o seguinte problema:


& # 8211; Se os dias seguintes Open for maior do que os dias previos High (então há uma lacuna), o sistema ainda vai por muito tempo neste novo preço aberto, que é # 8220; muito alto e # 8221; e em alguns casos, é ainda maior do que o preço de lucro. O sistema então compra o preço mais alto e vende o próximo dia para o menor preço de lucro, portanto, faz uma perda. É assim que as ordens de limite de parada devem funcionar? Eu esperaria que o aberto já esteja acima do preço do limite de parada, que a ordem não seja executada, mas alterada para uma ordem de limite pendente, pelo menos, e apenas dispara, se o preço voltar para baixo. Não tendo dados disponíveis intradiários disponíveis, espero que o quantstrat só entre na posição longa, se não houver nenhum aumento ou somente quando o mercado cair em outro dia depois, sem que nenhuma condição de saída seja desencadeada antes disso.


& # 8211; Outro problema em que não tenho certeza ainda é como se não houver dados intraday, se a vela após a vela do sinal tiver uma maior alta e uma menor baixa, portanto, atingindo a entrada e a saída (parar a perda) no mesmo dia . Não é claro se, na realidade, o mercado subiu primeiro, desencadeando a entrada longa e depois baixou para vender com uma perda, ou se o nível baixo foi alcançado primeiro, cancelando o sinal completamente e, portanto, não entrando em nenhum comércio em todos.


Estou me perguntando se e como posso usar o quantstrat para lidar com ambas as situações.


1. Não entrar no mercado se o preço exato de comprar parar não for visto.


2. Definir uma maneira de lidar com situações ambigüas. Isso poderia ser tratar esses casos sempre como perda de 100% ou como perda de 50% etc.


Outro problema que ainda não encontrei é como posso calcular o dimensionamento da ordem com base no preço stop-loss, por assim dizer, tendo uma quantidade fixa de dinheiro em jogo com cada comércio. Mas essa é outra história. Também como a margem de negociação poderia ser simulada (o que significa: bloquear parte do capital se abrir um comércio, mas não 100%, como para negociações de ações reais)


Obrigado pelo seu conselho se você tiver algum!


Nos limites de parada: eles têm uma definição muito rígida, que está em ou além do seu limite. Quantstrat ganhou a leitura de sua mente. O que você pode querer fazer é colocar algum tipo de ordem de saída automática se houver uma lacuna.


Quanto à alavancagem / margem: você pode dimensionar seus negócios, como quiser. Começar a equidade não tem efeito sobre isso, a menos que você o vincule diretamente no dimensionamento de sua ordem. Veja a minha função de dimensionamento da ordem ATR no início do meu blog para obter inspiração sobre como fazer isso.


Obrigado pela resposta super rápida. Eu entendo o modelo de ordem stoplimit do quantstrat agora. Estou tentando simular o que eu faria na realidade tão bom quanto possível.


Na verdade, na verdade, sobre uma ordem de saída automática que iria sair imediatamente da posição novamente, no entanto, parece não haver uma imediata em quantstrat & # 8211; A saída é apenas no dia seguinte, de modo que os preços poderiam ter se movido significativamente até então.


Portanto, o seu comentário me faz pensar que eu poderia querer dividir artificialmente cada linha de dados em 2 linhas com a primeira apenas tendo O = H = L = C = aberto da barra real e o segundo como a barra real. Dado que o quantstrat é um próximo sistema de comércio de barras, eu poderia então em tais barras gerar as ordens de entrada reais para o dia seguinte. Eu importo meus sinais como valores TRUE / FALSE, juntamente com os dados do OHLC de um sistema externo, por isso não depender dos cálculos de indicadores relacionados ao preço.


Claro, eu não espero que um software leia minha mente e # 8230. Estou certo de que o que eu quero fazer é 100% descriptable sem ambição para que possa ser modelado.


Se você acha que isso faz sentido, ficarei feliz em descrever essa abordagem (uma vez que tenha descoberto haha) e publicá-la em algum lugar, se for utilizável em geral.


Eu assisti seu webnar e eu estava tentando reproduzir seu código, mas eu tenho algum problema durante o & # 8220; applyStrategy & # 8221 ;. Eu acho que escrevi algo errado durante o meu script. Você tem o script para comparação? Eu tentei ver qualquer tipo e eu encontrei 2 deles, mas ainda não funcionou. Quando eu corro, # 8220; out & # 8221; ficar vazio e não simular os negócios.


Obrigado pela sua atenção.


Verifique seus casos e leia os & # 8220; Nuts and Bolts of Quantstrat & # 8221; Series. Muitas partes móveis diferenciam maiúsculas de minúsculas.


Foi outro erro de digitação, obrigado pela sua resposta e continue com o bom trabalho. Seu blog é incrível e eu aprendendo muito. Continue postando!


Começando: Construindo um Sistema de Negociação Totalmente Automatizado.


Nos últimos 6 meses, fiquei focado no processo de construção da pilha de tecnologia completa de um sistema de negociação automatizado. Eu encontrei muitos desafios e aprendi muito sobre os dois métodos diferentes de backtesting (Vectorizado e Evento conduzido). Na minha jornada de construção de um backtester dirigido por um evento, surpreendi que o que você acabasse fosse perto da pilha de tecnologia completa necessária para construir uma estratégia, testá-la e executar a execução ao vivo.


O meu maior problema ao abordar o problema foi a falta de conhecimento. Olhei em muitos lugares para uma introdução à construção da tecnologia ou um blog que me guiaria. Encontrei alguns recursos que vou compartilhar com você hoje.


Para iniciantes:


Para os leitores novos para negociação quantitativa, eu recomendaria o livro de Ernie P. Chan intitulado: Negociação Quantitativa: como construir seu próprio negócio de negociação algorítmica. Este livro é o básico. Na verdade, é o primeiro livro que eu li em negociação quantitativa e, mesmo assim, achei muito básico, mas há algumas notas que você deveria tomar.


Da página 81-84 Ernie escreve sobre como no nível de varejo uma arquitetura de sistema pode ser dividida em estratégias semi-automáticas e totalmente automatizadas.


Um sistema semi-automatizado é adequado se você deseja fazer alguns negócios por semana. Ernie recomenda o uso de Matlab, R ou mesmo do Excel. Utilizei todas as 3 plataformas e este é o meu conselho:


Saltei Matlab, custou muito dinheiro e eu só consegui acesso aos laboratórios universitários. Não há muito material de treinamento como blogs ou livros que irão ensinar-lhe como codificar uma estratégia usando o Matlab. R tem toneladas de recursos que você pode usar para aprender a construir uma estratégia. Meu blog favorito abordando o tópico é: QuantStratTradeR executado por Ilya Kipnis. O Microsoft Excel é provavelmente o local onde você iniciará se você não tiver experiência de programação. Você pode usar o Excel para negociação semi-automatizada, mas não vai fazer o truque quando se trata de construir a pilha de tecnologia completa.


Quadro semi-automático pg 81.


Sistemas de negociação totalmente automatizados são para quando você deseja colocar negócios automaticamente com base em um feed de dados ao vivo. Eu codifiquei o meu em C #, QuantConnect também usa C #, QuantStart anda pelo leitor através da construção dele em Python, Quantopian usa Python, HFT provavelmente usará C ++. Java também é popular.


Estrutura de negociação totalmente automatizada pg 84.


Passo 1: Obter uma vantagem.


Faça o Programa Executivo em Negociação Algorítmica oferecido pela QuantInsti. Acabei de começar o curso e o primeiro conjunto de palestras foi na arquitetura do sistema. Isso me salvaria cerca de 3 meses de pesquisa se eu tivesse começado aqui. As palestras me acompanharam por cada componente que eu precisaria, bem como uma descrição detalhada do que cada componente precisa fazer. Abaixo está uma captura de tela de uma das suas lâminas utilizadas na apresentação:


Você também pode usar esse quadro geral ao avaliar outros sistemas de negociação automática.


No momento da escrita, estou apenas na terceira semana de palestras, mas estou confiante de que um profissional poderá construir uma estratégia de negociação totalmente automatizada que, com um pouco de polonês, possa ser transformada em um hedge fund quantitativo .


Nota: o curso não está focado na construção da pilha de tecnologia.


Etapa 2: codifique um backtester baseado em eventos básicos.


O blog de Michael Hallsmore e o quantstart & amp; livro "Negociação Algorítmica de Sucesso"


Este livro possui seções dedicadas à construção de um backtester dirigido por eventos robustos. Ele dirige o leitor através de uma série de capítulos que irão explicar sua escolha de linguagem, os diferentes tipos de backtesting, a importância do backtesting dirigido a eventos e como codificar o backtester.


Michael apresenta o leitor às diferentes classes necessárias em um design orientado a objetos. Ele também ensina o leitor a construir um banco de dados mestre de valores mobiliários. É aqui que você verá como a arquitetura do sistema da QuantInsti se encaixa.


Nota: Você precisará comprar seu livro: "Successful Algorithmic Trading", seu blog deixa para fora muita informação.


Passo 3: Vire a TuringFinance.


O programa EPAT Leitura "Successful Algorithmic Trading" & amp; codificando um backtester em um idioma diferente da sua escolha.


Você deve se mudar para um blog chamado TuringFinance e ler o artigo intitulado "Algorithmic Trading System Architecture" Por: Stuart Gordon Reid. Em sua publicação, ele descreve a arquitetura seguindo as diretrizes dos padrões ISO / IEC / IEEE 42018 e padrão de descrição de arquitetura de engenharia de software.


Eu achei esta publicação muito técnica e tem algumas ótimas idéias que você deve incorporar na sua própria arquitetura.


Uma captura de tela de sua postagem.


Passo 4: Estudar sistemas de comércio aberto.


4.1) Quantopian.


Escusado será dizer que Quantopian deve ser adicionado a esta lista e estou com vergonha de dizer que não passei muito tempo usando sua plataforma (devido à minha escolha de linguagem). Quantopian tem muitas vantagens, mas as que melhoram para mim são as seguintes:


Fácil de aprender Python Acesso gratuito a muitos conjuntos de dados Uma grande comunidade e competições Eu adoro como eles hospedam QuantCon!


Quantopian é líder de mercado neste campo e é amado por quants por toda parte! Seu projeto de código aberto está sob o nome de código Zipline e isso é um pouco sobre isso:


"Zipline é o nosso motor de código aberto que alimenta o backtester no IDE. Você pode ver o repositório de códigos no Github e contribuir com solicitações de envio para o projeto. Existe um grupo do Google disponível para procurar ajuda e facilitar discussões ".


Aqui está um link para sua documentação:


4.2) QuantConnect.


Para aqueles que não estão familiarizados com a QuantConnect, eles fornecem um mecanismo de troca algorítmica de código aberto completo. Aqui está um link.


Você deve dar uma olhada em seu código, estudá-lo, & amp; dar-lhes elogios. Eles são competição de Quantopians.


Gostaria de aproveitar esta oportunidade para agradecer a equipe da QuantConnect por me deixar escolher seu cérebro e pelo brilhante serviço que eles fornecem.


Aqui está um link para sua documentação:


Observações finais:


Espero que este guia ajude os membros da comunidade. Eu queria ter essa visão 6 meses atrás, quando comecei a codificar nosso sistema.


Gostaria de chegar à comunidade e perguntar: "Quais bons cursos de negociação algorítmica você conhece?" Eu gostaria de escrever uma publicação que analisa o tópico e fornece uma classificação. Existem recomendações para a construção de um sistema de negociação totalmente automatizado que você gostaria de adicionar a esta publicação?


Compartilhar isso:


Compartilhe essa entrada.


Você pode gostar também.


Bom artigo. Eu gostaria de ter tido cerca de 6 meses atrás. Eu uso QuantConnect porque sou um programador C #. Achei muito conveniente poder fazer o download do teste Lean e back test localmente. Rummaging através do seu código também é valioso. Além disso, eles cortaram um acordo com a Trader por negócios de US $ 1. Isso ajuda muito. Não sou tão saliente sobre spreads e execução da Trader. O IB pode ser melhor para isso.


Vou dar uma olhada no curso que você mencionou.


Você não mencionou a Quantocracy ou RBloggers. Ambos são recursos muito valiosos.


O que você usa para traçar resultados de testes de volta? Eu logro os valores do OHLC e do indicador para csv do evento OnData e estou realmente cansado de usar o Excel para traçar os resultados. Gostaria de apontar um pacote de gráficos para um arquivo de dados e simplesmente ir.


Você ainda possui um fornecedor de caixas de seleção?


Tenho um pensamento sobre os sistemas dirigidos a eventos. O problema com os eventos é que eles são assíncronos e latentes. Parece que eles são inevitáveis ​​assim que você obtém uma corretora envolvida, então eu tenho sonhado com um sistema de streaming mais seguindo os princípios da programação funcional.


& # 8211; Injeste um fluxo de tiquetaque ou barra.


& # 8211; Execute-o através de um processo de cálculo de indicadores, execução de análise ou ML, e assim por diante.


& # 8211; Retornar um sinal.


& # 8211; Envie-o para o corretor para executar.


Em seguida, em um fluxo separado.


& # 8211; Receba uma resposta do corretor.


O problema, é claro, é o estado. Tenho margem suficiente para fazer o comércio? O que está no meu portfólio? Como está funcionando? Normalmente, o corretor api pode ser consultado para descobrir essas coisas, mas leva tempo e é assíncrono. Eu também estou olhando extensões Rx. Dessa forma, o sistema pode reagir às mudanças no sistema através do padrão observável.


Os eventos são ótimos para cliques no mouse. Não é tão bom para processamento transacional de alto volume.


Esta é exatamente a abordagem que tomei com minhas próprias coisas. Essencialmente, eu tenho um & # 8216; normal & # 8217; programa que envolve uma pequena parte que é conduzida a eventos para falar com o corretor (IB API). Agora, para o problema do estado. Você tem duas escolhas; obter o estado do corretor, ou armazená-lo internamente, atualizando-o quando você receber um preenchimento. Isso significa que há momentos em que você não conhece seu estado ou quando as duas fontes de estado estão potencialmente em conflito (dados ruins ou atrasos). Parte disso depende da rapidez com que você troca. A menos que você esteja negociando com muita rapidez, então, pausando se você tiver um conflito de estado, ou você está incerto de estado, é melhor do que prosseguir sem saber o seu estado. Eu uso um banco de dados & # 8216; lock & # 8217; paradigma para lidar com isso.


Quanto a quase tudo o que você pediu, você está perto da resposta em Reactive Extension (Rx).


Com Rx indo de tiques para velas é trivial.


Passar de Velas para Indicadores é trivial.


Indicadores de composição de outros indicadores é trivial.


Escrever Posições de Indicadores é trivial.


Composição de Portfolios (como realizada ao longo do tempo) das Posições é trivial.


Simular o modelo de risco é trivial.


Back testing ou trading live é simplesmente decidir entre uma transmissão ao vivo de dados ou uma repetição simulada de dados do banco de dados.


Executar é trivial.


A implementação é possível em tudo, desde C # até F # para JavaScript para C ++ em código quase idêntico.


A otimização é feita rapidamente porque o Rx puramente funcional é massivamente paralisável ao GPU.


É certo que a otimização e a alimentação do efeito da otimização contínua de volta ao teste de back-back não é trivial, mas dado que não é trivial de qualquer maneira, eu irei deixar esse slide 😉


Puramente funcional (ou perto dela) A Rx é, na minha opinião, a única maneira de abordar a infraestrutura desse problema.


Conheço o sistema que quero negociar. Eu não quero programar ou aprender algo que alguém já conhece. Então, quem posso contratar para levar o sistema que eu quero usar e automatizá-lo. Por automatizar isso, quero dizer, eu não quero olhar para ele. Eu vou olhar os resultados uma vez por semana e os negócios serão executados sem a minha atenção. Parece estranho para mim que, em 2018, tanto esforço precisa tomar um conjunto de regras e ter essas regras executadas no meu corretor.


Eu sugeriria inscrever-se com o Quantopian e depois encontrar alguém dentro da comunidade lá para construir a estratégia para você. Eles serão capazes de construí-lo para você dentro da plataforma IB Brokers e ser totalmente automatizado.


Deixe-me dizer, porém, que acho que você deve monitorá-lo de perto, e não apenas "esqueça-o para" # 8221 ;.

No comments:

Post a Comment