Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

wangshub项目作者

是时候抄底了?强化学习炒股,走向人生巅峰(或倾家荡产)

2020 年的股票市场常人难以预测,那么人工智能可以做到吗?

受新冠疫情和油价下跌的影响,近期的全球股市就像过山车一样刺激。

3 月上旬,美国道琼斯指数出现了下跌熔断。伯克希尔哈撒韦 CEO 巴菲特的言论让世人惊恐。

「如果你坚持足够长的时间,你将在市场中目睹所有可能的情况,」3 月 8 日,沃伦·巴菲特在接受采访时说道。「但这可能是我 89 年人生以来第一次经历这样的事。但如果一个市场是即时运行的,它就会对新闻产生很大反应。」

在当时,巴菲特认为市场还没有出现 2008 年或是 1987 年那样的恐慌,但今年的三月对于所有投资者来说注定是一段前所未有的经历——很快,美股又经历了多次下跌熔断。

前所未有的情况或许也意味着绝无仅有的机会,对于想要致富的我们来说,大胆抄底成为了一种选择。

但剧情发展到这里一般是这样:一番错误操作后,结果惨不忍睹,第一次买股票就被股市一段暴打。

痛定思痛,我们应该换一个思路:既然都是机器学习开发者,为什么不用深度强化学习来自动模拟炒股?实验验证一下能否获得收益。

已有人对此进行了尝试。该项目的作者是一名来自哈尔滨工业大学的在读博士,同时也是一家创业公司的合伙人。

作者之前还做过很多有趣的项目,比如「微信跳一跳 Python 辅助」,以及 Python 抖音机器人,用它在抖音上找到漂亮的小姐姐(就真的还挺实用的)。

作者主页:https://github.com/wangshub

效果展示

以 1990 年年初到去年 11 月底的股票数据作为训练集,去年 12 月股票数据作为测试集。作者先用单只股票试验了一下,初始本金为 10000 元人民币(股票代码 sh.600036,招商银行),进行了为期 20 天的模拟操作,经历了一番起伏,最终盈利 400 元。

在进行单只股票试验之后,作者选取 1002 只股票进行训练,结果显示盈利率为 44.5%,不亏不赚率为 46.5%,亏损率为 9.0%。仅从盈亏率来看,效果还是不错的。

当然,作者也说了,「数据和方法皆来源于网络,无法保证有效性」,只能说是辅助决策的方法吧,Just For Fun,如果产生了什么后果,还是得自己默默承受……机器之心友情提示,股市有风险,投资需谨慎。盲目乱投资,亲人两行泪。

项目实测

所以说如何使用深度强化学习自动炒股呢?首先我们将本项目克隆到本地,并安装相关依赖环境:

!git clone https://github.com/wangshub/RL-Stock
import os
os.chdir('RL-Stock')
!pip install -r requirements.txt

项目作者使用证券宝来获取股票证券交易数据。证券宝是一个免费、开源的证券数据平台,里面包含大量准确、完整的证券历史行情数据、上市公司财务数据,用户可通过通过 python API 获取其数据信息。安装方式如下:

!pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn (http://pypi.tuna.tsinghua.edu.cn/)

之后使用作者提供的数据获取代码来获取股票数据:

!python get_stock_data.py

由于数据集相对较大,涵盖了过去将近 30 年的股票证券交易数据,所以这一过程相对比较耗时。

最后,运行项目中的 main.py 即可对该股票交易环境进行训练或测试。测试效果如下:

以下为本项目核心代码:

import pandas as pd
from stable_baselines.common.policies import MlpPolicy
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import PPO2
from rlenv.StockTradingEnv0 import StockTradingEnv

def stock_trade(stock_file):
    day_profits = []
    df = pd.read_csv(stock_file)
    df = df.sort_values('date')

    # The algorithms require a vectorized environment to run
    env = DummyVecEnv([lambda: StockTradingEnv(df)])

    model = PPO2(MlpPolicy, env, verbose=0, tensorboard_log='./log')
    model.learn(total_timesteps=int(1e4))

    df_test = pd.read_csv(stock_file.replace('train', 'test'))

    env = DummyVecEnv([lambda: StockTradingEnv(df_test)])
    obs = env.reset()
    for i in range(len(df_test) - 1):
        action, _states = model.predict(obs)
        obs, rewards, done, info = env.step(action)
        profit = env.render()
        day_profits.append(profit)
        if done:
            break
    return day_profits

从以上代码可以看到,作者首先使用 pandas 读取股票证券交易数据,之后将其输入 RL 环境中。这里使用的股票交易的 Gym 环境参考了 Stock-Trading-Environment 这一开源实现,我们仅需将获取到的数据输入该环境中,即能得到可直接用于 RL 进行训练的标准 Gym 环境 API。

项目使用的 RL 策略调用了 stable-baselines 中的 PPO 实现。stable-baselines 使用 TensorFlow 作为后端,提供了一系列优质的 RL 算法实现。使用时仅需将 RL 环境传入其中,再调用 model.learn() 即可开始对 agent 进行训练。无论是科研还是工程用途都不失为一个不错的选择。

stable-baselines 官方主页:

https://stable-baselines.readthedocs.io/en/master/index.html

PPO 简介

PPO 算法的全称是 Proximal Policy Optimization(近端策略优化),是 OpenAI 在 2017 年发布的一种强化学习算法。该算法的实现和调参十分简单,在强化学习中的表现优于当时所有顶尖算法的水平,因此被 OpenAI 作为强化学习研究中的首选算法。

PPO 是策略梯度的一种改进算法,可以让我们在复杂和具有挑战性的环境中训练 AI 策略。策略梯度算法对步长十分敏感,但是又难以选择合适的步长,在训练过程中新旧策略的的变化差异如果过大则不利于学习。

PPO 提出了新的目标函数,可以在多个训练步骤中实现小批量的更新,解决了策略梯度算法中步长难以确定的问题。其实 TRPO 也是为了解决这个问题,但是相比之下,PPO 算法更容易求解。

PPO 的目标函数如下:

PPO 算法在强化学习中有着广泛的应用,如 OpenAI 的 Dota2 智能体、腾讯王者荣耀智能体绝悟等都使用了这项技术。

可以看到,本项目并不涉及很深奥的数学知识,使用的训练环境与 RL 算法也均为其他开源实现,核心代码不超过 10 行,却有着不错的效果。在工程实现上,有的时候一个好的创意或许要比复杂的代码实现重要。


工程股票价格预测深度强化学习股市强化学习
2
相关数据
深度强化学习技术

强化学习(Reinforcement Learning)是主体(agent)通过与周围环境的交互来进行学习。强化学习主体(RL agent)每采取一次动作(action)就会得到一个相应的数值奖励(numerical reward),这个奖励表示此次动作的好坏。通过与环境的交互,综合考虑过去的经验(exploitation)和未知的探索(exploration),强化学习主体通过试错的方式(trial and error)学会如何采取下一步的动作,而无需人类显性地告诉它该采取哪个动作。强化学习主体的目标是学习通过执行一系列的动作来最大化累积的奖励(accumulated reward)。 一般来说,真实世界中的强化学习问题包括巨大的状态空间(state spaces)和动作空间(action spaces),传统的强化学习方法会受限于维数灾难(curse of dimensionality)。借助于深度学习中的神经网络,强化学习主体可以直接从原始输入数据(如游戏图像)中提取和学习特征知识,然后根据提取出的特征信息再利用传统的强化学习算法(如TD Learning,SARSA,Q-Learnin)学习控制策略(如游戏策略),而无需人工提取或启发式学习特征。这种结合了深度学习的强化学习方法称为深度强化学习。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

腾讯机构

腾讯,1998年11月诞生于中国深圳,是一家以互联网为基础的科技与文化公司。我们的使命是“通过互联网服务提升人类生活品质”。腾讯秉承着 “一切以用户价值为依归”的经营理念,为亿万网民提供优质的互联网综合服务。 腾讯的战略目标是“连接一切”,我们长期致力于社交平台与数字内容两大核心业务:一方面通过微信与QQ等社交平台,实现人与人、服务及设备的智慧连接;另一方面为数以亿计的用户提供优质的新闻、视频、游戏、音乐、文学、动漫、影业等数字内容产品及相关服务。我们还积极推动金融科技的发展,通过普及移动支付等技术能力,为智慧交通、智慧零售、智慧城市等领域提供有力支持。

http://www.tencent.com/
相关技术
机器之心机构

机器之心,成立于2014年,是国内最具影响力、最专业、唯一用于国际品牌的人工智能信息服务与产业服务平台。目前机器之心已经建立起涵盖媒体、数据、活动、研究及咨询、线下物理空间于一体的业务体系,为各类人工智能从业者提供综合信息服务和产业服务。

https://www.jiqizhixin.com/
合合信息机构
推荐文章
暂无评论
暂无评论~