基于深度强化学习的比特币交易代理,使用 DeepSense 网络进行 Q 函数逼近。
有关数据集、预处理、网络架构和实现的完整详细信息,请参阅此存储库的 Wiki。
要设置具有所有依赖项的 ubuntu 虚拟机来运行代码,请参阅assets/vm
。
直接从 docker hub 拉取预构建的 docker 镜像并运行它
docker pull samre12/deep-trading-agent:latest
docker run -p 6006:6006 -it samre12/deep-trading-agent:latest
或者
通过执行命令在本地构建 docker 映像并运行该映像:
docker build -t deep-trading-agent .
docker run -p 6006:6006 -it deep-trading-agent
这将设置用于培训代理的存储库并
将当前目录挂载到容器中的/deep-trading-agent
中
在图像构建过程中,会提取并采样交易所的最新交易历史记录,以创建每分钟的比特币价格数据集。该数据集位于/deep-trading-agent/data/btc.csv
要启动代理的训练,请在配置文件中指定合适的参数( /deep-trading-agent/code/config/config.cfg
中提供了示例配置文件)并使用/deep-trading-agent/code/main.py
运行代码/deep-trading-agent/code/main.py
训练支持通过Tensorboard进行日志记录和监控
容器中安装vim
和screen
,用于编辑配置文件和运行tensorboard
将容器的6006端口绑定到主机的6006端口,以使用Tensorboard监控训练
请给这个存储库一个支持该项目?
Preprocessor
中提取给定时间间隔内比特币的最高和最低价格以及交易量受到 Deep Q-Trading 的启发,他们解决了单一资产的简化交易问题。
对于每个交易单元,仅允许中性(1)、多头(2)和空头(3)三种操作之一,并根据代理的当前仓位获得奖励。深度 Q 学习代理经过训练,可以最大化总累积奖励。
当前的 Deep Q-Trading 模型是通过使用Deep Sense架构进行Q 函数逼近来修改的。
每分钟比特币系列是通过修改此存储库中提到的过程获得的。对Coinbase交易所中的交易进行采样以生成比特币价格系列。
请参阅assets/dataset
集下载数据集。
基本预处理
完全忽略缺失值并将其从数据集中删除,并使用价格时间戳累积连续值块。
然后,过滤掉所有时间戳数量小于代理状态和视野的组合历史长度的累积块,因为它们不能用于代理的训练。
在当前的实现中,过去 3 小时(180 分钟)的每分钟比特币价格用于生成代理当前状态的表示。
对于现有数据集(在撰写本文时),以下是预处理数据集时生成的日志:
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
高级预处理
处理缺失值并连接较小的块以增加连续价格块的大小。
文献中以不会对模型性能产生太大影响的方式填充缺失值的标准技术是使用不衰减的指数填充。
(待实施)
Tensorflow“1.1.0”版本用于Deep Sense网络的实现。
实现是根据这个 Github 存储库改编的,并对网络架构进行了一些简化,以纳入对比特币数据的单个时间序列的学习。
实现和预处理的灵感来自这篇 Medium 帖子。 Deep Q Network 的实际实现改编自 DQN-tensorflow。