Agente de negociação baseado em Deep Reinforcement Learning para Bitcoin usando DeepSense Network para aproximação da função Q.
Para detalhes completos do conjunto de dados, pré-processamento, arquitetura de rede e implementação, consulte o Wiki deste repositório.
Para configurar uma máquina virtual Ubuntu com todas as dependências para executar o código, consulte assets/vm
.
Extraia a imagem docker pré-construída diretamente do docker hub e execute-a como
docker pull samre12/deep-trading-agent:latest
docker run -p 6006:6006 -it samre12/deep-trading-agent:latest
OU
Construa a imagem docker localmente executando o comando e execute a imagem como
docker build -t deep-trading-agent .
docker run -p 6006:6006 -it deep-trading-agent
Isso configurará o repositório para treinar o agente e
monte o diretório atual em /deep-trading-agent
no contêiner
durante a construção da imagem, o histórico de transações mais recentes da bolsa é extraído e amostrado para criar um conjunto de dados em escala por minuto de preços do Bitcoin. Este conjunto de dados é colocado em /deep-trading-agent/data/btc.csv
para iniciar o treinamento do agente, especifique parâmetros adequados em um arquivo de configuração (um exemplo de arquivo de configuração é fornecido em /deep-trading-agent/code/config/config.cfg
) e execute o código usando /deep-trading-agent/code/main.py
o treinamento oferece suporte ao registro e monitoramento por meio do Tensorboard
vim
e screen
são instalados no contêiner para editar os arquivos de configuração e executar tensorboard
vincule a porta 6006 do contêiner à 6006 da máquina host para monitorar o treinamento usando o Tensorboard
Por favor, dê um a este repositório para apoiar o projeto?
Preprocessor
é inspirado no Deep Q-Trading, onde eles resolvem um problema de negociação simplificado para um único ativo.
Para cada unidade de negociação, apenas uma das três ações: neutra(1), longa(2) e curta(3) é permitida e uma recompensa é obtida dependendo da posição atual do agente. O agente Deep Q-Learning é treinado para maximizar o total de recompensas acumuladas.
O modelo atual do Deep Q-Trading é modificado usando a arquitetura Deep Sense para aproximação da função Q.
A série Bitcoin por minuto é obtida modificando o procedimento mencionado neste repositório. As transações na bolsa Coinbase são amostradas para gerar a série de preços do Bitcoin.
Consulte assets/dataset
para baixar o conjunto de dados.
Pré-processamento Básico
Ignore completamente os valores ausentes e remova-os do conjunto de dados e acumule blocos de valores contínuos usando os carimbos de data/hora dos preços.
Todos os blocos acumulados com número de carimbos de data/hora menor que o comprimento histórico combinado do estado e horizonte do agente são então filtrados, pois não podem ser usados para treinamento do agente.
Na implementação atual, os preços do Bitcoin das últimas 3 horas (180 minutos) por minuto são usados para gerar a representação do estado atual do agente.
Com o conjunto de dados existente (no momento da escrita), a seguir estão os logs gerados durante o pré-processamento do conjunto de dados:
INFO:root:Number of blocks of continuous prices found are 58863
INFO:root:Number of usable blocks obtained from the dataset are 887
INFO:root:Number of distinct episodes for the current configuration are 558471
Pré-processamento Avançado
Processe valores ausentes e concatene blocos menores para aumentar os tamanhos dos blocos de preços contínuos.
A técnica padrão na literatura para preencher os valores faltantes de uma forma que não afete muito o desempenho do modelo é usar o preenchimento exponencial sem decaimento.
(A ser implementado)
A versão Tensorflow "1.1.0" é usada para a implementação da rede Deep Sense .
A implementação é adaptada deste repositório Github com algumas simplificações na arquitetura de rede para incorporar o aprendizado em uma única série temporal de dados Bitcoin.
A implementação e o pré-processamento são inspirados nesta postagem do Medium. A implementação real da Deep Q Network é adaptada do DQN-tensorflow.