最近一段时间,å—åˆ°æ–°å† ç–«æƒ…çš„å½±å“,股市接连下跌,作为一棵å°ç™½èœå…¼å°éŸèœï¼Œç«Ÿç„¶äº§ç”Ÿäº†æŠ„底的大胆想法,拿出仅å˜çš„ä¸€ç‚¹ç§æˆ¿é’±æ¢å“ˆäº†ä¸€æŠŠã€‚
ç¬¬äºŒå¤©ï¼Œæš´è·Œï¼Œä¿ºåŠ ä»“
第三天,åˆè·Œï¼Œä¿ºåР仓
第三天,åˆè·Œï¼Œä¿ºåˆåР仓...
一番错误æ“作åŽï¼Œç»“果惨ä¸å¿ç¹ï¼Œç¬¬ä¸€æ¬¡ä¹°è‚¡ç¥¨å°±è¢«è‚¡å¸‚一段暴打,å—åˆ°äº†åª³å¦‡æ— æƒ…çš„å˜²è®½ã€‚ç—›å®šæ€ç—›ï¼Œä¿ºå†³å®šæ¢ä¸€ä¸ªæ€è·¯ï¼šå¦‚何用深度强化å¦ä¹ æ¥è‡ªåŠ¨æ¨¡æ‹Ÿç‚’è‚¡ï¼Ÿ 实验验è¯ä¸€ä¸‹èƒ½å¦èŽ·å¾—æ”¶ç›Šã€‚
监ç£å¦ä¹ (如 LSTM)å¯ä»¥æ ¹æ®å„ç§åކ岿•°æ®æ¥é¢„测未æ¥çš„è‚¡ç¥¨çš„ä»·æ ¼ï¼Œåˆ¤æ–股票是涨还是跌,帮助人åšå†³ç–。
而强化å¦ä¹ 是机器å¦ä¹ çš„å¦ä¸€ä¸ªåˆ†æ”¯ï¼Œåœ¨å†³ç–的时候采å–åˆé€‚的行动 (Action) 使最åŽçš„奖励最大化。与监ç£å¦ä¹ 预测未æ¥çš„æ•°å€¼ä¸åŒï¼Œå¼ºåŒ–å¦ä¹ æ ¹æ®è¾“入的状æ€ï¼ˆå¦‚å½“æ—¥å¼€ç›˜ä»·ã€æ”¶ç›˜ä»·ç‰ï¼‰ï¼Œè¾“å‡ºç³»åˆ—åŠ¨ä½œï¼ˆä¾‹å¦‚ï¼šä¹°è¿›ã€æŒæœ‰ã€å–出),使得最åŽçš„æ”¶ç›Šæœ€å¤§åŒ–,实现自动交易。
ç–略网络观测的就是一åªè‚¡ç¥¨çš„å„项傿•°ï¼Œæ¯”å¦‚å¼€ç›˜ä»·ã€æ”¶ç›˜ä»·ã€æˆäº¤æ•°é‡ç‰ã€‚部分数值会是一个很大的数值,比如æˆäº¤é‡‘颿ˆ–者æˆäº¤é‡ï¼Œæœ‰å¯èƒ½ç™¾ä¸‡ã€åƒä¸‡ä¹ƒè‡³æ›´å¤§ï¼Œä¸ºäº†è®ç»ƒæ—¶ç½‘ç»œæ”¶æ•›ï¼Œè§‚æµ‹çš„çŠ¶æ€æ•°æ®è¾“入时,必须è¦è¿›è¡Œå½’ä¸€åŒ–ï¼Œå˜æ¢åˆ° [-1, 1]
的区间内。
傿•°åç§° | 傿•°æè¿° | 说明 |
---|---|---|
date | 交易所行情日期 | æ ¼å¼ï¼šYYYY-MM-DD |
code | è¯åˆ¸ä»£ç | æ ¼å¼ï¼šsh.600000。sh:上海,sz:深圳 |
open | ä»Šå¼€ç›˜ä»·æ ¼ | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ4ä½ï¼›å•ä½ï¼šäººæ°‘å¸å…ƒ |
high | 最高价 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ4ä½ï¼›å•ä½ï¼šäººæ°‘å¸å…ƒ |
low | 最低价 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ4ä½ï¼›å•ä½ï¼šäººæ°‘å¸å…ƒ |
close | 今收盘价 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ4ä½ï¼›å•ä½ï¼šäººæ°‘å¸å…ƒ |
preclose | 昨日收盘价 | ç²¾åº¦ï¼šå°æ 8000 •°ç‚¹åŽ4ä½ï¼›å•ä½ï¼šäººæ°‘å¸å…ƒ |
volume | æˆäº¤æ•°é‡ | å•ä½ï¼šè‚¡ |
amount | æˆäº¤é‡‘é¢ | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ4ä½ï¼›å•ä½ï¼šäººæ°‘å¸å…ƒ |
adjustflag | 夿ƒçŠ¶æ€ | ä¸å¤æƒã€å‰å¤æƒã€åŽå¤æƒ |
turn | æ¢æ‰‹çއ | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ6ä½ï¼›å•ä½ï¼š% |
tradestatus | äº¤æ˜“çŠ¶æ€ | 1:æ£å¸¸äº¤æ˜“ 0:åœç‰Œ |
pctChg | 涨跌幅(百分比) | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ6ä½ |
peTTM | 滚动市盈率 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ6ä½ |
psTTM | 滚动市销率 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ6ä½ |
pcfNcfTTM | 滚动市现率 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ6ä½ |
pbMRQ | 市净率 | ç²¾åº¦ï¼šå°æ•°ç‚¹åŽ6ä½ |
å‡è®¾äº¤æ˜“共有买入ã€å–å‡ºå’Œä¿æŒ 3 ç§æ“作,定义动作(action
)为长度为 2 的数组
action[0]
为æ“作类型;action[1]
表示买入或å–出百分比;
动作类型 action[0] |
说明 |
---|---|
1 | ä¹°å…¥ action[1] |
2 | å–出 action[1] |
3 | ä¿æŒ |
注æ„,当动作类型 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%
- 股票 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