量化投资策略与技术学习PART1.1:量化选股之再谈多因子模型(二)

在上一个多因子模型中,我手动对各个因子进行了回测,但是数据结果并不是十分理想,难道基本面指标真的和股票走势关系不大么?
这里我还是准备再测试一下,策略如下:
(1)首先我获取了一下掘金量化终端中可以提供成分股的几个指数代码,同时将衍生指标导入表格中,提取了衍生指标的关键字信息;
(2)总体建立了一个dataframe表格,其中纵坐标表示的是衍生指标,横坐标就是各个指数
(3)我们先选择一个指数,之后提取该指数的成分股,计算该指数N天之后的收益率,同时获得该指数第一个衍生指标数据,之后对一个指数内所有成分股的收益率和衍生指标数据做相关系数计算,并存储到表格中,首先对所有的衍生指标进行循环,之后对所有的指数进行循环,代码如下:

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import pandas as pd
import numpy as np
import datetime
import warnings
warnings.simplefilter(action='ignore', category=pd.errors.PerformanceWarning)
"""
函数名:get_finance_deriv_list():
输入参数:null
输出参数:null
函数作用:获取衍生指标与指数成分股之间的相关系数矩阵
"""def get_finance_deriv_list():# dfcf_data = pd.read_csv('2024年8月17日东方财富ETF基金列表去重版 -手动增强.csv')dfcf_data = pd.read_csv('掘金投资衍生指标数据CSV.csv')finance_deriv = dfcf_data[['字段名', '中文名称']] # 新建一个dataframe表格用于存储需要用到的数据return finance_deriv
"""
函数名:finance_deriv_symbol_corr():
输入参数:null
输出参数:finance_deriv 数据类型:dataframe
函数作用:获取衍生指标数据
"""
def finance_deriv_symbol_corr():A_share_list = {"SHSE.000010": "SHANG_ZHENG180", "SHSE.000009": "SHANG_ZHENG380", "SHSE.000300": "HU_SHEN300","SHSE.000905": "ZHONG_ZHENG500", "SHSE.000906": "ZHONG_ZHENG800","SHSE.000852": "ZHONG_ZHENG1000","SHSE.000015":"honglizhishu","SHSE.000922":"zhongzhenghongli"}# A_share_list = {"SHSE.000010": "SHANG_ZHENG180","SHSE.000009": "SHANG_ZHENG380"}time = "2021-05-01"  #统计衍生指标的时间time2 = "2021-07-01"  # 统计衍生指标的时间days = 40 # 用于统计数据的天数,用days天后的股票收盘价减去当初的股票收盘价,计算其收益率last_day = get_previous_n_trading_dates(exchange='SHSE', date=time2, n=1)[0]# 计算因子和收益率之间的相关系数,纵坐标应该为衍生指标,建立一个表格导入衍生指标finance_deriv_list = get_finance_deriv_list() #这个一定要在指数轮询之外,要不数据会被覆盖for index in A_share_list.keys():symbol_list = stk_get_index_constituents(index)["symbol"].values  # 获取指数成分股数据index_abs = "%s %s" % (index, "abs")finance_deriv_list.insert(len(finance_deriv_list.columns),index, None)  # 在指定位置添加空白列,存储该衍生指标和指数成分股之间的相关系数finance_deriv_list.insert(len(finance_deriv_list.columns),index_abs, None)  # 在指定位置添加空白列,存储该衍生指标和指数成分股之间的相关系数的绝对值,用于排序print(finance_deriv_list)# 计算各个因子与该指数成分股之间的相关系数for i in finance_deriv_list.index: #每个因子进行轮询finance_deriv_name = finance_deriv_list.loc[i]['字段名']finance_deriv_value = stk_get_finance_deriv_pt(symbols=list(symbol_list), fields=finance_deriv_name,date=time,df=True)  # 获取symbol_list的finance_deriv_name数据,需要转换为list类型finance_deriv_value = finance_deriv_value.dropna() #去除到查询不到的数据return_index = finance_deriv_value[['symbol', finance_deriv_name]]return_index.insert(len(return_index.columns), 'return', None)  # 在指定位置添加空白列,存储该衍生指标和指数成分股之间的相关系数if len(return_index) > 0.5*len(symbol_list): # 至少有一半以上查询到衍生数据指标,做相关分析才有意义,要不数据太少了for j in return_index.index: #指数成分股中每个股票进行轮询,计算各个股票在这个统计期间的收益率return_index_his = history_n(symbol=return_index.loc[j]['symbol'], frequency='1d', count=days + 1, fields='close',fill_missing='Last', adjust=ADJUST_PREV, end_time=last_day, df=True)if not return_index_his.empty: #有部分股票有可能因为停牌等原因无法查询return_index_his = return_index_his['close'].valuesreturn_index.at[j, 'return'] = return_index_his[-1] / return_index_his[0] - 1  # 将最新的衍生指标值存储到dataframe中# else:#     print(symbol_list[j]+"无法查询")return_index = return_index.dropna()  # 去除到查询不到的数据factor_A = list(return_index[finance_deriv_name].values)factor_B = list(return_index["return"].values)coef_matrix_A = np.asarray(np.corrcoef(factor_A,factor_B)) #求factor_A 和 return_matrix 之间的相关系数coef_A = coef_matrix_A[0, 1]  # 提取第0行,第1列的数值,即相关系数finance_deriv_list.at[i, index] = coef_Afinance_deriv_list.at[i, index_abs] = abs(coef_A)else:finance_deriv_list.at[i, index] = 0 # 无法得到足够的衍生指标数据,因此直接置0,该指标没有参考价值finance_deriv_list.at[i, index_abs] = 0print("该因子无有效衍生指标数据参考"+finance_deriv_name)print(finance_deriv_name)# finance_deriv_list = finance_deriv_list.dropna()# finance_deriv_list = finance_deriv_list.sort_values("abs", ascending=False)  # 根据选择的因子对股票进行从小到大排序# finance_deriv_list = finance_deriv_list.reset_index(drop=True)  # 重置索引值print(finance_deriv_list)finance_deriv_list.to_csv("衍生指标相关系数.csv", encoding='utf-8-sig')set_token("自己的token码")
finance_deriv_symbol_corr()

得到的结果如下:
原始数据如下图所示:
在这里插入图片描述
从上述数据中我们可以看出,有部分数据无效,而且大部分相关系数都小于0.2,因此我们先去除掉无效数据,再以相关系数大于0.2为界限,超过的标红,同时对于一些相似的衍生指标(比如ROE加权不加权等)进行了去重,得到的结果如下:
在这里插入图片描述
相关系数超过0.2的衍生指标缩减到了35条,而且从上述数据我们也可以看出,SHSE.000009/SHSE.000905/SHSE.000906/SHSE.000852这四个指数与衍生指标的关系都不大,其中三个都是中小盘股票,这说明大盘股相较于中小盘股和衍生指标的关系较大。因为我们把这三个也剔除掉,之后对各个指数相同的衍生指标进行求和排序,选择求和结果绝对值大于0.4的作为标的衍生指标,结果如下:

指数代码指数名
SHSE.000010上证180
SHSE.000009上证380
SHSE.000300沪深300
SHSE.000905中证500
SHSE.000906中证800
SHSE.000852中证1000
SHSE.000015红利指数
SHSE.000922中证红利

在这里插入图片描述
换了不同时间段试了一下,效果不是很好,这个策略有时间还需要再研究一下,应该是看一下各个衍生指标变化率和收益之间的关系,而不是看衍生指标绝对值与股票之间的关系。

time = “2022-05-01” #统计衍生指标的时间
time2 = “2022-07-01” # 统计衍生指标的时间
在这里插入图片描述

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

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

相关文章

codeforces Round 970 (Div. 3)(A-F)

文章目录 [Codeforces Round 970 (Div. 3)](https://codeforces.com/contest/2008)A-[Sakurakos Exam](https://codeforces.com/contest/2008/problem/A)B-[Square or Not](https://codeforces.com/contest/2008/problem/B)C-[Longest Good Array](https://codeforces.com/cont…

Ubuntu上安装配置(jdk/tomcat/ufw防火墙/mysql)+mysql卸载

jdk安装 1.上传jdk压缩包 详情: 下载rz服务(lrzsz):sudo apt install lrzsz(在主用户root就不用sudo)下载压缩包:rz 2.解压jdk压缩包 : 详情: 在压缩包所在位置(解压压缩使用看Li…

测试人如何高效地设计自动化测试框架?

关于测试框架的好处,比如快速回归提高测试效率,提高测试覆盖率等这里就不讨论了。这里主要讨论自动化框架包含哪些内容,以及如何去设计一个测试框架。 什么是自动化测试框架? 它是由一个或多个自动化测试基础模块、自动化测试管…

Qt22双缓冲机制

Qt22双缓冲机制 知识点drawwidgetdrawwidget.hdrawwidget.cpp mainwindowmainwindow.hmainwindow.cpp main.cpp运行图 知识点 双缓冲就是在内存区申请一块缓存;然后显卡直接从这块内存读取数据.。 这样就不用鼠标边画,经过IO来读取这个环节;…

EasyExcel实现复杂Excel的导入

最近项目中遇到一个复杂的Excel的导入,并且数据量较大。因为数据不规则,所以只能使用POI进行自定义读取,但是发现数据量大之后,读取数据非常耗时。后面换成EasyExcel,性能起飞。 1. Excel样板 如上图,需要…

【C++】汇编分析,函数是如何调用,传参,返回

传参 有的是用寄存器传参,有的用push传参 我在MSVC编译测出来的是PUSH传参(debug模式),具体过程如下 long func(long a, long b, long c, long d,long e, long f, long g, long h) {long sum;sum (a b c d e f g h);ret…

VMware安装windows虚拟机详细过程

目录 准备工作配置虚拟机为虚拟机设置操作系统镜像安装windows10 准备工作 安装好VMware软件并激活,激活码自行查找 准备好系统镜像文件,可以在MSDN中下载,地址:https://next.itellyou.cn/ 配置虚拟机 选择自定义 默认 选择稍后…

骨灵冷火!Solon Cloud Gateway 照面发布

骨灵冷火,是练药的好火哟。极冷,又极热。在冰冻中被烧死:) 1、认识 Solon Cloud Gateway Solon Cloud Gateway 是基于 Solon Cloud、Vert.X 和 Solon Rx(reactive-streams) 接口实现。小特点: 纯响应式的接口体验流…

[Linux]:基本指令(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 与Windows环境不同,我们在linux环境下需要通过指令进行各操作&…

13.DataLoader 的使用

DataLoader 的使用 dataset:告诉程序中数据集的位置,数据集中索引,数据集中有多少数据(想象成一叠扑克牌)dataloader:加载器,将数据加载到神经网络中,每次从dataset中取数据&#x…

Zynq7000系列FPGA中的DDRC纠错码(ECC)

仅在半总线宽度(16位)数据宽度配置中提供可选的ECC支持。这种配置下,外部DRAM DDR设备需要26位,其中16位用于数据,10位用于ECC。每个数据字节使用独立的5位ECC字段,这种模式提供了单错误纠正和双错误检测的…

UE5蓝图 抽卡出货概率

SSR概率0.1 SR概率0.2 R概率0.7 ps:数组内相加为1。且从小到大排序。

C练手题--Two Oldest Ages 【7 kyu】

一、原题 链接:Training on Two Oldest Ages | Codewars The two oldest ages function/method needs to be completed. It should take an array of numbers as its argument and return the two highest numbers within the array. The returned value should b…

网络-多路io

了 fcntl 函数来操作文件描述符的状态标志,其中主要是为了设置非阻塞模式。下面是对 fcntl 函数及其参数的详细解释: fcntl 函数 fcntl 是一个用于操作文件描述符的系统调用,可以用来设置或获取文件描述符的各种属性。其原型如下&#xff1…

Ubuntu Linux Server安装Kubernetes

本文主要描述在Ubuntu Linux Server操作系统中安装Kubernetes云原生对应的microk8s组件。 sudo snap install microk8s --classic 如上所示,在Ubuntu服务器中安装microk8s组件完成,对应的版本是microk8s v1.30版本 microk8s enable dashboard 如上所…

华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 先看这里 写在前面效果华为云Flexus X实例服务器部署开源的热点新闻项目ssh连接服务器docker部署今日热点项目访问今日热点项目 搭建微信交互工具获取token创建发送的公共方法…

【Spring】获取cookie,session,header(3)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 目录 本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。…

Linux主机网络参数的设置—IP地址的作用和类型

网络参数管理 一.网络参数 主机名,IP地址,子网掩码,网关,DNS服务器地址 1.配置主机名 hostname命令来查看当前系统的主机名, hosnamectl set-hostname 修改centos7的主机名, 建议以FQDN的&#xff…

惠中科技光伏清洗剂:点亮绿色能源未来

在当今全球追求可持续发展的时代,光伏产业作为清洁能源的重要代表,正发挥着日益关键的作用。而在光伏产业的高效运行中,惠中科技的光伏清洗剂犹如一颗璀璨的明珠,为光伏板的清洁与维护贡献着卓越力量。 一、光伏产业的挑战与需求…

STM32嵌入式面试知识点总结

一、STM32F1和F4的区别? 解答: 参看:STM32开发 – STM32初识内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;主频不同:F1主频72MHz,F4主频168MHz;浮点运算:…