量化私募公司的多因子构建方案(附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,一经查实,立即删除!

相关文章

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

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

人工蜂鸟算法(Artificial Hummingbird Algorithm,AHA)及其Python和MATLAB实现

### 背景 人工蜂鸟算法(Artificial Hummingbird Algorithm,AHA)是一种新兴的群体智能优化算法,受到自然界中蜂鸟觅食行为的启发。蜂鸟以其独特的飞行能力和有效的觅食策略而闻名,它们能够在不同的环境中快速找到食物来…

uniapp+vue2 实现Android设备禁止截屏和录屏

开发背景:项目开发需要实现安卓和ios设备禁止用户截屏录屏,目前只找到一个安卓禁用截屏录屏功能的方法,具体实现效果只在个人手机上试用过(华为nova9) 项目架构:uniappvue2版本 代码: // #ifde…

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

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

hive中分区与分桶的区别

过去,在学习hive的过程中学习过分桶与分区。但是,却未曾将分区与分桶做详细比较。今天,回顾skew join时涉及到了分桶这一概念,一时间无法区分出分区与分桶的区别。查阅资料,特地记录下来。 一、Hive分区 1.分区一般是…

正则化的定义

正则化 正则化是一种在机器学习中用于防止过拟合的技术。其基本思想是在模型复杂度增加的同时,通过惩罚部分参数,使得模型对训练数据的拟合变得更平滑,提高泛化能力。 优点: 防止过拟合:减少模型对训练数据噪声的敏…

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科班出身,就职于医疗科技公司&#…

Qt/C++音视频开发79-采集websocket视频流/打开ws开头的地址/音视频同步/保存到MP4文件/视频回放

一、前言 随着音视频的爆发式的增长,各种推拉流应用场景应运而生,基本上都要求各个端都能查看实时视频流,比如PC端、手机端、网页端,在网页端用websocket来接收并解码实时视频流显示,是一个非常常规的场景,单纯的http-flv模式受限于最大6个通道同时显示,一般会选择ws-f…

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

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

ueditor跨域问题解决

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

unity基础问题

1.一个列表中的UI有放大效果,用什么实现? 缩放,Layout组件可以勾选使用子级缩放,这样缩放之后也能保持间距 2.UGUI事件传递机制的冒泡机制是怎样的 事件系统从内向外遍历UI层次结构,通知父级UI元素有关该事件的信息。类…

模拟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 …

人工智能时代的伦理与隐私保护:挑战与应对

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;其在社会各个领域的广泛应用也带来了数据隐私侵犯、信息茧房等诸多伦理风险。尽管国外已出台系列法规来规范AI的使用&#xff0c;保护个人隐私和数据安全&#xff0c;但“大数据杀熟”、AI在医疗诊断和就业筛…

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

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

创建python虚拟环境,并在eclipse里为python工程使用虚拟环境

先说明一下&#xff0c;这篇文章写的比较简陋&#xff0c;也没有插图&#xff0c;主要太初级了。一方面是为了自己记录一下。另一方面我解决这个问题也查了一会&#xff0c;所以看看有没有可能帮到朋友们。 一、首先是python对虚拟环境的操作&#xff0c;简单列一下&#xff1a…

代码随想录算法训练营第 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;由此产生出一个队列编号。 提示 用一个不带头节点的循环链表来处…