单因子年化23.7%,基于deap的因子挖掘,我改进了fitness和metrics方案(附python代码和数据)

news2024/11/13 23:01:03

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

我们目前投入使用的因子挖掘,基于两个框架,deap和gplearn,deap做一点点改动,就可以完美应用于多标的截面因子挖掘。而gplearn如果要支持三维数据,则需要很多改动,但gplearn的优点是代码读起来很顺畅。

——也许我会考虑把gplearn应用于单标的,比如CTA的时序因子挖掘

从结果来看,传统研报里说的IC分析,其实不科学。IC就是因子与收益率的平均相关系数。这个相关系数只能说,可能说能解释一部分,有一定的关系,但关系是什么?如果你把时间分成两段来看,有可能前半段正相关,后半段负相关,然后一平均,看起来这个值还可以。

数据说话,我用全球大类资产,使用咱们quantlab的deap框架挖掘出来的。

直接使用单因子回测来挖掘因子——metrics为年化收益和卡玛比率

图片

直接回测看收益表现:

图片

这个因子是:'sqrt(log(ts_delta(volume, 20)))'

再来一个因子:rank(sqrt(volume))——成交额的截面排序因子

图片

这部分代码在:

图片

更新后的回测函数:

def backtester(self,evaluate, inds):
    names, features = [], []
    for i, expr in enumerate(inds):
        names.append(f'GP_{i:04d}')
        features.append(stringify_for_sympy(expr))

    features = [f.lower() for f in features]
    df = CSVDataloader.calc_expr(self.df.copy(deep=True), fields=features, names=names)
    # df.set_index([df['symbol'], df.index], inplace=True)

    import bt
    from bt_algos_extend import SelectTopK
    close = CSVDataloader.get_col_df(df, 'close')
    all = []

    for f in names:
        if f in df.columns:
            signal = CSVDataloader.get_col_df(df, f)

            for K in [1]:
                s = bt.Strategy('{}'.format(f), [
                    bt.algos.RunWeekly(),
                    SelectTopK(signal, K),
                    bt.algos.WeighEqually(),
                    bt.algos.Rebalance()])
                all.append(s)

    stras = [bt.Backtest(s, close) for s in all]
    res = bt.run(*stras)
    stats = res.stats
    print(stats.loc['cagr'])

    results = []
    for name in names:
        if name not in df.columns:
            results.append((0,0))
        else:
            results.append((stats.loc['cagr'][name],stats.loc['calmar'][name]))
    return results

后续我们再扩展更多算子,talib的函数来提升因子挖掘效果。

图片

吾日三省吾身

人生是旷野,而不是轨道。

时间一路向前,但人生并不是一条既定的轨道——你永远有的选。

这是上次我同一个创业的朋友说起的话题。

我的建议是,如果你是因为看好这个事情,那就坚持,但如果是因为没有选择,那就需要重新思考。人生永远有的选,至少你可以提前开始准备。

我们当下的状态,位置,是三年前或者五年前的认知、行动所决定的。

你不可能迅速改变它。

但你可以让三年、五年后的生活,如你所愿。

也许你要问,如此不确定的当下,计划都赶不上变化,大家又都说选择大于努力,那要做什么呢?

未来是一个开阔的旷野,你不必执着于某一个目标。

这里分享一个“人生设计课”里的“奥德赛计划”(《奥德赛》是古希腊诗人荷马的代表作,讲述了奥德修斯海上漂流的故事,作者借此隐喻人生如一场探险。)。

图片

制定自己的三个五年计划,每个计划提出2-3个问题。

比如,当前的工作状态,继续往前走,这是一个最常规的计划(需要考虑如果环境有一些变动,如何应对,比如新的方向人工智能大模型——让AI发挥价值)。

比如计划2,你还可以加入量化私募公司,成为职业投资者(让AI在投资里发挥价值,当然不只是AI)。

计划3:成为自由作家(金融,财经,科技,成长),讲书人,独立研究者?——不是所谓自媒体那种,而是作品驱动,比如通过海量阅读,观察,思考,产出有价值的系列作品。

这就是旷野的逻辑,比如计划1里方向还可以有特别多,但这就算一种计划。

也许都不容易,但你会让自己感觉永远有的选,而且看起来差异很大,人就是这么有弹性,你能做的事情,比你想象中要多得多。

早上有同学问,关于续期的事情(提前90天有福利):

图片

历史文章:

自研“因子流水线”之遗传算法的交叉与变异的python代码实现

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

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

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

相关文章

秋叶SD整合安装包更新了!8月最新版4.9【附下载】

01 SD整合包可以扫描下方,免费获取 02 安装步骤 下载好后解压双击打开即可使用(第一次安装部署时间稍长,等待一会即可) 安装完进入界面后,点击右下角一键启动,稍微等待一会儿就会加载WebUI。 选择大模…

期货模拟交易系统考核选拔系统资管分仓有哪些特点?

分仓账户本身是为了风险管理和资金管理的目的而设立的,‌通过将资金分散到不同的账户中,‌可以降低整体风险,‌避免某个合约的亏损对整个资金造成过大的影响。‌这种分散投资的策略有助于提高交易的安全性。‌然而,‌分仓账户的安…

MySQL 索引合并优化实践

在生产环境的数据库中,经常会看到有些 SQL 的 where 条件包含:普通索引等值 主键范围查询 order by limit。明明走普通索引效率更高,但是选择走了索引合并,本文就对这种索引合并的情况研究一下。 作者:张洛丹&#x…

细数目标管理的坑:避免陷阱,实现高效执行

目标管理作为一种被广泛采用的管理方法,通过明确的目标设定和追踪,提升组织绩效和员工动力。然而,正如任何管理工具一样,目标管理也并非完美无缺,其在实际应用中往往伴随着一系列潜在的“坑”。 一、目标设定&#x…

如何使用DataGear零编码快速制作MQTT物联网实时数据看板

DataGear是一个开源免费的数据可视化分析平台,企业版在开源版基础上开发,新增了诸多企业级特性,包括:MySQL及更多部署数据库支持、MQTT/WebSocket/Redis/MongoDB数据集、OAuth2.0/CAS/JWT/LDAP统一登录支持、前后端敏感信息加密传…

ArcGIS 数据服务在三维 Cesium/SuperMap 项目中使用遇到的一些问题及其解决方法

ArcGIS 数据服务在三维 Cesium/SuperMap 项目中使用遇到的一些问题及其解决方法 一、三维系统支持的 ArcGIS 服务及其投影 1、动态服务 ArcGIS 动态服务的数据,支持任意投影在三维系统中加载。 2、切片服务 ArcGIS 切片服务仅支持 3857(web 墨卡托投影)&#x…

C++ 设计模式(1. 单例模式)

单例模式是一种创建型设计模式, 它的核心思想是保证一个类只有一个实例,并提供一个全局访问点来访问这个实例。 特点 全局访问点的意思是,为了让其他类能够获取到这个唯一实例,该类提供了一个全局访问点(通常是一个静态…

锐特驱动器ECR系列IO输出高电平配置

设置极性:常闭值0 默认输出极性常开,平时高组态或无电平输出,点通工作时输出低电平;常闭平时低电平,工作时输出高电平; 常开常闭概念具体可参考: http://t.csdnimg.cn/TIsW9 设置输出功能&…

如何用Java SpringBoot+Vue搭建校内跑腿业务系统?实战教程解析

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

​​​​​​​STM32通过SPI硬件读写W25Q64

目录 STM32通过SPI硬件读写W25Q64 1. STM32的SPI外设简介 2. STM32的SPI框图 2.1 数据寄存器和移位寄存器(左上角部分) 控制逻辑(其余右下角的部分) 3.STM32的SPI基本框图 4. STM32的SPI主模式全双工连续传输 时序图 5. S…

网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略

网安加社区【网安新声】栏目,汇聚网络安全领域的权威专家与资深学者,紧跟当下热点安全事件、剖析前沿技术动态及政策导向,以专业视野和前瞻洞察,引领行业共同探讨并应对新挑战的策略与可行路径。 近期,微软披露了一个最…

AIGC企业知识库系统的全方位应用

在知识爆炸的时代,企业如同航行在浩瀚信息海洋中的巨轮,每一滴知识的浪花都可能成为推动其破浪前行的动力。而 AIGC企业知识库系统可以帮助企业精准捕捞、高效利用这些宝贵资源,不仅重塑了企业知识管理的版图,更引领了一场前所未有…

秋招力扣Hot100刷题总结——回溯

回溯问题通常应用于解决排列组合等问题,需要注意的是回溯函数中的参数、结束条件、遍历开始顺序等。 回溯三部曲: (1)确定递归函数的参数。 (2)确定递归函数的终止条件。 (3)确定单层…

错误:Input string was not in a correct format.

之前写的桌面端,在国内客户电脑运行着没问题,到欧洲国家电脑上就挂掉了 原因:TM 小数点不是. 而是, 是逗号,不明觉厉 解决办法: 1、更改客户电脑配置 这里把逗号改成.就行了 但是这种办法比较笨,总不能…

视频检索技术为电子商务直播领域带来了前所未有的革新

视频检测在这个场景中指的是通过视频流实时识别和检索直播中销售人员展示的商品。这涉及到从连续的视频帧中分析和识别商品的视觉内容,通常与语音和文本数据结合,以提高识别准确性。 技术原理 文本引导的注意机制:这一机制通过直播中销售人员…

初始redis:List

列表 List 相当于数组或者顺序表。 对于List来说,两侧都可以插入和删除,时间复杂度是O(1)。 有很多的操作,比如 llen 可以获取List的长度,lrem 可以删除元素 ,lrange可以去一个字符串 , lindex可以根据下标…

MBR20100FCT-ASEMI无人机专用MBR20100FCT

编辑:ll MBR20100FCT-ASEMI无人机专用MBR20100FCT 型号:MBR20100FCT 品牌:ASEMI 封装:TO-220F 批号:最新 恢复时间:35ns 最大平均正向电流(IF):20A 最大循环峰值…

Leetcode344. 反转字符串(双指针-对撞)

题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例: 示例 1: 输…

比铁饭碗还好的专业,未来人才缺口超大,而且就业压力还小!

高考是许多学生心中的一件大事,高考成绩的好坏,直接决定着进入什么样的大学,或者选择什么样的专业。**而且在当今这个日新月异的时代,选择一个既有发展前景又相对稳定的职业成为了许多学生和家长的关注焦点。**其实我国有部分大学…

Python爬虫——简单网页抓取(实战案例)小白篇

Python 爬虫是一种强大的工具,用于从网页中提取数据。这里,我将通过一个简单的实战案例来展示如何使用 Python 和一些流行的库(如 requests 和 BeautifulSoup)来抓取网页数据。 实战案例:抓取一个新闻网站的头条新闻标…