基于强化学习的交易算法Baselines

tbase的Python项目详细描述


TestDockerPyPI versionCoverage StatusJoin the chat at https://gitter.im/tradingAI/tbase

tbase

基于强化学习的交易算法Baselines(Pytorch实现). 旨在提供一个在中国股市上可复现的算法Baselines.

支持环境: Python 3.5–3.7

安装

设置 tushare token(Tushare token注册申请):

export TUSHARE_TOKEN=YOUR_TOKEN

1. Mac OSX/Ubuntu

  • 安装方式一(直接使用):pip install tbase --upgrade
  • 安装方式二(开发者模式)
    git clone https://github.com/tradingAI/tbase
    cd tbase
    pip install -e .
    

2. Docker

    1. docker install
    1. export TUSHARE_TOKEN=YOUR_TOKEN
    1. 构建image的方式
    • Build your docker image: bash build-docker-image.sh,
    • docker hub: docker pull tradingai/tbase:latest
    • 阿里云镜像: docker pull registry.cn-hangzhou.aliyuncs.com/tradingai/tbase:latest
    1. 手动运行(Note: 如果使用阿里云镜像,需要更改镜像名称)
    • CPU版本
      docker run -it \
          -e TUSHARE_TOKEN=$TUSHARE_TOKEN \
          -v $PWD:/root/trade/tbase \
          tradingai/tbase:latest bash
      
    • GPU版本
      docker run --runtime=nvidia -it \
          -e TUSHARE_TOKEN=$TUSHARE_TOKEN \
          -v $PWD:/root/trade/tbase \
          tradingai/tbase:gpu-latest bash
      
    • python -m tbase.run --alg ddpg --codes 000001.SZ --seed 0

Features(In progress)

  • [x] 可以完美复现训练过程, How?

  • [ ] 加速

    • [x] 多进程CPU并行: 多进程运行独立的Enviroment进行探索
    • [x] 多进程单GPU并行
    • [ ] 多进程多GPU并行
    • [ ] 混合精度训练(Apex)
    • [ ] 分布式多机多卡并行(基于Horovod)
  • [x] 通过运行参数选择:

    • [x] 环境
    • [x] 算法
    • [x] Policy-Net
    • [x] Value-Net
  • 支持RL算法:

    • [ ] 单Agent

      • [x] DDPG
      • [x] TD3(Twin Delayed Deep Deterministic Policy Gradients)
      • [ ] A2C-ACKTR
        • [x] A2C
        • [ ] ACKTR
      • [ ] PPO
      • [ ] PPO2
      • [ ] GAIL
    • [ ] 多Agent

      • [ ] MADDPG
  • 自定义Net

    • [x] LSTM-MLP
    • [x] LSTM_Merge_MLP
    • [ ] MLP
    • [ ] LSTM
    • [ ] CNN
    • [ ] CNN-MLP

训练

例如 ddpg

python3 -m tbase.run --alg ddpg --num_env 1 --gamma 0.53 --seed 9 --print_action

默认参数:

  • scenario: "average", 平均分仓操作
  • codes: "000001.SZ", 平安银行
  • indexs: "000001.SH,399001.SZ", 000001.SH:沪指, 399001.SZ: 深指
  • start: "20190101", 训练开始时间
  • end: "201901231", 训练结束时间
  • max_iter_num: "500", 训练轮数
  • num_env: "1", 并行进程数, 当num_env=1时,不使用多进程方式运行
  • seed: "None", 系统随机种子
  • print_action: "False", 随机打印action的值,方便查看action分布状况
  • reward_fn: "daily_return_with_chl_penalty", env reward function
  • run_id: "1", 运行序号, 方便查看相同参数多次运行结果差异
  • debug: "False", debug模式,打印具体的交易信息
  • eval: "False", 回测评估,为True时,不训练,只加载模型进行回测
  • 其他参数

Defalut policy net setting(actor)

actor

Defalut value net setting(critic)

critic

运行tensorboard

tensorboard --logdir=/tmp/tbase/tensorboard

可以在http://localhost:6006中查看训练的loss, reward ,portfolio, time等指标

loss

加载模型

评估&&回测

  • [x] 训练周期内的评估指标
  • [x] 回测: 模型在训练周期外(评估周期)的评估指标
    # lookback=10, 若测试从20200101开始, 则eval_start往前推10个交易日
    python -m tbase.run --alg ddpg --eval --eval_start 20191218 --eval_end 20200223 --seed 9
    
  • [ ] 滑动窗口更新模型, 在评估周期内,每隔一个窗口T,重新训练一次模型,当T>评估周期时,等价于固定模型

评估指标

  • [x] 绝对收益率(Absolute Return)

  • [ ] 额外收益率(Excess Return)

    • [x] 相对于"买入持有"策略
    • [ ] 相对于基线策略比如"沪深300"
  • [x] 最大回撤: 在选定周期内任一历史时点往后推,净值走到最低点时的收益率回撤幅度的最大值

  • [x] 夏普比率: 投资组合每承受一单位总风险,会产生多少的超额报酬

  • [x] 年化收益率

Contribution

  • Fork this repo
  • Add or change code && Please add tests for changes
  • Test
    • step1. 设置docker-compose需要的环境变量: BAZEL_USER_ROOT, OUTPUT_DIR, TUSHARE_TOKEN
    • step2. docker-compose up
  • Send pull request

如何增加agent

  1. Fork https://github.com/tradingAI/tbase
  2. 在tbase.agents下添加目录, 例如: ddpg
  3. 新建agent.py, 在类名为Agent的类中实现你的agent(继承tbase.common.base_agent.BaseAgent)
  4. 添加单元测试
  • step1. 设置docker-compose需要的环境变量: BAZEL_USER_ROOT, OUTPUT_DIR, TUSHARE_TOKEN
  • step2. docker-compose up
  1. 发起pull request

待优化

  • [x] bazel build
  • [x] 版本管理
  • [x] Github Actions CI
  • [ ] 测试: 提升 unit test 覆盖率(coveralls.io)
  • [ ] Blog Post && baseline模型共享(百度网盘)
  • [ ] 模型分享,评估,部署: tweb[guest:guest], tweb repo
    • 提供web上传方式,模型榜单排名
    • commit id
    • 训练的运行参数
    • 评估的运行参数: codes, start, end
    • performance: 参考评估指标(去除绝对收益率)
    • 模型的百度云盘链接
  • [ ] Experiments Tracking: MLflow Tracking

由于计算资源有限,为所有的算法跑完A股中所有的股票,需要花费大量的时间,希望有空闲计算资源的朋友,可以跑一下模型,将实验结果分享出来

线上交流方式

  • QQ群: 477860214

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我可以使用Hibernate连接不同的数据库并从表中导入数据吗?没有预定义的对象类   java为什么getBoundsInLocal获取错误的坐标?   java在处理并发哈希映射时必须使用锁   java将过滤的JTable数据导出到文本文件   从命令行编译java不使用库   Java使用方法和构造函数绘制图形   java理解优先级队列中的排序方法   尝试解密文件时,java CipherInputStream为空   在Java中将字符串解析为长字符串   java我想在raspberry pi重新启动时在crontabe中执行arecord命令   弹性搜索弹性搜索Lucene公式的Java计算   java使用apachepoi和docx4j读取doc文件   swing显示JavaGUI是否需要特殊处理?   java使用字符串进行数学运算   java在SpringMVC中用JSP初始化菜单项选择表单数据的最佳方法   无多线程的java多客户端程序   swing如何在Java中对BuffereImage进行去饱和?   java在安卓中创建自定义地图