Previsão da série de tempo.
A Previsão da Série de Tempo usa Regressão Linear para calcular uma linha de melhor ajuste ao longo de um período de tempo designado; Esta linha é então planejada para a frente um período de tempo definido pelo usuário.
O gráfico abaixo do contrato Mini-Dow Futures mostra o indicador de Previsão da Série de Tempo:
O gráfico acima ilustra como a linha de Previsão da Série de Tempo foi planejada para frente (no exemplo acima, 7 dias).
Geralmente, os comerciantes podem esperar que o preço volte para a linha Time Series Forecast quando os preços se desviaram. Portanto, um vago sinal de compra potencial pode ocorrer quando o preço está abaixo da linha e um potencial sinal de venda pode ocorrer quando o preço está muito acima da linha. No entanto, o quão longe o preço precisa variar da linha é muito subjetivo.
Um indicador técnico similar e indiscutivelmente superior é a Curva de Regressão Linear (ver: Curva de Regressão Linear).
Estratégia de negociação de previsão de séries temporais
O indicador de Previsão da Série de Tempo mostra qualquer tendência estatística no preço de uma ação durante um período de tempo de comprimento 'n' usando técnicas de análise de regressão linear. Curiosamente, a Previsão da Série de Tempo gera o último ponto de várias tendências de regressão linear simultânea. O indicador de Previsão da Série de Tempo resultante também é chamado de "indicador de regressão linear em movimento" e às vezes o "oscilador de regressão". Os mestres de comércio de dias podem encontrar um uso para este indicador, a fim de se dar um "sabor" do que a ação de amanhã pode ser, embora a maioria prefira técnicas estabelecidas, como a análise de volatilidade.
A previsão é negociada como qualquer outra média móvel, mas o fato de que múltiplas séries de tempo são usadas dá-lhe algumas vantagens em relação às MAs "comuns", principalmente a falta de um atraso quando os preços mudam rapidamente. Isso, é claro, é porque a Previsão da Série do Tempo "se encaixa" aos dados do preço subjacente em vez de promediar os mesmos, tornando-o mais sensível às mudanças de preços. Basicamente, se a tendência atual permanecer em vigor, a Previsão da Série de Tempo é uma previsão do nível de preço do próximo período.
Para calcular a Previsão da Série de Tempo, você deve usar uma técnica de "mínimos quadrados" para calcular uma linha de tendência de regressão linear, que tenta ajustar uma linha de tendência aos dados de preços minimizando a distância entre os pontos de preço e a própria linha de tendência de regressão linear.
QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 8 de janeiro de 2017.
Nesta série de artigos, vamos criar um processo estatisticamente robusto para a previsão de séries temporais financeiras. Essas previsões constituirão a base de um grupo de estratégias de negociação automatizadas. O primeiro artigo da série discutirá a abordagem de modelagem e um grupo de algoritmos de classificação que nos permitirão prever a direção do mercado.
Dentro desses artigos, estaremos fazendo uso do scikit-learn, uma biblioteca de aprendizagem de máquinas para Python. Scikit-learn contém implementações de muitas técnicas de aprendizagem de máquinas. Não só isso nos poupa muito tempo na implementação do nosso próprio, mas minimiza o risco de erros introduzidos pelo nosso próprio código e permite uma verificação adicional em relação a bibliotecas escritas em outros pacotes, como R. Isso nos dá uma grande quantidade de confiança se precisarmos criar nossa própria implementação personalizada (por razões de velocidade de execução, digamos).
Processo para Previsão.
Uma explicação detalhada do campo da aprendizagem de máquinas estatísticas está além deste artigo. Para utilizar técnicas como Regressão Logística, Análise Discriminante Linear e Análise Discriminante Quadratic, precisamos descrever alguns conceitos básicos.
Técnicas de aprendizagem supervisionadas.
As técnicas de aprendizagem supervisionadas envolvem um conjunto de tuplas conhecidas $ (x_i, y_i) $, $ i \ in \ $, com $ x_i $ representando as variáveis predictoras (como retornos do mercado de ações remanescentes ou volume negociado) e $ y_i $ representando o associado variáveis de resposta / observação (como o retorno do mercado de ações hoje). Nessa situação, estamos interessados em prever. Dadas as futuras variáveis preditoras, desejamos estimar as respostas desses preditores. Isso é contrário à inferência em que estamos mais interessados na relação entre as variáveis.
Todos os algoritmos que utilizamos neste artigo, juntamente com muitos outros que empregaremos no futuro, são do domínio de aprendizagem supervisionado.
Medindo Precisão de Previsão.
A classe particular de métodos que nos interessa envolve a classificação binária. Ou seja, tentaremos alocar a porcentagem de retorno para um determinado dia em dois baldes: "Up" ou "Down". Num previsão de produção, estaríamos muito preocupados com a magnitude dessa previsão e com os desvios da predição a partir do valor real.
Nesses casos, podemos usar o erro de Mean-Squared, Mean Absolute Deviation e Root-Mean-Squared Error para fornecer uma estimativa de precisão de previsão. A literatura fornece muitos outros exemplos de medidas de precisão de previsão.
Neste caso, só nos preocuparemos com a taxa de sucesso, que é simplesmente a porcentagem de vezes que o provisorista alcançou uma previsão precisa (ou seja, quando o dia acabou e vice-versa). Em exemplos posteriores, usaremos uma matriz de confusão para determinar o desempenho de previsão em uma classe por classe. Além disso, calcularemos os valores acima mencionados e os incorporaremos ao nosso processo de pesquisa comercial.
Fatores de previsão.
Uma metodologia de previsão é tão boa quanto os fatores escolhidos como preditores. Há um número impressionante de fatores potenciais a serem escolhidos quando prevêem o retorno do índice de mercado de ações. Neste artigo, vamos restringir os fatores aos atrasos de tempo dos retornos percentuais atuais. Isso não é porque eles são os melhores preditores, em vez disso é porque é direto demonstrar o processo de previsão em um conjunto de dados facilmente obtido.
A escolha do fator de previsão é extremamente importante, se não o componente mais importante, do pré-programador. Mesmo técnicas simples de aprendizagem de máquina produzirão bons resultados em fatores bem escolhidos. Note que o inverso não é frequentemente o caso. "Lançar um algoritmo em um problema" geralmente levará à má precisão de previsão.
Para este provisorista especificamente, escolhi o primeiro e o segundo tempo de atraso da porcentagem de retorno como preditores para a direção atual do mercado de ações. Esta é uma escolha relativamente arbitrária e há muitos marcos para modificação, por exemplo, adicionando atrasos adicionais ou o volume de ações negociadas. Em geral, é melhor ter menos preditores em um modelo, embora existam testes estatísticos disponíveis que possam demonstrar a capacidade preditiva de cada fator.
Previsão de S & amp; P500 com Regressão Logística, LDA e QDA.
O S & P500 é um índice ponderado das 500 maiores empresas de capital aberto (por capitalização de mercado) no mercado de ações dos EUA. Muitas vezes, é considerado um "benchmark" de ações. Existem muitos produtos derivados para permitir a especulação ou cobertura no índice. Em particular, o S & P500 E-Mini Index Futures Contract é um meio extremamente líquido de negociação do índice.
Nesta seção, vamos usar três classificadores para prever a direção do preço de fechamento no dia $ N $ com base somente na informação de preços conhecida no dia $ N-1 $. Um movimento direto direto significa que o preço de fechamento em $ N $ é maior do que o preço em $ N-1 $, enquanto que um movimento descendente implica um preço de fechamento em US $ N $ inferior a $ N-1 $.
Se pudermos determinar a direção do movimento de uma maneira que exceda significativamente uma taxa de sucesso de 50%, com baixo erro e boa significância estatística, estamos no caminho para formar uma estratégia básica de negociação sistemática com base em nossas previsões. Nesta fase, não estamos preocupados com os algoritmos de classificação de aprendizado de máquinas mais atualizados. Neste momento, estamos apenas a introduzir conceitos e, assim, começaremos a discussão sobre a previsão com alguns métodos elementares.
Regressão Logística.
A primeira técnica que consideramos é a regressão logística (LR). No nosso caso, vamos usar o LR para medir a relação entre uma variável dependente categórica binária ("Up" ou "Down") e múltiplas variáveis contínuas independentes (a porcentagem remanescente retorna). O modelo fornece a probabilidade de que um dia particular (seguinte) seja categorizado como "Up" ou "Down". Nesta implementação, optamos por atribuir cada dia como "Up" se a probabilidade exceder 0,5. Poderíamos usar um limite diferente, mas, por simplicidade, escolhi 0,5.
LR usa a fórmula logística para modelar a probabilidade de obter um dia "Up" ($ Y = U $) com base nos fatores de atraso ($ L_1 $, $ L_2 $):
A função logística é usada porque fornece uma probabilidade entre $ [0,1] $ para todos os valores de $ L_1 $ e $ L_2 $, ao contrário da regressão linear onde as probabilidades negativas podem ser geradas na mesma configuração.
Para ajustar o modelo (ou seja, estimar os coeficientes $ \ beta_i $), o método de máxima verossimilhança é usado. Felizmente para nós, a implementação da montagem e previsão do modelo LR é tratada pela biblioteca scikit-learn.
Análise de Discriminação Linear.
A próxima técnica utilizada é Linear Discriminant Analysis (LDA). LDA difere de LR porque, em LR, nós modelamos $ P (Y = U | L_1, L_2) $ como uma distribuição condicional da resposta $ Y $ dado os preditores $ L_i $, usando uma função logística. Em LDA, a distribuição das variáveis $ L_i $ é modelada separadamente, dado $ Y $ e $ P (Y = U | L_1, L_2) $ é obtido através do Teorema de Bayes.
Essencialmente, LDA resulta do pressuposto de que preditores são retirados de uma distribuição gaussiana multivariada. Após calcular as estimativas para os parâmetros dessa distribuição, os parâmetros podem ser inseridos no Teorema de Bayes para fazer previsões sobre a qual classe pertence uma observação.
A LDA assume que todas as classes compartilham a mesma matriz de covariância.
Não vou me aprofundar nas fórmulas para estimar a distribuição ou probabilidades posteriores que são necessárias para fazer previsões, uma vez mais scikit-learn lida com isso para nós.
Análise Quadratic Discriminant.
A Análise Quadraticamente Discriminante (QDA) está intimamente relacionada à LDA. A diferença significativa é que cada classe agora pode possuir sua própria matriz de covariância.
O QDA geralmente funciona melhor quando os limites de decisão não são lineares. A LDA geralmente funciona melhor quando há menos observações de treinamento (isto é, quando é necessário reduzir a variância). O QDA, por outro lado, funciona bem quando o conjunto de treinamento é grande (ou seja, a variação é menos preocupante). O uso de um ou outro, em última instância, se resume ao trade-off de tendência e desvio.
Tal como acontece com LR e LDA, scikit-learn cuida da implementação da QDA, então precisamos fornecer dados de treinamento / teste para estimação e previsão de parâmetros.
Implementação do Python.
Para a implementação desses previsão, usaremos NumPy, pandas e scikit-learn. Eu já escrevi um tutorial sobre como instalar essas bibliotecas. Comentei fortemente o próprio código, por isso deve ser fácil verificar o que está acontecendo.
O primeiro passo é importar os módulos e bibliotecas relevantes. Vamos importar os classificadores LogisticRegression, LDA e QDA para este provisorista:
Agora que as bibliotecas são importadas, precisamos criar um DataFrame de pandas que contenha os retornos percentuais atrasados por um número anterior de dias (padrão para cinco). create_lagged_series terá um símbolo de estoque (conforme reconhecido pelo Yahoo Finance) e crie um DataFrame atrasado durante o período especificado:
A próxima função auxiliar é projetada para criar uma porcentagem hit_rate para cada modelo, eliminando o código duplicado. Baseia-se no fato de que os objetos Logression Regression, LDA e QDA têm os mesmos métodos (ajuste e previsão). A taxa de sucesso é exibida para o terminal:
Finalmente, nós a gravamos com uma função __main__. Neste caso, vamos tentar prever a direção do mercado de ações dos EUA em 2005, usando dados de retorno de 2001 a 2004:
A saída do código é a seguinte:
Pode-se ver que a Regressão Logística e o Analisador Discriminador Linear foram capazes de ganhar uma taxa de sucesso de 56%. No entanto, o Analisador Quadratic Discriminant foi capaz de melhorar em ambos para produzir uma taxa de sucesso de 60%. Para o período específico analisado, isso provavelmente deve-se ao fato de que existe alguma não-linearidade na relação entre os fatores retardados e a direção que não está bem capturada na análise linear.
Assim, há esperança de que possamos prever parcialmente o mercado de ações dos EUA. Existem algumas ressalvas para esta metodologia de previsão:
Não utilizamos nenhuma forma de validação cruzada para reduzir erros de montagem. Um pré-programador de produção exigiria que essa análise fosse considerada robusta. O pré-programador só foi treinado em dados entre 2001-2004 inclusive. Dados de mercado mais recentes podem ter uma precisão de predição substancialmente diferente. Na verdade, não tentamos trocar essa informação. Em particular, como é que vamos executar trades? Utilizaríamos o futuro e-mini dos EUA? Utilizaríamos as ordens do mercado aberto (MOO) ou do mercado no fechamento (MOC)? Também precisamos considerar os custos de transação.
Em artigos subsequentes, consideramos essas questões em maior profundidade.
Um aviso sobre a previsão aleatória.
Nesta seção, quero destacar o problema de significância estatística quando lida com meteorologistas. Além do previsão descrita acima, também gerei uma série de "previsão" baseada unicamente no sinal de sorteios aleatórios de uma distribuição normal normal. Note-se que, no mesmo período, produziu uma taxa de sucesso de previsão de 53,4% e, no entanto, o método usado para gerar a série é essencialmente não diferente de jogar uma moeda! Tenha isso em mente sempre que você realizar os procedimentos de previsão, pois muitas vezes pode levar a um desempenho comercial terrível se não for levado em consideração.
Nos artigos a seguir, consideraremos os classificadores de previsão não-lineares supervisionados mais avançados, como redes neurais artificiais (ANN) e máquinas vetoriais de suporte (SVM). Com um "estável" de técnicas de aprendizado de máquinas à nossa disposição, posteriormente poderemos usar métodos de conjunto para produzir uma precisão e robustez de previsão que, às vezes, podem exceder as de qualquer previsor individual.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
Estratégia de negociação de previsão de séries temporais
Previsão da Série de Tempo (TSF)
A função Previsão da Série do Tempo exibe a tendência estatística do preço de uma segurança ao longo de um período de tempo especificado com base na análise de regressão linear. Em vez de uma linha de tendência de regressão linear linear, a Previsão da Série de Tempo representa o último ponto de tendências de tendência de regressão múltipla. É por isso que esse indicador às vezes pode ser referido como o indicador de "regressão linear em movimento" ou o "oscilador de regressão".
TSF (int forecast, int period)
TSF (entrada IDataSeries, previsão int, período int)
Retorna o valor padrão.
TSF (int forecast, int period) [int barsAgo]
TSF (entrada IDataSeries, previsão int, período int) [int barsAgo]
Duplo ; Acessando este método através de um valor de índice [int barsAgo] retorna o valor do indicador da barra referenciada.
Dados da fonte do indicador (?)
Número de barras utilizadas no cálculo.
// Imprime o valor atual de um TSF de 20 períodos usando o tipo de preço padrão.
valor duplo = TSF (3, 20) [0];
Imprimir ("O valor TSF atual é" + value. ToString ());
Você pode visualizar o código-fonte deste método indicador, selecionando o menu Ferramentas & gt; Edite o NinjaScript & gt; Indicador dentro da janela do NinjaTrader Control Center.
Redes neurais para negociação algorítmica. Previsão de séries temporais simples.
ACTUALIZAÇÃO IMPORTANTE:
Esta é a primeira parte dos meus experimentos em aplicação de aprendizado profundo para financiar, em particular para negociação algorítmica.
Eu quero implementar o sistema de negociação a partir do zero com base apenas em abordagens de aprendizado profundo, então, para qualquer problema que temos aqui (previsão de preços, estratégia de negociação, gerenciamento de riscos), usaremos diferentes variações de redes neuronais artificiais (RNAs) e veremos o quanto elas podem lide com isso.
Agora eu planejo trabalhar nas próximas seções:
Previsão de séries temporais com dados brutos Previsão de séries temporais com recursos personalizados Otimização de hiperparâmetros Implementação de estratégia de negociação, backtesting e gerenciamento de riscos Estratégias de negociação mais sofisticadas, reforço de aprendizagem Indo ao vivo, corretores API, ganhando (l̶o̶s̶i̶n̶g̶) dinheiro.
Eu recomendo que você verifique o código e o IPython Notebook neste repositório.
Nesta primeira parte, quero mostrar como MLPs, CNNs e RNNs podem ser usados para a previsão de séries temporais financeiras. Nesta parte, não vamos usar nenhuma engenharia de recursos. Vamos considerar o conjunto de dados históricos dos movimentos dos preços do índice S & P 500. Temos informações de 1950 a 2018 sobre preços abertos, fechados, altos e baixos para todos os dias do ano e volume de negócios. Primeiro, tentaremos apenas prever fechar o preço no final do próximo dia, em segundo lugar, tentaremos prever o retorno (preço fechado - preço aberto). Baixe o conjunto de dados do Yahoo Finance ou deste repositório.
Definição do problema.
Consideraremos o nosso problema como 1) problema de regressão (tentando prever exatamente fechar o preço ou retornar no dia seguinte) 2) problema de classificação binária (o preço aumentará [1; 0] ou abaixo [0; 1]).
Para treinar NNs, usaremos framework Keras.
Primeiro vamos preparar nossos dados para treinamento. Queremos prever o valor de t + 1 com base em informações de N dias anteriores. Por exemplo, tendo preços próximos dos últimos 30 dias no mercado, queremos prever, que preço será amanhã, no 31º dia.
Utilizamos as primeiras 90% das séries temporais como conjunto de treinamento (considere-a como dados históricos) e 10% como conjunto de testes para avaliação do modelo.
Aqui é exemplo de carregamento, dividindo em amostras de treinamento e pré-processamento de dados de entrada brutos:
Problema de regressão. MLP.
Será apenas um perceptron de 2 camadas escondidas. O número de neurônios escondidos é escolhido de forma empírica, vamos trabalhar na otimização de hiperparâmetros nas próximas seções. Entre duas camadas ocultas, adicionamos uma camada de Saída para evitar a sobreposição.
O importante é Dense (1), Activation ('linear') e 'mse' na seção de compilação. Queremos um produto que possa estar em qualquer intervalo (prevemos valor real) e nossa função de perda é definida como erro quadrático médio.
Vamos ver o que acontece se apenas passarmos pedaços de preços próximos de 20 dias e prever o preço no 21º dia. Final MSE = 46.3635263557, mas não é uma informação muito representativa. Abaixo está um gráfico de previsões para os primeiros 150 pontos do conjunto de dados de teste. A linha preta é dados reais, um azul - previsto. Podemos ver claramente que nosso algoritmo não é nem mesmo de perto, mas pode aprender a tendência.
Vamos dimensionar nossos dados usando o método de sklearn pré-processamento. Escala () para ter nossa série zero de tempo e variância unitária e treinar o mesmo MLP. Agora temos MSE = 0.0040424330518 (mas está em dados dimensionados). No gráfico abaixo, você pode ver as séries temporais reais escaladas (preto) e a nossa previsão (azul) para ela:
Para usar este modelo no mundo real, devemos retornar às séries temporais não escaladas. Podemos fazê-lo, multiplicando ou preditivo por desvio padrão de séries temporais que usamos para fazer predição (20 etapas de tempo não escalonadas) e adicione seu valor médio:
MSE neste caso é igual a 937.963649937. Aqui está o enredo de previsões restauradas (vermelho) e dados reais (verde):
Não está mal, não é? Mas vamos tentar algoritmos mais sofisticados para esse problema!
Problema de regressão. CNN.
Eu não vou mergulhar na teoria das redes neurais convolutivas, você pode verificar esses recursos incríveis:
Vamos definir a rede neural convolucional de 2 camadas (combinação de camadas de convolução e max-pooling) com uma camada totalmente conectada e a mesma saída que anteriormente:
Vamos verificar resultados. MSEs para dados escalados e restaurados são: 0.227074542433; 935.520550172. As parcelas estão abaixo:
Mesmo olhando para MSE em dados escalados, esta rede aprendeu muito pior. Provavelmente, uma arquitetura mais profunda precisa de mais dados para o treinamento, ou simplesmente é superada devido ao número muito alto de filtros ou camadas. Vamos considerar esta questão mais tarde.
Problema de regressão. RNN.
Como arquitetura recorrente, eu quero usar duas camadas LSTM empilhadas (leia mais sobre LSTM aqui).
As parcelas das previsões estão abaixo, MSEs = 0.0246238639582; 939.948636707.
A previsão da RNN se parece mais com o modelo médio móvel, não pode aprender e prever todas as flutuações.
Então, é um resultado pouco esperável, mas podemos ver que os MLPs funcionam melhor para esta previsão de séries temporais. Vamos verificar o que acontecerá se nós passarmos de regressão para problema de classificação. Agora, usaremos os preços não fechados, mas o retorno diário (fechar preço-preço aberto) e queremos prever se o preço fechado é maior ou menor do que o preço aberto com base nos últimos 20 dias de devolução.
Problema de classificação. MLP.
O código é alterado um pouco - alteramos nossa última camada Densa para ter saída [0; 1] ou [1; 0] e adicione a saída softmax para esperar resultados probabilísticos.
Para carregar saídas binárias, mude a linha seguinte do código:
Também mudamos a função de perda para cross-entopy binário e adicionamos métricas de precisão.
Oh, não é melhor do que adivinhar aleatoriamente (50% de precisão), vamos tentar algo melhor. Confira os resultados abaixo.
Problema de classificação. CNN.
Problema de classificação. RNN.
Conclusões.
Podemos ver que o tratamento da previsão de séries temporárias financeiras como problema de regressão é uma abordagem melhor, pode aprender a tendência e os preços próximos do real.
O que foi surpreendente para mim, que MLPs estão tratando dados de seqüência melhor como CNNs ou RNNs que deveriam funcionar melhor com séries temporais. Explico isso com conjunto de dados bastante pequeno (
Selos de tempo de 16k) e escolha de hiperparâmetros fofos.
Você pode reproduzir resultados e melhorar usando o código do repositório.
Eu acho que podemos obter melhores resultados em regressão e classificação usando diferentes recursos (não apenas séries temporais escalonadas) como alguns indicadores técnicos, volume de vendas. Também podemos tentar dados mais freqüentes, digamos carrapatos minuto a minuto para ter mais dados de treinamento. Todas essas coisas que eu vou fazer depois, então fique atento :)
Ao bater palmas mais ou menos, você pode nos indicar quais são as histórias que realmente se destacam.
Alex Honchar.
máquinas de ensino e raphamento.
Mundo de aprendizagem de máquinas.
O melhor sobre Aprendizado de Máquinas, Visão de Computador, Aprendizagem Profunda, Processamento de linguagem natural e outros.
Previsão da Série de Tempo (TSF)
A função Previsão da Série do Tempo exibe a tendência estatística do preço de uma segurança ao longo de um período de tempo especificado com base na análise de regressão linear. Em vez de uma linha de tendência de regressão linear linear, a Previsão da Série de Tempo representa o último ponto de tendências de tendência de regressão múltipla. É por isso que esse indicador às vezes pode ser referido como o indicador de "regressão linear em movimento" ou o "oscilador de regressão".
TSF (int forecast, int period)
TSF (entrada IDataSeries, previsão int, período int)
Retorna o valor padrão.
TSF (int forecast, int period) [int barsAgo]
TSF (entrada IDataSeries, previsão int, período int) [int barsAgo]
Duplo ; Acessando este método através de um valor de índice [int barsAgo] retorna o valor do indicador da barra referenciada.
Dados da fonte do indicador (?)
Número de barras utilizadas no cálculo.
// Imprime o valor atual de um TSF de 20 períodos usando o tipo de preço padrão.
valor duplo = TSF (3, 20) [0];
Imprimir ("O valor TSF atual é" + value. ToString ());
Você pode visualizar o código-fonte deste método indicador, selecionando o menu Ferramentas & gt; Edite o NinjaScript & gt; Indicador dentro da janela do NinjaTrader Control Center.
Redes neurais para negociação algorítmica. Previsão de séries temporais simples.
ACTUALIZAÇÃO IMPORTANTE:
Esta é a primeira parte dos meus experimentos em aplicação de aprendizado profundo para financiar, em particular para negociação algorítmica.
Eu quero implementar o sistema de negociação a partir do zero com base apenas em abordagens de aprendizado profundo, então, para qualquer problema que temos aqui (previsão de preços, estratégia de negociação, gerenciamento de riscos), usaremos diferentes variações de redes neuronais artificiais (RNAs) e veremos o quanto elas podem lide com isso.
Agora eu planejo trabalhar nas próximas seções:
Previsão de séries temporais com dados brutos Previsão de séries temporais com recursos personalizados Otimização de hiperparâmetros Implementação de estratégia de negociação, backtesting e gerenciamento de riscos Estratégias de negociação mais sofisticadas, reforço de aprendizagem Indo ao vivo, corretores API, ganhando (l̶o̶s̶i̶n̶g̶) dinheiro.
Eu recomendo que você verifique o código e o IPython Notebook neste repositório.
Nesta primeira parte, quero mostrar como MLPs, CNNs e RNNs podem ser usados para a previsão de séries temporais financeiras. Nesta parte, não vamos usar nenhuma engenharia de recursos. Vamos considerar o conjunto de dados históricos dos movimentos dos preços do índice S & P 500. Temos informações de 1950 a 2018 sobre preços abertos, fechados, altos e baixos para todos os dias do ano e volume de negócios. Primeiro, tentaremos apenas prever fechar o preço no final do próximo dia, em segundo lugar, tentaremos prever o retorno (preço fechado - preço aberto). Baixe o conjunto de dados do Yahoo Finance ou deste repositório.
Definição do problema.
Consideraremos o nosso problema como 1) problema de regressão (tentando prever exatamente fechar o preço ou retornar no dia seguinte) 2) problema de classificação binária (o preço aumentará [1; 0] ou abaixo [0; 1]).
Para treinar NNs, usaremos framework Keras.
Primeiro vamos preparar nossos dados para treinamento. Queremos prever o valor de t + 1 com base em informações de N dias anteriores. Por exemplo, tendo preços próximos dos últimos 30 dias no mercado, queremos prever, que preço será amanhã, no 31º dia.
Utilizamos as primeiras 90% das séries temporais como conjunto de treinamento (considere-a como dados históricos) e 10% como conjunto de testes para avaliação do modelo.
Aqui é exemplo de carregamento, dividindo em amostras de treinamento e pré-processamento de dados de entrada brutos:
Problema de regressão. MLP.
Será apenas um perceptron de 2 camadas escondidas. O número de neurônios escondidos é escolhido de forma empírica, vamos trabalhar na otimização de hiperparâmetros nas próximas seções. Entre duas camadas ocultas, adicionamos uma camada de Saída para evitar a sobreposição.
O importante é Dense (1), Activation ('linear') e 'mse' na seção de compilação. Queremos um produto que possa estar em qualquer intervalo (prevemos valor real) e nossa função de perda é definida como erro quadrático médio.
Vamos ver o que acontece se apenas passarmos pedaços de preços próximos de 20 dias e prever o preço no 21º dia. Final MSE = 46.3635263557, mas não é uma informação muito representativa. Abaixo está um gráfico de previsões para os primeiros 150 pontos do conjunto de dados de teste. A linha preta é dados reais, um azul - previsto. Podemos ver claramente que nosso algoritmo não é nem mesmo de perto, mas pode aprender a tendência.
Vamos dimensionar nossos dados usando o método de sklearn pré-processamento. Escala () para ter nossa série zero de tempo e variância unitária e treinar o mesmo MLP. Agora temos MSE = 0.0040424330518 (mas está em dados dimensionados). No gráfico abaixo, você pode ver as séries temporais reais escaladas (preto) e a nossa previsão (azul) para ela:
Para usar este modelo no mundo real, devemos retornar às séries temporais não escaladas. Podemos fazê-lo, multiplicando ou preditivo por desvio padrão de séries temporais que usamos para fazer predição (20 etapas de tempo não escalonadas) e adicione seu valor médio:
MSE neste caso é igual a 937.963649937. Aqui está o enredo de previsões restauradas (vermelho) e dados reais (verde):
Não está mal, não é? Mas vamos tentar algoritmos mais sofisticados para esse problema!
Problema de regressão. CNN.
Eu não vou mergulhar na teoria das redes neurais convolutivas, você pode verificar esses recursos incríveis:
Vamos definir a rede neural convolucional de 2 camadas (combinação de camadas de convolução e max-pooling) com uma camada totalmente conectada e a mesma saída que anteriormente:
Vamos verificar resultados. MSEs para dados escalados e restaurados são: 0.227074542433; 935.520550172. As parcelas estão abaixo:
Mesmo olhando para MSE em dados escalados, esta rede aprendeu muito pior. Provavelmente, uma arquitetura mais profunda precisa de mais dados para o treinamento, ou simplesmente é superada devido ao número muito alto de filtros ou camadas. Vamos considerar esta questão mais tarde.
Problema de regressão. RNN.
Como arquitetura recorrente, eu quero usar duas camadas LSTM empilhadas (leia mais sobre LSTM aqui).
As parcelas das previsões estão abaixo, MSEs = 0.0246238639582; 939.948636707.
A previsão da RNN se parece mais com o modelo médio móvel, não pode aprender e prever todas as flutuações.
Então, é um resultado pouco esperável, mas podemos ver que os MLPs funcionam melhor para esta previsão de séries temporais. Vamos verificar o que acontecerá se nós passarmos de regressão para problema de classificação. Agora, usaremos os preços não fechados, mas o retorno diário (fechar preço-preço aberto) e queremos prever se o preço fechado é maior ou menor do que o preço aberto com base nos últimos 20 dias de devolução.
Problema de classificação. MLP.
O código é alterado um pouco - alteramos nossa última camada Densa para ter saída [0; 1] ou [1; 0] e adicione a saída softmax para esperar resultados probabilísticos.
Para carregar saídas binárias, mude a linha seguinte do código:
Também mudamos a função de perda para cross-entopy binário e adicionamos métricas de precisão.
Oh, não é melhor do que adivinhar aleatoriamente (50% de precisão), vamos tentar algo melhor. Confira os resultados abaixo.
Problema de classificação. CNN.
Problema de classificação. RNN.
Conclusões.
Podemos ver que o tratamento da previsão de séries temporárias financeiras como problema de regressão é uma abordagem melhor, pode aprender a tendência e os preços próximos do real.
O que foi surpreendente para mim, que MLPs estão tratando dados de seqüência melhor como CNNs ou RNNs que deveriam funcionar melhor com séries temporais. Explico isso com conjunto de dados bastante pequeno (
Selos de tempo de 16k) e escolha de hiperparâmetros fofos.
Você pode reproduzir resultados e melhorar usando o código do repositório.
Eu acho que podemos obter melhores resultados em regressão e classificação usando diferentes recursos (não apenas séries temporais escalonadas) como alguns indicadores técnicos, volume de vendas. Também podemos tentar dados mais freqüentes, digamos carrapatos minuto a minuto para ter mais dados de treinamento. Todas essas coisas que eu vou fazer depois, então fique atento :)
Ao bater palmas mais ou menos, você pode nos indicar quais são as histórias que realmente se destacam.
Alex Honchar.
máquinas de ensino e raphamento.
Mundo de aprendizagem de máquinas.
O melhor sobre Aprendizado de Máquinas, Visão de Computador, Aprendizagem Profunda, Processamento de linguagem natural e outros.
Комментарии
Отправить комментарий