import pandas as pd
import matplotlib.pyplot as plt
import pylab as plb
plb.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plb.rcParams['font.serif'] = ['SimHei']
plb.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
%matplotlib inline
import seaborn as sns
sns.set()
import numpy as np
from cvxopt import matrix, solvers
-----------------------------------------------------------------------------------
#通过因子合成选出股票后,需要决定如何对这些股票配权重
#等权组合
tpd = pd.read_hdf('total_tpd.h5', key='data')
Alpha_df = pd.read_hdf('./factor/equal_weight_alpha.h5', key='data')
Alpha_df.sort_values(['secucode','data_date'], inplace=True)
Alpha_df.factor_neuted = Alpha_df.groupby('secucode').apply(lambda x: x['equal_weight_alpha'].shift(-1)).values
Alpha_df.dropna(inplace=True)
#判断因子值是否大于某一分位数
def top_quantile(df, pct=0.05):
up_line = df['equal_weight_alpha'].quantile(1-pct)
return df['equal_weight_alpha'] >= up_line
Alpha_df['flag'] = Alpha_df.groupby('data_date').apply(lambda x:top_quantile(x)).values
Alpha_df = Alpha_df[Alpha_df.flag]
#与行情数据集合并
Alpha_df = Alpha_df.merge(tpd[['data_date','secucode','daily_return','mv']], on=['data_date','secucode'], how='left')
#等权组合的累计收益率
Alpha_df.groupby('data_date')['daily_return'].mean().add(1).cumprod().plot(figsize=(18,9))
-------------
股票多因子模型实战:Python核心代码解析.笔记06(组合构建)
于 2024-04-28 16:34:47 首次发布