原创文章第114篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。

今天的核心工作是把强化学习环境整合进我们的AI量化平台中。

网上很多代码都把数据获取和预处理,都整合到强化学习的环境里,对于总体量化平台而言,这不利于代码的复用。我们之前已经实现好了dataloader。所以我们单独实现强化学习的gym即可。

01 金融强化学习的环境

一个强化学习的环境要定义四个东西:状态空间,动作空间,reward函数以及状态obseravtion。

状态空间与动作空间。

状态空间就是智能体可以观察到的环境的维度,对于金融强化学习环境而言,就是因子的维度(特征的维度)。

# 状态空间
class observation_space:def __init__(self, n):self.shape = (n,)# 动作空间
class action_space:def __init__(self, n):self.n = ndef seed(self, seed):passdef sample(self):return random.randint(0, self.n - 1)

动作空间是智能体针对观察到的状态,可以采用的动作的维度,比如“买入”和“平仓”就是两个动作。

环境初始化:

class FinanceEnv:def __init__(self, symbols, features, df_features):self.symbols = symbolsself.features = featuresself.df_features = df_featuresself.observation_space = observation_space(4)self.rows = self.observation_space.shape[0]  # 一次取多少行self.action_space = action_space(2)  # 动作维度self.min_accuracy = 0.475  # 最低准确率

Reset是对环境进行重置:

def _get_state(self):state = self.df_features[self.features].iloc[self.index - self.rows:self.index]return state.valuesdef reset(self):self.treward = 0self.accuracy = 0self.index = self.rows# 返回状态空间的行数,features列数的初始状态state = self._get_state()return state.values

两个主要的工作方法:reset和step。

其中step是环境最重要的功能。智能体通过观察环境状态,选择相应的动作,执行动作后,从环境得到反馈。同时会检查总体的收益,任务是否失败等。

def step(self, action):# 根据传入的动作,计算奖励rewardcorrect = action == self.df_features['label'].iloc[self.index]reward = 1 if correct else 0# 计算奖励值,准确率self.treward += rewardself.index += 1self.accuracy = self.treward / (self.index - self.rows)# index>=总长度,则退出if self.index >= len(self.df_features):done = Trueelif reward == 1:done = Falseelif (self.accuracy < self.min_accuracy andself.index > self.rows + 10):done = Trueelse:done = Falsestate = self._get_state()info = {}return state, reward, done, info

02 深度强化网络DQLAgent

from collections import deque
import randomimport numpy as np
from keras import Sequential
from keras.layers import Dense
from keras.optimizers import Adamclass DQLAgent:def __init__(self, env, gamma=0.95, hu=24, opt=Adam,lr=0.001, finish=False):self.env = envself.finish = finishself.epsilon = 1.0self.epsilon_min = 0.01self.epsilon_decay = 0.995self.gamma = gammaself.batch_size = 32self.max_treward = 0self.averages = list()self.memory = deque(maxlen=2000)self.osn = env.observation_space.shape[0]self.model = self._build_model(hu, opt, lr)def _build_model(self, hu, opt, lr):model = Sequential()model.add(Dense(hu, input_dim=self.osn,activation='relu'))model.add(Dense(hu, activation='relu'))model.add(Dense(self.env.action_space.n, activation='linear'))model.compile(loss='mse', optimizer=opt(lr=lr))return modeldef act(self, state):if random.random() <= self.epsilon:return self.env.action_space.sample()action = self.model.predict(state)[0]return np.argmax(action)def replay(self):batch = random.sample(self.memory, self.batch_size)for state, action, reward, next_state, done in batch:if not done:reward += self.gamma * np.amax(self.model.predict(next_state)[0])target = self.model.predict(state)target[0, action] = rewardself.model.fit(state, target, epochs=1,verbose=False)if self.epsilon > self.epsilon_min:self.epsilon *= self.epsilon_decaydef learn(self, episodes):trewards = []for e in range(1, episodes + 1):state = self.env.reset()state = np.reshape(state, [1, self.osn])for _ in range(5000):action = self.act(state)next_state, reward, done, info = self.env.step(action)next_state = np.reshape(next_state,[1, self.osn])self.memory.append([state, action, reward,next_state, done])state = next_stateif done:treward = _ + 1trewards.append(treward)av = sum(trewards[-25:]) / 25self.averages.append(av)self.max_treward = max(self.max_treward, treward)templ = 'episode: {:4d}/{} | treward: {:4d} | 'templ += 'av: {:6.1f} | max: {:4d}'print(templ.format(e, episodes, treward, av,self.max_treward), end='\r')breakif av > 195 and self.finish:print()breakif len(self.memory) > self.batch_size:self.replay()def test(self, episodes):trewards = []for e in range(1, episodes + 1):state = self.env.reset()for _ in range(5001):state = np.reshape(state, [1, self.osn])action = np.argmax(self.model.predict(state)[0])next_state, reward, done, info = self.env.step(action)state = next_stateif done:treward = _ + 1trewards.append(treward)print('episode: {:4d}/{} | treward: {:4d}'.format(e, episodes, treward), end='\r')breakreturn trewards

小结:

今天是走通了深度强化学习在金融上的应用,搭建了金融交易环境。

后续还需要针对性的优化。

代码就上传至星球。

ETF轮动+RSRS择时,加上卡曼滤波:年化48.41%,夏普比1.89

我的开源项目及知识星球

深度强化学习+金融投资的应用入门相关推荐

  1. 深度强化学习入门到精通--资料综述

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 人工智能是21世纪最激动人心的技术之一.人工智能,就是像人一样的智能,而人的智能包 ...

  2. 【强化学习】深度强化学习入门介绍

    深度强化学习是一种机器学习,其中智能体(Agent,也翻译作代理)通过执行操作(Action)和查看结果(Reward)来学习如何在环境中采取最佳的动作或策略. 自 2013 年Deep Q-Lear ...

  3. 深度强化学习入门介绍

    深度强化学习是一种机器学习,其中智能体(Agent,也翻译作代理)通过执行操作(Action)和查看结果(Reward)来学习如何在环境中采取最佳的动作或策略. 自 2013 年Deep Q-Lear ...

  4. 用深度强化学习玩atari游戏_(一)深度强化学习·入门从游戏开始

    1.在开始正式进入学习之前,有几个概念需要澄清,这样有利于我们对后续的学习有一个大致的框架感 监督型学习与无监督型学习 深度强化学习的范畴 监督型学习是基于已有的带有分类标签的数据集合,来拟合神经网络 ...

  5. 手把手教你入门深度强化学习(附链接代码)

    来源:机器之心 本文约2600字,建议阅读10分钟. GitHub 开源了一份深度强化学习的教程,总结了从 DQN 到彩虹模型的理论和代码实现. 深度强化学习在机器学习领域的热度一直很高.最近,Git ...

  6. 【入门教程】TensorFlow 2 模型:深度强化学习

    文 /  李锡涵,Google Developers Expert 本文节选自<简单粗暴 TensorFlow 2> 本文将介绍在 OpenAI 的 gym 环境下,使用 TensorFl ...

  7. 【大全】深度强化学习入门到精通

    聚焦AI干货,关注:决策智能与机器学习 人工智能是21世纪最激动人心的技术之一.人工智能,就是像人一样的智能,而人的智能包括感知.决策和认知(从直觉到推理.规划.意识等).其中,感知解决what,深度 ...

  8. 【2022·深度强化学习课程】深度强化学习极简入门与Pytorch实战

    课程名称:深度强化学习极简入门与Pytorch实战 课程内容:强化学习基础理论,Python和深度学习编程基础.深度强化学习理论与编程实战 课程地址:https://edu.csdn.net/cour ...

  9. 深度强化学习之迷宫DQN(NIPS 2015版)实践笔记——入门提升篇

    1. 背景 在「强化学习」(RL)领域,早期大部分成功的算法都依赖于人工提取特征,并结合线性的值函数或策略表示,算法的表现很大程度上取决于特征提取的质量,隐匿于机器学习中.近年来,「深度学习」(DL) ...

最新文章

  1. 彻底炸锅了!华为新天才少年出炉:武大94年博士生入选!任正非最新发声:江山代有才人出,不拘一格降人才!...
  2. telnet检查接收邮件命令
  3. node 之 ... 扩展运算符报错
  4. mysql字段获取当前日期格式_mysql数据库,获取当前日期及格式化
  5. 强化学习(六)---基于无模型强化学习方法
  6. 利用putty的pscp命令执行Linux服务器命令
  7. 计算机应用等级考试1,计算机等级考试一级试题
  8. Oracle EBS数据定义移植工具:FNDLOAD
  9. Linux epoll 笔记(高并发事件处理机制)
  10. 【其他】文件头注释、函数头注释、全局变量注释规范
  11. Friday the Thirteenth
  12. Win10错误代码0x80070541是怎么回事
  13. ajax以base64上传图片到django
  14. CocosBuilder学习之一:认识CocosBuilder
  15. 使用WinRAR 进行解压war文件。
  16. 【CAS】CAS原理
  17. EXCEL常见函数之逻辑函数
  18. 剑指Offer读书笔记(持续更新中)
  19. 这是用原声js编写的地址选择器,使用select编写的三联选择器
  20. Mencoder 介绍

热门文章

  1. chicken-and-egg problem的一些想法
  2. 移动OA系统,告别企业“粗放式管理”
  3. 读书笔记-哈佛大学极简经济学1.
  4. Android 上架腾讯应用宝
  5. learn python中文版 买_安装和准备 | Learn Python the Hard Way 中文版
  6. 通过网页api接口获取网页数据
  7. 福布斯:区块链建立可能彻底改变招聘行业
  8. tag untag_交换机应用之端口模式以及Tag、Untag
  9. Java练习:逢七过
  10. 【Oracle统计】按照月份周和自然周统计