最近一段时间,受到新冠疫情的影响,股市接连下跌,作为一棵小白菜兼小韭菜,竟然产生了抄底的大胆想法,拿出仅存的一点私房钱梭哈了一把。
第二天,暴跌,俺加仓
第三天,又跌,俺加仓
第三天,又跌,俺又加仓...
一番错误操作后,结果惨不忍睹,第一次买股票就被股市一段暴打,受到了媳妇无情的嘲讽。痛定思痛,俺决定换一个思路:如何用深度强化学习来自动模拟炒股? 实验验证一下能否获得收益。
监督学习(如 LSTM )可以根据各种历史数据来预测未来的股票的价格,判断股票是涨还是跌,帮助人做决策。
而强化学习是机器学习的另一个分支,在决策的时候采取合适的行动 (Action) 使最后的奖励最大化。与监督学习预测未来的数值不同,强化学习根据输入的状态(如当日开盘价、收盘价等),输出系列动作(例如:买进、持有、卖出),使得最后的收益最大化,实现自动交易。
策略网络观测的就是一只股票的各项参数,比如开盘价、收盘价、成交数量等。部分数值会是一个很大的数值,比如成交金额或者成交量,有可能百万、千万乃至更大,为了训练时网络收敛,观测的状态数据输入时,必须要进行归一化,变换到 [-1, 1]
的区间内。
假设交易共有买入、卖出和保持 3 种操作,定义动作(action
)为长度为 2 的数组
action[0]
为操作类型;action[1]
表示买入或卖出百分比;注意,当动作类型 action[0] = 3
时,表示不买也不抛售股票,此时 action[1]
的值无实际意义,网络在训练过程中,Agent 会慢慢学习到这一信息。
奖励函数的设计,对强化学习的目标至关重要。在股票交易的环境下,最应该关心的就是当前的盈利情况,故用当前的利润作为奖励函数。即当前本金 + 股票价值 - 初始本金 = 利润
。
# 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%
Github 源码地址: https://github.com/wangshub/RL-Stock
1
cxe2v 2020-03-28 10:46:56 +08:00 45
这是嫌赔得不够快啊
|
2
easternslope OP @cxe2v Just For Fun !
|
3
locoz 2020-03-28 10:48:40 +08:00 1
然后又成功地被股市暴打了一顿[狗头]
|
4
littleylv 2020-03-28 10:48:42 +08:00 4
|
5
iiduce 2020-03-28 10:49:16 +08:00
用什么交易软件运行自动交易策略?
|
6
8520ccc 2020-03-28 10:49:34 +08:00 2
试试 BTC 吧 这玩意儿盈亏都更快,你还可以开 100 倍杠杆(合约)!!!分分钟 100%盈亏!!!
|
7
easternslope OP @locoz 哈哈
|
8
deanguqiang 2020-03-28 10:53:01 +08:00 via iPhone 9
看来打的还不够疼🐶
|
9
easternslope OP @littleylv 仅供娱乐哈
|
10
tigerstudent 2020-03-28 10:53:16 +08:00 via Android 3
很多时候碰上股市连涨,就认为自己策略是对的,其实压根跟策略无关。。
|
11
moonlord 2020-03-28 10:53:27 +08:00 16
股市的涨跌和历史数据没啥关系,受公司经营、科技发展、经济规律、国家政策、自然灾害等等各种因素影响
你这就好比看彩票历史的出奖,去预测彩票一样,根本性上就是走偏了,不可实现的 https://github.com/MoonLord-LM |
12
tigerstudent 2020-03-28 10:55:20 +08:00 via Android
你选招商银行这个完全上升趋势的阶段,在哪个阶段买入会亏呢?
|
13
twl007 2020-03-28 10:55:22 +08:00 via iPhone
看来你被打的还是不够多……
|
14
ferock 2020-03-28 10:55:26 +08:00 via Android 1
印花税和交易费就是量化交易最大的成本。
还有 T + 1 的限制。 另外股市毫无规律可寻,这点盈利在一个内部消息产生的盈利面前根本不值一提。 量化交易最大的问题就是,是否能充分信任? |
15
easylee 2020-03-28 10:55:37 +08:00
别问,问就是 ALLIN 。
|
16
pcbl 2020-03-28 10:57:51 +08:00 via Android
预测股市还不如去预测彩票呢
|
17
douglas1997 2020-03-28 10:57:56 +08:00
有趣有趣,这两天研究一下。
|
18
qwertqwert12345 2020-03-28 11:00:12 +08:00
数据可视化看起来不错
|
19
ifxo 2020-03-28 11:01:23 +08:00
彩票 3d 可以看看,猜大小奇偶,75%的胜率不比这赚
|
20
yiqiao 2020-03-28 11:02:18 +08:00 10
中午一边吃鸡翅一边掏出手机看股票。
一个乞丐进来伸手乞讨,我给他一块鸡翅后继续看股票,乞丐啃着鸡翅没走,也在旁看着。 过了一会,乞丐悄悄说:长期均线金叉,KDJ 数值底部反复钝化,MACD 底背离,能量潮喇叭口扩大,这股就要涨了。 我很是惊诧问:这个你也懂? 乞丐说:不懂我能有今天? ---------------------------------------------------------------- 作者:大数据二三事 链接: https://www.zhihu.com/question/54542998/answer/227629492 - 大数据二三事的回答 - 知乎 |
21
jousca 2020-03-28 11:07:51 +08:00 2
其实第一张抄底图,在第一个下跌坑底抄了之后,拉起来一定要卖掉抄底的金额,留本金。继续等下个坑。大部分散户忘记这个操作。所以最后被套死。
这个操作掌握好,每次抄完就卖,反复做低成本。直到出现真正坑底(这过程按年计算),最后是不会亏钱的。 |
22
fs418082760 2020-03-28 11:16:14 +08:00
看了标题感觉像是白日做梦,当股市里的所有人都用这个系统以后,系统会出错吗?
|
23
rockyou12 2020-03-28 11:22:39 +08:00
基本面基本没法数值化,所以这些炼金方法肯定还不如让猴子来买股票。但 ai 做形态识别来选股可能还蛮靠谱的,至少能卖给股民不是
|
24
heart4lor 2020-03-28 11:29:42 +08:00
|
25
ytmsdy 2020-03-28 11:30:10 +08:00 via iPhone
一顿操作猛如虎,仔细看看二百五。
|
26
txydhr 2020-03-28 11:30:23 +08:00
@jousca 这种策略就是专门找出跌太多的股票,还是要以基本面的估值作为支持。一般这种策略大部分股票大部分时间都是小赚,然后某只股票或者某个时间点会一下亏很多。
|
27
warriortemple 2020-03-28 11:32:38 +08:00 via Android
最近也在学习,很有启发性
|
28
delectate 2020-03-28 11:33:45 +08:00
作为职业交易员,说真的,很喜欢这种自我沉醉的小韭菜。用各种迷信方法给自己催眠,简直是,越多越好哟~
|
29
cabing 2020-03-28 11:34:47 +08:00
厉害。
如果这个真的靠谱,所有学 ai 的都发财了:) |
30
kooze 2020-03-28 11:36:47 +08:00
深度学习彩票来的是不是会更快?
|
31
Kamen27 2020-03-28 11:37:23 +08:00 via Android
做资金策略预测啊,顺便搞个爬虫扒新闻,然后只做一个股票,监控主力资金,爬利好或者利空消息,感觉还是有机会的。
|
32
imzhazha 2020-03-28 11:38:15 +08:00 via Android
@fs418082760 #22 所有人用同一个策略,这个策略就会失效,然后钱会被不用这个策略的人赚走。
|
33
ybw 2020-03-28 11:41:09 +08:00 via Android 1
楼主是典型的手里握着锤子,看什么都是钉子。
|
34
miyazaki 2020-03-28 11:41:57 +08:00
哈哈哈,恭喜你迈出了第一步,根据詹姆斯西蒙斯的经验来讲按照一定的数学模型炒股是可行的,但他还说了另外一句话“一个好木匠并不是因为他有一个好的凿子”。
我也想说一句这个 baostock 对数据的影响很大,如果没有真正的数据的话,可能你迈错了步子,嘿嘿。 |
35
GreyYang 2020-03-28 11:43:50 +08:00 3
假设有一个必胜策略, 那这个策略最终会将蔓延到整个市场, 当整个市场都使用这种策略时, 它就会失效. 所以, 没有必胜策略.
曾几何时,我也做过一个一键自动化亏钱系统 :) |
37
GrayXu 2020-03-28 12:00:08 +08:00 via Android
想法太美好了,实际资本市场有太多其他因素,博弈等
|
38
barrelsoil 2020-03-28 12:00:57 +08:00 via Android
我是随机游走理论 + 预期理论追随者。。。
|
39
barrelsoil 2020-03-28 12:01:43 +08:00 via Android
@GreyYang 自动化亏钱系统,哈哈哈哈,笑死
|
41
lloovve 2020-03-28 12:16:36 +08:00 via iPhone
牛逼,可以用在 btc 上
|
42
AlohaV2 2020-03-28 12:18:25 +08:00 via iPhone
action 可以细化一下,变成一个-1 到 1 之间的卖出买入信号
|
43
rockyou 2020-03-28 12:19:46 +08:00 1
过拟合
|
45
delectate 2020-03-28 12:21:10 +08:00
@GreyYang 有没有想过,一键亏钱系统,能改动一下,反向操作。你多我空 你空我多
____________________________________ @barrelsoil 《散户靠自己分析 90%都亏钱,那如果我每次都反着买,会长期盈利吗?》 https://daily.zhihu.com/story/7778019?utm_camp 答案是,不能。 |
46
hoyixi 2020-03-28 12:21:45 +08:00
玩股票有两种, 一种是类似庄家,你的公司之类发行股票,你可以各种玩,各种收割;
一种是只买股票,说真的,这种,个人认为,纯跟大势罢了,大势是牛市,涨,你就赚,很多人这时候就飘了,以为自己是股神,是技术大拿,是财经奇才,有金融天赋;然而,大势熊,跌,现原形,不过这时候大多数”股神“还是无法醒悟。 |
47
renothing 2020-03-28 12:24:19 +08:00
自从上了量化交易,然后你就会发现涨跌都会赔钱了。
|
48
alphatoad 2020-03-28 12:30:56 +08:00
这个用 LSTM 真的不会 garbage in garbage out 吗?
|
49
wangleineo 2020-03-28 12:31:02 +08:00
可以再做个随机数版的,比比效果。
我猜随机数效果更好。 |
50
alpha2016 2020-03-28 12:32:56 +08:00
股市:一定不辜负你的,我们就需要你这样的人捧场
|
51
Cytion 2020-03-28 12:38:45 +08:00 via Android 1
全自动倾家荡产
|
52
Gcourage 2020-03-28 12:41:57 +08:00 via iPhone
像我们喜欢科技的,买纳斯达克 100 就好了吧
|
53
DAMNYOU 2020-03-28 12:47:21 +08:00
2015 年股灾之前有人就在吹量化交易,然鹅股灾一来,管你阿猫阿狗全部带走
|
54
wanguorui123 2020-03-28 12:48:55 +08:00 via iPhone
深度学习 炒股
|
55
hahaayaoyaoyao 2020-03-28 12:48:59 +08:00 via Android
@ybw 而且别人拿的是镰刀
|
56
Norie 2020-03-28 12:54:04 +08:00 via iPhone
精装韭菜?
|
57
csunny 2020-03-28 12:56:03 +08:00 2
直接把数据扔进模型,基本上死的很快。金融数据是噪音远远大于信号的,不像现在机器学习面对的那些数据。garbage in , garbage out
|
58
imkerberos 2020-03-28 12:58:51 +08:00
我发现很多业余做自动化交易的喜欢拿数据来模拟,而且模拟过程中居然没有模拟想卖卖不出,想买买不到的情况,也真是自信。
|
59
raymanr 2020-03-28 12:59:20 +08:00
@delectate 这种我没研究过, 但是类似的问题我研究过, 就是两个学渣考试, 一个学渣如果知道了另一个学渣的答案后去掉这些答案能否提升自己蒙中正确答案的可能? 当然最后结果还是不能.
|
60
raymanr 2020-03-28 13:00:54 +08:00
@wangleineo 如果拿历史数据做检验多半会过拟合, 收益惊人, 然后实盘亏得一塌糊涂
|
61
xuanbg 2020-03-28 13:01:21 +08:00 1
会深度学习的韭菜,他还是韭菜,并不能变成镰刀啊……
|
62
Skye347 2020-03-28 13:04:22 +08:00 via Android
不考虑概率上股市前后分布会不一样么
|
63
winglight2016 2020-03-28 13:06:11 +08:00
lz 学习速度很快呀,然而技术解决不了心理素质的问题,推荐先看看《交易心理分析》这本书。不克服心理问题,自动化交易只是加速了被暴打的频率而已。
|
64
YUyu101 2020-03-28 13:18:35 +08:00
我想起来有人用模型来预测赌马,看来股市比赌博还不靠谱
|
65
guanaco 2020-03-28 13:19:55 +08:00
遇到买不购足够数量,又不能全部不卖出怎么办? LZ 要是帮忙写公式怎么收费呢?
|
66
EPr2hh6LADQWqRVH 2020-03-28 13:24:48 +08:00
你这被打得不够
|
67
wangyzj 2020-03-28 13:29:17 +08:00
怎么能用计算机科学去预测社会学呢
|
68
honeyshine75 2020-03-28 13:39:51 +08:00
你不考虑加个 RNN ?以前的牌面不考虑一下?
|
69
L00kback 2020-03-28 13:40:27 +08:00
……没有专家知识的 AI 就是耍流氓。lz 使用的参数明显不是影响股市的主要因素,预测不准情理之中
|
71
jousca 2020-03-28 13:58:53 +08:00
@txydhr 下跌中去抓股票是错的,股票能一直跌成渣(比如典型例子中石油)。又不是期货能做空。股票只能做多,所以要去抓起头的股票(已经开始上拉的,比如 2016 年的五粮液这样的。),去抓它的回踩买入。最起码大趋势在上涨中,抓错了触发止损也会少很多。
|
72
jousca 2020-03-28 14:01:18 +08:00
智能 AI 的最大问题就是你们把周期看太短。大家都去抓短线,短线噪音太大。无厘头洗你几天,什么策略都会失效。
真正能看懂大局的,又不需要软件。 |
73
wdlth 2020-03-28 14:05:04 +08:00 2
深度学习能看扇贝什么时候游回来么?
|
74
miao666 2020-03-28 14:06:41 +08:00 via Android
@delectate 我也是新手,不买个股,无杠杠抄底指数可以吗?
比如最近沪深 300 估值 3500 点处于历史低位,买入 500k 打算到 4100 点卖出。 然后耐心等待下一个低位买入,这样风险大不? |
75
mostkia 2020-03-28 14:07:36 +08:00
精准亏损,一键赔光功能?
|
76
Yvette 2020-03-28 14:11:11 +08:00 via iPhone
建议楼主做成买彩票的版本可能赚钱的几率更高一些(狗头
|
77
minami 2020-03-28 14:23:02 +08:00
你以为你用了深度学习,能达到第二层,别人还在第一层。实际上别人在第五层,你在地下室
|
78
chanchan 2020-03-28 14:27:05 +08:00
真是有够好笑的呢
|
79
icedream728 2020-03-28 14:32:55 +08:00
难道股市的走势只要做技术分析就可以了?严重怀疑楼主是新手啊。
|
80
elfive 2020-03-28 14:38:33 +08:00 via iPhone
炒美股还行,炒 AB 股的话么……我只能说一句:感谢你为大家做出贡献。
|
81
ddzzhen 2020-03-28 15:04:19 +08:00 via Android
学的很直白,学习一下
|
82
starrycat 2020-03-28 15:08:29 +08:00 via Android
深度抄底(doge
|
83
QandA 2020-03-28 15:09:42 +08:00
如果参考股市中的技术流,在炒币或者美股去分析可能会好一些,A 股限制太多而且属于政策市
|
84
liuxyon 2020-03-28 15:12:01 +08:00
关键这次是股票历史上第一次
|
85
gimp 2020-03-28 15:12:35 +08:00
那个... 把 15 年的数据喂给模型算一下收益率,看看止跌效果怎么样。
|
86
www5070504 2020-03-28 15:35:29 +08:00
听说用股市数据训练出来的深度学习做出的决策和股市情况正好相反 亏到关机
|
87
mazyi 2020-03-28 15:42:46 +08:00 via iPhone
炒股是博弈,然后才是决策。
|
88
danmary61 2020-03-28 15:43:16 +08:00
我的天,这是想做第一茬"智能"韭菜啊,如何主动精准碰瓷镰刀?不管哪个国家的股市,多准备几条裤子。
这不是冷嘲热讽,技术不是用在这里的,或者想在这个领域使用技术之前,请了解一下世界的基本运转方式,入门就够了,不用多深入。 |
89
xcstream 2020-03-28 15:44:52 +08:00
可能猴子抛香蕉皮更靠谱些
|
90
Wassermelone 2020-03-28 15:54:08 +08:00
确实有用电脑做高频交易套利的 但是都是团队在做的。。。
起码应该是 金融民工+互联网民工+数学民工 对于多数人 买股票前 问问你自己 了不了解这个企业 你对此企业的长远看法? 了不了解企业所在行业 你对此行业的长远看法? 此行业的市盈率和企业的一段时间的市盈率 价格被市场高估还是低估了? 然后看一下企业财报 或者是去问问企业员工近期情况 什么?你要炒短 当我没说 |
91
CuVee 2020-03-28 15:56:33 +08:00
你这就是在扯淡,还 AI 炒股。
股市这东西,各种数据分析基本都是辅助而已 有一定作用,但是真没什么金融知识,纯看别人给的数据分析 稳稳的破产 真正炒股的人从不研究什么各种数据指标,就看个单 K 线图的,通过 K 线图也不是做什么数据分析,而是“简单一眼”的,看一看这只股票最近的趋势,考虑是否 用金融经济知识 深入研究下 这个公司 |
92
admirez 2020-03-28 15:58:37 +08:00
你看研报都比这破 AI 靠谱
|
93
shm7 2020-03-28 16:03:05 +08:00 via iPhone
所以讲只能被当工具使。因为只有工具的心。
|
94
MaxSoloware 2020-03-28 16:10:26 +08:00 1
怎么这么多人喷?楼主不是说了 Just for fun ,锻炼一下自己的编程技能不是很好吗?不管有没有成功都有学到东西(再说了可以先看预测正确率再考虑是否要买入)。
再说一个其他的,之前看了一本介绍人工智能的书,已经有华尔街的投行开始使用这种技术了。 |
95
foil2 2020-03-28 16:16:32 +08:00 via iPhone
强化学习 RL 应用场景在于训练和应用的环境不变,保证马尔可夫性。你在训练集学得的策略放在现实中就不能用了吧,现实中的炒股环境都是动态的,跟你训练所使用的环境根本不是一回事啊。
所以(^^)娱乐而已。 |
96
revalue 2020-03-28 16:25:37 +08:00
桥水基金量化交易了解一下,你这个“资讯获取”的专业水平太差,不适合炒股
|
97
susecjh 2020-03-28 16:31:39 +08:00
A 股毫无规律,能让你赔到怀疑人生
|
98
235777178 2020-03-28 16:40:26 +08:00
github 上有一个量化交易的。
其实,主要还是看宏观,能不能判断好走势。量化或者深度学习都只是帮你的工具。 |
99
hjw45611 2020-03-28 16:43:10 +08:00
代码只是根据以往的规律和现有的变量来得到结果,但真正股市是人与人斗
|
100
kvenux 2020-03-28 16:46:52 +08:00 2
强化 mdp 的基本假设是,agent 的动作要跟环境交互来影响环境的下一个状态。状态转移函数是跟 action 无关的函数(其实就是时间序列)。简单来说,明天某个股的开高低收和你今天的操作半毛钱关系没有,所以你用强化解这个 mdp 是没有意义的。
什么时候强化能解这个问题?当 agent 是个大机构,几万手下单能影响股价的那种,才真正能通过交互学这个 mdp 。同事问题也很多: 1. 强化需要 millions of interactions,总不能在实盘里训练个几十年?开发模拟器?模拟器都有了还训练强化干啥 2. 炒股实质是个超大规模的博弈问题,这个市场里的个体要采取的操作太难预测了,这种 non-stationary 不是现有人类知识储备能解决的 也许持仓百分比可以计入状态?也许控制仓位算一个合理的应用 另外,动作空间是啥,multi-discrete?还是离散和连续的混合空间?实现起来不容易啊 谨慎怀疑 lz 代码有 bug |