金融强化学习与finRL开发包

news2025/4/13 17:51:42

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

01 一些感受

时代的一粒沙,落在每个人身上就是一座山。

这三年,对于这句话,相信很多人更能感同身受。

看历史风云变幻,轻轻松松一句——百年未有之大变局,仿佛宋元明清,直接就这么一路走来。之于每个个体,人生不过百年,说长不长,但隔离你14天试试?

很多事情,我们无法左右。翻开历史,满眼的荒唐事,只待后人评述。

改变能改变的,接受不能改变的,对不确定性,做好我们自己能做的准备。

翻开日记,回看过去一年,与当下相比,还是比较熟悉的人与事,但回看三年前的今天,很多纠结的事,纠结的人,都已改变。我们总是高估未来一年会发生的变化,而低估未来十年带来的改变。是的,十年太长,我们往前看三年,与我这个“持续行动”计划相对应,今天是原创文章第110篇,就是行动计划的第110天。

相信到了第1000天,疫情消散,人间皆安。大疫三年让我们对生活,对未来有了新的思考,如何面对可能类似的黑天鹅事件,你的财务准备,你的身体健康,我们能做的,应该做的是做好这样的准备。

“最重要的一件事”是什么——财富自由。试想,如果你的被动收入足以覆盖生活开支,那么意味着你不必绑定在某一个城市,某一个区域。那么,即便在当下的疫情,你可以去乡下,去低风险的地方生活。甚至是海外。这是关键。财务越稳健,则生活越自由,对抗不确定风险的能力越强。至少提升被动收入在你收入结构中的占比,越高越好。

投资理财的能力是很重要的一个技能,意味着你有能力让钱生钱。后续重点“面向盈利做量化”。两个方向,传统量化,基于ETF轮动来做,数据处理简单,而且可以做大类资产配置。强化学习(也含机器学习),做加密货币等。

今天导入一个强化学习和finRL框架。

02 强化学习与finRL

finRL是第一个金融强化学习的开源框架,项目目的是为了释放强化学习在金融交易中的巨大潜力。从生态上来看,它已经整合数百个金融市场数据源,前沿强化学习算法,金融应用(比如组合优化,加密货币,高频交易等),实盘,云部署等。

11.3.1.1 finRL安装

FinRL框架支持mac, linux和windows10环境,本文以windows10为例进行安装。

FinRL未提供从pip直接安装,可以从github来下载源码包(下载地址为:https://github.com/AI4Finance-Foundation/FinRL)。下载解压缩后,把当前开发环境(虚拟环境)里执行pip install . 即可安装。

11.3.2 源码结构

FinRL是轻量级的,核心代码不超过800行。如下是源码结构,主要就是applications, agents和meta三个子文件夹。

Meta文件夹包含的功能是构建量化环境以及金融数据处理。

Agents文件夹包含的功能是前沿的强化学习模型。支持三个强化学习包的算法,elegantrl(finRL官方自己开发的),rllib和stablebaseline3。

Applications文件夹实现了具体的应用,比如加密货币、组合管理等。

强化学习应用于金融交易,比机器学习会“复杂”一些。强化学习需要一个类似gym的交易环境,然后应用强化学习模型——算法模型这一块业内有成熟的baseline,我们了解其学后的原理,能熟练使用,会调优参数即可,这一方面与传统机器学习类似,我们不需要从零开始是实现一次gdbt算法,一般人不太可能比专业团队做得更好。

数据准备与数据预处理,无论是传统规则策略开发,机器学习量化,还是强化学习都类似,这一部分是可以统一的。

数据输入的格式由模型决定,这里有一定的适配工作。

模型输入之后的回测与结果解读又是类似的流程,同样可以复用。

在选择模型上,我们重点关注易用性和效率。易用性自然不必说,我们核心关注的是策略,不应该在模型本身花费太多的精力。深度学习效率也非常重要,否则跑一次模型要等半天,也非常影响策略调试。

在强化学习的算法选择上,在elegantRL,rllib和stablebaseline3供选择。FinRL起步之初就是封装了sb3,后来又整合了rllib,进而自主研发了eletangRL。

StableBaseline3是pytorch版本的强化学习算法库,更新维护很活跃,文档详实,案例丰富,但它是一个通用的版本,并非为金融而定制。

finRL官方认为自己的elegantRL(中文名:小雅)比sb3要稳定得多,效率也更高,同时finRL生态本身就是为了交易而生。

ElegantRL的作者对各个框架的盘点:

伯克利的RLlib ray:它是优点最多的DRL开源库,实现了多种主流DRL算法,支持分布式训练,支持三个深度学习框架(TensorFlow1、PyTorch,TensorFlow2)。这个库也有缺点是:代码量多,上手难,耦合度高,难改,安装时存在大量依赖。

OpenAI的baselines:很早开源的DRL库,训练很慢,且不稳定

hill 开发的 stable baselines:baselines的不稳定催生了它。它使用了旧风格的TensorFlow 1,可读性较差,训练依然不够稳定

stable baselines 3:TensorFlow 1的不方便,催生了基于PyTorch的stable baselines 3。可惜代码是照着 TF1 直译的,沿用了 baselines的旧框架,不适应 2018年后的DRL算法。直到2021年3月,它还不支持多GPU训练。

”莫烦“的教学代码:几年前中文社区只有他的教学代码,牺牲性能换来了可读性:训练只需几秒钟的入门级环境,他的代码需要训练十几分钟;无法在稍高难度的环境下训练。它为推广强化学习做出了贡献,但社区需要好用的DRL库。

ElegantRL特点:

轻量:代码量低于1000行。

高效:性能向Ray RLlib靠拢。

稳定:比Stable Baseline 3更加稳定。

后续我们重点使用elegantRL库的算法,把它应用于加密货币的高频交易之中。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣(LeetCode)21. 合并两个有序链表(C++)

迭代 同时遍历两个链表 , 当前结点值较小的结点插入新的链表尾部。直到有一个链表为空 , 我们将另一个非空链表插入新的链表尾部。 提示 : 使用哑结点,避免特判头结点。二路归并思想应用于链表~ class Solution { public:ListNode* mergeT…

gRPC gateway - Http Restful API gRPC 协议转换

gRPC gateway - http restful gRPC gateway 介绍 gRPC-Gateway 是protocalBufffer的编译插件,根据protobuf的服务定义自动生成反向代理服务器,并将Restful Http API 转化为 gRPC通信协议。反向代理服务器根据 google.api.http 注解生成。 gRPC底层是使用HTTP2 协…

mybatis # $

总结: # 你传入的变量类型会被保留 $ 本质就是拼接 不会考虑拼串的 $ 情况下 参数是整数 跟参数是字符串 字符串情况: 缺少’’ 相当于字符串拼接 ”select * from t_user where username “ “张三” ”select * from t_user where username 张三&…

java 容器

java 容器 数组 数组的扩容问题 ArrayList 的默认初始化容量为0,首次添加元素时,创建容量为(10 || 添加集合大小) ,以后每次扩容的话,为当前容量的1.5倍 public ArrayList() {/*初始化容量大小为0private static final Object…

CEAC之《计算机应用助理工程师》2

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1组合框的常用属性有 ____________ 。 A、Index B、Text C、Caption D、ListCountA,B,D2在…

ES6 入门教程 16 Reflect 16.2 静态方法 16.3 实例:使用 Proxy 实现观察者模式

ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录ES6 入门教程16 Reflect16.2 静态方法16.2.1 Reflect.get(target, name, receiver)16.2.2 Reflect.set(target, name, value, receiver)1…

数据结构之:数组

数组初体验之数组中重复的数字 数组 : 有限个 相同类型的变量 组成的有序集合 int[] arr; int arr[]; // 静态初始化 String[] strArr {"和平精英","王者荣耀","开心消消乐","欢乐斗地主"}; // 动态初始化 String[] strAr…

自学 TypeScript 第三天 使用webpack打包 TS 代码

安装: 首先第一步,我们要初始化我们项目,在目录下输入 npm init 接下来,我们的安装几个工具 npm i -D webpack webpack-cli typescript ts-loader -D 意思是 开发依赖,也就是我们现在所安装的依赖都是开发依赖&am…

知乎 日报

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言评论界面首页cell的小标题的文字显示下拉刷新前言 这周完成了评论内容,改了一些小bug。收藏界面正在加油,FMDB库目前不是很理解 评论界面…

【C++初阶】三、类和对象(中)

在上一篇类和对象中,我们初步了解了类和对象的基本概念,知道了什么是类,接下来一起看看类和对象的具体细节和实现吧。(以日期类举例) 文章目录类和对象【中】1.类的6个默认成员函数2. 构造函数2.1 构造函数定义2.2 构造…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.16 SpringBoot 整合 ES 客户端操作

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.16 SpringBoot 整合 ES 客户端操作4.16.1 环境准备…

[附源码]java毕业设计停车场收费管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

DP入门(一)

前言:由于作者经常卡力扣周赛最后一题的dp,因此决定痛改前非,从头做人,争取下次能做出最后一道dp ak周赛!呜呜呜加油~~ 因此 这个系列的文章不会教 dp ,只会讲刷题思路,目前的计划是先更 lc 的题…

[Spring Cloud] RestTemplate跨进程调用

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

【k8s】5、资源管理命令-声明式

文章目录一、 yaml和json介绍1、yuml语言介绍2、k8s支持的文件格式3、yaml和json的主要区别二、声明式对象管理1、命令式对象配置2、声明式对象配置3、声明式对象管理命令介绍三、编写资源配置清单1、 编写yaml文件2、 启动并查看资源3、创建service服务对外提供访问测试4、创建…

MySQL介绍

MySQL数据库最初是由瑞典MySQL AB公司开发,2008年1月16号被Sun公司收购。2009年,SUN又被Oracle收购。MySQL是目前IT行业最流行的开放源代码的数据库管理系统,同时它也是一个支持多线程高并发多用户的关系型数据库管理系统。MySQL之所以受到业…

基于51单片机的舞蹈机器人四路步进电机控制仿真

资料编号:091 下面是相关功能视频演示: 91-基于51单片机的舞蹈机器人四路步进电机控制仿真(源码仿真全套资料)功能介绍:通过51单片机控制4个步进电机旋转,模拟出机器人的四肢动作,全套资料齐全…

ES6 入门教程 17 Promise 对象 17.2 基本用法

ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录ES6 入门教程17 Promise 对象17.2 基本用法17 Promise 对象 17.2 基本用法 ES6 规定,Promise对象是一个构造函数&#xff0…

【Java高级】一篇文章带你搞懂线程

目录 | 线程概述 | 线程创建 方式一:继承 Thread 类 方式二:实现 Runnable 接口 一些小细节 方式三:实现 Callable 接口(JDK1.8) | 线程生命周期 生命周期概述 [获取线程信息] 方法 set/getName current [运…

ArcGIS绘制北半球俯视投影地图

做全球碳水循环,植被变化,极端气候相关研究的同学都知道。北半球是核心,因为北半球的核心区域(东亚湿润区,中亚干旱半干旱,青藏高原,阿拉伯半岛,非洲北部沙漠以及美国西部等等核心区): 对于北半球的展示一般采用下面的图: 那么该如何做呢? 熟悉地图学的同学都知道…