量化私募公司的多因子构建方案(附python代码)

原创文章第600篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。

昨天代码已经发布了,大家可以前往下载和更新:

代码发布:quantlabv5.3,可转债所有数据及双低、动量因子策略,单因子分析框架

基本数据的自动更新要提上日程。

这是多因子挖掘的基础工作——这个工作比较耗时,希望帮助大家完成,大家应该把时间花在有用的因子和策略构建上。

基础数据是指用于因子计算的价量数据、基本面数据,或者其他可获得的另类数据都可以。——当然它们本身也是因子。

而衍生数据是基于上述数据,通过因子表达式复合计算而来。比如双低=收盘价+转股溢价率*100,双低因子就是转债价格和转股溢价率的复合,当然转股溢价率本身又是一个复合因子。

我们首先需要构建基本数据,然后提供因子表达式即可。

价量因子数据准备最简单,只需要OHLCV就可以了,而且多数接口都可以一次性提供这样的日频数据。

因子存储有两种模式:宽表模式和单值模式

这是宽表模式,这是最传统的,写入快,就是对应一个dataframe,可以直接写入表中。

图片

下面是单值模式,自己做列存。

图片

  • 十分钟级一万个因子数据场景下,宽表模式的因子写入速度高于单值模型。

  • 因子数据查询方面,单值模式优于宽表模式。

  • 因子数据运维方面(包含新增因子、更新和删除因子),单值模式的效率远远优于宽表模式。

综合考虑,在高频多因子的场景下,合理设计存储方案的单值模式是最好的解决方案。

基础数据获取:

class Basic:def __init__(self, tb_name, service: DataService):self.tb_name = tb_nameself.service = servicedef build(self):df = self.service.get_basic_df()df['_id'] = df['symbol']mongo_utils.write_df(self.tb_name, df, drop_tb_if_exist=True)

这是一个通用的basic构建类,从接口处获得列表后,直接存入mongo,若表已存在,先drop掉。

我们仅保留近十年发行的转债即可:

class BondDataService(DataService):def get_basic_df(self):df = api_ts.get_bonds_df()df = df[df['list_date'] >= '2015-01-01']return df

图片

一共880支。

下面的代码构建时间序列,比如量价数据,基本面指标如PE/PB

class Quotes:def __init__(self, tb_basic, tb_quotes, service: DataService, symbol_col='symbol'):self.tb_basic = tb_basicself.tb_quotes = tb_quotesself.service = serviceself.symbol_col = symbol_coldef query_basic(self, query={}):return mongo_utils.get_db()[self.tb_basic].find(query)def query_start_date(self, symbol):start_date = ''items = mongo_utils.get_db()[self.tb_quotes].find({'symbol': symbol}).sort('date', pymongo.DESCENDING).limit(1)items = list(items)if len(items) == 0:print('不存在{}记录'.format(symbol))start_date = '20050101'else:start_date = items[0]['date']print('{}从{}更新'.format(symbol, start_date))return start_datedef build_symbol_quotes(self, symbol):start_date = self.query_start_date(symbol)return self.service.get_quotes_df(symbol, start_date)def build(self):items = self.query_basic()for item in tqdm(items):df = self.build_symbol_quotes(item[self.symbol_col])df['_id'] = df['symbol'] + '_' + df['date']mongo_utils.write_df(self.tb_quotes, df)

图片

2015年以来,上市的可转债历史日线数据——一共50多万条,量级并不大。

图片

关于星球的工作——帮忙一些同学以交易为生

600天,几乎是日更,而且需要尽量写出内容,写出干货,交付代码。

并不容易,这里有大量的业余时间,周末时间,陪孩子的时间。

但收获了星球会员的支持,收获了公众号粉丝的支持,这里非常感恩。

如果大家的支持,确实很难坚持下去。

从想做一件事,有时候也会遇到瓶颈,遇到不知道该往哪里走的时候。

但想到承诺与责任,幸运的是一直坚持到今天。

现在更有信心可以一直陪大家走下去。——官网(ailabx.com)和论坛(bbs.ailabx.com)也基本成型了,大家常见的问题、一些入门的教程,代码怎么用。后续包括一些量化学习的路径,电子书、研报都会发布上去。

群公告上也加上了代码新手入门的详细教程(几乎是手把手),希望对大家有所帮助。

吾日三省吾身

01

以交易为生,定一个小目标|10倍法则:思考与行动

——把你的目标设定为预期的十倍,然后付出十倍的思考和行动。

10倍目标一定让你非常兴奋,你觉得七年积累500万的可投资本金也就那样,不足以让你自由的话,那么5000万呢?

其次,10倍目标,按你当前的路径,做事的节奏几乎是无法完成的。

这时候,应该开创性地去想、去提升、去行动。

02

昨天翻开纳瓦尔宝典,说“人生的履历是由于痛苦和磨难构建的”。

有一点道理。

也许你有数不清的乘飞机的经历,但最“难以忘记”的一定是可能因为风雪误机,或者转机时,后续航班已经飞走的经历。

当你老了,回首往事的事情。你如何评价这一生?你后悔吗?

肯定,很多人都会说,当年大胆一点就好了。

人就活一次,没什么不了的。大胆一点,去体验,去折腾。

最大的恐惧,其实是恐惧本身。

不念过往,不惧未来,活在当下——不是说你要忘记过去,过去当然要反思,要总结,但不要后悔;未来也不是说不要规划,不未雨绸缪,而是不要提前担忧还没有发生的事情。——这样才能很好地活在当下,我们真正拥有的只有今天。

历史文章:

代码发布:quantlabv5.3,可转债所有数据及双低、动量因子策略,单因子分析框架

AI量化实验室——2024量化投资的星辰大海

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

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

相关文章

文件夹怎么设置密码?文件夹加密方法盘点

文件夹是电脑管理数据的重要工具,当我们将重要数据存储在文件夹中时,需要严格保护文件夹的数据安全,避免数据泄露。下面我们就来了解一下文件夹设置密码的方法。 文件夹加密 文件夹加密是指通过加密算法来加密保护文件夹,避免其他…

高级网页爬虫开发:Scrapy和BeautifulSoup的深度整合

引言 在互联网时代,数据的价值日益凸显。网页爬虫作为一种自动化获取网页内容的工具,广泛应用于数据挖掘、市场分析、内容聚合等领域。Scrapy是一个强大的网页爬虫框架,而BeautifulSoup则是一个灵活的HTML和XML文档解析库。本文将探讨如何将…

Kolla-Ansible的确是不支持CentOS-Stream系列产品了

看着OpenStack最新的 C 版本出来一段时间了,想尝个鲜、用Kolla-Ansible进行容器化部署,结果嘛。。。 根据实验结果,自OpenStack Bobcat版本开始,Kolla-Ansible就适合在CentOS系列产品上部署了,通过对 Bobcat和Caracal…

【docker】部署证书过期监控系统mouday/domain-admin

证书过期了再去部署证书容易被骂,就找了一个开源的证书过期系统来部署一下 过程 官方文档:https://domain-admin.readthedocs.io/zh-cn/latest/manual/install.html#docker 直接下载镜像是超时的,切换一下文档推荐的镜像源 新建docker配置…

模拟电子技术-实验四 二极管电路仿真

实验四 二极管电路仿真 一.实验类型 验证性实验 二.实验目的 1、验证二极管的单向导电性 2、验证二极管的稳压特性。 三.实验原理 二极管的单向导电性: 四、实验内容 1、二极管参数测试仿真实验 1)仪表仿真…

IndexError: index 0 is out of bounds for axis 1 with size 0

IndexError: index 0 is out of bounds for axis 1 with size 0 目录 IndexError: index 0 is out of bounds for axis 1 with size 0 【常见模块错误】 【解决方案】 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司&#…

物联网主机 E6000:智慧应急领域的创新力量

在当今瞬息万变的世界中,突发事件和紧急情况时有发生。如何迅速、准确地应对这些挑战,保障人民生命财产安全,成为了社会发展的重要课题。而物联网主机 E6000 的出现,为智慧应急领域带来了全新的解决方案。 一、强大的性能与功能 物…

ueditor跨域问题解决

ueditor解决跨域问题 问题:1.在引用vue-ueditor-wrap后,上传图片和附件出现跨域问题,前端引用了webpack去解决跨域问题,但仍然存在跨域问题? ueditor是百度的富文本,功能较多但资料不够全,因为…

模拟string(四)详解

目录 判断string大小关系bool operator(const string&s1,const string s2)代码 bool operator<(const string& s1, const string& s2)代码 bool operator<(const string& s1, const string& s2)代码 bool operator>(const string& s1, const …

算法板子:使用数组模拟队列——在队尾插入元素、在队头弹出元素、判断队列是否为空、查询队头元素

使用数组模拟时长这个样子&#xff1a; 代码&#xff1a; #include <iostream> using namespace std;const int N 1e5 10;// 数组q相当于队列; // hh是队头指针&#xff0c;始终指向队头 // tt是队尾指针&#xff0c;始终指向队尾 int q[N], hh, tt -1;// 队尾插入元…

代码随想录算法训练营第 25 天 | LeetCode491.递增子序列 LeetCode46.全排列 LeetCode47.全排列ii

代码随想录算法训练营 Day25代码随想录算法训练营第 25 天 | LeetCode491.递增子序列 LeetCode46.全排列 LeetCode47.全排列ii 目录 代码随想录算法训练营前言LeetCode491.递增子序列LeetCode46.全排列LeetCode47.全排列ii 一、LeetCode491.递增子序列1.题目链接2.思路3.题解 …

【算法】单向环形链表解决Josephu(约瑟夫)问题

应用场景 n 个小孩标号&#xff0c;逆时针站一圈。从 k 号开始&#xff0c;每一次从当前的小孩逆时针数 m 个&#xff0c;然后让最后这个小孩出列。不断循环上述过程&#xff0c;直到所有小孩出列&#xff0c;由此产生出一个队列编号。 提示 用一个不带头节点的循环链表来处…

FPGA开发——状态机的使用

一、概述 我们在使用FPGA进行开发的过程当中&#xff0c;实现一个东西用得最多的实现方法就是状态机的实现方法&#xff0c;用一句话总结就是万物皆可状态机&#xff0c;这和我们在学习Linux时常说的在Linux中万物都是文件差不多&#xff0c;这里就主要就是突出状态机的应用范…

技术实践—微前端技术应用

微前端是一种新兴的前端架构模式&#xff0c;是一种类似于微服务的架构&#xff0c;将微服务的理念应用于浏览器端。其核心理念是将一个大而单一的前端应用拆分为多个小型独立的微应用。这些微应用各自独立&#xff0c;可以由不同团队开发维护&#xff0c;部署&#xff0c;组合…

【调色板软件】免费、开源的调色板软件,焰火十二卷,提供了多种功能来生成一组调和色彩NO.108

本文一共:316 个字,需要阅读:1 分钟,更新时间:2024年7 月27日,部分内容具有时效性,如有失效请留言,阅读量:0 使用平台&#xff1a; Windows/macOS/CentOS/Ubuntu 由于我不是很懂&#xff0c;有需要的人自己摸索吧 资源来源于网络&#xff0c;免费分享仅供学习和测试使用&…

PostgreSQL 中如何重置序列值:将自增 ID 设定为特定值开始

我是从excel中将数据导入&#xff0c;然后再通过sql插入数据&#xff0c;就报错。 需要设置自增ID开始值 1、确定序列名称&#xff1a; 首先&#xff0c;需要找到与的增字段相关的序列名称。假设表名是 my_table 和自增字段是 id&#xff0c;可以使用以下查询来获取序列名称…

C 语言动态链表

线性结构->顺序存储->动态链表 一、理论部分 从起源中理解事物&#xff0c;就是从本质上理解事物。 -杜勒鲁奇 动态链表是通过结点&#xff08;Node&#xff09;的集合来非连续地存储数据&#xff0c;结点之间通过指针相互连接。 动态链表本身就是一种动态分配内存的…

【深度学习】LLaMA-Factory 大模型微调工具, 大模型GLM-4-9B Chat ,微调与部署 (2)

文章目录 数据准备chat评估模型导出模型部署总结 资料&#xff1a; https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://www.53ai.com/news/qianyanjishu/2015.html 代码拉取&#xff1a; git clone https://github.com/hiyouga/LLaMA-Factory.git cd …

万物互联,触手可及“2024南京智慧城市,物联网,大数据展会”

在金秋送爽的11月&#xff0c;南京这座历史悠久而又充满活力的城市&#xff0c;即将迎来一场科技盛宴——2024南京智慧城市、物联网、大数据展会。这不仅是一场技术的集会&#xff0c;更是未来生活蓝图的预览&#xff0c;它汇聚了全球顶尖的科技企业、创新者及行业精英&#xf…

【C++】循环结构-while语句

while 语句的语法格式&#xff1a; while (循环条件) {在满足循环条件下执行的操作} 注意要留有跳出循环的方式&#xff0c;避免死循环 1、不写 whlie (1)&#xff0c;写具体的循环条件 2、写while(1)&#xff0c;用 break 跳出循环 下面是一个实例 #include<iostream…