年化27.9%,最大回撤-13.6%的可转债因子策略,结合机器学习特征筛选(附python代码)

news2024/9/17 7:43:47

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

我们重新更新了可转债的全量数据,包含全量已经退市的转债。

——这是与股票市场不一样的地方,股票退市相对少,而转债本身就有退出周期。

因此,如果没有包含进来,那么策略就是有偏差的。

双低指标,单调性非常好:

图片

图片

图片

单因子回测一下:

图片

年化27.9%,最大回撤-13.6%。

策略核心代码如下:

import bt
from bt_algos_extend import SelectTopK
order_by = 'close'#'double_low'#'double_low'
signal = CSVDataloader.get_col_df(df,col=order_by)
#signal.dropna(inplace=True)
all = []
for K in [30,]:
    s = bt.Strategy('可转债单因子策略'.format(K), [
                            bt.algos.RunWeekly(),
                           SelectTopK(signal,K,sort_descending=False),
                           bt.algos.WeighEqually(),
                           bt.algos.Rebalance()])
    all.append(s)
stras = [bt.Backtest(s, data) for s in all]

图片

把转债的价格单独拆分出来:

图片

分层单调性一般:

图片

IC值很好,但回测结果一般。

图片

回测结果,年化12.6%,最大回撤-11.7%。

图片

转股溢价率因子——单调性良好:

图片

图片

IC值一般:

图片

年化28.6%,回撤-33.6%。

图片

三个因子的分析结果看下来,有一个简单的结果:

分层单调性,对于轮动因子非常。

IC值大,但分层效果不好,大概率因子里包含了非线性因素。

IC值大的因子,可以经由机器学习模型来组合。

今天我们开始用机器学习的方式来初筛因子集。

咱们还是使用lightGBM集成学习的方式,决策树是可以筛选特征的重要性的。

import pandas as pd
from lightgbm import LGBMRegressor
from sklearn.metrics import mean_squared_error, r2_score


def calc_metrics(model, X, y):
    y_pred = model.predict(X)
    mse = mean_squared_error(y, y_pred)
    r2 = r2_score(y, y_pred)
    print('r2:', r2, 'mse:', mse)


def split_data(df, date):
    df_train = df[df.index <= date]
    df_val = df[df.index > date]
    return df_train, df_val


def train(df_train, df_val, feature_cols, label_col='label'):
    model = LGBMRegressor(boosting='gbdt',  # gbdt \ dart
                          n_estimators=600,  # 迭代次数
                          learning_rate=0.1,  # 步长
                          max_depth=10,  # 树的最大深度
                          seed=42,  # 指定随机种子,为了复现结果
                          num_leaves=250,
                          # min_split_gain=0.01,
                          lambda_l1=2,
                          lambda_l2=2000
                          )

    X_train = df_train[feature_cols]
    y_train = df_train[label_col]

    X_test = df_val[feature_cols]
    y_test = df_val[label_col]
    model.fit(X_train, y_train)
    calc_metrics(model, X_train, y_train)
    calc_metrics(model, X_test, y_test)

    """模型保存"""
    from config import DATA_DIR
    # model.booster_.save_model(DATA_DIR.joinpath('models').joinpath('lgb_regressor.txt'))
    feat_importances = pd.Series(model.feature_importances_, index=X_train.columns).sort_values(ascending=False)
    print(feat_importances.head(20))
    return model


if __name__ == '__main__':
    import pandas as pd
    from config import DATA_DIR_BASIC
    from datafeed.dataloader import CSVDataloader

    # bonds = pd.read_csv(DATA_DIR_BASIC.joinpath('cb_list2.csv'))
    # bonds =  bonds[bonds['delist_date'] is None]
    # bonds = bonds['ts_code']

    df = CSVDataloader.get_df(symbols=None, set_index=True, start_date='20190101', path='bonds_all')
    print(df)
    df = CSVDataloader.calc_expr(df, ['close+cb_over_rate', 'roc(close,20)', 'ta_cci(high,low,close,20)',
                                      'shift(close,-10)/close-1'],
                                 ['double_low', 'roc_20', 'cci_20', 'label'])
    df.dropna(inplace=True)
    df_train, df_val = split_data(df, '2023-12-31')
    train(df_train, df_val, feature_cols=['cb_over_rate','close','bond_value','cb_value','ps_ttm','bond_over_rate','double_low', 'pb','pe_ttm'], label_col='label')

机器学习的权重排序:

图片

bond_value IC值不明显,分层不单调,但lightGBM的权重重要性很高。这一点是比较矛盾的。

代码在这里:

图片

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

图片

吾日三省吾身

欲速则不达。——这句老话非常有道理。

有时候,我们总希望把一些不喜欢的事情,尽快终结掉。

在评估不够充分时就快速推进事情。

结果有可能,事情也许办了,但引入其他更加不可控的事情。

有时候,淡定一点,把事情处理得稳妥一点,后续的事情会更少。

好事多磨,淡定一点。

历史文章:

全量可转债:平价底价溢价率与正股PB的单因子分析(附python代码)

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

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

年化22.8%的单因子分析:基于Alphalens做可转债全市场数据的单因子分析(附python代码+全量数据)

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

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

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

相关文章

喝奶 (全脂 抵脂肪 脱脂 )

鲜牛奶就是全脂的. 婴儿配方奶粉, 脂肪含量就高 全脂牛奶通常口感更浓郁&#xff0c;适合许多人的口味偏好, 全脂牛奶含有较高的脂肪含量&#xff0c;这有助于提供能量和饱腹感,从而减少总体热量的摄入, 有研究指出&#xff0c;喝全脂牛奶的儿童超重或肥胖的风险可能比喝低脂…

80端口被system占用 ,system进程是4!!!亲测-----解决

最近需要使用nginx&#xff0c;发现80端口北占用 正常情况下&#xff0c;查看那个进程占用&#xff0c;然后找到对应的程序&#xff0c;关闭对应的就可了。 使用 netstat 命令&#xff1a; 打开命令提示符&#xff08;以管理员身份&#xff09;。输入命令 netstat -ano | fi…

昇思25天学习打卡营第18天|ResNet50 迁移学习实战:从数据准备到模型构建

目录 环境配置 加载数据集 数据集可视化 构建Resnet50网络 固定特征进行训练 训练和评估 可视化模型预测 环境配置 MindSpore 库的版本管理和数据集的下载操作。首先&#xff0c;它卸载了已安装的 MindSpore 版本&#xff0c;并重新安装指定版本&#xff08;2.3.0rc1&…

帆软BI 模仿一个可视化护理软件大屏 (三百六十行 行行fine BI)

帆软BI 模仿一个可视化护理软件大屏 &#xff08;三百六十行 行行fine BI&#xff09; 文章目录 帆软BI 模仿一个可视化护理软件大屏 &#xff08;三百六十行 行行fine BI&#xff09;前言一、怎么做&#xff1f;二、导入数据三、编辑数据制作联合饼图四、编辑数据风险管理五、…

微短剧出海CPS分销推广影视平台系统搭建思维逻辑介绍

随着国内短剧市场的蓬勃发展&#xff0c;其独特的魅力与影响力已跨越国界&#xff0c;成为海外观众的新宠。这一趋势不仅推动了短剧内容的全球化传播&#xff0c;也为海外市场的CPS&#xff08;按销售分润&#xff09;分销模式提供了广阔舞台。连接内容创作者、平台运营者、系统…

数据结构与算法-关于堆的基本排序介绍

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、堆排序…

职场中的六条建议

在职场的征途中&#xff0c;我们每个人都是独一无二的行者&#xff0c;面对挑战与机遇并存的每一天。我们在职场中工作要弄清楚工作的本质&#xff0c;一定要牢记几点&#xff1a; 工作的本质与态度 我们工作的目的就是为了挣钱&#xff0c;我们不是来义务劳动也不是来参加快乐…

【Redis 初阶】Redis 常见数据类型(预备知识、String、哈希、List)

Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维非常重要&#xff0c;同时掌握每种数据结构的常见命令&#xff0c;会在使用 Redis 的时候做到游刃有余。 一、预备知识 官方文档&#xff1a;Commands | Docs (redis.io) 1、最核心的两个命令…

npm提示 certificate has expired 证书已过期 已解决

在用npm新建项目时&#xff0c;突然发现报错提示 : certificate has expired 证书已过期 了解一下&#xff0c;在网络通信中&#xff0c;HTTPS 是一种通过 SSL/TLS 加密的安全 HTTP 通信协议。证书在 HTTPS 中扮演着至关重要的角色&#xff0c;用于验证服务器身份并加密数据传输…

python——joblib进行缓存记忆化-对计算结果缓存

问题场景 在前端多选框需要选取多个数据进行后端计算。 传入后端是多个数据包的对应路径。 这些数据包需要按一定顺序运行&#xff0c;通过一个Bag(path).get_start_time() 可以获得一个float时间值进行排序&#xff0c;但由于数据包的特性&#xff0c;这一操作很占用性能和时…

动手学深度学习V2每日笔记(模型初始化和激活函数)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1u64y1i75ap2&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&#xff0c;内容不会特别严谨仅供参考。 1. 模…

Linux安装与配置

下载VMware 首先我们需要下载一个叫VMware的软件&#xff1a; 进入官方下载&#xff0c;地址&#xff1a;https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html选择与自己电脑版本适配的VMware版本【 输入许可证密钥 MC60H-DWHD5-H80U9-6V85…

硬盘分区读不出来的解决之道:从自救到专业恢复

在日常的计算机使用过程中&#xff0c;硬盘分区读不出来的问题常常令人头疼不已。这一问题不仅阻碍了用户对数据的正常访问&#xff0c;还可能预示着数据安全的潜在威胁。硬盘分区读不出来&#xff0c;通常是由于分区表损坏、文件系统错误、物理扇区损坏、驱动程序冲突或硬件连…

流量卡对比?看看哪个运营商的流量卡更适合你?

你用过流量卡吗&#xff1f;在这个一机双卡的时代&#xff0c;大部分的朋友都是人手两张电话卡&#xff0c;甚至更多&#xff0c;其中还包括一张大流量卡&#xff0c;那么&#xff0c;你会选择流量卡吗&#xff1f; ​ 为了冲量和拉新用户&#xff0c;三大运营商都在线上推出一…

优化极限学习机,实现回归预测,三种算法对比,MATLAB代码免费获取

本期将原始蜣螂算法、减法优化器算法、鲸鱼优化算法进行应用。对极限学习机进行优化实现股票回归预测&#xff0c;三种算法相互对比。 股票预测案例 股票数据特征有&#xff1a;开盘价&#xff0c;盘中最高价&#xff0c;盘中最低价&#xff0c;收盘价等。预测值为股票价格。股…

大白话讲清楚GPT嵌入(Embedding)的基本原理

嵌入&#xff08;Embedding&#xff09;是机器学习中的一个基本概念&#xff0c;尤其是在自然语言处理 (NLP) 领域&#xff0c;但它们也广泛应用于其他领域。通常&#xff0c;嵌入是一种将离散的分类数据转换为连续向量的方法&#xff0c;通常在高维空间中&#xff0c;将复杂、…

Jmeter之逻辑控制器(事务控制器+仅一次控制器+吞吐量控制器)-第八天

一.逻辑控制器 1.1事务控制器 事务&#xff0c;其实可以理解为完成一个业务所调用所有接口的集合&#xff0c;当然可以是单个接口&#xff0c;也可以是多个相互关联的串联接口。 所以在进行性能测试时&#xff0c;在用于多接口串联的场景时&#xff0c;需要汇总统计该多个接…

强烈建议产品经理学习AI大模型!

随着GPT大热 “AI大模型”无疑是最火爆的话题&#xff01; Google、百度、腾讯等等巨头互联网公司&#xff0c; 无不在布局人工智能技术和市场&#xff0c; 甚至还有60k*16的高薪&#xff0c;挖掘AI大模型人才&#xff01; 非技术岗的AIGC产品经理&#xff0c; **薪资水平…

html+css+js前端作业和平精英官网1个页面(带js)

htmlcssjs前端作业和平精英官网1个页面&#xff08;带js&#xff09;有轮播图tab切换等功能 下载地址 https://download.csdn.net/download/qq_42431718/89597007 目录1 目录2 项目视频 htmlcssjs前端作业和平精英官网1个页面&#xff08;带js&#xff09; 页面1

leetcode 2236.判断根节点是否等于字节点

1.题目要求: 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。2.思路: 直接数组前序遍历&#xff0c;然后判断后面两个…