Eu gostaria de usar a ANN para automatizar as moedas de negociação, de preferência USD / EUR ou USD / GBP. Eu sei que isso é difícil e pode não ser simples. Já li alguns trabalhos e fiz algumas experiências, mas sem muita sorte. Eu gostaria de obter conselhos de ESPECIALISTAS para fazer este trabalho.
Aqui está o que eu fiz até agora:
- Recebi dados de tick by tick para o mês de julho de 2013. Ele possui lance / venda / volume de lances / volume de vendas.
- Extraídos todos os ticks para o período de 12h às 14h durante todos os dias.
- A partir desses dados, criou um conjunto de dados em que cada entrada consiste em n valores de lances em sequência.
- Usaram esses dados para treinar uma RNA com entradas n-1 e a saída é o valor da n-ésima oferta prevista.
- A RNA tinha n-1 neurônios de entrada, (n-1) * 2 + 1 oculto e 1 neurônio de saída. A camada de entrada tinha TF linear, a oculta tinha TF logarítmico e a saída tinha TF linear.
- Treinei a rede com propagação traseira com o n-125 primeiro e depois com o 10.
Para ambos n, o MSE não caiu abaixo de 0,5 e permaneceu nesse valor durante o treinamento completo. Supondo que isso pudesse ser devido ao fato de as séries temporais serem totalmente aleatórias, usei o pacote R para encontrar autocorrelação parcial no conjunto de dados (pacf). Isso deu valores diferentes de zero para apenas 2 e 3 defasagens.
Pergunta 1: O que isso significa exatamente?
Então usei o hurst expoent para avaliar a aleatoriedade. Em R, hurst (valores) apresentou valores acima de 0,9.
Pergunta 2: É suposto ser quase aleatório. Deveria ter um valor mais próximo de 0,5?
Repeti o treinamento da RNA com n = 3. A RNA foi treinada e conseguiu obter um valor bastante baixo para o MSE. No entanto, a saída calculada dessa RNA não difere muito do (n-1) é o valor da oferta. Parece que a ANN aceita apenas o último lance como o próximo! Tentei diferentes estruturas de rede (todas as percepções de várias camadas), diferentes parâmetros de treinamento etc., mas os resultados são os mesmos.
Pergunta 3: Como posso melhorar a precisão? Existem outros métodos de treinamento além da retropropagação?
fonte
Respostas:
Os resultados que você vê não são um subproduto do seu produto de treinamento, mas
neural nets
não são uma ótima opção para esta tarefa.Neural nets
são efetivamente um meio de criar uma função não linear de alta ordem, compondo várias funções mais simples. Isso geralmente é uma coisa muito boa, porque permite que as redes neurais se ajustem a padrões muito complexos.No entanto, em uma bolsa de valores, qualquer padrão complexo, quando negociado, decai rapidamente. A detecção de um padrão complicado geralmente não gera resultados úteis, porque geralmente são padrões complexos no curto prazo. Além disso, dependendo da métrica que você escolher, há várias maneiras de obter um bom desempenho que, na verdade, não compensa em investir (como prever o último valor no seu exemplo).
Além disso, o mercado de ações é surpreendentemente caótico, o que pode resultar em um
neural net
ajuste excessivo. Isso significa que os padrões que ela aprende generalizarão mal. Algo semelhante ao de ver apenas uma ação diminuir ao longo de um dia e decidir uniformemente que a ação sempre diminuirá apenas porque foi vista em um prazo relativamente curto. Em vez disso, técnicas comoridge
erobust regression
, que identificarão padrões mais gerais e menos complexos, se saem melhor.O vencedor de uma competição semelhante do Kaggle usado
robust regression
por esse motivo. É provável que você obtenha melhores resultados se mudar para um modelo de aprendizado superficial que encontrará funções de ordem polinomial inferior, sobre as funções complexas e profundas de uma rede neural.fonte
Experimente uma rede neural recorrente, um modelo adequado para dados de séries temporais. Eles são notoriamente difíceis de treinar, mas parecem ter um bom desempenho quando treinados adequadamente: http://cs229.stanford.edu/proj2012/BernalFokPidaparthi-FinancialMarketTimeSeriesPredictionwithRecurrentNeural.pdf
fonte