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

原创文章第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_scoredef 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_valdef train(df_train, df_val, feature_cols, label_col='label'):model = LGBMRegressor(boosting='gbdt',  # gbdt \ dartn_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 modelif __name__ == '__main__':import pandas as pdfrom config import DATA_DIR_BASICfrom 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.mzph.cn/news/877372.shtml

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

相关文章

x264 环路滤波原理系列:x264_frame_deblock_row 函数

x264_frame_deblock_row 函数 功能:该函数对视频帧中的一行宏块(Macroblock)进行去块滤波处理。去块滤波是视频编码中常用的一种技术,用于减少宏块之间的边界不连续性,从而提高视频质量。 函数关系与原理图: 函数原理流程梳理: 局部变量初始化;for 循环处理每个宏块:…

如何借助低代码 + BI 实现国央企数智化转型?

概要 在当前的软件开发时代&#xff0c;许多企业面临着核心技术缺失、专业人才短缺以及产品能力单一等问题&#xff0c;迫切需要加强技术实力&#xff0c;补充和扩展原有的业务和行业能力。将技术与业务需求深度结合&#xff0c;构建适应时代需求的技术业务模式&#xff0c;成…

容易发表的医学SCI期刊推荐,附投稿经验

常笑医学整理了适合医学生、医务工作者进行论文投稿的医学SCI期刊&#xff0c;附期刊详细参数与真实投稿经验&#xff0c;供大家参考。 1、ULTRASOUND IN MEDICINE AND BIOLOGY&#xff08;超声医学和生物学&#xff09; &#xff08;详细投稿信息请点击刊物名称查看&#xff…

MATLAB被360误杀的解决方案

前面被误杀&#xff0c;今天又被误杀。 前面误杀结果是缺少文件&#xff0c;重装MATLAB也不行。 结果重装了操作系统。 这次&#xff0c;看到了提示额外小心。 当时备份了“病毒”文件&#xff0c;结果备份的也被杀了。 解铃还须系铃人 在360安全卫士里面恢复&#xff0c;步骤…

数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)

数据库管理225期 2024-07-30 数据库管理-第225期 Oracle DB 23.5新特性一览&#xff08;20240730&#xff09;1 二进制向量维度格式2 RAC上的复制HNSW向量索引3 JSON集合4 JSON_ID SQL函数5 优化的通过网络对NVMe设备的Oracle的原生访问6 DBCA支持PMEM存储7 DBCA支持标准版高可…

PPT图表制作

一、表格的底纹 插入→表格→绘制表格→表设计→选择单元格→底纹 二、把一张图片做成九宫格 1. 把一张图片画成九宫格&#xff08;处理过后还是一张图片&#xff0c;但是有框线&#xff09; 绘制33表格→插入图片→全选表格单元格→右键设置形状格式→填充→图片或纹理填充…

前后端分离开发遵循接口规范-YAPI

目前&#xff0c;网站主流开发方式是前后端分离。因此前后端必须遵循一套统一的规范&#xff0c;才能保证前后端进行正常的数据&#xff08;JSON数据格式&#xff09;请求、影响&#xff0c;这套规范即是 YAPI. 产品经理撰写原型&#xff1b; 前端或后端撰写接口文档。 YAPI…

一座山城如何打造教育“一张网”

教育新基建作为国家新基建的重要组成部分,是实现教育高质量发展的基础支撑。2021年,教育部等六部门印发相关部署意见时明确提出:到2025年,基本形成结构优化、集约高效、安全可靠的教育新型基础设施体系。 在此宏观导向下,山城重庆积极响应,立足本地情况,开启了其特色化的探索之…

K8s对接Ceph-csi配置手册(附带踩坑记录以及解决方法)

目录 Ceph CSI (Container Storage Interface) CSI 的作用&#xff1a; 前提配置 版本信息 获取Ceph认证信息 获取Ceph集群Monitor信息 下载并部署Ceph CSI 如果此时全部显示错误&#xff0c;那就代表镜像拉取错误&#xff0c;此时执行的yaml脚本&#xff0c;通过yaml脚…

进行良好的文献综述能否提高学术研究的可信度

VersaBot一键生成文献综述 进行良好的文献综述 对于从多个方面提高学术研究的可信度至关重要&#xff1b; 1. 展示专业知识&#xff1a; 全面的回顾表明您对您所在领域的现有知识和相关理论有深入的了解。这将使您成为权威&#xff0c;并将您的研究置于更广泛的背景下。 2.…

ValueError: invalid literal for int() with base 10: ‘a‘

ValueError: invalid literal for int() with base 10: ‘a‘ 目录 ValueError: invalid literal for int() with base 10: ‘a‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff…

【CodinGame】趣味算法(教学用) CLASH OF CODE -20240730

文章目录 正文转换单位观察模式数字处理字符串处理 写在最后END 正文 转换单位 import sys import math# Auto-generated code below aims at helping you parse # the standard input according to the problem statement.n int(input()) for i in range(n):e int(input())…

win10 定时任务实战--开机启动 Java 应用

引言 在Windows 10系统中&#xff0c;可以通过结合任务计划程序&#xff08;Task Scheduler&#xff09;和批处理脚本&#xff08;.bat&#xff09;或PowerShell脚本来定期运行Java程序。以下是一个基本的步骤说明&#xff0c;展示如何设置这一过程。 第一步&#xff1a;准备…

爬虫“拥抱大模型”,有没有搞头?

验证码坐标识别 数据采集过程中&#xff0c;可能会碰到各种风控策略。其中&#xff0c;验证码人机验证是较为常见的&#xff0c;点选类验证码需要识别出相应的坐标&#xff0c;碰到这种情况&#xff0c;一般要么自己训练模型&#xff0c;要么对接打码平台。现在也可以将识别工…

多媒体技术:语音音频压缩

语音音频压缩 语音音频基础知识物理世界的声音——语音 语音音频编码方法波形编码波形编码原理常用波形编码技术脉冲编码调制PCM差分脉冲编码调制DPCM自适应差分脉冲编码调制ADPCM子带ADPCM 参数编码感知编码 语音音频编码框架语音编码框架音频编码框架混合编码框架 语音音频编…

JDK8的新特性

目录 接口的默认方法和静态方法 Lambda表达式1、匿名内部类2、函数式接口(FunctionalInterface)2.1 无参函数式接口匿名内部类方式-->Lambda表达式方式 2.2 有参函数式接口匿名内部类方式-->Lambda表达式方式 3、Lambda实战 3.1 循环遍历 3.2 集合排序 3.3 创建线程方…

黑马头条Day12-项目部署_持续集成

一、今日内容介绍 1. 什么是持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;&#xff0c;指的是频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的组成要素&#xff1a; 一个自动构建过程&#xff0c;从检出代码、…

Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入

本教程主要实现【Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入】。 本文源码&#xff1a;https://gitee.com/songfayuan/go-zero-demo 教程源码分支&#xff1a;master 分支&#xff08;_examples/word-template/fill-word-template.go&#xff09; Golang处理…

Java-Swing开发-001组件

文章目录 Top-level containerJFrame容器对话框相关 JComponent组件面板相关文本相关菜单相关工具栏按钮下拉框进度条树形组件 Top-level container 1.JFrame 2.JDialog JFrame容器 //设置APP图标 this.setIconImage(new ImageIcon(getClass().getResource("/button/i…

论文解读(10)-图神经网络

加油&#xff0c;继续看论文。 这次学图神经网络&#xff0c;这个概念经常在其他论文里出现&#xff0c;所以我想先学习一下这方面的知识。 参考&#xff1a; 【图神经网络综述】一文道尽GNN原理、框架和应用-CSDN博客 【图神经网络】10分钟掌握图神经网络及其经典模型_图神经…