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

今天继续金融强化学习环境。

网上的金融学习环境不少,但都太过于“业余”,或者离像样的投资还差得太远。我一直觉得投资组合应该是必要的,不做投资组合,要控制回撤实在太难了,加上低相关多资产组合,对于投资而言,低层逻辑就是成立的。再加上一些规则也好,模型也罢,或者强化学习的加持,争取提升收益率。

所以,强化学习我也希望能够做投资组合。在finRL-meta里有投资组合分配的环境,今天结合咱们自己的AI量化平台,打造一个金融“投资组合管理”的学习环境。

from abc import ABCimport gym
import numpy as np
from gym import spacesclass FinanceEnv(gym.Env, ABC):def __init__(self, symbols, df_features, df_returns, initial_amount=1000000):super(FinanceEnv, self).__init__()# 正则化,和=1,长度就是组合里的证券数量self.action_space = spaces.Box(low=0, high=1, shape=(len(symbols),))self.observation_space = spaces.Box(low=-np.inf,high=np.inf,shape=(len(symbols), len(df_features.columns)), dtype=np.float64)#print(self.observation_space)self.dates = list(df_features.index)self.df_features = df_featuresself.df_returns = df_returnsself.initial_amount = initial_amountself.portfolio_value = initial_amountself.index = 0def reset(self):self.index = 0self.portfolio_value = self.initial_amountdf = self.df_features.loc[self.dates[0]]print(df.values.shape)return df.valuesdef step(self, actions):done = Falseif self.index >= len(self.dates) - 1:done = Trueprint(self.reward)return self.state, self.reward, done, {}self.index += 1weights = self.softmax_normalization(actions)df_return = np.array(self.df_returns.loc[self.dates[self.index]]['return'])port_return = sum(df_return * np.array(weights))self.portfolio_value = self.portfolio_value * (1 + port_return)df = self.df_features.loc[self.dates[self.index], :]self.state = df.valuesself.reward = self.portfolio_value * 1.0return self.state, self.reward, done, {}def softmax_normalization(self, actions):numerator = np.exp(actions)denominator = np.sum(np.exp(actions))softmax_output = numerator / denominatorreturn softmax_outputif __name__ == '__main__':from stable_baselines3.common.env_checker import check_envfrom stable_baselines3 import A2Cfrom engine.datafeed.dataloader import Dataloadersymbols = ['399006.SZ', '000300.SH']names = []fields = []features = []fields += ['Slope($close,20)']names += ['mom_slope']features += ['mom_slope']fields += ['KF($mom_slope)']names += ['kf_mom_slope']features += ['kf_mom_slope']fields += ["$close/Ref($close,1) - 1"]names += ['return']loader = Dataloader(symbols, names, fields, load_from_cache=True)data = loader.datadata = data[data.index > '2010-06-02']df_features = data[names]df_return = data[['return']]print(df_features)env = FinanceEnv(symbols, df_features, df_return)# check_env(env)model = A2C("MlpPolicy", env)model.learn(total_timesteps=100000)

1、继承自gym.Env。

2、定义动作与状态空间,都是gym.spaces 对象。

动作空间就是投资组合里的symbol数量,因为我们给出的是证券的仓位占比;而状态空间是symbol行*特征列——也就是所有证券的因子值。

3、重点实现step与reset两个函数

Step就是传入一个动作,并计算reward,返回新的state。

Reset是环境重置初始化。

4、step函数:

传入的参数actions是各标的的权重,按actions归一化为和为1的向量,计算新的投资组合收益率,计算新的组合价值。这里把组合市值作为环境的reward,当然我们还可以计算夏普比,最大回撤等。

代码和数据已经上传至星球,有任何问题请在星球群里讨论。

把backtrader改造成金融强化学习回测引擎

强化学习框架stable-baseline3以及pandas datareader

我的开源项目及知识星球

打造一个投资组合管理的金融强化学习环境相关推荐

  1. 把backtrader改造成金融强化学习回测引擎

    原创文章第119篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 继续强化学习应用于金融投资. 我们的AI量化平台,针对传统规则量化策略,进行了"积木式& ...

  2. 《强化学习周刊》第29期:Atari 深度强化学习的研究综述、金融强化学习的最新进展...

    No.29 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  3. OpenAI Gym 是一个优秀开发和比较强化学习算法的工具

    OpenAI Gym 是一个优秀开发和比较强化学习算法的工具. gym的核心接口是Env方法: reset(self):重置环境的状态,返回观察.     step(self, action):推进一 ...

  4. Life——一个简洁易用的强化学习库,基于pytorch

    简介 Life是一个基于pytorch实现的强化学习库,实现了多种强化学习算法. 项目地址:https://github.com/HanggeAi/Life 目前包含的强化学习算法 Sarsa mul ...

  5. 第四范式陈雨强:企业智能决策的下一代技术「强化学习 + 环境学习」

    机器之心报道 以下文章转载自机器之心 过去数年,以强化学习为代表的决策智能技术战胜人类玩家的新闻屡屡进入人们的视野,直观地展示了这种技术赋予 AI 的强大智能.同时,业界也开始思考,该技术能否像之前的 ...

  6. openai的gym baseline spiningup 深度强化学习环境安装 手撸gym环境demo

    按照spiningup我们学习DRL,链接 https://github.com/openai/gym https://github.com/openai/baselines 1. 安装anacond ...

  7. DeepMind开源强化学习环境,灵活可配置,计算资源有限的小型实验室也能用

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 想搞强化学习,但算力门槛让不少人望而却步. 想想DeepMind训练的通用棋类AI AlphaZero,碾压一票同类选手,但堆砌了实验室里5 ...

  8. 如何利用URLOS和云存储打造一个不惧怕宕机的网站环境

    现今大多数企业都具备开通网络业务的能力,不管是创建企业网站.企业在线服务.或者是交易平台.商城等等,这些技术都已经非常普及,只要投入相应的研发成本即可.所谓开国容易守国难,没有稳定在线能力,往往会让企 ...

  9. PyTorch强化学习实战(1)——强化学习环境配置与PyTorch基础

    PyTorch强化学习实战(1)--强化学习环境配置与PyTorch基础 0. 前言 1. 搭建 PyTorch 环境 2. OpenAI Gym简介与安装 3. 模拟 Atari 环境 4. 模拟 ...

最新文章

  1. 怎样学好C语言,一个成功人士的心得!
  2. Mac 系统如何实现挂载NTFS文件系统
  3. MyBatis常用配置解析-Properties标签
  4. Java8函数式编程(4)--collector(收集器)
  5. Hadoop MapReduce编程 API入门系列之wordcount版本2(六)
  6. cron 12点执行_Linux中得循环调度任务执行
  7. 根据图片地址得到文件流
  8. MATLAB函数fir1
  9. C++ - 派生类访问模板基类(templatized base class)命名
  10. 信道估计(一):信道估计基础知识
  11. Windows + Linux 双系统的安装
  12. 了解传统教育培训机构的痛点
  13. UE4-GamePlay-UPlayer
  14. 张勇卸任淘宝董事长,戴珊接任;苹果称不送充电器已节省55万吨矿石;Windows彻底告别SMB1传输协议|极客头条
  15. 大城市容不下肉体,小城市容不下灵魂
  16. 2021年江苏省淮安高考成绩查询,2021年江苏淮安高考时间:6月7日至9日
  17. Linux的网络配置及jdk的安装
  18. 视觉中国财报背后的版权门余波
  19. 【经验分享】Typora如何添加数学公式
  20. nz-zero Icon图标的基本使用

热门文章

  1. 老男孩Day18作业:后台用户管理
  2. vulnhub靶场,covfefe
  3. linux helloworld实验,实验一:写一个hello world小程序
  4. 远程管理软件(xshell)介绍和系统连接
  5. python学生信息管理系统-增删改查-根据姓名查询
  6. Linux RHEL7如何开机自动连接网络
  7. POJ 1833 排列 (STL)
  8. 集成电路————蓝牙芯片
  9. 系统控制空间SCS、系统控制模块SCB
  10. u-boot README翻译