пятница, 15 июня 2018 г.

Sistema de negociação usando r


R-quadrado como uma estimativa de qualidade da curva de equilíbrio da estratégia.


Índice.


Introdução.


Toda estratégia de negociação precisa de uma avaliação objetiva de sua eficácia. Uma ampla gama de parâmetros estatísticos é usada para isso. Muitos deles são fáceis de calcular e mostram métricas intuitivas. Outros são mais difíceis na construção e interpretação de valores. Apesar de toda essa diversidade, existem muito poucas métricas qualitativas para estimar um valor não trivial, mas ao mesmo tempo óbvio - a suavidade da linha de saldo do sistema de negociação. Este artigo propõe uma solução para esse problema. Consideremos uma medida não trivial, como o coeficiente de determinação R-quadrado (R ^ 2), que calcula a estimativa qualitativa da linha de equilíbrio mais atrativa, suave e crescente que cada comerciante deseja.


Obviamente, o terminal MetaTrader 5 já fornece um relatório resumido desenvolvido, mostrando as principais estatísticas do sistema de negociação. No entanto, os parâmetros apresentados nem sempre são suficientes. Felizmente, o MetaTrader 5 fornece a capacidade de escrever parâmetros personalizados de estimativa, que é o que vamos fazer. Não apenas construiremos o coeficiente de determinação R ^ 2, mas também tentaremos estimar seus valores, compará-los com outros critérios de otimização, obter regularidades seguidas das estimativas estatísticas básicas.


Crítica das estatísticas comuns para avaliação do sistema de negociação.


Toda vez que um relatório comercial é gerado ou os resultados dos backtests do sistema de negociação são estudados, são apresentados vários "números mágicos", que podem ser analisados ​​para tirar conclusões sobre a qualidade do negócio. Por exemplo, um relatório de teste típico no terminal MetaTrader 5 é assim:


Fig. 1. Resultado do backtest de uma estratégia de negociação.


Ele contém várias estatísticas ou métricas interessantes. Vamos analisar o mais popular deles e considerar objetivamente seus pontos fortes e fracos.


Lucro Líquido Total. A métrica mostra o montante total de dinheiro que foi ganho ou perdido durante o período de teste ou negociação. Este é um dos parâmetros comerciais mais importantes. O principal objetivo de cada comerciante é maximizar o lucro. Existem várias maneiras de fazer isso, mas o resultado final é sempre um, que é o lucro líquido. O lucro líquido nem sempre depende do número de negócios e é praticamente independente de outros parâmetros, embora o contrário não seja verdadeiro. Assim, é invariante em relação a outras métricas e, portanto, pode ser usado independentemente delas. No entanto, essa medida também tem sérios inconvenientes.


Primeiro, o lucro líquido é diretamente dependente de se a capitalização é usada ou não. Quando a capitalização é usada, o lucro cresce de forma não linear. Freqüentemente há um crescimento exponencial e explosivo do depósito. Nesse caso, os números registrados como lucro líquido no final do teste muitas vezes atingem valores astronômicos e não têm nada a ver com a realidade. Se um lote fixo é negociado, os incrementos de depósito são mais lineares, mas, mesmo neste caso, o lucro depende do volume selecionado. Por exemplo, se o teste, com o resultado mostrado na tabela acima, foi realizado usando um lote fixo com o volume de 0,1 contato, então o lucro obtido de $ 15.757 pode ser considerado um resultado notável. Se o volume da transação foi de 1,0 lote, o resultado do teste é mais do que modesto. É por isso que os testadores experientes preferem definir um lote fixo para 0,1 ou 0,01 no mercado Forex. Nesse caso, a variação mínima no saldo é igual a um ponto do instrumento, o que torna a análise dessa característica mais objetiva.


Em segundo lugar, o resultado final depende da duração do período testado ou da duração do histórico comercial. Por exemplo, o lucro líquido especificado na tabela acima poderia ter sido recebido em 1 ano ou em 5 anos. E em cada caso, o mesmo valor significa uma eficácia completamente diferente de uma estratégia.


E terceiro, o lucro bruto é fixado no momento da última data. No entanto, pode haver uma forte redução do capital naquele momento, embora possa não ter existido há uma semana. Em outras palavras, esse parâmetro é profundamente dependente dos pontos inicial e final selecionados para testar ou gerar o relatório.


Fator Lucro. Esta é sem dúvida a estatística mais popular para os comerciantes profissionais. Enquanto os novatos querem ver apenas o lucro total, os profissionais acham essencial conhecer o volume de negócios dos fundos investidos. Se a perda de um negócio é considerada como um tipo de investimento, então o Fator de Lucro mostra a marginalidade da negociação. Por exemplo, se apenas dois acordos forem feitos, o primeiro perdeu $ 1000 e o segundo ganhou $ 2000, o fator de lucro desta estratégia será $ 2000/1000 = 2.0. Esta é uma figura muito boa. Além disso, o fator de lucro não depende do período de tempo de teste nem do volume do lote de base. Portanto, os profissionais gostam tanto. No entanto, também tem desvantagens.


Um deles é que os valores do fator de lucro são altamente dependentes do número de transações. Se houver apenas alguns negócios, obter um fator de lucro igual a 2,0 ou mesmo 3,0 unidades é bem possível. Por outro lado, se houver vários acordos, obter um Fator de Lucro de 1,5 unidades seria um grande sucesso.


Expectativa de pagamento. É uma característica muito importante, indicando o retorno médio da transação. Se a estratégia é lucrativa, o resultado esperado é positivo; estratégias perdedoras têm um valor negativo. Se o retorno esperado for comparável aos custos de spread ou comissão, a capacidade de tal estratégia ganhar em uma conta real é duvidosa. Normalmente, o Pagamento Esperado pode ser positivo no Testador de Estratégia sob condições ideais de execução, e o gráfico de balanço pode ser uma linha ascendente suave. No comércio ao vivo, no entanto, o retorno médio do negócio pode ser um pouco pior do que o resultado calculado teoricamente devido a possíveis re-cotações ou derrapagens, que podem ter um impacto crítico no resultado da estratégia e causar perdas reais.


Também tem suas desvantagens. O principal deles está relacionado ao número de transações também. Se houver poucos negócios, obter um grande retorno esperado não é um problema. Por outro lado, com um grande número de negócios, o retorno esperado tende a zero. Como é uma métrica linear, não pode ser usada em estratégias de implementação de sistemas de gerenciamento de dinheiro. Mas os traders profissionais o consideram altamente e usam em sistemas lineares com um lote fixo, comparando-o com o número de negócios.


Número de negócios. Esse é um parâmetro importante que afeta a maioria das outras características, explicitamente ou indiretamente. Suponha que um sistema de negociação vença em 70% dos casos. Ao mesmo tempo, os valores absolutos de vitória e perda são iguais, sem outros possíveis resultados de um acordo na tática de negociação. Tal sistema parece ser excelente, mas o que acontece é que a eficiência é avaliada apenas com base nos dois últimos negócios? Em 70% dos casos, um deles será lucrativo, mas a probabilidade de ambos os negócios serem lucrativos é de apenas 49%. Ou seja, o resultado total de dois negócios será zero em mais da metade dos casos. Consequentemente, em metade dos casos, as estatísticas mostram que a estratégia é incapaz de ganhar dinheiro. Seu fator de lucro será sempre igual a um, o retorno esperado e o lucro será zero, outros parâmetros também indicarão eficiência zero.


É por isso que o número de transações deve ser suficientemente grande. Mas o que se entende por suficiência? É geralmente aceito que qualquer amostra deve conter pelo menos 37 medições. Este é um número mágico nas estatísticas, marca o limite inferior da representatividade de um parâmetro. Naturalmente, essa quantidade de negócios não é suficiente para avaliar um sistema de negociação. Pelo menos 100-10 negócios precisam ser feitos para que o resultado seja confiável. Além disso, isso também não é suficiente para muitos comerciantes profissionais. Eles projetam sistemas que fazem pelo menos 500 a 1000 negócios e depois usam esses resultados para considerar a possibilidade de executar o sistema para negociação ao vivo.


Comportamento de parâmetros estatísticos comuns ao testar sistemas de negociação.


Os principais parâmetros nas estatísticas dos sistemas de negociação foram discutidos. Vamos ver o seu desempenho na prática. Ao mesmo tempo, vamos nos concentrar em suas desvantagens para ver como a adição proposta na forma de estatística R ^ 2 pode ajudar a resolvê-los. Para fazer isso, usaremos o EA 2.0 do CImpulse pronto para uso, que é descrito no artigo "Expert Advisor Universal: Uso de Pedidos Pendentes". Ele foi escolhido por sua simplicidade e por ser otimizável, diferentemente dos especialistas do pacote padrão MetaTrader 5, que é extremamente importante para os propósitos deste artigo. Além disso, uma certa infraestrutura de código será necessária, o que já foi escrito para o mecanismo de negociação do CStrategy, portanto, não há necessidade de fazer o mesmo trabalho duas vezes. Todos os códigos-fonte para o coeficiente de determinação são escritos de forma que possam ser facilmente usados ​​fora do CStrategy - por exemplo, em bibliotecas de terceiros ou especialistas em procedimentos.


Lucro Líquido Total. Como já mencionado, o lucro líquido (ou total) é o resultado final do que o comerciante quer obter. Quanto maior o lucro, melhor. No entanto, a avaliação de uma estratégia baseada no lucro final nem sempre garante o sucesso. Vamos considerar os resultados da estratégia CImpulse 2.0 no par EURUSD para o período de teste de 2015/01/15 a 2017.10.10:


Fig. 2. A estratégia ICmpulse, EURUSD, 1H, 2015.01.15 - 2017.10.01, PeriodMA: 120, StopPercent: 0.67.


A estratégia é vista mostrando um crescimento constante do lucro total neste intervalo de teste. É positivo e equivale a 11.894 dólares para negociação de um contrato. Este é um bom resultado. Mas vamos ver como é um cenário diferente, onde o lucro final está próximo do primeiro caso:


Fig. 3. A estratégia ICmpulse, EURUSD, 1H, 2015.01.15 - 2017.10.01, PeriodMA: 110, StopPercent: 0.24.


Apesar do fato de que o lucro é quase o mesmo em ambos os casos, eles parecem sistemas de negociação completamente diferentes. O lucro final no segundo caso também parece aleatório. Se o teste tivesse terminado em meados de 2015, o lucro teria sido próximo de zero.


Aqui está outra execução mal sucedida da estratégia, com o resultado final, no entanto, também muito próximo do primeiro caso:


Fig. 4. ICmpulse, EURUSD, 1H, 2015.01.15 - 2017.10.01, PeriodMA: 45, StopPercent: 0.44.


É claro no gráfico que o principal lucro foi recebido no primeiro semestre de 2015. É seguido por um período prolongado de estagnação. Tal estratégia não é uma opção viável para negociação ao vivo.


Fator Lucro. A métrica do fator de lucro é muito menos dependente do resultado final. Esse valor depende de cada acordo e mostra a proporção de todos os fundos ganhos para todos os fundos perdidos. Pode ser visto que na figura 2, o fator de lucro é bastante alto; na Fig. 4, é menor; e na Fig. 3, está quase na fronteira entre sistemas lucrativos e não rentáveis. Mas, no entanto, o fator de lucro não é uma característica universal que não pode ser enganada. Vamos examinar outros exemplos, em que as indicações do Profit Factor não são tão óbvias:


Fig. 5. ICmpulse, EURUSD, 1H, 2015.01.15 - 2017.10.01, PeriodMA: 60, StopPercent: 0.82.


A Fig. 5 mostra o resultado de um teste de estratégia executado com um dos maiores valores de fator de lucro. O gráfico do balanço parece bastante promissor, mas a estatística obtida é enganosa, pois o valor do Fator Lucro é superestimado devido ao pequeno número de negociações.


Vamos verificar essa afirmação de duas maneiras. A primeira maneira: descobrir a dependência do fator de lucro no número de negociações. Isso é feito otimizando a estratégia CImpulse no testador de estratégias usando uma ampla gama de parâmetros:


Fig. 6. Otimização do ICmpulse usando uma ampla gama de parâmetros.


Salve os resultados da otimização:


Fig. 7. Exportando resultados de otimização.


Agora podemos construir um gráfico de dependência do valor do Fator Lucro no número de negociações. No Excel, por exemplo, isso pode ser feito simplesmente selecionando as colunas correspondentes e pressionando o botão para plotar um gráfico de dispersão na guia Gráficos.


Fig. 8. Dependência do Fator Lucro no número de negócios.


O gráfico mostra claramente que as execuções com um fator de lucro alto sempre têm poucas negociações. Por outro lado, com um grande número de negociações, o fator de lucro é virtualmente igual a um.


A segunda maneira de determinar que os valores do ProfitFactor, nesse caso, dependem do número de negociações e não da qualidade da estratégia está relacionada à realização de um teste O uto de teste geral (OOS). Aliás, essa é uma das formas mais confiáveis ​​de determinar a robustez dos resultados obtidos. Robustez é uma medida da estabilidade de um método estatístico em estimativas. OOS é eficaz para testar não apenas o ProfitFactor, mas também outras indicações. Para os nossos propósitos, os mesmos parâmetros serão selecionados, mas o intervalo de tempo será diferente - a partir de 2012.01.01 a 2015.01.01:


Fig. 9. Testando a estratégia fora da amostra.


Como pode ser visto, o comportamento da estratégia vira de cabeça para baixo. Gera perda em vez de lucro. Este é um resultado lógico, pois o resultado obtido é quase sempre aleatório com um número tão pequeno de negociações. Isto significa que uma vitória aleatória em um intervalo de tempo é compensada por uma perda em outra, o que é bem ilustrado pela Fig. 9.


Expectativa de pagamento. Nós não vamos nos debruçar muito sobre este parâmetro, porque suas falhas são semelhantes às do Profit Factor. Aqui está o gráfico de dependência do resultado esperado sobre o número de negociações:


Fig. 10. Dependência do Pagamento Esperado no número de negócios.


Pode ser visto que quanto mais negociações são feitas, menor é o retorno esperado. Essa dependência é sempre observada para estratégias lucrativas e não rentáveis. Portanto, Expected Payoff não pode servir como único critério para a otimização de uma estratégia de negociação.


Requisitos para o critério de teste do sistema de negociação.


Após considerar os principais critérios de avaliação estatística de um sistema de negociação, concluiu-se que a aplicabilidade de cada critério é limitada. Cada um deles pode ser anulado com um exemplo em que a métrica tem um bom resultado, enquanto a estratégia em si não tem um bom resultado.


Não há critérios ideais para determinar a robustez de um sistema de negociação. Mas é possível formular as propriedades que um forte critério estatístico deve ter.


Independência da duração do período de teste. Muitos parâmetros de uma estratégia de negociação dependem de quanto tempo o período de teste é. Por exemplo, quanto maior o período testado para uma estratégia lucrativa, maior o lucro final. Depende da duração e do fator de recuperação. É calculado como a relação entre o lucro total e o rebaixamento máximo. Como o lucro depende do período, o fator de recuperação também cresce com o aumento no período de teste. A invariância (independência) relativa ao período é necessária para comparar a eficácia de diferentes estratégias em diferentes períodos de teste; Independência do endpoint de teste. Por exemplo, se uma estratégia "permanece à tona" meramente esperando que as perdas passem, o ponto final pode ter um impacto crucial no saldo final. Se o teste for concluído no momento de tal "overstaying", a perda flutuante (patrimônio líquido) se tornará o saldo e uma redução significativa será recebida na conta. A estatística deve ser protegida de tal fraude e fornecer uma visão geral objetiva da operação do sistema de negociação. Simplicidade de interpretação. Todos os parâmetros do sistema de negociação são quantitativos, isto é, cada estatística é caracterizada por uma figura específica. Este valor deve ser intuitivo. Quanto mais simples a interpretação do valor obtido, mais compreensível é o parâmetro. Também é desejável que o parâmetro esteja dentro de certos limites, uma vez que a análise de números grandes e potencialmente infinitos é frequentemente complicada. Resultados representativos com um pequeno número de negócios. Este é sem dúvida o requisito mais difícil entre as características de uma boa métrica. Todos os métodos estatísticos dependem do número de medições. Quanto mais deles, mais estáveis ​​são as estatísticas obtidas. Claro, resolver este problema em uma pequena amostra é completamente impossível. No entanto, é possível mitigar os efeitos causados ​​pela falta de dados. Para este propósito, vamos desenvolver dois tipos de função para avaliar R ao quadrado: uma implementação irá construir este critério com base no número de transações disponíveis. O outro calcula o critério usando o lucro flutuante da estratégia (equity).


Antes de prosseguir diretamente para a descrição do coeficiente de determinação R ^ 2, vamos examinar seus componentes detalhadamente. Isso ajudará a entender o propósito desse parâmetro e os princípios nos quais ele se baseia.


Regressão linear.


A regressão linear é uma dependência linear de uma variável y de outra variável independente x, expressa pela fórmula y = ax + b. Nesta fórmula, um é o multiplicador, b é o coeficiente de polarização. Na realidade, pode haver várias variáveis ​​independentes, e esse modelo é chamado de modelo de regressão linear múltipla. No entanto, vamos considerar apenas o caso mais simples.


A dependência linear pode ser visualizada na forma de um gráfico simples. Pegue o gráfico diário EURUSD de 2017/06/21 a 2017/09/21. Este segmento não é selecionado por acaso: durante este período, uma tendência ascendente moderada foi observada neste par de moedas. É assim que fica no MetaTrader:


Fig. 11. Dinâmica do preço do EURUSD de 21 de junho de 2017 a 21 de agosto de 1717, período de tempo diário.


Salve esses dados de preço e use-os para plotar um gráfico, por exemplo, no Excel.


Fig. 12. Taxas EURUSD (preço de fechamento) como um gráfico no Excel.


Aqui, o eixo Y corresponde ao preço e X é o número ordinal de medição (as datas foram substituídas por números ordinais). No gráfico resultante, a tendência ascendente é visível a olho nu, mas precisamos obter uma interpretação quantitativa dessa tendência. A maneira mais simples é desenhar uma linha reta, que se ajustaria à tendência examinada com mais precisão. É chamado de regressão linear. Por exemplo, a linha pode ser desenhada assim:


Fig. 13. Regressão linear descrevendo uma tendência de alta, desenhada manualmente.


Se o gráfico é bastante suave, é possível desenhar tal linha, que os pontos do gráfico se desviam da distância mínima. E, inversamente, para um gráfico com uma grande amplitude, não é possível escolher uma linha que descreva com precisão suas alterações. Isso se deve ao fato de que a regressão linear tem apenas dois coeficientes. De fato, os cursos de geometria nos ensinaram que dois pontos são suficientes para traçar uma linha. Devido a isso, não é fácil encaixar uma linha reta em um gráfico "curvo". Esta é uma propriedade valiosa que será útil mais adiante.


Mas como descobrir como desenhar uma linha reta corretamente? Métodos matemáticos podem ser usados ​​para calcular de forma otimizada os coeficientes de regressão linear de tal forma que todos os pontos disponíveis tenham a soma mínima de distâncias para esta linha. Isso é explicado no gráfico a seguir. Suponha que haja 5 pontos arbitrários e duas linhas passando por eles. Das duas linhas, é necessário selecionar aquela com a menor soma de distâncias aos pontos:


Fig. 14. Seleção da regressão linear mais adequada.


É claro que, das duas variantes de regressão linear, a linha vermelha descreve melhor os dados dados: os pontos # 2 e # 6 estão significativamente mais próximos da linha vermelha do que da linha preta. Os pontos restantes são aproximadamente equidistantes tanto da linha preta quanto da vermelha. Matematicamente, é possível calcular as coordenadas da linha que melhor descrevem essa regularidade. Não vamos calcular esses coeficientes manualmente e usar a biblioteca matemática AlgLib pronta para uso.


Correlação.


Depois que a regressão linear é calculada, é necessário calcular a correlação entre essa linha e os dados para os quais ela é calculada. Correlação é relação estatística de duas ou mais variáveis ​​aleatórias. Nesse caso, a aleatoriedade das variáveis ​​significa que as medidas dessas variáveis ​​não são interdependentes. A correlação é medida de -1,0 a +1,0. Um valor próximo de zero indica que as variáveis ​​examinadas não possuem inter-relações. O valor de +1.0 significa uma dependência direta, -1.0 mostra uma dependência inversa. Correlação é calculada por várias fórmulas diferentes. Aqui, o coeficiente de correlação de Pearson será usado:


dx e dy na fórmula correspondem às variâncias calculadas para as variáveis ​​aleatórias xe y. Variância é uma medida da variação do traço. Nos termos mais gerais, pode ser descrito como a soma dos quadrados das distâncias entre os dados e a regressão linear.


O coeficiente de correlação dos dados para sua regressão linear mostra quão bem a linha reta descreve esses dados. Se os pontos de dados estão localizados a uma grande distância da linha, a variação é alta e a correlação é baixa, e vice-versa. A correlação é muito fácil de interpretar: um valor zero significa que não há inter-relação entre a regressão e os dados; um valor próximo a um mostra uma forte dependência direta.


Relatórios no MetaTrader têm uma métrica estatística especial. Chama-se Correlação LR e mostra a correlação entre a curva de equilíbrio e a regressão linear encontrada para essa curva. Se a curva de equilíbrio for suave, a aproximação a uma linha reta será boa. Neste caso, o coeficiente de correlação LR será próximo de 1,0, ou pelo menos acima de 0,5. Se a curva de equilíbrio for instável, as subidas são alternadas por quedas e o coeficiente de correlação tende a zero.


A Correlação LR é um parâmetro interessante. Mas nas estatísticas, não é habitual comparar os dados e a regressão descritiva diretamente através do coeficiente de correlação. A razão para isso será discutida na próxima seção.


Coeficiente de determinação R ^ 2.


O método de cálculo para o coeficiente de determinação R ^ 2 é semelhante ao método de cálculo para a correlação LR. Mas o valor final é adicionalmente ao quadrado. Pode levar valores de 0,0 a +1,0. Esta figura mostra a participação dos valores explicados da amostra total. A regressão linear serve como um modelo explicativo. Estritamente falando, o modelo explicativo não precisa ser uma regressão linear, outros podem ser usados ​​também. No entanto, os valores de R ^ 2 não requerem processamento adicional para uma regressão linear. Em modelos mais complexos, a aproximação é geralmente melhor e os valores de R ^ 2 devem ser adicionalmente reduzidos por "penalidades" especiais para uma estimativa mais adequada.


Vamos dar uma olhada mais de perto no que o modelo explicativo mostra. Para fazer isso, vamos realizar um pequeno experimento: usar a linguagem de programação especializada R-Project e gerar um passeio aleatório, para o qual o coeficiente requerido será calculado. O passeio aleatório é um processo com características bastante semelhantes aos instrumentos financeiros reais. Para obter um passeio aleatório, basta adicionar consecutivamente vários números aleatórios distribuídos de acordo com a lei normal.


O código fonte em R com uma descrição detalhada do que está sendo feito:


A função rnorm retorna dados diferentes toda vez, então se você quiser repetir essa experiência, o gráfico terá uma aparência diferente.


O resultado do código apresentado:


Fig. 15. Caminhada aleatória e regressão linear para isso.


O gráfico resultante é semelhante ao de um instrumento financeiro arbitrário. Sua regressão linear foi calculada e produzida como uma linha preta do gráfico. À primeira vista, sua descrição da dinâmica da caminhada aleatória é bastante medíocre. Mas precisamos de uma estimativa quantitativa da qualidade da regressão linear. Para este propósito, é usada a função 'summary', que gera as estatísticas resumidas no modelo de regressão:


Aqui, uma figura é do maior interesse - R-quadrado. Essa métrica indica um valor de 0,5903. Consequentemente, a regressão linear descreve 59,03% de todos os valores, e os restantes 41% são deixados sem explicação.


Este é um indicador muito sensível que responde bem a uma linha de dados suave e plana. Para ilustrar isso, vamos continuar o experimento: introduzir um componente de crescimento estável nos dados aleatórios. Para fazer isso, altere o valor médio ou o valor esperado em 1/20 da variância dos dados gerados inicialmente:


O gráfico resultante está agora muito mais próximo de uma linha reta:


Fig. 16. Caminhada aleatória com valor esperado positivo, igual a 1/20 da sua variância.


As estatísticas para isso são as seguintes:


É claro que o R-quadrado é significativamente maior e tem um valor de 0,8829. Mas vamos dar um passo extra e dobrar o componente de determinação do gráfico, até 1/10 do desvio padrão dos dados iniciais. O código para processar isso é semelhante ao código anterior, mas com divisão por 10.0 e não por 20.0. O novo gráfico agora é quase totalmente semelhante a uma linha reta:


Fig. 17. Caminhada aleatória com valor esperado positivo, igual a 1/10 de sua variância.


Calcule suas estatísticas:


O R-quadrado ficou ainda maior e chegou a 0,9485. Este gráfico é muito parecido com a dinâmica de balanceamento da estratégia de negociação rentável desejada. Deixe-nos ir para a milha extra novamente. Aumentar o valor esperado até 1/5 do desvio padrão:


Fig. 18. Caminhada aleatória com valor esperado positivo, igual a 1/5 da sua variância.


Tem as seguintes estatísticas:


É claro que o R-quadrado agora é quase igual a um. O gráfico mostra claramente que os dados aleatórios na forma da linha verde estão quase completamente na linha reta lisa.


O teorema de arcsine e sua contribuição para a estimação da regressão linear.


Há uma prova matemática de que um processo aleatório acaba se distanciando de seu ponto original. Foi nomeado o primeiro e o segundo teorema do arcossine. Eles não serão discutidos em detalhes, apenas o corolário desses teoremas será definido.


Com base neles, as tendências nos processos aleatórios são bastante inevitáveis ​​do que improváveis. Em outras palavras, há mais tendências aleatórias em tais processos do que flutuações aleatórias perto do ponto inicial. Esta é uma propriedade muito importante, que contribui significativamente para a avaliação de métricas estatísticas. Isto é especialmente evidente para o coeficiente de regressão linear (LR Correlation). As tendências são melhor descritas por regressão linear que flats. Isto é devido ao fato de que as tendências contêm mais movimentos em uma direção, o que parece linha de uma linha suave.


Se houver mais tendências em processos aleatórios que os planos, a LR Correlation também superestimará seus valores em geral. Para ver esse efeito não trivial, vamos tentar gerar 10.000 caminhadas aleatórias independentes com uma variância de 1.0 e valor esperado zero. Vamos calcular a Correlação LR para cada gráfico e, em seguida, plotar uma distribuição desses valores. Para esses propósitos, escreva um script de teste simples em R:


O script calcula LR Correlation e R ^ 2. A diferença entre eles será vista mais tarde. Uma pequena adição foi feita no script. O coeficiente de correlação resultante será multiplicado pelo sinal final do gráfico sintético. Se o resultado final for menor que zero, a correlação será negativa; caso contrário, é positivo. Isso é feito para separar com facilidade e rapidez os resultados negativos dos positivos sem recorrer a outras estatísticas. É assim que funciona a Correlação LR no MetaTrader 5, o mesmo princípio será usado para R ^ 2.


Então, vamos plotar a distribuição de LR Correlation para 10000 amostras independentes, cada uma das quais consiste em 1000 medições:


O gráfico resultante indica claramente: correção da definição:


Fig. 19. Distribuição da Correlação de LR para 10000 caminhadas aleatórias.


Como visto a partir do experimento, os valores da Correlação LR são substancialmente superestimados na faixa de +/- 0,75 - 0,95. Isso significa que a Correlação LR freqüentemente fornece falsamente uma estimativa positiva alta onde não deveria.


Agora vamos considerar como o R ^ 2 se comporta na mesma amostra:


Fig. 20. Distribuição de R ^ 2 para 10000 caminhadas aleatórias.


O valor de R ^ 2 não é muito alto, embora sua distribuição seja uniforme. É surpreendente como uma simples ação matemática (elevando ao máximo o poder de dois) nega completamente os efeitos indesejáveis ​​da distribuição. Esta é a razão pela qual a Correlação LR não pode ser analisada diretamente - a transformação matemática adicional é necessária. Além disso, observe que R ^ 2 move uma fração significativa dos saldos virtuais analisados ​​das estratégias para um ponto próximo de zero, enquanto a LR-Correlação fornece estimativas médias estáveis. Esta é uma propriedade positiva.


Coletando a equidade da estratégia.


Agora que a teoria foi estudada, resta implementar o R-quadrado no terminal MetaTrader. É claro que poderíamos escolher o caminho mais fácil e calculá-lo para as transações da história. No entanto, uma melhoria adicional será introduzida. Como mencionado anteriormente, qualquer parâmetro estatístico deve ser resistente a um pequeno número de transações. Infelizmente, o R-quadrado pode inflacionar seu valor exageradamente se houver apenas algumas transações na conta, como qualquer outra estatística. Para evitar isso, calcule-o com base nos valores do patrimônio - lucro flutuante. A ideia por trás disso é que, se a EA fizer apenas 20 negócios por ano, é muito difícil estimar sua eficiência. Seu resultado é provavelmente aleatório. Mas se o saldo desse EA for medido em uma periodicidade especificada (por exemplo, uma vez por hora), haverá uma quantidade razoável de pontos para traçar a estatística. Neste caso, haverá mais de 6000 medições.


Além disso, essa medida neutraliza os sistemas que não consertam sua perda flutuante, ocultando-a. O saque por equidade está presente, mas não por saldo. Uma estatística calculada com base no saldo não avisa sobre problemas ocorridos. No entanto, uma métrica calculada com base no lucro / perda flutuante reflete a situação objetiva na conta.


A eqüidade da estratégia será coletada de maneira não convencional. Isso porque a coleta desses valores requer dois pontos principais a serem levados em conta:


Frequência de coleta de estatísticas Determinação de eventos, recebendo o que requer que o patrimônio seja verificado.


Por exemplo, um Expert Advisor funciona apenas por timer, no período de tempo H1. É testado no modo "Preços de abertura apenas". Portanto, os dados para este EA não podem ser coletados mais de uma vez por hora, e o rastreamento desses dados pode ser realizado somente quando o evento OnTimer é gerado. A solução mais eficaz é simplesmente usar o poder do mecanismo CStrategy. O fato é que o CStrategy coleta todos os eventos em um único manipulador de eventos e monitora o período de tempo necessário automaticamente. Assim, a solução ótima é escrever uma estratégia de agente especial, que calcula todas as estatísticas necessárias. Ele será criado pelo gerente de estratégia do CManagerList. A turma só adicionará seu agente à lista de estratégias, que monitorará as alterações na conta.


O código fonte deste agente é fornecido abaixo:


O próprio agente consiste em dois métodos: OnEvent redefinido e um método para retornar os valores de patrimônio. Aqui, o principal interesse é na classe CTimeSeries, que aparece no CStrategy pela primeira vez. É uma tabela simples, com os dados adicionados no formato: data, valor, número da coluna. Todos os valores armazenados são classificados por hora. A data necessária é acessada por meio de pesquisa binária, o que acelera substancialmente o trabalho com a coleção. The OnEvent method checks if the current event is the opening of a new bar, and if so, simply stores the new equity value.


R^2 reacts to a situation where there are no deals for a long time. At such times, the unchanged equity values will be recorded. The equity graph forms a so-called "ladder". To prevent this, the method compares the value with the previous value. If the values match, the record is skipped. Thus, only the changes in equity fall into the list.


Let us integrate this class to the CStrategy engine. Integration will be performed from above, at the level of CStrategyList. This module is suitable for calculation of custom statistics. There can be several custom statistics. Therefore, an enumeration listing all possible statistic types is introduced:


The enumeration above shows that the custom optimization criterion has three types: R-squared based on the result of trades, R-squared based on the equity data and no calculation of statistics.


Add the ability to configure the type of custom calculation. To do this, supply the CStrategyList class with additional SetCustomOptimaze * methods:


Each of these methods sets the value of its internal variable of ENUM_CUSTOM_TYPE to m_custom_type and the second parameter, equal to the correlation type ENUM_CORR_TYPE:


This additional parameters must be mentioned separately. The fact is that R^2 is none other but the correlation between the graph and its linear model. However, the correlation type itself may differ. Use the AlgLib mathematical library. It supports two methods for calculating the correlation: Pearson's and Spearman's. Pearson's formula is classic and well-suited to homogeneous, normally distributed data. Spearman's Rank-Order correlation is more resistant to price spikes, which are often observed on the market. Therefore, our calculation will allow working with each variant of calculating R^2.


Now that all data are prepared, proceed to the calculation of R^2. It is moved to separate functions:


They will be located in a separate file named RSquare. mqh. The calculation is arranged in the form of functions, so that users would be able to easily and quickly include this calculation mode in their project. In this case, there is no need to use CStrategy. For example, to calculate R^2 in your expert, simply redefine the OnTester system function:


When it is necessary to calculate the strategy equity, however, users who do not employ CStrategy will have to do it themselves.


The last thing that needs to be done in CStrategyList is to define the OnTester method:


Now consider the implementation of functions CustomR2Equity and CustomR2Balance .


Calculating the coefficient of determination R^2 using AlgLib.


The coefficient of determination R^2 is implemented using AlgLib — a cross-platform library of numerical analysis. It helps calculate various statistical criteria, from simple to the most advanced ones.


Here are the steps for calculating the coefficient.


Get the values of equity and convert them into matrix M[x, y], where x is the number of measurement, y is the equity value. For the obtained matrix, calculate the a and b coefficients of the linear regression equation.


These steps are performed by the CustomR2Equity function. Its source code is presented below:


This code refers to three statistical methods: CAlgLib::LRLine, CAlglib::PearsonCorr2 and CAlglib::SpearmanCorr2. The main one is CAlgLib::LRLine, which directly calculates the linear regression coefficients.


Now let us describe the second function for calculating R^2: CustomR2Balance. As the name implies, this function calculates the value based on the deals made. All its work lies in forming an array of the double type, which contains the dynamics of balance, by iterating over all deals in history.


Once the array is formed, it is passed to the CustomR2Equity function mentioned earlier. In fact, the CustomR2Equity function is universal. It calculates the R^2 value for any data contained in the equity[] array, whether it is the balance dynamics or the value of the floating profit.


The last step is a small modification in the code of the CImpulse EA, namely, the override of the OnTester system event:


This function sets the type of the custom parameter, and then returns its value.


Now we can see the calculated coefficient in action. Once the CImpulse strategy backtest starts, the parameter will appear in the report:


Fig. 21. The value of R^2 as a custom optimization criterion.


Using the R-squared parameter in practice.


Now that R-squared is built-in as a custom optimization criterion, it is time to try it out in practice. This is done by optimizing CImpulse on the М15 timeframe of the EURUSD currency pair. Save the received optimization result to an Excel file, and then use the obtained statistics to compare several runs selected according to different criteria.


The complete list of optimization parameters is provided below:


The range of the EA parameters is listed in the table:


After the optimization, an optimization cloud was obtained, consisting of 722 variants:


Fig. 22. Optimization cloud of CImpulse, symbol - EURUSD, timeframe - H1.


Select the run with the maximum profit and display its balance graph:


Fig. 23. Balance graph of the strategy selected according to the criterion of the maximum profit.


Now find the best run according to the R-square parameter. For this, compare the optimization runs in the XML file. If Microsoft Excel is installed on the computer, the file will be opened in it automatically. The work will involve sorting and filters. Select the table title and press the button of the same name (Home -> Sort & Filter -> Filter). This allows customizing the display of columns. Sort the runs according to the custom optimization criterion:


Fig. 24. Optimization runs in Microsoft Excel, sorted by R-squared.


The first row in the table will have the best R-squared value of the entire sample. In the figure above, it is marked in green. This set of parameters in the strategy tester gives a balance graph that looks as follows:


Fig. 25. Balance graph of a strategy selected according to the criterion of the maximum R-squared value.


The qualitative difference between these two balance graphs is visible to the naked eye. While the test run with the maximum profit "broke down" in December 2015, the other variant with the maximum R^2 continued its steady growth.


Often R^2 depends on the number of deals, and may usually overestimate its values on small samples. In this respect, R-squared correlates with Profit Factor. On certain strategy types, a high value of Profit Factor and a high value of R^2 go together. No entanto, isso nem sempre é o caso. As an illustration, select a counter-example from the sample, demonstrating the difference between R^2 and Profit Factor. The figure below shows a strategy run having one of the highest Profit Factor values equal to 2.98:


Fig. 26. Test run of a strategy with Profit Factor equal to 2.98.


The graph shows that, even though the strategy shows a steady growth, the quality of the strategy balance curve is still lower than the one with the maximum R-squared.


Advantages and limitations of use.


Each statistical metric has its pros and cons. R-squared is no exception in this regard. The table below presents its flaws and solutions that can mitigate them:


Let us describe the problem of applying R^2 to nonlinear systems (for example, a trading strategy with a dynamic lot) in more detail.


The primary objective of every trader is the maximization of profit. A necessary condition for this is the use of various capitalization systems. Capitalization system is the transformation of a linear process into a nonlinear one (for example, into an exponential process). But such a transformation renders most of the statistical parameters meaningless. For example, the "final profit" parameter is meaningless for capitalized systems, since even a slight shift in the time interval testing or changing a strategy parameter by a hundredth of a percent can change the final result by tens or even hundreds of times.


Other parameters of the strategy lose their meaning as well, such as Profit Factor, Expected Payoff, the maximum profit/loss, etc. In this sense, R-squared is no exception either. Created for linear estimation of the balance curve smoothness, it becomes powerless in evaluation of nonlinear processes. Therefore, any strategy should be tested in a linear form, and only after that a capitalization system should be added to the selected option. It is better to evaluate nonlinear systems using special statistical metrics (for example, GHPR) or to calculate the yield in annual percentages.


Conclusão.


The standard statistical parameters for evaluating trading systems have known drawbacks, which must be taken into account. Among the standard metrics in MetaTrader 5, only LR Correlation is designed to estimate the smoothness of the strategy balance curve. However, its values ​​are often overestimated.


Thus, it is safe to say that the coefficient of determination R-squared is an important addition to the existing set of the MetaTrader 5 testing metrics. It allows estimating the smoothness of a strategy's balance curve, which is a nontrivial indicator on its own. R-squared is easy to use: its values are bound to the range of -1.0 to +1.0, signaling about a negative trend in the strategy balance (values close to -1.0), no trend (values close to 0.0) and a positive trend (values tending to +1.0). Thanks to all these properties, reliability and simplicity, R-squared can be recommended for use in building a profitable trading system.


Traduzido do russo por MetaQuotes Software Corp.


Forex Mecânico


Negociação no mercado de câmbio usando estratégias de negociação mecânicas.


Using R in Algorithmic Trading: Analysing your Trading System’s Historical Results.


When we create a trading strategy one of the most important things we have to do is analyse the historical results in order to assess the historical weaknesses and strengths of our trading system. Regular software like MT4 or MT5 – which are closed source – have limited statistics presented in often fixed ways that heavily limit the ability of a trader to obtain the statistics he or she desires. Using the R statistical software we can create robust performance statistics for our trading strategies without the limitations of close sourced software with the ability to build custom reports and have full control over the appearance of the graphics being presented. In today’s post we’re going to learn how to use R to build performance statistics for our trading systems in a manner that is easy-to-do, expandable and that easily leads to the construction of custom reports. В For this post we are going to be using the quantmod, PerformanceAnalytics, xtable, xts and ggplot2 packages so make sure you have them all installed before you continue reading. As always, I heavily encourage the use of R studio to perform these experiments.


The first important thing is the format of your system’s result data. For this experiment we need the system results file to have 2 columns, one containing trade closing times and the second one containing balance values. The date can be in any format but you must be certain that your format matches the one yous specify on the read. zoo function. For this tutorial I will be using files with a “%d/%m/%Y %H:%M” date format (something like 25/12/1995 5:00).В In order to generate performance statistics we are going to load our data into an xts object and we are then going to create monthly and yearly returns (using quantmod) that we can then analyse using functions from the performanceAnalytics function. We will also construct good looking plots of these results using the ggplot2 library. The code below loads your system result file into an xts object called “results” and then generates yearly and and monthly returns using quantmod. The “head” function displays the top values for the “results”, “monthly returns” and “yearly returns” objects so that you can confirm that everything was loaded properly.


Now that we have loaded our data we can now generate some statistics to analyse our system results. The first thing you will want to do is draw an overall chart of your trading system usings the chars. PerformanceSummary command. This function creates a beautiful graph showing your system’s equity curve, the monthly returns and the drawdown periods. Please note that these values are all given as fractional returns, meaning that you need to multiply them by 100 to get a percentage. For example the graph I generated below has a maximum drawdown of -0.30, which is 30% in percentage terms. The performance summary graph already gives you important information about your trading strategy.


After getting this chart we can then obtain some tables to analyse using the table. CalendarReturns function applied to our monthly returns. This table can be used within a report to see both the monthly and yearly performance values through our whole test. Values here are given in actual percentage returns so there is no need to carry out any additional multiplications to analyse the results. Through this table you can easily see your best year, your worst year as well as the overall variations for each calendar month during every year. It is easy to see for example – on the system results given as an example – that September has been a profitable month since 2008 while it would be difficult to get this information from most other plots.


Another important set of statistics you want to have are related with your distribution of returns. We want to see the kurtosis and skewness of our distribution of returns as well as Risk measures. I took this idea form this tutorial related with the analysis of stock returns, so feel free to check it out for more information about this analysis and how you can also plot several of these analysis together if you have data for different systems loaded within a given xts object (more on this on a future post when we do system comparisons using R).


There are several additional statistics you can obtain from the PerformanceAnalytics library, so make sure you go through the documentation if you want to have a more powerful usage of this tool. You can easily obtain statistics such as your annualized return, maximum drawdown, downside risk, drawdowns and rollingPerforamnce using the options available within this R library. With this information you can build a good looking report that you can then put into a pdf using Latex (more on this on a later post). Finally we are going to create a yearly return graph as an example using the ggplot2 library which generated a good looking plot that you can also use to further analyse your trading results. The ggplot2 library offers a wide variety of plotting options, allowing for easy customization of your performance results.


As you can see we can use R for very varied things, including the analysis of our trading systems. Using the xtable, quantmod, PerformanceAnalytics and ggplot2 libraries we can create very easy-to-read analytics that can really help us better understand and analyse our trading strategies. If you would like to learn more about trading system analysis and how you too can perform advanced analysis beyond what MT4/MT5 or other programs will give youВ please consider joiningВ Asirikuy, a website filled with educational videos, trading systems, development and a sound, honest and transparent approach towards automated trading in general . Espero que tenha gostado deste artigo ! : o)


3 Responses to “Using R in Algorithmic Trading: Analysing your Trading System’s Historical Results”


I am new to R and trying to implement your code. Why is line 7.


I guess the < symbol is showing as &lt ; on your website.


This should be fixed now. Thanks for bringing it up!


Estratégia de Negociação ARIMA + GARCH no Índice S & amp; P500 Stock Market Usando R.


Estratégia de Negociação ARIMA + GARCH no Índice S & amp; P500 Stock Market Usando R.


Neste artigo, quero mostrar a você como aplicar todo o conhecimento adquirido nos posts de análise de séries temporais anteriores a uma estratégia de negociação no índice do mercado de ações S & amp; P500 nos EUA.


Veremos que, combinando os modelos ARIMA e GARCH, podemos superar significativamente a abordagem "Buy-and-Hold" em longo prazo.


Visão Geral da Estratégia.


A ideia da estratégia é relativamente simples, mas se você quiser experimentar, sugiro ler os posts anteriores sobre análise de séries temporais para entender o que você estaria modificando!


A estratégia é executada de forma "rotativa":


Para cada dia, $ n $, os $ k $ dias anteriores dos retornos logarítmicos diferenciados de um índice do mercado de ações são usados ​​como uma janela para ajustar um modelo ARIMA e GARCH ideal. O modelo combinado é usado para fazer uma previsão para os retornos do dia seguinte. Se a previsão for negativa, o estoque está em curto no fechamento anterior, enquanto, se for positivo, ele é esperado. Se a previsão for a mesma direção do 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. Tomei $ k = 500 $, mas este é um parâmetro que pode ser otimizado para melhorar o desempenho ou reduzir o rebaixamento.


O backtest é realizado de maneira direta e vetorializada usando R. Ele ainda não foi implementado no backtester orientado a eventos do Python. Portanto, o desempenho alcançado em um sistema de negociação real provavelmente seria um pouco menor do que o que você poderia alcançar aqui, devido a comissões e derrapagens.


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 de séries temporais, bem como algumas novas bibliotecas, incluindo rugarch, que me foram sugeridas por Ilya Kipnis no QuantStrat Trader.


Vou percorrer a sintaxe passo-a-passo e apresentar 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 demorei alguns dias no meu PC dekstop para gerar os sinais!


Você deve ser capaz de replicar meus resultados na íntegra, já que o código em si não é muito complexo, embora demore algum tempo para simulá-lo, se você o executar na íntegra.


A primeira tarefa é instalar e importar as bibliotecas necessárias em R:


Se você já tem as bibliotecas instaladas, pode simplesmente importá-las:


Com isso feito, aplicaremos a estratégia ao S & amp; P500. Podemos usar quantmod para obter dados desde 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. Nós definimos o comprimento foreLength para ser igual ao comprimento dos dados de negociação que temos menos $ k $, o tamanho da janela:


Neste estágio, precisamos percorrer todos os dias nos dados de negociação e ajustar um modelo ARIMA e GARCH apropriado à janela de rolagem de comprimento $ k $. Dado que nós tentamos 24 ajustes ARIMA separados e ajustamos um modelo GARCH, para cada dia, o indicador pode levar muito tempo para ser gerado.


Usamos o índice d como uma variável de loop e o loop de $ k $ para o tamanho dos dados de negociação:


Em seguida, criamos a janela contínua pegando os retornos do S & P500 e selecionando os valores entre $ 1 + d $ e $ k + d $, onde $ k = 500 $ para essa estratégia:


Usamos o mesmo procedimento que no artigo ARIMA para pesquisar em todos os modelos ARMA com $ p \ in \ $ e $ q \ in \ $, com exceção de $ p, q = 0 $.


Envolvemos a chamada arimaFit em um bloco de tratamento de exceção R tryCatch para garantir que, se não obtivermos um ajuste para um valor específico de $ p $ e $ q $, a ignoramos e passamos para a próxima combinação de $ p $ e $ q $.


Observe que definimos o valor "integrado" de $ d = 0 $ (este é um $ d $ diferente para nosso parâmetro de indexação!) E, como tal, estamos realmente ajustando um modelo ARMA, em vez de um ARIMA.


O procedimento de looping nos fornecerá o "melhor" modelo de ARMA adequado, em termos do Critério de Informações de Akaike, que podemos usar para alimentar nosso modelo GARCH:


No próximo bloco de código, vamos usar a biblioteca rugarch, com o modelo GARCH (1,1). A sintaxe para isso requer que configuremos um objeto de especificação ugarchspec que usa um modelo para a variância e a média. A variação recebe o modelo GARCH (1,1), enquanto a média aceita um modelo ARMA (p, q), onde $ p $ e $ q $ são escolhidos acima. Também escolhemos a distribuição sged pelos erros.


Uma vez escolhida a especificação, realizamos o ajuste real do ARMA + GARCH usando o comando ugarchfit, que recebe o objeto de especificação, os retornos $ k $ do S & amp; P500 e um solucionador de otimização numérica. Escolhemos usar o híbrido, que tenta resolvedores diferentes para aumentar a probabilidade de convergência:


Se o modelo GARCH não convergir, basta definir o dia para produzir uma previsão "longa", que é claramente um palpite. No entanto, se o modelo convergir, então nós enviamos a data e a direção de previsão de amanhã (+1 ou -1) como uma string, ponto no qual o loop é fechado.


Para preparar a saída para o arquivo CSV, criei uma string que contém os dados separados por uma vírgula com a direção da previsão para o dia subseqüente:


A penúltima etapa é a saída do arquivo CSV para o disco. Isso nos permite pegar o indicador e usá-lo em um software de backtesting alternativo para análise posterior, se assim for desejado:


No entanto, há um pequeno problema com o arquivo CSV como está agora. O arquivo contém uma lista de datas e uma previsão para a direção de amanhã. Se fôssemos carregar isso no código de backtest abaixo como está, estaríamos introduzindo um viés de look-ahead, porque o valor de predição representaria dados não conhecidos no momento da previsão.


Para explicar isso, precisamos simplesmente mover o valor previsto um dia à frente. Eu descobri que isso é mais simples usando o Python. Como não quero supor que você instalou nenhuma biblioteca especial (como pandas), mantive-a em Python puro.


Aqui está o pequeno script que leva esse procedimento para fora. Certifique-se de executá-lo no mesmo diretório que o arquivo forecasts. csv:


Neste ponto, agora temos o arquivo do indicador corrigido armazenado em forecast_new. csv. Como isso leva um tempo considerável para calcular, forneci o arquivo completo para você fazer o download:


Resultados da Estratégia.


Agora que geramos nosso arquivo CSV de indicador, precisamos comparar seu desempenho com "Comprar e reter".


Primeiro, lemos no 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 do S & amp; P500. Podemos então calcular os retornos para a estratégia ARIMA + GARCH multiplicando o sinal de previsão (+ ou -) pelo próprio retorno:


Quando tivermos os retornos da estratégia ARIMA + GARCH, podemos criar curvas de patrimônio para o modelo ARIMA + GARCH e para "Comprar e manter". Finalmente, nós os combinamos em uma única estrutura de dados:


Finalmente, podemos usar o comando xyplot para plotar ambas as curvas de equidade no mesmo enredo:


A curva de capital próprio até 6 de outubro de 2015 é a seguinte:


Curva de capital da estratégia ARIMA + GARCH vs "Buy & amp; Hold" para o S & amp; P500 de 1952.


Como você pode ver, ao longo de um período de 65 anos, a estratégia ARIMA + GARCH ultrapassou significativamente o "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, quando a volatilidade aumenta significativamente e os retornos médios são menos impressionantes.


Claramente, a curva de patrimônio promete um ótimo desempenho durante todo o período. No entanto, esta estratégia teria realmente sido negociável?


Primeiro de tudo, vamos considerar o fato de que o modelo ARMA só foi publicado em 1951. Não foi realmente amplamente utilizado até os anos 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, por Engle, e o próprio GARCH foi publicado pela Bollerslev em 1986.


Em terceiro lugar, este "backtest" foi realmente realizado em um índice do mercado de ações e não um instrumento comercializável fisicamente. Para obter acesso a um índice como este, teria sido necessário negociar futuros S & P500 ou uma réplica do Exchange Traded Fund (ETF), como o SPDR.


Por isso, é realmente apropriado aplicar tais modelos a uma série histórica anterior à sua invenção? Uma alternativa é começar a aplicar os modelos a dados mais recentes. De fato, podemos considerar o desempenho nos últimos dez anos, de 1º de janeiro de 2005 até hoje:


Curva de capital da estratégia ARIMA + GARCH vs "Buy & amp; Hold" para o S & amp; P500 de 2005 até hoje.


Como você pode ver, a curva de patrimônio permanece abaixo de um Buy & amp; Segure a estratégia por quase 3 anos, mas durante a quebra do mercado de ações de 2008/2009 ela se sai muito bem. Isto faz sentido porque provavelmente haverá uma correlação serial significativa neste período e será bem capturado pelos modelos ARIMA e GARCH. Uma vez que o mercado se recuperou após 2009 e entrou no que parece ser uma tendência mais estocástica, o desempenho do modelo começa a sofrer mais uma vez.


Observe que essa estratégia pode ser facilmente aplicada a diferentes índices do mercado de ações, ações ou outras classes de ativos. Eu recomendo fortemente que você tente 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, desejo continuar a discussão da análise de séries temporais considerando processos de memória longa, modelos de espaço de estados e séries temporais cointegradas.


Essas áreas subseqüentes de séries temporais nos apresentarão modelos que podem melhorar nossas previsões além das que apresentamos aqui, o que aumentará significativamente nossa rentabilidade comercial e / ou reduzirá o risco.


Aqui está a lista completa para a geração de indicadores, backtesting e plotagem:


E o código Python para aplicar a forecasts. csv antes de reimportar:


A Quantcademy.


Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.


Negociação Algorítmica Bem Sucedida.


Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.


Comércio Algorítmico Avançado.


Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.


O Trader R.


Usando R e ferramentas relacionadas em Finanças Quantitativas.


Visualizando dados de séries temporais em R.


É com muito prazer que anuncio meu curso do DataCamp sobre Visualização de Dados de Séries Temporais em R. Esse curso também faz parte da série de Períodos Temporais com a faixa de habilidades R. Sinta-se livre para dar uma olhada, o primeiro capítulo é grátis!


Descrição do Curso.


Como diz o ditado, "Um gráfico vale mais que mil palavras". É por isso que a visualização é a maneira mais usada e poderosa de entender melhor seus dados. Após este curso, você terá uma visão geral muito boa dos recursos de visualização da série temporal R e poderá decidir melhor qual modelo escolher para a análise subsequente. Você também poderá transmitir a mensagem que deseja transmitir de maneira eficiente e bonita.


Esboço de Curso.


Capítulo 1: Ferramentas de Visualização da Série Temporal.


Este capítulo apresentará as ferramentas básicas de visualização da série temporal R.


Capítulo 2: Séries Temporais Univariadas.


Gráficos univariados são projetados para aprender o máximo possível sobre a distribuição, a tendência central e a disseminação dos dados disponíveis. Neste capítulo, você será presenteado com algumas ferramentas visuais usadas para diagnosticar séries de tempos univariados.


Capítulo 3: Séries Temporais Multivariadas.


O que fazer se você tiver que lidar com séries temporais multivariadas? Neste capítulo, você aprenderá como identificar padrões na distribuição, tendência central e se espalhar sobre pares ou grupos de dados.


Capítulo 4: Estudo de caso: selecionando visualmente um estoque que melhora seu portfólio existente.


Vamos colocar tudo que você aprendeu até agora na prática! Imagine que você já possui uma carteira de ações e você tem algum dinheiro disponível para investir, como você sabiamente pode selecionar uma nova ação para investir seu dinheiro adicional? Analisar as propriedades estatísticas dos estoques individuais versus um portfólio existente é uma boa maneira de abordar o problema.


Vinculando R ao IQFeed com o pacote QuantTools.


O IQFeed fornece serviços de dados de fluxo contínuo e soluções de negociação que cobrem o mercado agrícola, de energia e financeiro. É um provedor de feed de dados bem conhecido e reconhecido, voltado para usuários de varejo e pequenas instituições. O preço da assinatura começa em cerca de US $ 80 / mês.


Stanislav Kovalevsky desenvolveu um pacote chamado QuantTools. É um pacote tudo em um projetado para melhorar a modelagem de negociação quantitativa. Ele permite baixar e organizar dados históricos de mercado de várias fontes, como Yahoo, Google, Finam, MOEX e IQFeed. O recurso que mais me interessa é a capacidade de vincular o IQFeed à R. Eu uso o IQFeed há alguns anos e estou feliz com ele (não estou afiliado à empresa em nenhum caminho). Mais informações podem ser encontradas aqui. Eu tenho procurado uma integração dentro de R por um tempo e aqui está. Como resultado, depois que fiz alguns testes, mudei meu código que ainda estava em Python para R. Apenas para completar, aqui está um link que explica como baixar dados históricos do IQFeed usando Python.


A QuantTools oferece quatro funcionalidades principais: Obter dados de mercado, Armazenar / Recuperar dados de mercado, Dados de séries temporais de plotagem e Testes reversos.


Primeiro, verifique se o IQfeed está aberto. Você pode baixar dados diários ou intradiários. O código abaixo faz o download dos preços diários (Aberto, Alto, Baixo, Fechado) para o SPY de 1º de janeiro de 2017 a 1º de junho de 2017.


O código abaixo faz o download dos dados intraday de 1º de maio de 2017 a 3 de maio de 2017.


Observe o parâmetro do período. Pode usar qualquer um dos seguintes valores: tick, 1min, 5min, 10min, 15min, 30min, hora, dia, semana, mês, dependendo da freqüência que você precisa.


O QuantTools facilita o processo de gerenciar e armazenar dados do mercado de ticks. Você acabou de configurar os parâmetros de armazenamento e está pronto para começar. Os parâmetros são onde, desde que data e quais símbolos você gostaria de armazenar. Sempre que você puder adicionar mais símbolos e se eles não estiverem presentes em um armazenamento, o QuantTools tentará obter os dados da data de início especificada. O código abaixo salvará os dados no seguinte diretório: & # 8220; C: / Usuários / Arnaud / Documentos / Dados de Mercado / iqfeed & # 8221 ;. Há uma subpasta por instrumento e os dados são exibidos em arquivos. rds.


Você também pode armazenar dados entre datas específicas. Substitua a última linha de código acima por uma das abaixo.


Agora, se você quiser recuperar alguns dos dados armazenados, basta executar algo como:


Observe que apenas os ticks são suportados no armazenamento local, portanto, o período deve ser & # 8216; tick & # 8217;


O QuantTools fornece a função plot_ts para plotar dados de séries temporais sem fins de semana, feriados e lacunas durante a noite. No exemplo abaixo, primeiro recupero os dados armazenados acima, depois seleciono as primeiras 100 observações de preço e, finalmente, desenho o gráfico.


Duas coisas para notar: primeiro espião é um objeto data. table, portanto, a sintaxe acima. Para obter uma visão geral rápida dos recursos do data. table, dê uma olhada nesta excelente folha de dicas do DataCamp. Segundo, o parâmetro local é TRUE, pois os dados são recuperados do armazenamento interno.


O QuantTools permite escrever sua própria estratégia de negociação usando sua API C ++. Eu não vou elaborar sobre isso, pois isso é basicamente código C ++. Você pode consultar a seção Exemplos no site da QuantTools.


No geral, acho o pacote extremamente útil e bem documentado. O único bit faltante é o feed ao vivo entre R e IQFeed, que fará do pacote uma solução real de ponta a ponta.


Como de costume, qualquer comentário é bem-vindo.


BERT: um recém-chegado na conexão R Excel.


Há alguns meses, um leitor me mostrou essa nova maneira de conectar R e Excel. Eu não sei há quanto tempo isso acontece, mas nunca me deparei com isso e nunca vi nenhum post ou artigo de blog sobre isso. Então eu decidi escrever um post enquanto a ferramenta realmente vale a pena e antes que alguém pergunte, eu não estou relacionado à empresa de forma alguma.


BERT significa Basic Excel R Toolkit. É gratuito (licenciado sob a GPL v2) e foi desenvolvido pela Structured Data LLC. No momento em que escrevo, a versão atual do BERT é 1.07. Mais informações podem ser encontradas aqui. De uma perspectiva mais técnica, o BERT é projetado para suportar a execução de funções R a partir de células da planilha do Excel. Em termos do Excel, é para escrever Funções definidas pelo usuário (UDFs) em R.


Neste post eu não vou mostrar como R e Excel interagem via BERT. Há muito bons tutoriais aqui, aqui e aqui. Em vez disso, quero mostrar como usei BERT para construir uma torre de controle & # 8220; & # 8221; para minha negociação.


Meus sinais de negociação são gerados usando uma longa lista de arquivos R, mas eu preciso da flexibilidade do Excel para exibir os resultados de forma rápida e eficiente. Como mostrado acima, o BERT pode fazer isso para mim, mas também quero adaptar o aplicativo às minhas necessidades. Combinando o poder do XML, VBA, R e BERT, posso criar um aplicativo bonito, mas poderoso, na forma de um arquivo do Excel com código VBA mínimo. Em última análise, eu tenho um único arquivo do Excel reunindo todas as tarefas necessárias para gerenciar meu portfólio: atualização de banco de dados, geração de sinal, submissão de pedidos etc & # 8230; Minha abordagem pode ser dividida nos três passos abaixo:


Use XML para criar menus e botões definidos pelo usuário em um arquivo do Excel. Os menus e botões acima são essencialmente chamadas para funções do VBA. Essas funções do VBA são encapsuladas em torno das funções R definidas usando BERT.


Com essa abordagem, posso manter uma clara distinção entre o núcleo do meu código mantido em R, SQL e Python e tudo o que é usado para exibir e formatar os resultados mantidos no Excel, VBA & amp; XML Nas próximas seções, apresento o pré-requisito para desenvolver tal abordagem e um guia passo a passo que explica como o BERT poderia ser usado para simplesmente passar dados de R para o Excel com o mínimo de código VBA.


1 & # 8211; Baixe e instale o BERT neste link. Quando a instalação estiver concluída, você deve ter um novo menu Add-Ins no Excel com os botões, conforme mostrado abaixo. É assim que o BERT se materializa no Excel.


2 & # 8211; Faça o download e instale o editor de interface do usuário personalizada: O Editor de interface do usuário personalizado permite criar menus e botões definidos pelo usuário na faixa de opções do Excel. Um procedimento passo a passo está disponível aqui.


1 & # 8211; Código R: A função R abaixo é um código muito simples apenas para fins ilustrativos. Calcula e retorna os resíduos de uma regressão linear. É isso que queremos recuperar no Excel. Salve isso em um arquivo chamado myRCode. R (qualquer outro nome é bom) em um diretório de sua escolha.


2 & # 8211; functions. R em BERT: No Excel selecione Add-Ins - & gt; Diretório base e abra o arquivo chamado functions. R. Neste arquivo, cole o seguinte código. Certifique-se de inserir o caminho correto.


Isso é apenas o fornecimento de BERT no arquivo R que você criou acima. Em seguida, salve e feche as funções do arquivo. Se você quiser fazer qualquer alteração no arquivo R criado na etapa 1, terá que recarregá-lo usando o botão BERT & # 8220; Recarregar o arquivo de inicialização & # 8221; do menu Add-Ins no Excel.


3 & # 8211; No Excel: Crie e salve um arquivo chamado myFile. xslm (qualquer outro nome é bom). Este é um arquivo habilitado para macro que você salva no diretório de sua escolha. Depois que o arquivo for salvo, feche-o.


4 & # 8211; Abra o arquivo criado acima no editor da interface do usuário personalizada: Depois que o arquivo estiver aberto, cole o código abaixo.


Você deve ter algo parecido com isto no editor de XML:


Essencialmente, este pedaço de código XML cria um menu adicional (RTrader), um novo grupo (My Group) e um botão definido pelo usuário (New Button) na faixa de opções do Excel. Quando terminar, abra myFile. xslm no Excel e feche o Custom UI Editor. Você deveria ver algo assim.


5 & ​​# 8211; Abra o editor VBA: Em myFile. xlsm, insira um novo módulo. Cole o código abaixo no módulo recém-criado.


Isso apaga os resultados anteriores na planilha antes de lidar com os novos.


6 & # 8211; Clique no botão New: Agora volte para a planilha e no menu RTrader, clique no botão & # 8220; New Button & # 8221; botão. Você deve ver algo como o abaixo aparece.


O guia acima é uma versão muito básica do que pode ser obtido usando o BERT, mas mostra como combinar o poder de várias ferramentas específicas para criar seu próprio aplicativo personalizado. Da minha perspectiva, o interesse de tal abordagem é a capacidade de colar R e Excel, obviamente, mas também incluir pedaços de código XML (e em lote) do Python, SQL e muito mais. Isso é exatamente o que eu precisava. Por fim, gostaria de saber se alguém tem alguma experiência com o BERT?


Estratégia de negociação: aproveitando ao máximo os dados da amostra.


Ao testar estratégias de negociação, uma abordagem comum é dividir o conjunto de dados inicial em dados de amostra: a parte dos dados projetados para calibrar o modelo e os dados de amostra: a parte dos dados usada para validar a calibração e garantir que o desempenho criado na amostra será refletido no mundo real. Como regra geral, cerca de 70% dos dados iniciais podem ser usados ​​para calibração (ou seja, na amostra) e 30% para validação (ou seja, fora da amostra). Em seguida, uma comparação entre os dados de entrada e de saída ajuda a decidir se o modelo é suficientemente robusto. Este post visa dar um passo adiante e fornece um método estatístico para decidir se os dados fora da amostra estão alinhados com o que foi criado na amostra.


No gráfico abaixo, a área azul representa o desempenho fora da amostra de uma das minhas estratégias.


Uma inspeção visual simples revela um bom ajuste entre o desempenho de entrada e saída da amostra, mas que grau de confiança eu tenho nisso? Nesta fase não muito e esta é a questão. O que é realmente necessário é uma medida de similaridade entre os conjuntos de dados de entrada e de saída. Em termos estatísticos, isso pode ser traduzido como a probabilidade de que os números de desempenho dentro e fora da amostra sejam provenientes da mesma distribuição. Existe um teste estatístico não paramétrico que faz exatamente isso: o teste de Kruskall-Wallis. Uma boa definição deste teste pode ser encontrada no R-Tutor Uma coleção de amostras de dados é independente se eles vêm de populações não relacionadas e as amostras não afetam umas às outras. Usando o Teste de Kruskal-Wallis, podemos decidir se as distribuições populacionais são idênticas, sem presumir que elas sigam a distribuição normal. & # 8221; O benefício adicional desse teste não está assumindo uma distribuição normal.


Existem outros testes da mesma natureza que poderiam se encaixar nessa estrutura. O teste de Mann-Whitney-Wilcoxon ou os testes de Kolmogorov-Smirnov se encaixam perfeitamente na estrutura descrita aqui, porém isso está além do escopo deste artigo para discutir os prós e contras de cada um desses testes. Uma boa descrição junto com exemplos de R pode ser encontrada aqui.


Aqui está o código usado para gerar o gráfico acima e a análise:


No exemplo acima, o período de amostragem é maior do que o período de amostragem, portanto, eu criei aleatoriamente 1.000 subconjuntos dos dados da amostra, cada um deles tendo o mesmo comprimento que os dados fora da amostra. Então, testei cada um em um subconjunto de amostras em relação aos dados fora da amostra e gravei os valores p. Esse processo não cria um único valor p para o teste Kruskall-Wallis, mas uma distribuição que torna a análise mais robusta. Neste exemplo, a média dos valores de p é bem acima de zero (0,478), indicando que a hipótese nula deve ser aceita: há fortes evidências de que os dados de entrada e saída da amostra são provenientes da mesma distribuição.


Como de costume, o que é apresentado neste post é um exemplo de brinquedo que apenas arranha a superfície do problema e deve ser adaptado às necessidades individuais. No entanto, penso que propõe um quadro estatístico interessante e racional para avaliar os resultados fora da amostra.


Este post é inspirado nos dois artigos seguintes:


Vigier Alexandre, Chmil Swann (2007), "Efeitos de várias funções de otimização no desempenho fora da amostra de estratégias de negociação geneticamente evoluídas", prevendo a conferência sobre mercados financeiros.


Vigier Alexandre, Chmil Swann (2010), «Um processo de otimização para melhorar a consistência da amostra, um caso da Bolsa de Valores», JP Morgan Cazenove Equity Quantitative Conference, Londres, outubro de 2010.


Apresentando o fidlr: LoanceR de Dados Financeiros.


O fidlr é um suplemento do RStudio projetado para simplificar o processo de download de dados financeiros de vários provedores. Esta versão inicial é um wrapper em torno da função getSymbols no pacote quantmod e somente o Yahoo, Google, FRED e Oanda são suportados. Eu provavelmente adicionarei funcionalidades ao longo do tempo. Como de costume, com essas coisas apenas um lembrete: "O SOFTWARE É FORNECIDO" COMO ESTÁ, SEM GARANTIA DE NENHUM TIPO "# 8230; & # 8221;


Como instalar e usar o fidlr?


Você pode obter o addin / package do seu repositório Github aqui (eu vou registrá-lo no CRAN mais tarde) Instale o addin. Existe um excelente tutorial para instalar o RStudio Addins aqui. Depois que o addin é instalado, ele deve aparecer no menu Addin. Basta escolher fidlr no menu e uma janela como abaixo deve aparecer. Escolha um provedor de dados no menu suspenso Origem. Selecione um intervalo de datas no menu Data Insira o símbolo que você deseja baixar na caixa de texto do instrumento. Para baixar vários símbolos basta digitar os símbolos separados por vírgulas. Use os botões de opção para escolher se deseja baixar o instrumento em um arquivo csv ou no ambiente global. O arquivo csv será salvo no diretório de trabalho e haverá um arquivo csv por instrumento. Pressione Executar para obter os dados ou Fechar para fechar o suplemento.


Mensagens de erro e avisos são manipulados pelos pacotes subjacentes (quantmod e Shiny) e podem ser lidos no console.


Esta é uma primeira versão do projeto, então não espere a perfeição, mas esperamos que melhore com o tempo. Por favor, informe qualquer comentário, sugestão, erro etc & # 8230; para: thertrader @ gmail.


Manter um banco de dados de arquivos de preços em R.


Fazer pesquisa quantitativa implica muita análise de dados e é preciso dados limpos e confiáveis ​​para conseguir isso. O que é realmente necessário são dados limpos que sejam facilmente acessíveis (mesmo sem uma conexão com a Internet). A maneira mais eficiente de fazer isso para mim foi manter um conjunto de arquivos csv. Obviamente, este processo pode ser tratado de várias maneiras, mas eu achei um tempo extra muito eficiente e simples para manter um diretório onde eu armazeno e atualizo arquivos csv. Eu tenho um arquivo csv por instrumento e cada arquivo é nomeado após o instrumento que ele contém. A razão pela qual eu faço isso é dupla: Primeiro, eu não quero baixar dados (de preço) do Yahoo, Google, etc & # 8230; toda vez que eu quiser testar uma nova ideia, mas mais importante, uma vez que eu identifiquei e consertei um problema, eu não quero ter que fazer isso novamente na próxima vez que eu precisar do mesmo instrumento. Simples, mas muito eficiente até agora. O processo é resumido no gráfico abaixo.


Em tudo o que se segue, presumo que os dados estão vindo do Yahoo. O código terá que ser alterado para os dados do Google, Quandl, etc & # 8230; Além disso, apresento o processo de atualização dos dados diários de preços. A configuração será diferente para dados de frequência mais alta e outro tipo de conjunto de dados (ou seja, diferente dos preços).


1 & # 8211; Download de dados inicial (listOfInstruments. R & amp; historicalData. R)


O arquivo listOfInstruments. R é um arquivo contendo apenas a lista de todos os instrumentos.


Se um instrumento não é parte da minha lista (ou seja, nenhum arquivo csv na minha pasta de dados) ou se você fizer isso pela primeira vez, você terá que baixar o conjunto de dados históricos inicial. O exemplo abaixo faz o download de um conjunto de cotações diárias dos ETFs do Yahoo Finance até janeiro de 2000 e armazena os dados em um arquivo csv.


2 & # 8211; Atualizar dados existentes (updateData. R)


O código abaixo começa a partir de arquivos existentes na pasta dedicada e atualiza todos eles um após o outro. Eu costumo executar este processo todos os dias, exceto quando eu estou de férias. Para adicionar um novo instrumento, basta executar o passo 1 acima apenas para este instrumento.


3 & # 8211; Crie um arquivo de lote (updateDailyPrices. bat)


Outra parte importante do trabalho é criar um arquivo em lotes que automatize o processo de atualização acima (eu sou um usuário do Windows). Isso evita abrir o R ​​/ RStudio e executar o código a partir dele. O código abaixo é colocado em um arquivo. bat (o caminho deve ser alterado com a configuração do leitor). Note que eu adicionei um arquivo de saída (updateLog. txt) para rastrear a execução.


O processo acima é extremamente simples, pois descreve apenas como atualizar dados diários de preços. Eu tenho usado isso por um tempo e tem funcionado muito bem para mim até agora. Para dados mais avançados e / ou freqüências mais altas, as coisas podem ficar muito mais complicadas.


Como de costume, qualquer comentário é bem-vindo.


A ascensão dos robôs (Advisors & # 8230;)


A indústria de gerenciamento de ativos está à beira de uma grande mudança. Nos últimos dois anos, os Robots Advisors (RA) surgiram como novos jogadores. O termo em si é difícil de definir, pois engloba uma grande variedade de serviços. Alguns são projetados para ajudar consultores tradicionais a alocar melhor o dinheiro de seus clientes e outros são “black box” real. O usuário insere alguns critérios (idade, renda, filhos etc & # 8230;) e o robô propõe uma alocação feita sob medida. Entre esses dois extremos, uma gama completa de ofertas está disponível. Eu achei a definição da Wikipedia muito boa. & # 8220; Eles são uma classe de consultor financeiro que fornece gerenciamento de portfólio online com intervenção humana mínima & # 8221;. Mais precisamente, eles usam o gerenciamento de portfólio baseado em algoritmo para oferecer o espectro completo de serviços que um consultor tradicional ofereceria: reinvestimento de dividendos, relatórios de conformidade, rebalanceamento de carteira, extração de impostos etc. & # 8230; (bem, isso é o que a comunidade de investimento quantitativo está fazendo há décadas!). A indústria ainda está em sua infância, com a maioria dos jogadores ainda gerenciando uma pequena quantia de dinheiro, mas eu só percebi o quão profunda a mudança foi quando eu estava em Nova York há alguns dias. Quando RA receber seus nomes na TV ou no telhado do táxi de Nova York, você sabe que algo grande está acontecendo & # 8230;


está recebendo cada vez mais atenção da mídia e, acima de tudo, faz muito sentido a partir de uma perspectiva de investidor. Na verdade, existem duas vantagens principais no uso do RA:


Taxas significativamente mais baixas em relação aos consultores tradicionais O investimento é mais transparente e mais simples, o que é mais atraente para pessoas com conhecimento financeiro limitado.


Neste post R é apenas uma desculpa para apresentar bem o que é uma grande tendência no setor de gestão de ativos. O gráfico abaixo mostra as participações de mercado do RA mais popular no final de 2014. O código usado para gerar o gráfico abaixo pode ser encontrado no final deste post e os dados estão aqui.


Esses números são um pouco datados, dada a rapidez com que essa indústria evolui, mas ainda é muito informativa. Não é de surpreender que o mercado seja dominado por provedores dos EUA como Wealthfront e Betterment, mas RA surgem em todo o mundo: Ásia (8Now!), Suíça (InvestGlass), França (Marie Quantier) & # 8230; .. Está começando a afetar significativamente o modo como os gerentes de ativos tradicionais estão fazendo negócios. Um exemplo proeminente é a parceria entre Fidelidade e Melhoria. Desde dezembro de 2014, a Betterment ultrapassou a marca de US $ 2 bilhões do AUM.


Apesar de tudo isso, acho que a verdadeira mudança está à nossa frente. Porque eles usam menos intermediários e produtos de baixa comissão (como ETFs) eles cobram taxas muito mais baixas do que consultores tradicionais. A RA certamente ganhará participações de mercado significativas, mas também reduzirá as taxas cobradas pela indústria como um todo. Em última análise, isso afetará o modo como as empresas de investimento tradicionais fazem negócios. O gerenciamento ativo do portfólio, que está com dificuldades há alguns anos, vai sofrer ainda mais. As altas taxas que cobra serão ainda mais difíceis de justificar, a menos que se reinvente. Outro impacto potencial é o aumento de ETFs e produtos financeiros de baixa comissão em geral. Obviamente, isso começou há um tempo, mas acho que o efeito será ainda mais pronunciado nos próximos anos. Novas gerações de ETFs rastreiam índices mais complexos e estratégias customizadas. Esta tendência ficará mais forte inevitavelmente.


Como de costume, qualquer comentário é bem-vindo.


R dicas de séries temporais financeiras que todos devem conhecer.


Há muitos tutoriais de séries temporais de R circulando na web que este post não foi projetado para ser um deles. Em vez disso, quero apresentar uma lista dos truques mais úteis que encontrei ao lidar com séries temporais financeiras em R. Algumas das funções apresentadas aqui são incrivelmente poderosas, mas infelizmente enterradas na documentação, portanto, meu desejo de criar um post dedicado. Eu só abordo séries de tempos diários ou de frequência mais baixa. Lidar com dados de frequência mais alta requer ferramentas específicas: pacotes data. table ou highfrequency são alguns deles.


xts: O pacote xts é o que se deve ter quando se trata de séries temporais em R. O exemplo abaixo carrega o pacote e cria uma série temporal diária de 400 dias de retornos normalmente distribuídos.


merge. xts (pacote xts): Isso é incrivelmente poderoso quando se trata de unir duas ou mais séries de tempo se elas têm o mesmo tamanho ou não. O argumento de união faz a mágica! determina como a ligação é feita.


apply. yearly / apply. monthly (package xts): Aplica uma função especificada a cada período distinto em um determinado objeto de série temporal. O exemplo abaixo calcula retornos mensais e anuais da segunda série no objeto tsInter. Note que eu uso a soma dos retornos (sem composição)


pontos de extremidade (pacote xts): Extrai os valores de índice de um determinado objeto xts correspondente às últimas observações, dado um período especificado por on. O exemplo fornece o último dia do mês retorna para cada série no objeto tsInter usando o ponto final para selecionar a data.


na. locf (pacote zoológico): Função genérica para substituir cada NA por um não-AN mais recente anterior a ele. Extremamente útil quando se lida com uma série temporal com alguns furos & # 8221; e quando esta série temporal é subsequentemente usada como entrada para uma função R que não aceita argumentos com NAs. No exemplo, crio uma série temporal de preços aleatórios e, artificialmente, incluo alguns NAs e os substituo pelo valor mais recente.


charts. PerformanceSummary (package PerformanceAnalytics): Para um conjunto de devoluções, crie um gráfico de índice de riqueza, barras para desempenho por período e gráfico submerso para redução. Isso é incrivelmente útil, pois exibe em uma única janela todas as informações relevantes para uma rápida inspeção visual de uma estratégia de negociação. O exemplo abaixo transforma a série de preços em um objeto xts e exibe uma janela com os 3 gráficos descritos acima.


A lista acima não é de forma alguma exaustiva, mas uma vez que você domine as funções descritas neste post, torna a manipulação de séries temporais financeiras muito mais fácil, o código mais curto e a legibilidade do código melhor.


Como de costume, qualquer comentário é bem-vindo.


Avaliação fatorial na gestão quantitativa de portfólios.


Quando se trata de gerenciar uma carteira de ações versus um benchmark, o problema é muito diferente de definir uma estratégia de retorno absoluto. No primeiro, é preciso manter mais estoques do que no segundo, onde nenhuma ação pode ser detida se não houver oportunidade suficiente. A razão para isso é o erro de rastreamento. Isso é definido como o desvio padrão do retorno da carteira menos o retorno de referência. Quanto menos ações forem mantidas em relação a um benchmark, maior será o erro de rastreamento (por exemplo, maior risco).


A análise a seguir é amplamente inspirada no livro "Active Portfolio Management" # 8221; por Grinold & amp; Kahn Esta é a bíblia para qualquer pessoa interessada em administrar um portfólio em relação a um benchmark. Eu encorajo fortemente qualquer pessoa com interesse no tópico a ler o livro do começo ao fim. É muito bem escrito e estabelece as bases da gestão sistemática de carteiras ativas (não tenho nenhuma afiliação ao editor ou aos autores).


Aqui, estamos tentando classificar com a maior precisão possível as ações no universo de investimento em uma base de retorno a termo. Muitas pessoas criaram muitas ferramentas e inúmeras variantes dessas ferramentas foram desenvolvidas para conseguir isso. Neste post concentro-me em duas métricas simples e amplamente utilizadas: Coeficiente de Informação (IC) e Quantiles Return (QR).


O CI fornece uma visão geral da capacidade de previsão do fator. Mais precisamente, isso é uma medida de quão bem o fator classifica os estoques em uma base de retorno a termo. O IC é definido como a correlação de classificação (ρ) entre a métrica (por exemplo, fator) e o retorno para a frente. Em termos estatísticos, a correlação de postos é uma medida não paramétrica da dependência entre duas variáveis. Para uma amostra de tamanho n, as n pontuações brutas são convertidas em classificações e ρ é calculado a partir de:


O horizonte para o retorno para frente tem que ser definido pelo analista e é uma função do turnover da estratégia e da decadência alfa (isso tem sido objeto de extensa pesquisa). Obviamente, os CIs devem ser o mais alto possível em termos absolutos.


Para o leitor atento, no livro de Grinold & amp; Kahn é uma fórmula que liga a Relação de Informação (IR) e IC: com amplitude sendo o número de apostas independentes (trades). Essa fórmula é conhecida como a lei fundamental do gerenciamento ativo. O problema é que, muitas vezes, definir com precisão a amplitude não é tão fácil quanto parece.


Para ter uma estimativa mais precisa do fator poder preditivo, é necessário dar um passo além e agrupar os estoques por quantis de valores de fatores e, em seguida, analisar o retorno médio a termo (ou qualquer outra métrica de tendência central) de cada um deles. quantis. A utilidade desta ferramenta é simples. Um fator pode ter um bom IC, mas seu poder preditivo pode ser limitado a um pequeno número de ações. Isso não é bom, pois um gerente de portfólio terá que escolher ações dentro de todo o universo para cumprir sua restrição de erro de rastreamento. Bons retornos quantílicos são caracterizados por uma relação monótona entre os quantis individuais e os retornos futuros.


Todas as ações no índice S & amp; P500 (no momento da redação). Obviamente, há um viés de sobrevivência: a lista de ações no índice mudou significativamente entre o início e o final do período de amostragem, no entanto, é bom o suficiente apenas para fins ilustrativos.


O código abaixo faz o download dos preços das ações individuais no S & amp; P500 entre janeiro de 2005 e hoje (leva um tempo) e transforma os preços brutos em retorno nos últimos 12 meses e no último mês. O primeiro é o nosso fator, o último será usado como medida de retorno para frente.


Abaixo está o código para calcular o Coeficiente de Informação e o Retorno de Quantiles. Observe que eu usei quintis neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles, etc.) pode ser usado. isso realmente depende do tamanho da amostra, do que você quer capturar e do tempo em que deseja ter uma visão geral ampla ou se concentrar nas caudas de distribuição. Para estimar os retornos dentro de cada quintil, a mediana tem sido usada como o estimador de tendência central. Essa medida é muito menos sensível a outliers do que a média aritmética.


E finalmente o código para produzir o gráfico de retorno Quantiles.


3 & # 8211; Como explorar as informações acima?


No gráfico acima, o Q1 é mais baixo nos últimos 12 meses e o Q5, o mais alto. Há um aumento quase monótono no retorno dos quantis entre Q1 e Q5, o que indica claramente que os estoques que caem em Q5 superam aqueles que caem em Q1 em cerca de 1% ao mês. Isso é muito significativo e poderoso para um fator tão simples (não é realmente uma surpresa, ainda que & # 8230;). Portanto, há maiores chances de vencer o índice superpondo as ações no Q5 e subestimando as que caem no primeiro trimestre em relação ao benchmark.


Um IC de 0,0206 pode não significar muito em si, mas é significativamente diferente de 0 e indica um bom poder de previsão dos últimos 12 meses de retorno geral. Testes de significância formal podem ser avaliados, mas isso está além do escopo deste artigo.


A estrutura acima é excelente para avaliar a qualidade dos fatores de investimento, no entanto, há várias limitações práticas que precisam ser abordadas para a implementação na vida real:


Reequilíbrio: Na descrição acima, é assumido que no final de cada mês a carteira é totalmente reequilibrada. Isso significa que todas as ações que caíram no 1T estão abaixo do peso e todas as ações que caíram no 5ºT estão com sobrepeso em relação ao benchmark. Isso nem sempre é possível por razões práticas: algumas ações podem ser excluídas do universo de investimentos, existem restrições sobre o peso da indústria ou do setor, há restrições no volume de negócios etc. & # 8230; Custos de Transação: Isso não foi levado em conta na análise acima e isso é um sério freio para a implementação da vida real. Considerações de rotatividade são geralmente implementadas na vida real em uma forma de penalidade na qualidade do fator. Coeficiente de transferência: Esta é uma extensão da lei fundamental da gestão ativa e relaxa a suposição do modelo de Grinold de que os gerentes não enfrentam restrições que os impeçam de traduzir suas percepções de investimentos diretamente em apostas de portfólio.


E, finalmente, estou espantado com o que pode ser alcançado em menos de 80 linhas de código com o R & # 8230;


Como de costume, qualquer comentário é bem-vindo.


Risco como uma Variável de Sobrevivência & # 8221;


Me deparo com muitas estratégias na blogosfera, algumas são interessantes, algumas são uma completa perda de tempo, mas a maioria compartilha uma característica comum: pessoas desenvolvendo essas estratégias fazem sua lição de casa em termos de análise do retorno, mas muito menos atenção é dada ao lado do risco sua natureza aleatória. Eu vi comentários como "um rebaixamento de 25% em 2011, mas um excelente retorno geral". Bem, a minha aposta é que ninguém na terra permitirá que você experimente uma perda de 25% com seu dinheiro (a menos que acordos especiais estejam em vigor). No mundo dos fundos de hedge, as pessoas têm muito pouca tolerância ao saque. Geralmente, como um novo operador em um fundo de hedge, supondo que você não tenha reputação, você tem muito pouco tempo para se provar. Você deve ganhar dinheiro a partir do primeiro dia e continuar fazendo isso por alguns meses antes de ganhar um pouco de credibilidade.


Primeiro, digamos que você começou mal e perdeu dinheiro no começo. Com um rebaixamento de 10%, você certamente está fora, mas mesmo com um rebaixamento de 5%, as chances de ver sua alocação reduzida são muito altas. Isso tem implicações significativas em suas estratégias. Suponhamos que, se você perder 5%, sua alocação será dividida por 2 e você voltará à sua alocação inicial somente quando ultrapassar a marca d'água alta novamente (por exemplo, o levantamento voltará a 0). No gráfico abaixo, simulei o experimento com uma das minhas estratégias.


Você começa a operar em 1º de junho de 2003 e tudo vai bem até 23 de julho de 2003, onde sua curva de rebaixamento atinge o limite de -5% (** 1 **). Sua alocação é reduzida em 50% e você não cruza o limite máximo até 05 de dezembro de 2003 (** 3 **). Se você mantiver a alocação inalterada, o nível da marca d'água alta teria sido ultrapassado em 28 de outubro de 2003 (** 2 **) e até o final do ano você teria ganho mais dinheiro.


Mas vamos empurrar o raciocínio um pouco mais. Ainda no gráfico acima, suponha que você tenha muito azar e comece a negociar em meados de junho de 2003. Você atingiu o limite de rebaixamento de 10% no início de agosto e está provavelmente fora do jogo. Você teria começado no início de agosto a sua alocação não teria sido cortada e você acaba fazendo um bom ano em apenas 4 meses completos de negociação. Nesses dois exemplos, nada mudou, mas sua data de início & # 8230 ;.


O sucesso comercial de qualquer indivíduo tem alguma forma de dependência de caminho e não há muito o que fazer sobre isso. No entanto, você pode controlar o tamanho do drawdown de uma estratégia e isso deve ser tratado com muito cuidado. Um portfólio deve ser diversificado em todas as dimensões possíveis: classes de ativos, estratégias de investimento, frequências de negociação, etc & # 8230 ;. Dessa perspectiva, o risco é a sua "variável de sobrevivência". Se gerenciado corretamente, você tem a chance de permanecer no jogo por tempo suficiente para perceber o potencial de sua estratégia. Caso contrário, você não estará lá no próximo mês para ver o que acontece.


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


Nos últimos 6 meses, tenho focado no processo de construção da pilha completa de tecnologia de um sistema de negociação automatizado. Eu me deparei com muitos desafios e aprendi muito sobre os dois métodos diferentes de backtesting (Vectorised e Event driven). Na minha jornada para construir um backtester orientado a eventos, veio a minha surpresa que o que você iria acabar é perto de toda a pilha de tecnologia necessária para construir uma estratégia, fazer backtest e executar a execução ao vivo.


Meu maior problema ao enfrentar o problema foi a falta de conhecimento. Procurei em muitos lugares uma introdução à construção da tecnologia ou um blog que me orientasse. Eu encontrei alguns recursos que vou compartilhar com vocês hoje.


Para iniciantes:


Para os leitores novatos no comércio quantitativo, eu recomendaria o livro de Ernie P. Chan intitulado: Negociação Quantitativa: Como construir seu próprio negócio de comércio algorítmico. Este livro é o básico. Na verdade, é o primeiro livro que li sobre negociação quantitativa e mesmo assim achei muito básico, mas há algumas notas que você deve 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-automatizadas e totalmente automatizadas.


Um sistema semi-automatizado é adequado se você quiser fazer algumas transações por semana. Ernie recomenda usar o Matlab, R ou até mesmo o Excel. Eu usei todas as 3 plataformas e este é o meu conselho:


Saltar do Matlab, custou muito dinheiro e só consegui acesso aos laboratórios da universidade. Não há muito material de treinamento como blogs ou livros que ensinem como codificar uma estratégia usando o Matlab. R tem toneladas de recursos que você pode utilizar para aprender como construir uma estratégia. Meu blog favorito cobrindo o tópico é: QuantStratTradeR é ​​executado por Ilya Kipnis. É mais provável que o Microsoft Excel inicie onde você não tem experiência em programação. Você pode usar o Excel para negociações semi-automáticas, mas isso não vai funcionar quando se trata de construir a pilha completa de tecnologias.


Estrutura semiautomática pg 81.


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


Estrutura de negociação completamente automatizada página 84.


Passo 1: Conseguir um bom começo.


Faça o Programa Executivo em Algorithmic Trading oferecido pela QuantInsti. Acabei de começar o curso e o primeiro conjunto de palestras foi na arquitetura do sistema. Teria me poupado cerca de 3 meses de pesquisa se eu tivesse começado aqui. As palestras me acompanharam através de cada componente que eu precisaria, bem como uma descrição detalhada do que cada componente precisa fazer. Abaixo está uma captura de tela de um de seus slides usados ​​na apresentação:


Você também pode usar essa estrutura geral ao avaliar outros sistemas de negociação automáticos.


No momento em que escrevo, estou apenas na terceira semana de palestras, mas estou confiante de que um praticante será capaz de construir uma estratégia comercial totalmente automatizada que poderia, com um pouco de refinamento, ser transformada no começo de um fundo de hedge 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.


Blog de Michael Hallsmore, quantstart & amp; livro “Negociação Algorítmica Bem Sucedida”


Este livro tem seções dedicadas à construção de um robusto backtester orientado a eventos. Ele orienta o leitor através de vários capítulos que explicarão sua escolha de idioma, os diferentes tipos de backtesting, a importância do backtesting orientado a eventos e como codificar o backtester.


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


Nota: Você precisará comprar o livro dele: “Successful Algorithmic Trading”, seu blog deixa de fora muita informação.


Passo 3: Volte para o TuringFinance.


O programa EPAT Reading “Successful Algorithmic Trading” & amp; codificando um backtester em um idioma diferente de sua escolha.


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


Eu achei este post muito técnico e tem algumas ótimas idéias que você deve incorporar em sua própria arquitetura.


Uma captura de tela de seu post.


Etapa 4: Estude os sistemas de negociação de código aberto.


4.1) Quantopian.


Escusado será dizer que Quantopian deve ser adicionado a esta lista e tenho vergonha de dizer que não passei muito tempo usando sua plataforma (devido à minha escolha de idioma). Quantopian tem muitas vantagens, mas as que mais se destacam 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 amo como eles hospedam a QuantCon!


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


“O Zipline é o nosso mecanismo de código aberto que alimenta o backtester no IDE. Você pode ver o repositório de código no Github e contribuir com solicitações de pull para o projeto. Há um grupo do Google disponível para procurar ajuda e facilitar discussões. ”


Aqui está um link para a documentação deles:


4.2) QuantConnect.


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


Você deve dar uma olhada no código deles, estudá-lo, & amp; dê-lhes louvor. Eles são competição de quantopianos.


Eu gostaria de aproveitar esta oportunidade para agradecer a equipe QuantConnect por me deixar escolher o cérebro deles e pelo serviço brilhante que eles oferecem.


Aqui está um link para a documentação deles:


Observações finais:


Espero que este guia ajude os membros da comunidade. Eu gostaria de ter essa percepção 6 meses atrás quando comecei a codificar nosso sistema.


Eu gostaria de falar com a comunidade e perguntar: “Que bons cursos de negociação algorítmica você conhece?” Eu gostaria de escrever um post que analise o tópico e forneça uma classificação. Há alguma recomendação para criar um sistema de negociação totalmente automatizado que você gostaria de adicionar a este post?


Compartilhar isso:


Compartilhe esta entrada.


Você pode gostar também.


Artigo agradável. Eu gostaria de ter cerca de 6 meses atrás. Eu uso QuantConnect porque eu sou um programador c #. Eu achei muito conveniente para poder baixar o teste de Lean e voltar localmente. Vasculhar seu código também é valioso. Eles também fizeram um acordo com a Tradier para negociações de US $ 1. Isso ajuda muito. Eu não sou tão saliente sobre os spreads e a execução do Tradier. O IB pode ser melhor para isso.


Vou dar uma olhada no curso que você mencionou.


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


O que você usa para mapear os resultados dos testes de volta? Eu registro OHLC e valores de indicador para csv do evento OnData e estou realmente cansado de usar o Excel para traçar resultados. Eu gostaria de poder apontar um pacote de gráficos para um arquivo de dados e tê-lo apenas ir.


Você já tem um fornecedor de fluxo de ticks?


Eu tenho um pensamento sobre sistemas orientados 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ê começa uma corretora envolvida, então eu tenho sonhado com um sistema mais streaming seguindo os princípios da programação funcional.


& # 8211; Injest um fluxo de carrapato ou bar.


& # 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; Receba de volta um sinal.


& # 8211; Envie para o corretor para executar.


Então, em um fluxo separado.


& # 8211; Receba de volta uma resposta do corretor.


O problema, claro, é o estado. Eu tenho margem suficiente para fazer o trade? O que tem no meu portfólio? Como está se saindo? Geralmente, o broker api pode ser consultado para descobrir essas coisas, mas leva tempo e é assíncrono. Eu também estou olhando para extensões de Rx. Dessa forma, o sistema pode reagir a mudanças no sistema através do padrão observável.


Eventos são ótimos para cliques do mouse. Não é tão bom para processamento transacional de alto volume.


Essa é exatamente a abordagem que eu fiz com minhas próprias coisas. Essencialmente eu tenho um & # 8216; normal & # 8217; programa que envolve uma pequena parte que é acionada por eventos para falar com o intermediário (IB API). Agora, para o problema do estado. Você tem duas escolhas; obter estado do corretor, ou armazená-lo internamente atualizá-lo quando você receber um preenchimento de volta. 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 incorretos ou atrasos). Parte disso depende da rapidez com que você negocia. A menos que você esteja negociando muito rapidamente, em seguida, pausar se você tiver um conflito de estado, ou você está incerto do estado, é melhor do que prosseguir sem conhecer o seu estado. Eu uso um banco de dados & # 8216; lock & # 8217; paradigma para lidar com isso.


Em relação a quase tudo o que você pediu, você está próximo da resposta em Reative Extension (Rx).


Com Rx indo de carrapatos para velas é trivial.


Indo de velas para indicadores é trivial.


Compor indicadores de outros indicadores é trivial.


Compor posições de indicadores é trivial.


Compor portfólios (como realizados ao longo do tempo) a partir de posições é trivial.


Simular o Modelo de Risco é trivial.


Voltar teste ou negociação ao vivo é simplesmente decidir entre uma transmissão ao vivo de dados ou uma repetição simulada de dados do banco de dados.


A execução é trivial.


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


A otimização é feita rapidamente porque o Rx puramente funcional é amplamente paralisável para a GPU.


É verdade que a otimização e a alimentação do efeito da otimização contínua de volta ao back-test não é trivial, mas, dado que é não-trivial de qualquer maneira, eu vou deixar que isso se deslize 😉


Puramente Funcional (ou próximo a ele) Rx é, na minha opinião, a única maneira de lidar com a infra-estrutura desse problema.


Eu 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 pegar o sistema que eu quero usar e automatizá-lo. Ao automatizá-lo, quero dizer, não quero olhar para ele. Vou dar uma olhada nos resultados uma vez por semana e os negócios serão executados sem a minha atenção. Parece estranho para mim que, em 2016, seja preciso muito esforço para tomar um conjunto de regras e executar essas regras no meu corretor.


Eu sugiro inscrever-se com o Quantopian e, em seguida, encontrar alguém dentro da comunidade para construir a estratégia para você. Eles serão capazes de construí-lo para você dentro da plataforma de corretores IB e serão totalmente automatizados.


Deixe-me dizer, no entanto, que acho que você deveria monitorá-lo de perto, e não apenas esquecê-lo para "###".


Como projetar estratégias de negociação Quant usando R?


Este blog aborda em breve o conceito de back-testing de estratégia usando R. Antes de nos determos nos jargões de negociação usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Existem mais de 4000 pacotes adicionais, 18.000 mais membros do grupo do LinkedIn e cerca de 80 grupos Meetup atualmente existentes. É uma ferramenta perfeita, para análise estatística, especialmente para análise de dados. A configuração concisa do Comprehensive R Archive Network sabe como CRAN fornece uma lista de pacotes, juntamente com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise que precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.


Processo de quatro etapas de qualquer estratégia básica de negociação.


Teste de formação de hipóteses.


Nossa hipótese é formulada como “mercado é revertido à média”. A reversão à média é uma teoria que sugere que os preços acabam voltando ao valor médio. A segunda etapa envolve testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e calculamos indicadores, sinais e métricas de desempenho. A fase de testes pode ser dividida em três etapas, obtendo os dados, escrevendo a estratégia e analisando a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. NSE tem um volume enorme para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço do Open-High-Low-Close do mesmo.


Nós plotamos a banda Bollinger para o preço de fechamento.


Nós definimos um nível de limiar para comparar as flutuações no preço. Se o preço aumentar / diminuir, atualizamos a coluna de limite. O preço de fechamento é comparado com a faixa superior e com a faixa inferior. Quando a banda superior é cruzada, é um sinal para vender. Da mesma forma, quando a banda inferior é cruzada, é um sinal de compra. 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 é a reversão da média é suportada. Como este é o back-testing, temos espaço para refinar os parâmetros de negociação que melhorariam nossos retornos médios e os lucros realizados. Isso pode ser feito definindo diferentes níveis de limite, regras de entrada mais rigorosas, stop loss etc. Pode-se escolher mais dados para back-testing, usar abordagem bayseiana para a configuração do limite, levar a volatilidade em consideração.


Uma vez que você esteja confiante sobre a estratégia de negociação apoiada pelos resultados do backtesting, você pode entrar em negociações ao vivo. O ambiente de produção é um grande tópico em si e está fora do escopo no contexto do artigo. Para explicar em breve isso envolveria escrever a estratégia em uma plataforma de negociação.


Vídeo de Webinar.


Uma vez que você aprendeu noções básicas de projetar uma estratégia de negociação quant usando R, você pode dar uma olhada em um exemplo de estratégia de negociação codificada em R e também aprender sobre como começar a usar o pacote quantmod em R. Você também pode olhe para o nosso curso de datacamp interativo de 10 horas de ritmo próprio & # 8216; Modele uma Estratégia de Negociação Quantitativa em R & # 8216;

Комментариев нет:

Отправить комментарий