一、关于FinRL
目前,深度强化学习(DRL)技术在游戏等领域已经取得了巨大的成功,同时在量化投资中的也取得了突破性进展,为了训练一个实用的DRL 交易agent,决定在哪里交易,以什么价格交易以及交易的数量,这是一个具有挑战性的问题,那么强化学习到底如何与量化交易进行结合呢?下图是一张强化学习在量化交易中的建模图:
市面上有很多研究机构和高校正在研究强化学习技术解决量化交易问题,其中比较知名的有“FinRL”,它是一个解决量化交易的开放源代码库,可为从业人员提供流水线式的策略开发的统一框架。
我们知道在强化学习中,智能体通过试错方式与环境进行持续交互学习,以取得最大累计回报。很荣幸, FinRL(有效地实现交易自动化)提供了有关定量金融中的深度强化学习的教育资源,为各种市场、基准财务任务(投资组合分配,加密货币交易,高频交易),实时交易等提供了统一的机器学习框架,下面是两篇FinRL团队已发表的相关论文:
那么FinRL库是怎么来的?有哪些内容组成,包含哪些模块呢?
这还得从强化学习的发展说起,下图是该团队汇总的强化学习到FinRL的发展过程,其中FinRL中包含了很多现有的强化学习算法的描述和实现。
一方面,FinRL库可帮助初学者了解量化金融并制定自己的股票交易策略。其允许用户简化自己的开发并轻松地与现有方案进行比较。在FinRL中,虚拟环境配置有股票市场数据集,智能体利用神经网络进行训练,并通过股票回测验证算法性能。此外,它包含了重要的市场摩擦,例如交易成本,市场流动性和投资者的风险规避程度。
另外一方面, FinRL具有完整性,动手指南和可重复性的特点,特别适合初学者:
在多个时间粒度级别上,FinRL模拟了各个股票市场的交易环境,包括NASDAQ-100,DJIA,S&P 500,HSI,SSE 50,和CSI 300。
FinRL采用模块化结构的分层架构。提供了自己开发的轻量级的DRL算法库ElegantRL(https://github.com/AI4Finance-LLC/ElegantRL),其中包含DDPG,TD3, SAC, PPO(GAE),DQN,DoubleDQN, DuelingDQN, D3QN,并支持用户自定义算法。
高度可扩展,FinRL保留了一套完整的用户导入界面。
最后,FinRL的成功得益于对环境的定义, FinRL量化交易环境中:状态空间、动作空间和奖励函数的定义。
我们知道解决一个问题最难的部分是建模部分,强化学习整体由环境、智能体和奖励函数三部分组成,那么对于量化交易来说,环境,智能体算法,奖励分别对应什么呢,下图对FinRL-Gym等环境,状态,动作和奖励进行定义和阐述。
了解了上面FinRL的组成部分,下面我们解释一下FinRL的工作流程。
训练-验证-测试(如下图所示)
二、整体结构图
前文解释了FinRL的组成部分,状态定义等内容,下图为大家呈现FinRL框架的实现整体包含了环境(FinRL-Gym)、算法和应用三部分,如下图所示:
在了解FinlRL组成框架的基础上,下面我们对FinRL核心部件ElegantRL进行介绍。
三、核心部件简介:ElegantRL
从第二部分的整体框架图中,我们看到了算法部分由ElegantRL组成,其中它包含了目前存在的绝多数算法demo,但ElegantRL有其自身的优势,具体如下:
图中Agent.py中的智能体使用Net.py中的网络,并且通过与Env.py中的环境进行交互在Run.py中进行了训练。
目前ElegantRL已经包含了常见的各类强化学习算法,最关键的是它相比于其他开源框架,具有以下方面的优势:
- 轻量级:核心代码少于1,000行。
- 高效:性能可与Ray RLlib媲美。
- 稳定:比稳定基准更稳定,支持最新的DRL算法,包括离散算法和连续算法。
四、FinRL贡献
一个好的框架一定满足简单易用,高效稳定可拓展的特性,那么FinRL框架有哪些贡献或者说优点呢?如下图所示:
五、视频详解
本视频是论文、开源框架作者对FinRL的一个解读,B站视频
以上是对FinRL的原理,整体构架以及核心模块的介绍,但泰山还得一步一步爬,很多同学最担心的代码实现我们还是双手奉上。
代码整体包含两部分:
- 第一部分(六),直接采用克隆仓库,运行代码。
- 第二部分(七),通过jupyter一步步实现强化学习量化交易过程,值得每一位学习者认真学习(强烈推荐)。
六、安装使用(Installation)
bin操作
$ sudo chmod -R 777 docker/bin
# build the container!
$ ./docker/bin/build_container.sh
# start notebook on port 8887!
$ ./docker/bin/start_notebook.sh
手动操作
$ docker build -f docker/Dockerfile -t finrl docker/
Start the container:
$ docker run -it --rm -v ${PWD}:/home -p 8888:8888 finrl
克隆仓库及安装
git clone https://github.com/AI4Finance-LLC/FinRL-Library.git
Install the unstable development version of FinRL:
pip install git+https://github.com/AI4Finance-LLC/FinRL-Library.gitev libgl1-mesa-g
导入代码
import pkg_resources
import pip
installedPackages = {pkg.key for pkg in pkg_resources.working_set}
required = {'yfinance', 'pandas', 'matplotlib', 'stockstats','stable-baselines','gym','tensorflow'}
missing = required - installedPackages
if missing:
!pip install yfinance
!pip install pandas
!pip install matplotlib
!pip install stockstats
!pip install gym
!pip install stable-baselines[mpi]
!pip install tensorflow==1.15.4
# import packages
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Agg')
import datetime
from finrl.config import config
from finrl.marketdata.yahoodownloader import YahooDownloader
from finrl.preprocessing.preprocessors import FeatureEngineer
from finrl.preprocessing.data import data_split
from finrl.env.environment import EnvSetup
from finrl.env.EnvMultipleStock_train import StockEnvTrain
from finrl.env.EnvMultipleStock_trade import StockEnvTrade
from finrl.model.models import DRLAgent
from finrl.trade.backtest import BackTestStats, BaselineStats, BackTestPlot
实验结果如下:
七、Jupyter论文复现,九步复现强化学习股票交易
(注:github代码见第九步后面)
7.1 Jupyter安装方法及过程
具体参考:https://www.jianshu.com/p/91365f343585
7.2 复现“Deep Reinforcement Learning for Stock Trading from Scratch: Multiple Stock Trading Using Ensemble Strategy”
第一步:安装依赖包
第二步:导入包
第三步:创建文件目录
第四步:下载数据
第五步:处理数据
第六步:设计强化学习环境
第七步:执行强化学习算法
第八步:测试算法策略
第九步:实验绘图
完整ipynb代码地址:
1.https://github.com/AI4Finance-LLC/FinRL-Library/blob/master/FinRL_stock_trading_NeurIPS_2018.ipynb