在量化中使用强化学习

  什么是强化学习?用一句话概括,就是自己和自己玩,然后不断积累经验。典型的例子就是阿尔法狗,通过不断的自己和自己下棋,来达到人类无法达到的高度。

    在量化领域,强化学习同样可以适用,下边我大概讲解一下思路(下文中使用期货量化进行说明)。

    在github上边,有很多的强化学习例子,大家可以去找找,下载,看一下代码,然后就可以发现,这些例子都是在玩游戏,简单或稍微复杂的电脑游戏。量化中使用强化学习同样也是这个思路,将量化当作一个游戏看待。

    如何当作游戏呢,实现gym包的接口即可(Gym 是 OpenAI 发布的用于开发和比较强化学习算法的工具包,里边包含了很多可交互的游戏)。

pip安装gym,然后打开core.py源码(位置如下)

就可以看到游戏接口了

具体看一下里边有那些要实现的方法:

1,根据指令执行一步

def step(self, action):

入参action就是指令,例如:持仓,清仓,观望等等。

    在方法内实现一个根据指令和行情数据进行买卖的模拟交易(模拟交易就不细展开了,保存好开仓价,开仓方向,开仓时间等信息,设置好滑点,费用,计算好平仓金额,记录好交易各项信息就可以)。

返回的是

return 下一步状态, 得分奖励, 是否终止游戏, {}
  • 下一步状态:返回下一步使用的数据([feature1,feature2,feature3,feature4......])
  • 得分奖励:如动作是清仓,返回盈亏金额即可,其他非清仓操作返回0
  • 是否终止游戏:判断是否到达模拟最后一天(或分钟),以及判断是否把所有钱亏完了
  • {}:无意义说明,这里不用添任何东西

2,初始化

def reset(self):

由于会跑很多轮,这里设置每轮开始进行初始化的数据,例如初始资金,初始持仓状态,初始各种统计,等等等等

3,图像引擎(不用,pass即可):

def render(self, mode='human'):

这个是真正电脑游戏展现游戏画面用的图像初始化,由于量化没啥可展示的,这个方法实现的时候里边pass即可,当然,要是有高大上的想法也可以在此实现。

4,关闭方法:

def close(self):

这里放置游戏结束后需要销毁,关闭的资源等,也可在此进行各种统计输出保存等操作。

5,随机数生成器(不用,pass即可):

def seed(self, seed=None):

某些游戏环境需要随机数生成,以确保多个生成器之间没有偶然的相关性。在量化游戏中不使用,pass即可。

OK,到这里所有需要实现的方法都有了,实现完成后就有了一个自己的量化游戏。


多说几句:

强化学习输出分为:离散动作 和 连续动作

  • 离散动作:输出0,1,2等数值,每个代表一种操作类型。量化所需即离散动作,例如0代表观望,1代表开仓,2代表平仓等
  • 连续动作:输出的是 连续的,高维的 数据。比如自动驾驶,肯定不能直接给出一个左转,右转,然后汽车直接猛打轮...... 要有不同转向角度,刹车油门轻重等等问题。

不同的输出,要选择的强化学习模型算法也不一样,这里推荐一个强化学习包:TF2RL,github地址:

https://github.com/keiohta/tf2rl

这是一个高度封装的强化学习包,使用tensorflow2来实现,调用起来异常简便,有了他,再也不用自己写一大堆实现代码了。不同动作选择强化学习模型可参见下表(tf2rl实现):

算法 离散动作 连续动作
VPG,PPO
DQN(includingDDQN,Prior. DQN,Duel. DQN,Distrib. DQN,Noisy DQN) -
DDPG(includingTD3,BiResDDPG) -
SAC
GAIL,GAIfO,VAIL(includingSpectral Normalization)

    注:最后一行的算法是“模仿学习”,通过模仿其他的强化学习操作来进行新的学习,很有意思的思路。

写好自己的交易游戏,几行代码调用配置好相应的算法模型,就可以跑起量化强化模型了。

发布了141 篇原创文章 · 获赞 17 · 访问量 8178

猜你喜欢

转载自blog.csdn.net/JKX_geek/article/details/104845677
今日推荐