如何用深度强化学习模拟炒股?
???? 初衷
最近一段时间,受到新冠疫情的影响,股市接连下跌,作为一棵小白菜兼小韭菜,竟然产生了抄底的大胆想法,拿出仅存的一点私房钱梭哈了一把。
第二天,暴跌,俺加仓
第三天,又跌,俺加仓
第三天,又跌,俺又加仓...
一番错误操作后,结果惨不忍睹,第一次买股票就被股市一段暴打,受到了媳妇无情的嘲讽。痛定思痛,俺决定换一个思路:如何用深度强化学习来自动模拟炒股? 实验验证一下能否获得收益。
???? 监督学习与强化学习的区别
监督学习(如 LSTM)可以根据各种历史数据来预测未来的股票的价格,判断股票是涨还是跌,帮助人做决策。
而强化学习是机器学习的另一个分支,在决策的时候采取合适的行动 (Action) 使最后的奖励最大化。与监督学习预测未来的数值不同,强化学习根据输入的状态(如当日开盘价、收盘价等),输出系列动作(例如:买进、持有、卖出),使得最后的收益最大化,实现自动交易。
???? OpenAI Gym 股票交易环境
观测 Observation
策略网络观测的就是一只股票的各项参数,比如开盘价、收盘价、成交数量等。部分数值会是一个很大的数值,比如成交金额或者成交量,有可能百万、千万乃至更大,为了训练时网络收敛,观测的状态数据输入时,必须要进行归一化,变换到 [-1, 1]
的区间内。
参数名称 | 参数描述 | 说明 |
---|---|---|
date | 交易所行情日期 | 格式:YYYY-MM-DD |
code | 证券代码 | 格式:sh.600000。sh:上海,sz:深圳 |
open | 今开盘价格 | 精度:小数点后4位;单位:人民币元 |
high | 最高价 | 精度:小数点后4位;单位:人民币元 |
low | 最低价 | 精度:小数点后4位;单位:人民币元 |
close | 今收盘价 | 精度:小数点后4位;单位:人民币元 |
preclose | 昨日收盘价 | 精度:小数点后4位;单位:人民币元 |
volume | 成交数量 | 单位:股 |
amount | 成交金额 | 精度:小数点后4位;单位:人民币元 |
adjustflag | 复权状态 | 不复权、前复权、后复权 |
turn | 换手率 | 精度:小数点后6位;单位:% |
tradestatus | 交易状态 | 1:正常交易 0:停牌 |
pctChg | 涨跌幅(百分比) | 精度:小数点后6位 |
peTTM | 滚动市盈率 | 精度:小数点后6位 |
psTTM | 滚动市销率 | 精度:小数点后6位 |
pcfNcfTTM | 滚动市现率 | 精度:小数点后6位 |
pbMRQ | 市净率 | 精度:小数点后6位 |
动作 Action
假设交易共有买入、卖出和保持 3 种操作,定义动作(action
)为长度为 2 的数组
action[0]
为操作类型;action[1]
表示买入或卖出百分比;
动作类型 action[0]
|
说明 |
---|---|
1 |
买入 action[1]
|
2 |
卖出 action[1]
|
3 | 保持 |
注意,当动作类型 action[0] = 3
时,表示不买也不抛售股票,此时 action[1]
的值无实际意义,网络在训练过程中,Agent 会慢慢学习到这一信息。
奖励 Reward
奖励函数的设计,对强化学习的目标至关重要。在股票交易的环境下,最应该关心的就是当前的盈利情况,故用当前的利润作为奖励函数。即当前本金 + 股票价值 - 初始本金 = 利润
。
# profits
reward = self.net_worth - INITIAL_ACCOUNT_BALANCE
reward = 1 if reward > 0 else reward = -100
为了使网络更快学习到盈利的策略,当利润为负值时,给予网络一个较大的惩罚 (-100
)。
策略梯度
因为动作输出的数值是连续,因此使用基于策略梯度的优化算法,其中比较知名的是 PPO 算法,OpenAI 和许多文献已把 PPO 作为强化学习研究中首选的算法。PPO 优化算法 Python 实现参考 stable-baselines。
????️♀️ 模拟实验
环境安装
# 虚拟环境
virtualenv -p python3.6 venv
source ./venv/bin/activate
# 安装库依赖
pip install -r requirements.txt
股票数据获取
股票证券数据集来自于 baostock,一个免费、开源的证券数据平台,提供 Python API。
>> pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
数据获取代码参考 get_stock_data.py
>> python get_stock_data.py
将过去 20 多年的股票数据划分为训练集,和末尾 1 个月数据作为测试集,来验证强化学习策略的有效性。划分如下
1990-01-01 ~ 2019-11-29
|
2019-12-01 ~ 2019-12-31
|
---|---|
训练集 | 测试集 |
验证结果
单只股票
初始本金
10000
股票代码:
sh.600036
(招商银行)训练集:
stockdata/train/sh.600036.招商银行.csv
测试集:
stockdata/test/sh.600036.招商银行.csv
模拟操作
20
天,最终盈利约400
多只股票
选取 1002
只股票,进行训练,共计
盈利:
44.5%
不亏不赚:
46.5%
亏损:
9.0%
???? 最后
股票 Gym 环境主要参考 Stock-Trading-Environment,对观测状态、奖励函数和训练集做了修改。
俺完全是股票没入门的新手,难免存在错误,欢迎指正!
数据和方法皆来源于网络,无法保证有效性。
Just For Fun!
???? 参考资料
Y. Deng, F. Bao, Y. Kong, Z. Ren and Q. Dai, "Deep Direct Reinforcement Learning for Financial Signal Representation and Trading," in IEEE Transactions on Neural Networks and Learning Systems, vol. 28, no. 3, pp. 653-664, March 2017.
Yuqin Dai, Chris Wang, Iris Wang, Yilun Xu, "Reinforcement Learning for FX trading"
Chien Yi Huang. Financial trading as a game: A deep reinforcement learning approach. arXiv preprint arXiv:1807.02787, 2018.
Create custom gym environments from scratch — A stock market example
notadamking/Stock-Trading-Environment
Welcome to Stable Baselines docs! - RL Baselines Made Easy
源码
Github 源码地址:https://github.com/wangshub/RL-Stock
真实股市波诡云谲,文章仅供交流、学习和娱乐 ????????
如何用深度强化学习模拟炒股?相关推荐
- 如何用深度强化学习自动炒股
向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 深度学习技术在股票交易上的应用研究调查 http://gregharris.info/a-s ...
- 用于衍生品定价和动态对冲的多智能体深度强化学习和基于 GAN 的市场模拟
计算能力的进步使机器学习算法能够直接从大量数据中学习.深度强化学习是一种特别强大的方法,它使用代理通过与数据环境交互来学习.尽管许多交易员和投资经理依赖传统的统计和随机方法来为资产定价并制定交易和对冲 ...
- 深度强化学习(资源篇)(更新于2020.11.22)
理论 1种策略就能控制多类模型,华人大二学生提出RL泛化方法,LeCun认可转发 | ICML 2020 AlphaGo原来是这样运行的,一文详解多智能体强化学习的基础和应用 [DeepMind总结] ...
- 汪昭然:构建“元宇宙”和理论基础,让深度强化学习从虚拟走进现实
作者 | 陈彩娴 深度强化学习的故事,可以追溯到2015年: 当时,位于英国伦敦的一家小公司 DeepMind 在<Nature>上发表了一篇文章"Human-level con ...
- 【ICML2021】 9篇RL论文作者汪昭然:构建“元宇宙”和理论基础,让深度强化学习从虚拟走进现实...
深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 来源:转载自AI科技评论 作者 | 陈彩娴 深度强 ...
- 2019年伯克利大学 CS294-112《深度强化学习》第1讲:课程介绍和概览(笔记)
这里是CS294-112深度强化学习课程,我的名字叫Sergey Levine是这门课的授课老师,材料会放在课程主页:http://rail.eecs.berkeley.edu/deeprlcours ...
- 《深度强化学习实战》 第9章 多智能体
第 9 章 多智能体强化学习 为什么普通的Q-learning在多智能体设置中变得不行 如何在多智能体中处理"维度诅咒" 如何实现多智能体Q-learning模型来感知其他智能体 ...
- 读后感和机翻《人类因果迁移:深度强化学习的挑战》
研究朱松纯FPICU体系的第1篇文章 <Human Causal Transfer: Challenges for Deep Reinforcement Learning>CogSci 2 ...
- 首个深度强化学习AI,能控制核聚变,成功登上《Nature》
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 最近,DeepMind 开发出了世界上第一个深度强化学习 AI ,可以在模拟环境和真正的核聚变装置中实现对等离子体的自主控制. ...
最新文章
- 《Total Commander:万能文件管理器》——第8.3节.张学思版预装的插件
- pickle与cpickle的用法
- Android中ExpandableListView控件基本使用
- python花括号代替缩进_Python 为什么甩掉累赘的花括号,使用缩进来划分代码块?...
- dhtmlXTree 指南与实例(一)
- Bootstrap框架下按钮的禁用
- caffe的运行create_data.sh前对VOC2007图片格式的更改
- jsp页面 字体颜色 白色_CSS 文本字体颜色(CSS color)
- linux实现双网卡互通,linux 双网卡互通配置
- ArrayBlockingQueue源码分析
- JavaSE 帮助文档下载
- Java中文乱码问题如何解决?
- 《地理信息系统概论》课后习题全部答案_黄杏元
- linux http嗅探工具 httpry
- 平面广告创意设计4大原则
- SAN存储的配置与管理
- 口袋理财:“来了就是深圳人?”全国均价最高的房租了解一下
- 计算几何入门 1.6:凸包的构造——Graham Scan算法
- 编程c语言随机函数,C语言产生随机数需要了解的几个函数
- Python从小白到新手
热门文章
- java获取文件电脑路径
- electron 图标制作_使用Electron和Microsoft Bot Framework制作Skype Bot
- 51Sim-One V2X车联网标准与发展系列文章
- KingBaseES 报错Connection to X.X.X.X:54321 refused.Check that the hostname and port are correct and ..
- 【angular】浏览器低版本报错,Object.assign
- 阿里CEO张勇解读入股高鑫零售:婚后怎么过日子已经谈得很好了
- 校聘云:人力行业的数据安全守夜人
- 周鸿祎评互联网大佬编程能力:我可以排前三
- lex与yacc程序学习(3)——yacc源程序的结构yacc编译器的实践
- Nature:益生菌清除致病菌的机制