Tuesday, 20 March 2018

Aprendizado de reforço da estratégia comercial


Aprendizagem de reforço da estratégia de negociação
Recomendamos atualizar para o mais recente Safari, Google Chrome ou Firefox.
Pegue os pedidos 1.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
Este projeto usa a aprendizagem de reforço no mercado de ações e o agente tenta aprender a negociar. O objetivo é verificar se o agente pode aprender a ler fita. O projeto é dedicado ao herói na vida, o grande Jesse Livermore e um dos melhores humanos, eu conheço o Ryan Booth github / ryanabooth.
Um ponto a observar, o código dentro do reforço do tensor é o código mais recente e você deve estar lendo / executando se você estiver interessado em um projeto. Deixe outros diretórios, não estou trabalhando neles por enquanto.
Se você está trabalhando no uso do ML no investimento / negociação e deseja colaborar, sinta-se à vontade para me enviar um email deepender281190 @ gmail. Meu último projeto github / deependersingla / deep_portfolio, apenas a primeira versão é de origem aberta.
a) reforço do tensor do CD.
b) Crie um diretório de redes guardadas dentro de tensor_reinforcement para salvar redes.
c) python dqn_model. py.
a) reforço do tensor do CD.
b) Crie um diretório de redes guardadas dentro de tensor_reinforcement para salvar redes.
c) python pg_model. py.
Inicialmente, comecei a usar o Chainer para o projeto de aprendizado supervisionado e de reforço. No meio disso, AlphaGo (research. googleblog / 2018/01 / alphago-mastering-ancient-game-of-go. html) veio por causa disso, mudei para ler o livro Sutton em RL (webdocs. cs. ualberta. ca/
sutton / book / the-book. html), AlphaGo e artigos relacionados, palestras de David Silver (www0.cs. ucl. ac. uk/staff/d. silver/web/Teaching. html, são excelentes).
Estou voltando ao projeto depois que algum tempo mudou muito. Todas as crianças legais, mesmo a DeepMind (os deuses) começaram a usar o TensorFlow. Por isso, estou abandonando o Chainer e usarei o Tensorflow a partir de agora. Excitantes tempos à frente.
Eu começarei com a rede de feed-forward simples. No entanto, também estou inclinado a usar a razão da rede convolutiva, eles fazem muito bem quando a pequena alteração na entrada não deve mudar a saída. Por exemplo: no reconhecimento de imagem, uma pequena alteração de valores de pixels não altera a imagem do meam. Intutamente, os números de estoque parecem os mesmos para mim, uma pequena mudança não deve desencadear um comércio, mas novamente o problema aqui vem com a normalização. Com a normalização, a grande mudança no número será reduzida para uma entrada muito pequena, portanto, é bom começar com o feed-forward.
Eu quero começar com 2 camadas primeiro, sim, apenas uma baunilha, mas vamos ver como isso funciona do que se deslocará para uma rede mais profunda. No lado da saída, usarei uma função sigmoide não-linear para obter o valor de 0 e 1. Na camada oculta, todos os neurônios serão RELU. Com 2 camadas, estou assumindo que a primeira camada w1 pode decidir se o mercado é otimista, baixista e estável. A 2ª camada pode então decidir quais ações tomar com base na camada baseada.
Vou rodar x episódio de treinamento e cada um terá seu intervalo de tempo. A rede de políticas terá que fazer x * y vezes a decisão de manter, comprar ou curto. Depois disso, com base em nossa recompensa, rotularei todas as decisões se foi bom / ruim e atualize a rede. Eu irei executar x episódio na rede melhorada e continuarei fazendo isso. Como MCTS, onde as coisas superam a otimização, nossa política também começará a tomar decisões mais positivas e a uma menor decisão negativa, mesmo que em treinamento veremos políticas fazendo escolhas erradas, mas, em média, irão funcionar porque faremos o mesmo milhão de vezes.
Eu pretendo começar com treinamento episódico em vez de treinamento contínuo. A principal razão para isso é que não terei que calcular a recompensa após cada ação que o agente fará, o que é complexo de fazer na negociação. Posso apenas fazer uma recompensa terminal com base no valor do portfólio após todo um episódio (valor final da carteira - transação o custo ocorre dentro do episódio - valor inicial do portfólio). A outra razão para fazê-lo que eu acredito que irá motivar o agente a aprender sobre os episódios, o que diminui o risco de eventos ou mudanças de sentimento no mercado.
Isso também significa que eu tenho que verificar a hipótese sobre:
a) Episódios de duração diferente.
b) Em recompensas de recompensas de recompensas diferentes ou recompensas após cada passo dentro de um episódio também.
Como de costume, como todos os projetos de AI, haverá muito sucesso e tentativa. Eu deveria escrever um bom código e armazenar todos os resultados corretamente para que eu possa compará-los para ver o que funciona e o que não. É claro que a idéia é garantir que o agente permaneça rentável durante a negociação.
Para executar diretamente esse repo, use esta fonte de dados e você está configurado: drive. google/open? id=0B6ZrYxEMNGR-MEd5Ti0tTEJjMTQ.
&cópia de; 2017 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.

Otimização da estratégia de negociação de pares usando o método de aprendizagem de reforço: uma abordagem de cointegração.
Saeid Fallahpour Hasan Hakimian Email autor Khalil Taheri Ehsan Ramezanifar.
Estudos recentes mostram que a popularidade da estratégia de negociação de pares tem crescido e pode representar um problema à medida que as oportunidades de comércio se tornam muito menores. Portanto, a otimização da estratégia de negociação de pares ganhou ampla atenção entre os comerciantes de alta freqüência. Neste artigo, usando a aprendizagem de reforço, examinamos o melhor nível de especificações de negociação de pares ao longo do tempo. Mais especificamente, o agente de aprendizado de reforço escolhe o melhor nível de parâmetros de troca de pares para maximizar a função objetiva. Os resultados são obtidos aplicando uma combinação do método de aprendizagem de reforço e abordagem de cointegração. Achamos que aumentar as especificações de negociação de pares usando a abordagem proposta supera significativamente os métodos anteriores. Os resultados empíricos baseados nos dados intraday abrangentes que são obtidos dos estoques constituintes S & amp; P500 confirmam de forma eficiente o nosso método proposto.
Comunicado por V. Loia.
Conformidade com padrões éticos.
Conflito de interesses.
Os autores declaram que não há conflito de interesses em relação à publicação deste artigo.
Referências.
Informações sobre direitos autorais.
Autores e afiliações.
Saeid Fallahpour 1 Hasan Hakimian 1 Autor do email Khalil Taheri 2 Ehsan Ramezanifar 3 1. Departamento de Finanças, Faculdade de Gestão Universidade de Teerã Teerã Irã 2. Laboratório avançado de Robótica e Sistemas Inteligentes, Escola de Engenharia Elétrica e Informática, Faculdade de Engenharia Universidade de Teerã Teerã Irã 3. Departamento de Finanças Escola de Negócios e Economia Maastricht Países Baixos.
Sobre este artigo.
Recomendações personalizadas.
Cite o artigo.
.RIS Papers Reference Manager RefWorks Zotero.
.BIB BibTeX JabRef Mendeley.
Compartilhe o artigo.
Acesso ilimitado ao artigo completo Download instantâneo Inclua o imposto de vendas local, se aplicável.
Cite o artigo.
.RIS Papers Reference Manager RefWorks Zotero.
.BIB BibTeX JabRef Mendeley.
Compartilhe o artigo.
Mais de 10 milhões de documentos científicos ao seu alcance.
Switch Edition.
&cópia de; 2017 Springer International Publishing AG. Parte de Springer Nature.

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.

Momentum.
Esta publicação é baseada no meu artigo anterior escrito em japonês. (Nekopuni. holy. jp/?p=1231)
& # 8211; Aplicando reforço aprendendo a estratégia de negociação no mercado fx.
& # 8211; Estimando o valor Q pela simulação Monte Carlo (MC).
& # 8211; Empregando MC de primeira visita por simplicidade.
& # 8211; Usando curto-prazo e longo prazo Sharpe-ratio da estratégia em si como uma variável de estado, para testar estratégia de impulso.
& # 8211; Usando o método epsilon-ganancioso para decidir a ação.
Primeiro visita MC.
1. Calcule o estado no dia t (estado = taxa de Sharpe um dia antes do dia t)
2. Decida a ação de acordo com o estado (posição longa, sem posição ou posição curta)
3. Atualize a matriz de recompensas com base na recompensa obtida na próxima etapa de tempo t + 1.
4. Atualize a matriz Q uma vez que t é igual ao último passo T.
Faça o loop acima do procedimento até sentir-se feliz.
Código Python.
Desta vez, o USDJPY diário da FRED é usado para simulação.
O chamado ponto de troca e os custos de transação não estão incluídos neste código até agora.
Ainda assim, este código leva um enorme tempo de computação para mim, então os resultados (matriz Q) abaixo são feitos por apenas 1000 iterações.
Para posição longa (ação = 0)
Para posição plana (ação = 1)
Para posição curta (ação = 2)
Conforme observado nas figuras acima, o valor Q é menor se tivermos proporção relativamente alta de Sharpe de médio prazo (inferior a -1 e superior a 1)
Para uma posição longa, o valor Q é mais alto se o Sharpe de curto prazo estiver em algum lugar entre 0,5 e 1,0, enquanto que entre -0,5 e -1,0 é a área mais alta para posição curta.
Presumivelmente, esse código pode ser visto como uma estratégia de momento modesto, embora eu pense que isso depende do período de amostra.
A figura acima é a média do retorno cumulativo para cada episódio com janela em expansão.
Isso parece estar convergindo para um certo level. idk ..
Mais tarefa.
Veja se isso reforça a aprendizagem tem poder explicativo.
& # 8211; outros dados de mercado, como outros pares de moedas.

Aprendizagem de reforço da estratégia de negociação
Obter através da App Store Leia esta publicação em nosso aplicativo!
Execução ótima e aprendizagem de reforço.
Suponha um problema bastante simples: você tem que comprar (ou vender) um dado número de ações V em um horizonte de horário fixo H com o objetivo de minimizar seu capital gasto (ou maximizar sua receita).
Existem alguns documentos de pesquisa na web que afirmam que o uso de algoritmos de aprendizado de reiforção pode ajudar a tomar uma decisão. Veja, por exemplo:
Esses documentos empregam estratégias dinâmicas de alocação, baseadas no livro de pedidos limite ou na oferta, para se espalhar. Ao contrário do documento clássico.
eles não assumem a dinâmica de preços de segurança a partir da qual eles derivam sua estratégia. Em vez disso, eles usam resultados de backtest em um conjunto de testes para medir o desempenho de seu programa. É claro que isso também supõe uma limitação de hipóteses na dinâmica do Limite de Ordem que é difícil de testar.
A minha pergunta é dupla: você conhece bons trabalhos de pesquisa usando aprendizagem de reforço (ou outro método de aprendizado de máquina) para esse problema? Por bom, quero dizer que o conjunto de testes é grande (não apenas alguns dias de backtest) e há um esforço real para ser claro sobre a hipótese e ter o mínimo possível.
Algum de vocês o aplicou em um ambiente comercial ou conhece alguém que fez?
Primeiro, somos poucos quants e acadêmicos para usar o conjunto de ferramentas completo de aprendizagem em máquina: algoritmos estocásticos, para o melhor negócio. Aqui estão pelo menos dois papéis:
Kearns e seus co-autores também estão fornecendo muita pesquisa útil.
Nossa abordagem não é apenas tentar algumas técnicas de aprendizado de máquina, mas também usar as poderosas ferramentas matemáticas que permitiram mostrar sua eficiência para provar que alguns algoritmos estão convergindo para soluções ótimas.
Mais quantitativamente, a maioria do aprendizado de máquina vem de uma descida gradiente on-line em um determinado critério, dando origem a uma descida gradiente estocástica. A estocasticidade vem disso:
Você quer minimizar $ \ mathbb || y-f_ (x) || ^ 2 $ em relação a $ \ theta $ Se você construir: $$ \ theta (n + 1) = \ theta (n) - \ gamma ( n) \ times \ frac || y-f_ (x) || ^ 2> $$ Então, se existir, $ \ theta (\ infty) $ é um mínimo potencial para os critérios definidos no passo 1 Agora, basta criar $ \ theta (n) - \ gamma (n) \ times \ frac (x_n) || ^ (=) = \ theta (n) - \ gamma (n) \ times \ frac (x_n) || ^ 2> $$ Em algumas condições de ergodicidade, o limite deste $ \ theta $ será o mesmo que o anterior (batch) (você também precisa desse $ \ sum_n \ gamma (n) & gt; \ infty $ e $ \ sum_n \ gamma (n) ^ 2 & lt; \ infty $; é o célebre teorema Robbins-Monro).
É realmente adequado para algo trading, mas você precisa aplicar esta abordagem não cegamente a qualquer processo estocástico $ (x_n, y_n) $, mas a ergódicos.
O fluxo de pedidos relativamente ao ponto médio parece ser mais ergódico o próprio preço, conseqüentemente, ele deve ser mais eficiente usar o aprendizado da máquina em dados intradiários, em vez de em todos os dias.

No comments:

Post a Comment