请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  数理科学 帖子:3354275 新帖:38

决策树在多因子模型中的应用(二)

技术性调整发表于:5 月 10 日 04:26回复(1)

上篇内容,我们对决策树进行了介绍,探讨了决策树的回归和分类方法,并列出了一些关键参数的说明,构建了超参数学习曲线,本篇内容,我们将基于决策树进行分组回测,对结果进行展示。
开始之前,我们在来回顾一下决策树,决策树学习能根据数据的属性采用树状结构建立决策模型,能够用来解决分类和回归问题,决策树方法简单自然,符合人脑的思维逻辑,除了构建单棵决策树,我们还可以建立多棵决策树并通过某种方式将它们结合在一起,综合投票产生最后的预测值,也就是随机森林。
本篇报告中我们将基于决策树进行预测,并将这个模型应用于多因子选股。

关于模型的思路

在用决策树构建模型的时候,我们先来考虑这个问题,树模型与传统的线性模型相比,优势和缺点在哪里?
首先,它可以处理非数值类特征,如不同板块风格股票涨跌分类问题,也就是说,我们可以将行业标签、甚至地域标签、这样的非数值特征放入特征数据中。
其次,对于连续数值的非线性问题,就比如不做倒数处理的估值因子PE、PB。理论上拿这些数据应用在决策树中时,可以不必考虑数据在0轴上下的不同处理方式。
树模型同样有其缺陷,单独决策树使用时,对特征是带有一定随机性的,并且,在对训练样本敏感,训练过程如不加适当的限制,则结果基本上就会过拟合。

参数寻优的问题与方法

模型的参数优化部分可以参考上篇介绍决策树文章内容,进行学习曲线或者网格搜索,进行剪枝处理。

模型构建过程

参考《人工智能选股之随机森林模型》中模型构建过程,我们按下面步骤进行预测模型搭建

1.数据获取:我们选择股票池为中证500,并剔除ST股票,剔除上市3个月内新股,获取的数据区间为20090101到20190101,回测区间为20140101到20190101。
2.特征和标签提取:每个自然月的第一个交易日,计算统计期的 39个因子暴露 度,作为样本的原始特征;计算下一整个自然月的个股超额收益(以中证500 指数为基准),作为样本的标签。
3.特征预处理:进行去极值、标准化、中性化操作。
    a) 中位数去极值:我们取每个月第一个交易日的因子数据,截面上对各个因子值进行去极值操作; 
    b) 缺失值处理:将缺失的因子值设为申万一级行业相同个股的平均值。 
    c) 行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值 做线性回归,取残差作为新的因子暴露度。 
    d) 标准化:将因子值减均值除以标准差,得到均值为0,标准差为1的因子值序列  
4.训练集合成:
    a)使用回归方法时,在每个月初截面期,将下月收益作为标签y值,将当前时间往前推 60 个月的样本合并,随机选取 70%的样本作为训练集,余下 30%的样本作为测试集。 
    b)使用分类方法时,在每个月初截面期,选取下月收益排名前 30%的股票作为正例(y = 1),后 30%的 股票作为负例(y = 0)。 将当前时间往前推60个月的样本合并,随机选取 70%的样本作为训练集,余下 30%的样本作为测试集。 
5.样本内训练:使用决策树模型对每期的训练集进行训练,并计算测试集得分。
6.样本外测试:得出模型后,以 T 月月初截面期所有样本(即个股)预处理后的特征作为模型的输入,得到每个样本的 T 1 月的预测值(可以根据该预测值构建策略组合,具体细节参考 下文)

应用于选股策略

进行分层回溯是常见的单因子分析方法,根据因子值对股票进行打分,构建投资组合回测,是最直观的衡量因子优劣的手段。树模型属于分类器,最终在每个月底可以产生对全部个股下月上涨或下跌的预测值(即各决策树分类结果的投票平均值),可以将预测结果转换为一个因子合成模型,即在每个月底将因子池中所有因子合成为一个“因子”。接下来,我们对该模型合成的这个“因子”(即个股下期预测值)进行分层回测,从各方面考察该模型的效果。仿照华泰单因子测试系列报告中的思路,分层回测模型构建方法如下

分层回测分析

股票池:中证500股票池股票,剔除 ST 股票,剔除上市 3 个月以内的股票。
回测区间:2014-01-01 至 2019-01-01(5年)
换仓期:在每个自然月第一个交易日核算因子值,在下个自然月首个交易日按当日 收盘价换仓。
数据处理方法:将模型的预测值视作单因子,因子值为空的股票不参与分层。
分层方法:按因子值大小进行排序。
评价方法:回测年化收益率、夏普比率、信息比率、最大回撤、胜率等。

下面是该模型中因子值排名靠前的50只股票组合的超额收益净值曲线
Img

下面是进行分组回测的各分层组合收益情况,决策树所呈现出的分层效果并不理想,未能有明显的分层效果
Img

模型样本内(外)得分

与决策树回归模型相比,得分即是模型判断的正确率,决策树分类模型能更直观的展示决策效果,下面就是对该模型样本内与样本外得分情况进行了统计,在每个月月初截面期,将当前时间往前推 60 个月样本内模型得分记为score_p,将对下一期预测值实际得分记为score_r,统计得分如下
Img
可以看到,样本内与样本外得分差异还是较为明显的,将模型外推进行预测时,预测正确率波动较大。

模型因子特征重要性统计

在上篇决策树介绍中,我们提及过模型有很多属性和方法可以进行获取查看,
在具体的决策树模型构建中,我们将当期股票的各个因子作为输入特征,按照股票下月收益情况分为不同类别,也就是以股票下期收益为标签,以此进行模型训练。对于决策树这一非线性分类器,我们依然可以 通过特征划分过程来计算评估各个因子特征的重要性,
下面我们给出 2014-2019 年间39个模型的特征重要性评分均值柱状图
Img
综合历史的特征重要性信息来看,波动率、动量、Beta因子对股价的预测能力明显强于财务类因子,这也印证了A股市场投机行为显著的特性。

总结说明

这篇内容基本上是在展示机器学习中简单模型决策树的工具性,更多的是研究流程方法的说明,从如何构建模型,搭建回测的角度出发,到结果展示汇总。
就模型本身而言,虽然多头部分有超额收益,但是不足以证明该模型的优越性;模型的准确率也有待提高;特征重要性统计部分能获知哪些因子对股价影响较大。一定有很多比决策树更好的方法可以用,比如已知的模型中,由决策树作为基学习器的集成算法随机森林模型,就会比决策树模型要好,有一些认真好学的同学问我,为什么不直接用随机森林呢,那就试试吧, 核心的模型代码替换部分不算多,可以克隆代码进行操作,或者尝试更多的模型。


决策树在多因子模型中的应用¶

  • 第一部分:数据获取
  • 第二部分:模型构建
  • 第三部分:分层回溯
  • 第四部分:特征重要性
#工具函数
#工具函数
import time
from datetime import datetime, timedelta
import jqdata
import numpy as np
import pandas as pd
import math
from statsmodels import regression
import statsmodels.api as sm
import matplotlib.pyplot as plt
from jqfactor import get_factor_values
import datetime
from jqlib.technical_analysis import *
from scipy import stats

#设置画图样式
plt.style.use('ggplot')

#输入起止日期,返回所有自然日日期
def get_date_list(begin_date, end_date):
    dates = []
    dt = datetime.strptime(begin_date,"%Y-%m-%d")
    date = begin_date[:]
    while date <= end_date:
        dates.append(date)
        dt += timedelta(days=1)
        date = dt.strftime("%Y-%m-%d")
    return dates

#获取日期列表
def get_tradeday_list(start,end,frequency=None,count=None):
    if count != None:
        df = get_price('000001.XSHG',end_date=end,count=count)
    else:
        df = get_price('000001.XSHG',start_date=start,end_date=end)
    if frequency == None or frequency =='day':
        return df.index
    else:
        df['year-month'] = [str(i)[0:7] for i in df.index]
        if frequency == 'month':
            return df.drop_duplicates('year-month').index
        elif frequency == 'quarter':
            df['month'] = [str(i)[5:7] for i in df.index]
            df = df[(df['month']=='01') | (df['month']=='04') | (df['month']=='07') | (df['month']=='10') ]
            return df.drop_duplicates('year-month').index
        elif frequency =='halfyear':
            df['month'] = [str(i)[5:7] for i in df.index]
            df = df[(df['month']=='01') | (df['month']=='06')]
            return df.drop_duplicates('year-month').index 
        
def ret_se(start_date='2018-6-1',end_date='2018-7-1',stock_pool=None,weight=0):
    pool = stock_pool
    if len(pool) != 0:
        #得到股票的历史价格数据
        df = get_price(list(pool),start_date=start_date,end_date=end_date,fields=['close']).close
        df = df.dropna(axis=1)
        #获取列表中的股票流通市值对数值
        df_mkt = get_fundamentals(query(valuation.code,valuation.circulating_market_cap).filter(valuation.code.in_(df.columns)))
        df_mkt.index = df_mkt['code'].values
        fact_se =pd.Series(df_mkt['circulating_market_cap'].values,index = df_mkt['code'].values)
        fact_se = np.log(fact_se)
    else:
        df = get_price('000001.XSHG',start_date=start_date,end_date=end_date,fields=['close'])
        df['v'] = [1]*len(df)
        del df['close']
    #相当于昨天的百分比变化
    pct = df.pct_change()+1
    pct.iloc[0,:] = 1
    if weight == 0:
        #等权重平均收益结果
        se = pct.cumsum(axis=1).iloc[:,-1]/pct.shape[1]
        return se
    else:
        #按权重的方式计算
        se = (pct*fact_se).cumsum(axis=1).iloc[:,-1]/sum(fact_se)
        return se
    
#获取所有分组pct
def get_all_pct(pool_dict,trade_list,groups=5):
    num = 1
    for s,e in zip(trade_list[:-1],trade_list[1:]):
        stock_list = pool_dict[s]
        stock_num = len(stock_list)//groups
        if num == 0:
            pct_se_list = []
            for i in range(groups):
                pct_se_list.append(ret_se(start_date=s,end_date=e,stock_pool=stock_list[i*stock_num:(i+1)*stock_num]))
            pct_df1 = pd.concat(pct_se_list,axis=1)
            pct_df = pd.concat([pct_df,pct_df1],axis=0)
        else:
            pct_se_list = []
            for i in range(groups):
                pct_se_list.append(ret_se(start_date=s,end_date=e,stock_pool=stock_list[i*stock_num:(i+1)*stock_num]))
            pct_df = pd.concat(pct_se_list,axis=1)    
            num = 0
    return pct_df

def tradedays_before(date,count):#获取指定交易日往前推count天交易日
    date = get_price('000001.XSHG',end_date=date,count=count+1).index[0]
    return date

#进行新股、St股过滤,返回筛选后的股票
def filter_stock(stockList,date,days=21*3):
    
    #去除上市距beginDate不足3个月的股票
    def delect_stop(stocks,beginDate,n=days):
        stockList=[]
        beginDate = datetime.datetime.strptime(beginDate, "%Y-%m-%d")
        for stock in stocks:
            start_date=get_security_info(stock).start_date
            if start_date<(beginDate-datetime.timedelta(days=n)).date():
                stockList.append(stock)
        return stockList
    
    #剔除ST股
    st_data=get_extras('is_st',stockList, count = 1,end_date=date)
    stockList = [stock for stock in stockList if not st_data[stock][0]]
    
    #剔除停牌、新股及退市股票
    stockList=delect_stop(stockList,date)
    '''
    #剔除开盘涨跌停
    #如果需要收盘涨跌停可以改字段即可
    df = get_price(stockList,end_date=date,fields=['open','high_limit','low_limit'],count=1).iloc[:,0,:]
    df['h_limit']=(df['open']==df['high_limit'])
    df['l_limit']=(df['open']==df['low_limit'])
    stockList = [df.index[i] for i in range(len(df)) if not (df.h_limit[i] or df.l_limit[i])] #过滤涨跌停股票
    '''
    return stockList

第一部分 数据获取部分

#第一部分:数据获取,X,Y
#参数及工具函数部分
from jqfactor import *
import warnings  
warnings.filterwarnings('ignore') 
#因子数据获取函数
#获取时间为date的全部因子数据
def get_factor_data(stock,date):
    data=pd.DataFrame(index=stock)
    q = query(valuation,balance,cash_flow,income,indicator).filter(valuation.code.in_(stock))
    df = get_fundamentals(q, date)
    df['market_cap']=df['market_cap']*100000000
    factor_data=get_factor_values(stock,['roe_ttm','roa_ttm','total_asset_turnover_rate',\
                               'net_operate_cash_flow_ttm','net_profit_ttm','net_profit_ratio',\
                              'cash_to_current_liability','current_ratio',\
                             'gross_income_ratio','non_recurring_gain_loss',\
                            'operating_revenue_ttm','net_profit_growth_rate'],end_date=date,count=1)
    factor=pd.DataFrame(index=stock)
    for i in factor_data.keys():
        factor[i]=factor_data[i].iloc[0,:]
    df.index = df['code']
    data['code'] = df['code']
    del df['code'],df['id']
    #合并得大表
    df=pd.concat([df,factor],axis=1)
    #总市值取对数
    data['size_lg']=np.log(df['market_cap'])
    #净利润(TTM)/总市值
    data['EP']=df['net_profit_ttm']/df['market_cap']
    #净资产/总市值
    data['BP']=1/df['pb_ratio']
    #营业收入(TTM)/总市值
    data['SP']=1/df['ps_ratio']
    #净现金流(TTM)/总市值
    data['NCFP']=1/df['pcf_ratio']
    #经营性现金流(TTM)/总市值
    data['OCFP']=df['net_operate_cash_flow_ttm']/df['market_cap']
    #净利润同比增长率
    data['net_g'] = df['net_profit_growth_rate']
    #净利润(TTM)同比增长率/PE_TTM
    data['G/PE']=df['net_profit_growth_rate']/df['pe_ratio']
    #ROE_ttm
    data['roe_ttm']=df['roe_ttm']
    #ROE_YTD
    data['roe_q']=df['roe']
    #ROA_ttm
    data['roa_ttm']=df['roa_ttm']
    #ROA_YTD
    data['roa_q']=df['roa']
    #净利率
    data['netprofitratio_ttm'] = df['net_profit_ratio']
    #毛利率TTM
    data['grossprofitmargin_ttm']=df['gross_income_ratio']
    #毛利率YTD
    data['grossprofitmargin_q']=df['gross_profit_margin']

    #扣除非经常性损益后净利润率YTD
    data['profitmargin_q']=df['adjusted_profit']/df['operating_revenue']
    #资产周转率TTM
    data['assetturnover_ttm']=df['total_asset_turnover_rate']
    #总资产周转率YTD 营业收入/总资产
    data['assetturnover_q']=df['operating_revenue']/df['total_assets']
    #经营性现金流/净利润TTM
    data['operationcashflowratio_ttm']=df['net_operate_cash_flow_ttm']/df['net_profit_ttm']
    #经营性现金流/净利润YTD
    data['operationcashflowratio_q']=df['net_operate_cash_flow']/df['net_profit']
    #净资产
    df['net_assets']=df['total_assets']-df['total_liability']
    #总资产/净资产
    data['financial_leverage']=df['total_assets']/df['net_assets']
    #非流动负债/净资产
    data['debtequityratio']=df['total_non_current_liability']/df['net_assets']
    #现金比率=(货币资金+有价证券)÷流动负债
    data['cashratio']=df['cash_to_current_liability']
    #流动比率=流动资产/流动负债*100%
    data['currentratio']=df['current_ratio']
    #总市值取对数
    data['ln_capital']=np.log(df['market_cap'])
    #TTM所需时间
    his_date = [pd.to_datetime(date) - datetime.timedelta(90*i) for i in range(0, 4)]
    tmp = pd.DataFrame()
    tmp['code']=list(stock)
    for i in his_date:
        tmp_adjusted_dividend = get_fundamentals(query(indicator.code, indicator.adjusted_profit, \
                                                     cash_flow.dividend_interest_payment).
                                               filter(indicator.code.in_(stock)), date = i)
        tmp=pd.merge(tmp,tmp_adjusted_dividend,how='outer',on='code')

        tmp=tmp.rename(columns={'adjusted_profit':'adjusted_profit'+str(i.month), \
                                'dividend_interest_payment':'dividend_interest_payment'+str(i.month)})
    tmp=tmp.set_index('code')
    tmp_columns=tmp.columns.values.tolist()
    tmp_adjusted=sum(tmp[[i for i in tmp_columns if 'adjusted_profit'in i ]],1)
    tmp_dividend=sum(tmp[[i for i in tmp_columns if 'dividend_interest_payment'in i ]],1)
    #扣除非经常性损益后净利润(TTM)/总市值
    data['EPcut']=tmp_adjusted/df['market_cap']
    #近12个月现金红利(按除息日计)/总市值
    data['DP']=tmp_dividend/df['market_cap']
    #扣除非经常性损益后净利润率TTM
    data['profitmargin_ttm']=tmp_adjusted/df['operating_revenue_ttm']
    #营业收入(YTD)同比增长率
    #_x现在 _y前一年
    his_date = pd.to_datetime(date) - datetime.timedelta(365)
    name=['operating_revenue','net_profit','net_operate_cash_flow','roe']
    temp_data=df[name]
    his_temp_data = get_fundamentals(query(valuation.code, income.operating_revenue,income.net_profit,\
                                            cash_flow.net_operate_cash_flow,indicator.roe).
                                      filter(valuation.code.in_(stock)), date = his_date)
    his_temp_data=his_temp_data.set_index('code')
    #重命名 his_temp_data last_year
    for i in name:
        his_temp_data=his_temp_data.rename(columns={i:i+'last_year'})

    temp_data =pd.concat([temp_data,his_temp_data],axis=1)
    #营业收入(YTD)同比增长率
    data['sales_g_q']=temp_data['operating_revenue']/temp_data['operating_revenuelast_year']-1
    #净利润(YTD)同比增长率
    data['profit_g_q']=temp_data['net_profit']/temp_data['net_profitlast_year']-1
    #经营性现金流(YTD)同比增长率
    data['ocf_g_q']=temp_data['net_operate_cash_flow']/temp_data['net_operate_cash_flowlast_year']-1
    #ROE(YTD)同比增长率
    data['roe_g_q']=temp_data['roe']/temp_data['roelast_year']-1
    
    
    #计算beta部分
    #辅助线性回归的函数
    def linreg(X,Y,columns=3):
        X=sm.add_constant(array(X))
        Y=array(Y)
        if len(Y)>1:
            results = regression.linear_model.OLS(Y, X).fit()
            return results.params
        else:
            return [float("nan")]*(columns+1)
    #个股60个月收益与上证综指回归的截距项与BETA
    stock_close=get_price(list(stock), count = 12*20+1, end_date=date, frequency='daily', fields=['close'])['close']
    SZ_close=get_price('000001.XSHG', count = 12*20+1, end_date=date, frequency='daily', fields=['close'])['close']
    stock_pchg=stock_close.pct_change().iloc[1:]
    SZ_pchg=SZ_close.pct_change().iloc[1:]
    beta=[]
    stockalpha=[]
    for i in stock:
        temp_beta, temp_stockalpha = stats.linregress(SZ_pchg, stock_pchg[i])[:2]
        beta.append(temp_beta)
        stockalpha.append(temp_stockalpha)
    #此处alpha beta为list
    #data['alpha']=stockalpha
    data['beta']=beta
    
    #反转
    data['reverse_1m']=stock_close.iloc[-21]/stock_close.iloc[-1]-1
    data['reverse_3m']=stock_close.iloc[-63]/stock_close.iloc[-1]-1
    
    #波动率(一个月、三个月标准差)
    data['std_1m']=stock_close[-20:].std()
    data['std_3m']=stock_close[-60:].std()
    
    #换手率
    #tradedays_1m = get_tradeday_list(start=date,end=date,frequency='day',count=21)#最近一个月交易日
    tradedays_3m = get_tradeday_list(start=date,end=date,frequency='day',count=63)#最近一个月交易日
    data_turnover_ratio=pd.DataFrame()
    data_turnover_ratio['code']=list(stock)
    for i in tradedays_3m:
        q = query(valuation.code,valuation.turnover_ratio).filter(valuation.code.in_(stock))
        temp = get_fundamentals(q, i)
        data_turnover_ratio=pd.merge(data_turnover_ratio, temp,how='left',on='code')
        data_turnover_ratio=data_turnover_ratio.rename(columns={'turnover_ratio':i})
    data['turn_3m']= (data_turnover_ratio.set_index('code').T).mean()
    data['turn_1m']= (data_turnover_ratio.set_index('code').T)[-21:].mean()    
    '''
    #技术指标部分
    date_1 = tradedays_before(date,1)
    data['PSY']=pd.Series(PSY(stock, date_1, timeperiod=20))
    data['RSI']=pd.Series(RSI(stock, date_1, N1=20))
    data['BIAS']=pd.Series(BIAS(stock,date_1, N1=20)[0])
    dif,dea,macd=MACD(stock, date_1, SHORT = 10, LONG = 30, MID = 15)
    #data['DIF']=pd.Series(dif)
    #data['DEA']=pd.Series(dea)
    data['MACD']=pd.Series(macd)
    '''
    return data
#多期获取数据
#输入:指数名称,统计时间列表
#输出:字典,key为时间,vlaues为因子值数据

factor_data_dict = {}

#设置统计数据区间
index = '000905.XSHG' #中证500
date_start = '2009-1-1'
date_end   = '2019-1-1'

#获取交易日列表,每月首个交易日
date_list = get_tradeday_list(start=date_start,end=date_end,frequency='month',count=None)
#循环获取因子数据,并将值存在字典里面(耗时较长)
#并计算个期股票收益情况,加入指数涨跌幅
import time  
t1 = time.time()
for date_1,date_2 in zip(date_list[:-1],date_list[1:]):
    pool = get_index_stocks(index,date = date_1)
    pool = filter_stock(pool,str(date_1)[:10],days=21*3) #进行新股、ST股票过滤
    #计算指数涨跌幅
    df_1 = get_price(index,end_date=date_1,fields=['close'],count = 1)['close']
    df_2 = get_price(index,end_date=date_2,fields=['close'],count = 1)['close']
    index_pct = df_2.values[0]/df_1.values[0] - 1#具体数值
    
    #计算各股票涨跌幅
    df_1 = get_price(pool,end_date=date_1,fields=['close'],count = 1)['close']
    df_2 = get_price(pool,end_date=date_2,fields=['close'],count = 1)['close']
    df_3 = pd.concat([df_1,df_2],axis=0).T #进行合并
    stock_pct = df_3.iloc[:,1]/df_3.iloc[:,0] - 1 #计算pct,series
    
    #记录因子值
    factor_df = get_factor_data(pool,date=date_1) #进行因子值获取
    factor_df['init_pct'] = stock_pct
    factor_df['pct'] = stock_pct-index_pct
    del factor_df['code']
    
    #对数据进行处理、标准化、去极值、中性化
    factor_df = winsorize_med(factor_df, scale=3, inclusive=True, inf2nan=True, axis=0) #中位数去极值处理
    factor_df = standardlize(factor_df, inf2nan=True, axis=0) #对每列做标准化处理
    factor_df = neutralize(factor_df, how=['sw_l1', 'market_cap'], date=date_1, axis=0,fillna='sw_l1')#中性化
    factor_df['pct_init'] =  stock_pct-index_pct
    factor_df['pct_'] =  stock_pct
    factor_data_dict[date_1] = factor_df
t2 = time.time()
print('计算因子耗时:{0}'.format(t2-t1))
factor_data_dict[date_1].head(5)
计算因子耗时:1145.5814056396484
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
size_lg EP BP SP NCFP OCFP net_g G/PE roe_ttm roe_q roa_ttm roa_q netprofitratio_ttm grossprofitmargin_ttm grossprofitmargin_q profitmargin_q assetturnover_ttm assetturnover_q operationcashflowratio_ttm operationcashflowratio_q financial_leverage debtequityratio cashratio currentratio ln_capital EPcut DP profitmargin_ttm sales_g_q profit_g_q ocf_g_q roe_g_q beta reverse_1m reverse_3m std_1m std_3m turn_3m turn_1m init_pct pct pct_init pct_
000006.XSHE -0.077817 1.022843 -0.602105 -1.089261 -1.690606 0.147160 -0.019733 -0.671067 1.540722 0.341068 1.626340 0.662259 1.434476 0.132095 0.385895 1.152251 0.061247 0.167706 -0.249980 1.733690 -1.117797 -1.064845 1.114055 0.403413 -0.077817 1.730939 -0.743708 1.838809 0.650402 0.243165 1.226862 0.248770 0.314806 -0.115978 -0.340048 -0.173895 -0.217768 1.133665 1.336548 -0.016822 -0.016822 0.048918 0.099206
000008.XSHE 0.318744 0.442186 -0.239901 -1.021916 -0.353649 -0.936245 1.302409 1.288474 0.521635 -0.619642 1.184582 -0.286871 1.819247 1.232121 1.221166 0.623923 -0.642162 -0.778225 -1.075468 -0.326893 -1.278588 -1.032454 -0.537143 0.567402 0.318744 -0.666567 -0.870062 -0.032160 0.760546 -0.329002 -0.287981 -0.371484 -1.893115 -0.786041 -0.266331 -0.557842 -0.623865 1.174789 1.514848 -1.856744 -1.856744 -0.137645 -0.087356
000009.XSHE 0.059027 -0.288493 -0.858187 0.737852 1.266018 0.668415 -0.594483 -0.461260 -0.082877 -0.307023 -0.144768 -0.098511 -0.919138 0.770937 0.846138 -0.286520 0.332105 0.308008 0.394805 1.820813 0.975812 1.050637 -0.102593 -0.111634 0.059027 0.224068 0.832473 -0.138303 0.322757 -1.032347 1.423243 -1.632225 0.801086 0.333655 0.090969 0.248720 -0.004989 0.071895 0.110714 0.937600 0.937600 0.168074 0.218362
000012.XSHE 0.136297 -1.030894 -0.277389 -0.274747 1.476351 0.032150 -1.458816 -1.832720 -0.503143 -0.992636 -0.487247 -0.940615 -0.599767 -0.429434 -0.386729 -0.644088 0.060920 -0.231125 0.701075 1.463804 -0.213630 0.528676 0.315127 -0.576583 0.136297 0.371685 0.396632 0.057958 -1.145115 -1.296244 -0.251740 -1.064579 -0.025827 0.746286 0.276546 -0.471837 -0.484961 -1.771504 -1.472941 -0.207813 -0.207813 -0.012103 0.038186
000021.XSHE 0.063854 1.037131 0.604084 2.067482 1.748452 1.288336 0.870117 0.651142 0.552214 1.791641 0.175554 1.216013 -0.526307 -1.782653 -1.766242 -0.473181 1.891939 2.143147 0.810513 0.433656 0.701762 -0.484696 -0.575940 -1.168946 0.063854 -0.043852 0.583482 -0.485850 0.486683 0.949440 1.676843 1.343296 0.276628 -0.397713 0.020647 -0.620988 -0.665743 -1.513322 -1.475897 1.245757 1.245757 0.101726 0.152015

下面两段代码将因子值存储

主要是方便下次使用的时候不用计算

#将计算出来的因子值进行存储
#使用pickle模块将数据对象保存到文件
import pickle
pkl_file = open('factor_data_10year.pkl', 'wb')
pickle.dump(factor_data_dict, pkl_file, 0)
pkl_file.close()
#读取计算出来的因子值
import pickle
pkl_file = open('factor_data_10year.pkl', 'rb')
factor_data_dict = pickle.load(pkl_file)
pkl_file.close()
#数据合并,用于模型训练
#将字典组成一个无日期的大表
all_data = pd.DataFrame()
for d in date_list[:60]:
    all_data = pd.concat([all_data,factor_data_dict[d]],axis=0) #进行纵向拼接
print(d)
print(all_data.shape)
all_data.head(5)
2013-12-02 00:00:00
(29953, 43)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
size_lg EP BP SP NCFP OCFP net_g G/PE roe_ttm roe_q roa_ttm roa_q netprofitratio_ttm grossprofitmargin_ttm grossprofitmargin_q profitmargin_q assetturnover_ttm assetturnover_q operationcashflowratio_ttm operationcashflowratio_q financial_leverage debtequityratio cashratio currentratio ln_capital EPcut DP profitmargin_ttm sales_g_q profit_g_q ocf_g_q roe_g_q beta reverse_1m reverse_3m std_1m std_3m turn_3m turn_1m init_pct pct pct_init pct_
000005.XSHE 0.218419 -1.421841 -1.411739 -0.776978 0.826656 0.278145 -1.515751 -0.513046 -1.037885 0.008567 -0.795807 0.062137 -1.129902 1.037291 0.919271 1.452092 -0.437273 -0.132339 -0.792417 1.712005 -0.615734 -1.899612 1.545444 -2.577693 0.218419 -1.111687 -1.425837 -0.975547 0.780701 -0.283862 1.824256 -0.009487 -1.909712 -1.016695 -0.206580 -0.518062 -0.118213 -0.267275 0.168485 -0.236400 -0.236400 -0.020736 0.121094
000006.XSHE 0.289643 1.550919 -0.051024 0.104479 -1.397705 -0.841481 1.200496 1.638472 1.525065 -0.409914 0.578651 -0.376942 0.958430 0.992241 0.871384 -0.513885 -0.119323 -0.312312 -0.795852 1.712330 1.466390 0.693585 -1.462381 0.347261 0.289643 1.712075 1.585837 1.215114 -1.340155 -0.647242 -0.323988 -0.424979 0.493861 -0.643682 -0.215120 -0.814858 -0.751414 0.006056 0.277672 -0.983345 -0.983345 -0.087284 0.054545
000016.XSHE 0.192169 1.196074 1.291352 1.212567 1.157052 -0.491948 1.445536 1.165302 -0.253739 -0.050230 -0.543191 -0.487930 -0.414085 -0.222880 -0.142152 -0.239674 0.642469 0.609054 -0.259461 -0.366880 0.608672 -0.034761 0.354808 -0.273792 0.192169 1.413782 -0.541245 -0.409126 -0.030765 0.974871 -0.842630 0.759949 0.652941 1.373805 0.088552 -0.985765 -1.435069 0.323509 0.113997 0.502629 0.502629 -0.031440 0.110390
000028.XSHE 0.277450 -0.308382 -0.703722 1.662619 0.190830 -0.262868 -0.154040 -0.272183 1.197975 1.054561 -0.685484 -0.116961 -1.147488 -1.798518 -1.642518 -0.924265 1.546786 1.496096 -0.092625 0.201519 2.207526 0.758136 0.389747 -0.737857 0.277450 -0.403217 -0.856295 -1.239574 0.026092 -0.326210 1.323509 -0.354979 -0.981094 -0.732697 -0.762168 1.623814 1.130594 -1.172624 -1.187910 -1.324751 -1.324751 -0.173156 -0.031327
000029.XSHE 0.310393 -1.165401 -0.849878 -0.362983 -0.325705 0.203973 0.813398 0.039584 -0.816394 -0.307014 -0.553856 -0.251988 -1.017622 -0.083033 -0.490529 -0.138693 0.159533 0.227901 -0.296634 -1.680921 -0.717029 0.043151 -0.589434 -0.001819 0.310393 -0.876422 -1.255630 -0.640484 -1.113069 0.044635 -1.597728 0.271376 0.860960 1.227973 0.058875 -0.021316 -0.081549 -0.085908 -0.422587 -0.548962 -0.548962 -0.052610 0.089219

空值检查

for colu in all_data.columns:
    if sum(all_data[colu].isnull())> 0.2*len(all_data[colu]):
        print('因子:%s缺失值较多,不做为统计特征处理'%colu)
        del all_data[colu]
all_data.shape
(29953, 43)
#进行空值处理
for colu in all_data.columns:
    if sum(all_data[colu].isnull())> 0:#0.05*len(all_data[colu]):
        all_data[colu].fillna(all_data[colu].mean(),inplace=True)
        #del all_data[colu]
all_data.shape
(29953, 43)

第二部分 模型搭建 进行因子值预测

  • 滚动获取因子数据与y
  • 滚动拟合模型
  • 预测y值
  • 保持预测值格式,对接回测
  • 记录特征重要性,样本内样本外得分
#第二部分:决策树模型
from sklearn import tree
from sklearn.model_selection import train_test_split #对数据进行随机划分

进行分类方法处理

#进行因子值预测(分类方式)
df_y = pd.DataFrame()
df_score = pd.DataFrame(index = ['score_p','score_r'])
colus = factor_data_dict[date_list[60]].columns[:-4]
df_features_c = pd.DataFrame(index=colus)

for i in range(60,len(date_list)-1):
    print('正在计算{0}...数据'.format(date_list[i]))

    #数据合并,用于模型训练
    #将字典组成一个无日期的大表
    all_data = pd.DataFrame()
    for d in date_list[i-60:i]:
        all_data = pd.concat([all_data,factor_data_dict[d]],axis=0) #进行纵向拼接

    #空值NAN值处理
    for colu in all_data.columns:
        if sum(all_data[colu].isnull())> 0.2*len(all_data[colu]):
            print('因子:%s缺失值较多,不做为统计特征处理'%colu)
            del all_data[colu]
    #进行空值处理
    for colu in all_data.columns:
        if sum(all_data[colu].isnull())> 0:#0.05*len(all_data[colu]):
            all_data[colu].fillna(all_data[colu].mean(),inplace=True)
            #del all_data[colu]

    #获取前三分之一和后三分之一的数据
    all_data = all_data.sort_values('pct_init')
    #print(all_data.shape)
    all_data['num'] = list(range(len(all_data)))
    all_data = all_data[(all_data['num']<=len(all_data)/3) | (all_data['num']>=2*len(all_data)/3)]

    #print(all_data.shape)

    #记录标签y
    y1 = (all_data["pct_init"]>0).astype("int") #走完流程在改?
    y  = all_data['pct_init']
    x = all_data.iloc[:,:-5]
    
    X_train, X_test, y_train, y_test = train_test_split(x,y1.values, test_size=0.3)
    #建立最大深度为2的决策树,并用测试数据来训练这颗树
    clf = tree.DecisionTreeClassifier(max_depth = 6
                                         )
    clf = clf.fit(X_train, y_train) #模型训练
    s_p = clf.score(X_test,y_test)#样本内得分
    #print(clf.score(X_test,y_test)) #模型得分
    
    #模型预测
    factor_df_temp = factor_data_dict[date_list[i]].iloc[:,:-4]
    factor_df_temp1 = factor_df_temp.dropna(axis=0)
    
    df_temp = pd.DataFrame(index=factor_df_temp1.index)
    df_temp[date_list[i]] = [i[1] for i in clf.predict_proba(factor_df_temp1)]
    
    #记录模型真实数据得分
    y_t = factor_data_dict[date_list[i]].dropna()
    x_s = y_t.iloc[:,:-4]
    y_s = (y_t["pct_init"]>0).astype("int")
    s_r = clf.score(x_s,y_s)
    
    df_score[date_list[i]] = [s_p,s_r]
    #记录特征重要性
    df_features_c[date_list[i]] = clf.feature_importances_
    
    df_y = pd.concat([df_y,df_temp],axis=1) #进行横向拼接
df_y
正在计算2014-01-02 00:00:00...数据
(19969, 44)
正在计算2014-02-07 00:00:00...数据
(19969, 44)
正在计算2014-03-03 00:00:00...数据
(19969, 44)
正在计算2014-04-01 00:00:00...数据
(19969, 44)
正在计算2014-05-05 00:00:00...数据
(19967, 44)
正在计算2014-06-03 00:00:00...数据
(19969, 44)
正在计算2014-07-01 00:00:00...数据
(19971, 44)
正在计算2014-08-01 00:00:00...数据
(19971, 44)
正在计算2014-09-01 00:00:00...数据
(19971, 44)
正在计算2014-10-08 00:00:00...数据
(19971, 44)
正在计算2014-11-03 00:00:00...数据
(19971, 44)
正在计算2014-12-01 00:00:00...数据
(19971, 44)
正在计算2015-01-05 00:00:00...数据
(19971, 44)
正在计算2015-02-02 00:00:00...数据
(19971, 44)
正在计算2015-03-02 00:00:00...数据
(19971, 44)
正在计算2015-04-01 00:00:00...数据
(19971, 44)
正在计算2015-05-04 00:00:00...数据
(19973, 44)
正在计算2015-06-01 00:00:00...数据
(19975, 44)
正在计算2015-07-01 00:00:00...数据
(19975, 44)
正在计算2015-08-03 00:00:00...数据
(19975, 44)
正在计算2015-09-01 00:00:00...数据
(19975, 44)
正在计算2015-10-08 00:00:00...数据
(19975, 44)
正在计算2015-11-02 00:00:00...数据
(19975, 44)
正在计算2015-12-01 00:00:00...数据
(19975, 44)
正在计算2016-01-04 00:00:00...数据
(19975, 44)
正在计算2016-02-01 00:00:00...数据
(19975, 44)
正在计算2016-03-01 00:00:00...数据
(19975, 44)
正在计算2016-04-01 00:00:00...数据
(19975, 44)
正在计算2016-05-03 00:00:00...数据
(19975, 44)
正在计算2016-06-01 00:00:00...数据
(19975, 44)
正在计算2016-07-01 00:00:00...数据
(19973, 44)
正在计算2016-08-01 00:00:00...数据
(19973, 44)
正在计算2016-09-01 00:00:00...数据
(19973, 44)
正在计算2016-10-10 00:00:00...数据
(19973, 44)
正在计算2016-11-01 00:00:00...数据
(19975, 44)
正在计算2016-12-01 00:00:00...数据
(19975, 44)
正在计算2017-01-03 00:00:00...数据
(19975, 44)
正在计算2017-02-03 00:00:00...数据
(19975, 44)
正在计算2017-03-01 00:00:00...数据
(19975, 44)
正在计算2017-04-05 00:00:00...数据
(19975, 44)
正在计算2017-05-02 00:00:00...数据
(19975, 44)
正在计算2017-06-01 00:00:00...数据
(19979, 44)
正在计算2017-07-03 00:00:00...数据
(19981, 44)
正在计算2017-08-01 00:00:00...数据
(19981, 44)
正在计算2017-09-01 00:00:00...数据
(19981, 44)
正在计算2017-10-09 00:00:00...数据
(19981, 44)
正在计算2017-11-01 00:00:00...数据
(19981, 44)
正在计算2017-12-01 00:00:00...数据
(19981, 44)
正在计算2018-01-02 00:00:00...数据
(19981, 44)
正在计算2018-02-01 00:00:00...数据
(19981, 44)
正在计算2018-03-01 00:00:00...数据
(19981, 44)
正在计算2018-04-02 00:00:00...数据
(19981, 44)
正在计算2018-05-02 00:00:00...数据
(19981, 44)
正在计算2018-06-01 00:00:00...数据
(19981, 44)
正在计算2018-07-02 00:00:00...数据
(19979, 44)
正在计算2018-08-01 00:00:00...数据
(19979, 44)
正在计算2018-09-03 00:00:00...数据
(19979, 44)
正在计算2018-10-08 00:00:00...数据
(19979, 44)
正在计算2018-11-01 00:00:00...数据
(19979, 44)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
2014-01-02 00:00:00 2014-02-07 00:00:00 2014-03-03 00:00:00 2014-04-01 00:00:00 2014-05-05 00:00:00 2014-06-03 00:00:00 2014-07-01 00:00:00 2014-08-01 00:00:00 2014-09-01 00:00:00 2014-10-08 00:00:00 2014-11-03 00:00:00 2014-12-01 00:00:00 2015-01-05 00:00:00 2015-02-02 00:00:00 2015-03-02 00:00:00 2015-04-01 00:00:00 2015-05-04 00:00:00 2015-06-01 00:00:00 2015-07-01 00:00:00 2015-08-03 00:00:00 2015-09-01 00:00:00 2015-10-08 00:00:00 2015-11-02 00:00:00 2015-12-01 00:00:00 2016-01-04 00:00:00 2016-02-01 00:00:00 2016-03-01 00:00:00 2016-04-01 00:00:00 2016-05-03 00:00:00 2016-06-01 00:00:00 2016-07-01 00:00:00 2016-08-01 00:00:00 2016-09-01 00:00:00 2016-10-10 00:00:00 2016-11-01 00:00:00 2016-12-01 00:00:00 2017-01-03 00:00:00 2017-02-03 00:00:00 2017-03-01 00:00:00 2017-04-05 00:00:00 2017-05-02 00:00:00 2017-06-01 00:00:00 2017-07-03 00:00:00 2017-08-01 00:00:00 2017-09-01 00:00:00 2017-10-09 00:00:00 2017-11-01 00:00:00 2017-12-01 00:00:00 2018-01-02 00:00:00 2018-02-01 00:00:00 2018-03-01 00:00:00 2018-04-02 00:00:00 2018-05-02 00:00:00 2018-06-01 00:00:00 2018-07-02 00:00:00 2018-08-01 00:00:00 2018-09-03 00:00:00 2018-10-08 00:00:00 2018-11-01 00:00:00
000006.XSHE 0.658940 0.532413 0.544107 0.411765 0.530973 0.542315 0.553860 0.611413 0.456059 0.546445 0.478465 0.593874 0.471284 0.610757 0.580205 0.347783 0.505348 0.793103 0.475219 0.473568 0.436263 0.500534 0.528905 0.402266 0.430657 0.544554 0.525346 0.441176 0.261146 0.574270 0.513089 0.564706 0.327044 0.536718 0.551002 0.621170 0.475983 0.465409 0.662621 0.703704 0.532328 0.406877 0.514706 0.477193 0.616438 0.526055 0.457774 0.390625 0.498242 0.582215 0.566351 0.611940 0.662382 0.509733 0.476807 0.774194 0.503650 0.442251 0.498455
000008.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.390977 0.468750 0.487945 0.635228 0.530405 0.472727 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.511290 0.689189 0.447995 0.401611 0.739130
000009.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.361516 0.458763 0.498836 0.470523 0.450318 0.489021 0.511290 0.445087 0.447995 0.688822 0.498455
000012.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.471284 0.486943 0.450637 0.549505 0.425703 0.452622 0.447754 0.484153 0.581767 0.571923 0.528803 0.648318 0.399211 0.526746 0.449206 0.647256 0.533662 0.481718 0.507299 0.669903 0.231250 0.536729 0.325991 0.307359 0.496585 0.636364 0.605000 0.166667 0.562431 0.461957 0.727941 0.481321 0.565851 0.471213 0.555689 0.431429 0.401848 0.454545 0.498836 0.600624 0.554585 0.407543 0.571042 0.498027 0.386986 0.315789 0.538905
000021.XSHE 0.470508 0.510882 0.403101 0.550206 0.549082 0.542315 0.525986 0.611413 0.456059 0.615132 0.478465 0.479948 0.567594 0.500779 0.580205 0.552356 0.555069 0.553562 0.093750 0.502678 0.581767 0.571923 0.747573 0.416991 0.392357 0.396009 0.646853 0.428965 0.162162 0.574270 0.507299 0.085714 0.461056 0.536729 0.473239 0.307359 0.589777 0.480769 0.469219 0.568584 0.562431 0.567223 0.472982 0.399783 0.546053 0.559596 0.489394 0.541935 0.401848 0.458763 0.833333 0.633779 0.595883 0.684492 0.571042 0.785235 0.704545 0.688822 0.601250
000025.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.470588 0.465409 0.162791 0.575290 0.461698 0.445689 0.125000 0.411404 0.258503 0.527578 0.425840 0.556437 0.556416 0.417755 0.559980 0.609244 0.410870 0.509733 0.511290 0.774194 0.447995 0.401611 0.449474
000027.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.457547 0.558506 0.565851 0.471213 0.555689 0.625753 0.576155 0.516403 0.498836 0.633779 0.494751 0.591731 0.565412 0.623003 0.548456 0.570410 0.464960
000028.XSHE 0.437443 0.413621 0.567797 0.330579 0.343434 0.503741 0.553860 0.418737 0.536232 0.546445 0.532864 0.502769 0.425430 0.469767 0.445545 0.552356 0.456818 0.553562 0.522199 0.495482 0.364049 0.494432 0.528803 0.648318 0.466395 0.145455 0.071429 0.428965 0.714286 0.574270 0.469459 0.469512 0.621469 0.909091 0.546053 0.220000 0.585903 0.354286 0.437500 0.401021 0.587669 0.461957 0.478599 0.461350 0.697514 0.600592 0.613487 0.481675 0.888889 0.543779 0.682231 0.542079 0.554585 0.591731 0.361582 0.498027 0.474088 0.481132 0.464396
000030.XSHE 0.714286 0.487671 0.440000 0.490741 0.569472 0.509174 0.553860 0.611413 0.642469 0.406817 0.593790 0.485110 0.567594 0.500779 0.580205 0.443396 0.505348 0.500000 0.502706 0.473568 0.312000 0.571923 0.528803 0.506470 0.392357 0.396009 0.525346 0.449355 0.695195 0.643123 0.617921 0.592451 0.563380 0.536718 0.457906 0.514612 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000031.XSHE 0.766667 0.532413 0.538981 0.574592 0.549082 0.552192 0.443631 0.707317 0.627530 0.702381 0.593790 0.485110 0.381166 0.500779 0.541322 0.488660 0.420571 0.553562 0.324607 0.251701 0.364049 0.438303 0.592157 0.697581 0.610465 0.475394 0.762821 0.527295 0.587002 0.546429 0.617921 0.555233 0.487945 0.536729 0.547038 0.520813 0.363380 0.539216 0.471698 0.677258 0.403738 0.461957 0.654867 0.461350 0.480000 0.402566 0.603083 0.371930 0.599045 0.352113 0.414088 0.619469 0.585492 0.659300 0.641689 0.466019 0.178571 0.637097 0.558449
000039.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.090909 0.558506 0.420520 0.612440 1.000000 0.650602 0.190476 0.566421 0.559980 0.542079 0.307692 0.591731 0.690678 0.785235 0.653061 0.638621 0.601250
000042.XSHE 0.535948 0.532413 0.340000 0.411765 0.686275 0.950000 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000049.XSHE 0.437443 0.588542 0.567797 0.411765 0.294643 0.509174 0.656566 0.512853 0.315217 0.504599 0.532864 0.593874 0.601626 0.438849 0.479741 0.191304 0.498195 0.545614 0.475219 0.495482 0.472527 0.553103 0.795455 0.489950 0.552419 0.526746 0.486717 0.441176 0.714286 0.511111 0.541109 0.469512 0.480944 0.355586 0.083333 0.514612 0.436559 0.365385 0.469219 0.355450 0.266667 0.525164 1.000000 0.556688 0.616438 0.612440 0.603083 0.425926 0.611650 0.516216 0.459722 0.714286 0.662382 0.509733 0.857143 0.375000 0.607463 0.906977 0.474766
000050.XSHE 0.543716 0.680000 0.538981 0.465438 0.262136 0.503741 0.592593 0.270655 0.427885 0.260417 0.695864 0.474041 0.425430 0.664122 0.328767 0.488660 0.555069 0.553562 NaN NaN NaN NaN NaN NaN 0.295858 0.582843 0.377119 0.441176 0.467647 0.463896 0.426396 0.103448 0.492320 0.536729 0.663004 0.569231 0.589777 0.599026 0.515267 0.239669 0.587669 0.436331 0.431851 0.411404 0.480000 0.471213 0.501742 0.452685 0.470000 0.566421 0.498836 0.542079 0.554585 0.591731 NaN NaN NaN NaN NaN
000061.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.472982 0.573333 0.565851 0.471213 0.417323 0.750000 0.361516 0.454545 0.490991 0.410678 0.494751 0.489021 0.377119 0.498027 0.548456 0.570410 0.538905
000062.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.525974 0.504386 0.031250 0.443396 0.489159 0.460067 0.326425 0.344340 0.333333 0.494432 0.451053 0.487365 0.515991 0.544554 0.500000 0.606742 0.587002 0.336735 0.592814 0.580119 0.543882 0.547445 0.651606 0.445638 0.494792 0.637562 0.529412 0.575290 0.459459 0.406877 0.431851 0.399783 0.525547 0.504274 0.555689 0.462687 0.361516 0.454545 0.498836 0.470523 0.554585 0.550406 0.641689 0.572093 0.607463 0.515856 0.601250
000066.XSHE 0.470508 0.460490 0.403101 0.487805 0.459662 0.461453 1.000000 0.454397 0.456059 0.379447 0.557377 0.502769 0.431280 0.312871 0.479741 0.542857 0.634146 0.227848 0.543734 0.339506 0.432709 0.700000 0.491315 0.495512 0.466395 0.391304 0.071429 0.478261 0.471780 0.000000 0.513089 0.488315 0.339623 0.590778 0.473239 1.000000 0.352359 0.465409 0.563981 0.740741 0.461698 0.552367 0.359788 0.461350 0.438312 0.471213 0.425840 0.438758 0.576155 0.516403 0.322222 0.289902 0.406250 0.403101 0.571042 0.491477 0.447995 0.556069 0.558449
000078.XSHE 0.434343 0.453904 0.457143 0.490934 0.417466 0.542315 0.443631 0.270655 0.445205 0.303136 0.392000 0.254717 0.471284 0.486943 0.316406 0.191304 0.272989 0.326233 0.447754 0.362348 0.436263 0.397340 0.700000 0.329616 0.399211 0.396009 0.449206 0.527295 0.380531 0.463896 0.490614 0.555233 0.492320 0.536729 0.473239 0.501089 0.496585 0.505898 0.253086 0.568584 0.587669 0.550716 0.614072 0.477193 0.616438 0.334294 0.607889 0.462687 0.556416 0.325000 0.862745 0.542079 0.552239 0.489021 0.511290 0.572700 0.704545 0.631164 0.622093
000088.XSHE 0.434343 0.549801 0.613662 0.574592 0.569472 0.509174 0.592593 0.573407 0.495726 0.546445 0.478465 0.485110 0.468208 0.545519 0.482759 0.549505 0.489159 0.466377 0.875000 0.670588 0.333333 0.474206 0.645503 0.638743 0.576679 0.478469 0.260870 0.504266 0.598473 0.463896 0.469459 0.488315 0.581967 0.536718 0.415263 0.501089 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000089.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.589777 0.496054 0.583748 0.568584 0.485520 0.426667 0.523474 0.513097 0.565851 0.450000 0.425840 0.371930 0.380000 0.411051 0.559980 0.542079 0.554585 0.510309 0.545076 0.572093 0.397163 0.442251 0.601250
000090.XSHE 0.502976 0.510882 0.818182 0.647059 0.417466 0.542315 0.225000 0.611413 0.562919 0.615132 0.692460 0.459375 0.567594 0.556420 0.580205 0.488660 0.567976 0.375000 0.543734 0.566584 0.732591 0.553103 0.528803 0.416991 0.581612 0.582843 0.596197 0.358025 0.446837 0.456328 0.469459 0.475610 0.480944 0.355586 0.415263 0.392989 0.496585 0.599026 0.583748 0.473684 0.000000 0.319415 0.514706 0.391892 0.453196 0.471213 0.474453 0.452685 0.498242 0.458763 0.452381 0.470523 0.450318 0.407543 0.511290 0.421687 0.473763 0.442251 0.408284
000099.XSHE 0.424749 0.377528 0.514480 0.529412 0.540741 0.461453 0.457364 0.456583 0.508076 0.406817 0.364154 0.772727 0.525974 0.545519 0.482759 0.523663 0.420571 0.479224 0.680272 0.443719 0.364049 0.797980 0.451053 0.697581 0.399211 0.526746 0.762821 0.530435 0.305322 0.061224 0.504762 0.564706 0.491892 0.536729 0.790698 0.574956 0.559659 0.496054 0.515267 0.568584 0.355263 0.332767 0.523474 0.399783 0.565851 0.402566 0.457774 0.493902 0.556416 0.454545 0.347518 0.490909 0.450318 0.489021 NaN NaN NaN NaN NaN
000156.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.576155 0.516403 0.498836 0.542079 0.405952 0.600000 0.433498 0.575334 0.178571 0.556069 0.464396
000158.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.388986 0.468750 0.492320 0.536729 0.473239 0.574956 0.402027 0.505898 0.515267 0.473684 0.428302 0.383621 0.274194 0.461350 0.420520 0.471213 0.613487 0.481675 0.576155 0.516403 0.682231 0.542079 0.554585 0.365967 0.396901 0.498027 0.607463 0.556069 0.558449
000400.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.490614 0.592451 0.487945 0.469314 0.415263 0.514612 0.494792 0.480769 0.542802 0.584814 0.548523 0.567223 0.431851 0.588710 0.605839 0.474747 0.613487 0.462687 0.576155 0.678668 0.682231 0.741935 0.595883 0.591731 0.565412 0.785235 0.521802 0.268966 0.364706
000401.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.522199 0.574074 0.528460 0.500534 0.635638 0.416991 0.493671 0.396009 0.316667 0.428965 0.622222 0.463287 0.490614 0.475610 0.620690 0.461279 0.325991 0.690476 0.536232 0.469426 0.469219 0.568584 0.403738 0.383621 0.431851 0.461350 0.502509 0.471213 0.372960 0.625753 0.576155 0.566421 0.459722 0.289902 0.450318 0.365967 0.377119 0.481106 0.764228 0.694690 0.474359
000409.XSHE 0.424749 0.371758 0.320000 0.296089 0.569364 0.509174 0.483333 0.456583 0.225000 0.406817 0.454155 0.463235 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000413.XSHE 0.375676 0.664587 0.369369 0.606952 0.686275 0.455466 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000415.XSHE 0.535948 0.549801 0.440000 0.490934 0.549082 0.542315 0.513473 0.542567 0.562919 0.546445 0.517937 0.485110 0.567594 0.610757 0.439716 0.671642 0.588525 0.565657 0.522199 0.502678 0.581767 0.571923 0.590323 0.506470 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000417.XSHE 0.535948 0.823529 0.538981 0.574592 0.549082 0.417143 0.608696 0.697531 0.456059 0.546445 0.692460 0.434871 0.381166 0.531507 0.672156 0.347783 0.420571 0.326233 0.447754 0.362348 0.436263 0.474206 0.528905 0.648318 0.399211 0.526746 0.449206 0.540816 0.533662 0.511111 0.657343 0.592451 0.853659 0.669145 0.626016 0.514612 0.611413 0.637562 0.414729 0.528926 0.532328 0.666667 0.616123 0.593520 0.480000 0.322034 0.742173 0.471453 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
603228.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.472982 0.556688 0.502509 0.484615 0.432225 0.404762 0.528416 0.516216 0.459722 0.484496 0.585492 0.284722 0.571042 0.421687 0.481352 0.556901 0.464396
603328.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.471284 0.412856 0.580205 0.523553 0.498195 0.326233 0.447754 0.473568 0.491394 0.388781 0.484536 0.329616 0.552419 0.396009 0.579439 0.504266 0.533662 0.463287 0.507299 0.360169 0.480944 0.536718 0.551002 0.402662 0.411273 0.601036 0.606383 0.244681 0.453767 0.257642 0.460993 0.670732 0.510256 0.402566 1.000000 0.625753 0.576155 0.678668 0.486181 0.600624 0.256410 0.587654 0.545076 0.623003 0.653061 0.462626 0.718631
603355.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.473164 0.475394 0.486717 0.527295 0.533662 0.430809 0.294574 0.580119 0.480944 0.355586 0.374302 0.514612 0.494792 0.429530 0.175676 0.401021 0.428302 0.525164 0.472982 0.556688 0.502509 0.471213 0.372960 0.493902 0.484241 0.454023 0.456961 0.513208 0.529600 0.510309 0.511290 0.421687 0.473763 0.520492 0.601250
603366.XSHG 0.658940 0.453904 0.440000 0.376415 0.564254 0.533333 0.723005 0.456583 0.508076 0.406817 0.536545 0.661290 0.574956 0.610757 0.472785 0.514563 0.656489 0.479224 0.450413 0.566584 0.510095 0.638889 0.493333 0.603645 0.581612 0.474847 0.522673 0.516691 0.592541 0.623094 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603369.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.471284 0.412856 0.578171 0.523553 0.636364 0.331950 0.556270 0.456522 0.723077 0.553103 0.528905 0.416991 0.581612 0.582843 0.525346 0.504266 0.592541 0.038462 NaN NaN NaN NaN NaN NaN 0.496585 0.525316 0.253086 0.578009 0.532328 0.660287 0.602484 0.513097 0.441472 0.526055 0.504274 0.625753 0.556416 0.566421 0.414088 0.470523 0.598266 0.509733 0.426791 0.562500 0.481352 0.401611 0.498455
603377.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.496585 0.525316 0.409449 0.486741 0.216495 0.681818 0.523474 0.461350 0.565851 0.527578 0.417323 0.390625 0.380000 0.561014 0.414088 0.470523 0.494751 0.587654 0.393829 1.000000 0.736842 0.419940 0.464960
603444.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.472982 0.556688 0.502509 0.527578 0.474453 0.404762 0.528416 0.458763 0.456897 0.435277 0.159091 0.620690 0.530612 0.491477 0.503650 0.419940 0.474766
603515.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.376176 0.461350 0.441472 0.504274 1.000000 0.438758 0.000000 0.411051 0.486181 0.600624 0.405952 0.120000 0.225256 0.341176 0.481352 0.556901 0.626263
603528.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.496585 0.455556 0.583748 0.486741 0.453767 0.257642 0.491071 0.593520 0.502509 0.527578 0.618115 0.295597 0.413374 0.458763 0.456961 0.435277 0.000000 0.606557 NaN NaN NaN NaN NaN
603555.XSHG NaN NaN NaN NaN NaN NaN 0.314655 0.512853 0.445205 0.521688 0.364154 0.474041 0.418919 1.000000 0.553571 0.369565 0.420571 0.460067 0.447754 0.410596 0.491394 0.397340 0.451053 0.392917 0.295858 0.499182 0.486717 0.441176 0.446837 0.430809 0.426396 0.362283 0.510638 0.428830 0.415263 0.402284 0.436559 0.469426 0.469219 0.568584 0.461698 0.550716 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603556.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.472982 0.556688 0.502509 0.527578 0.603083 0.625753 0.420290 0.582215 0.608081 0.484496 0.159091 0.481481 0.511290 0.575334 0.607463 0.442251 0.498455
603567.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.473164 0.499182 0.486717 0.527295 0.540000 0.463287 0.294574 0.571429 0.480944 0.536729 0.528455 0.448718 0.516738 0.514957 0.333333 0.677258 0.660291 0.550716 0.585129 0.481321 0.565851 0.471213 0.555689 0.625753 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603568.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.610465 0.475394 0.486717 0.419142 0.533662 0.430809 0.710938 0.580119 0.554731 0.735849 0.551002 0.125000 0.615000 0.514957 0.175676 0.200000 0.453767 0.525164 0.472982 0.556688 0.276596 0.484615 0.137931 0.404762 0.401848 0.516216 0.566351 0.401361 0.410714 0.606557 0.641689 0.572093 0.481352 0.295455 1.000000
603569.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.398585 0.481321 0.502509 0.504274 0.432225 0.295597 0.528416 1.000000 0.456961 0.435277 0.410714 0.120000 0.402574 0.491477 0.000000 0.419940 0.449474
603589.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.399211 0.475394 0.486717 0.419142 0.533662 0.432692 0.509767 0.555233 0.554731 0.536729 0.500605 0.496350 0.536232 0.496054 0.392256 0.437538 0.453767 0.681818 0.398585 0.820000 0.480000 0.526055 0.501742 0.471655 0.528416 0.516216 0.456961 0.401361 0.529600 0.489021 0.511290 0.575334 0.548387 0.556069 0.449474
603658.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.472982 0.481321 0.276596 0.675676 0.489394 0.493902 0.272727 0.561014 0.559980 0.600624 0.585492 0.820513 0.402574 0.421687 0.507614 0.556901 0.498455
603659.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.476807 0.421687 0.481352 0.436975 0.498455
603698.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.447754 0.443719 0.560976 0.309140 0.241706 0.329616 0.399211 0.499182 0.486717 0.441176 0.270588 0.384146 0.700000 0.328492 0.401122 0.536729 0.592593 0.472727 0.779661 0.354286 0.445596 0.371034 0.453767 0.550716 0.658892 0.481321 0.453196 0.527578 0.425840 0.530612 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603699.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.556270 0.473568 0.156863 0.309140 0.451053 0.487365 0.466395 0.478469 0.583333 0.504266 0.568627 0.546429 0.507299 0.606186 0.327044 0.536729 0.415263 0.520813 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603766.XSHG 0.470508 0.823529 0.377990 0.769231 0.440171 0.699495 0.513473 0.512853 0.458281 0.406817 0.454155 0.593874 0.567594 0.412856 0.578171 0.347783 0.336066 0.460067 0.447754 0.484153 0.581767 0.553103 0.645503 0.619303 0.586016 0.526746 0.486717 0.590786 0.587002 0.546429 0.507299 0.456979 0.401122 0.536729 0.500605 0.520813 0.536232 0.320896 0.662621 0.584814 0.562431 0.550716 0.727941 0.481321 0.490313 0.559596 0.613487 0.625753 0.593350 0.543779 0.452381 0.484496 0.595883 0.559934 0.571042 0.421687 0.704545 0.688822 0.601250
603799.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.398585 0.593520 0.502509 0.100000 0.388302 0.205882 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603806.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.272727 0.526746 0.583333 0.463602 0.592541 0.430809 0.504762 0.476626 0.401122 0.536729 0.457906 0.448718 0.496585 0.601036 0.333333 0.586538 0.453767 0.525164 0.585129 0.481321 0.616438 0.675676 0.327119 0.471453 0.380000 0.543779 1.000000 0.484496 1.000000 0.820513 0.571042 0.498027 0.474088 0.210000 0.119048
603816.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.398585 0.481321 0.502509 0.504274 0.372960 0.904762 0.153846 0.516216 0.456961 0.611940 0.410714 0.509733 0.402574 0.491477 0.481352 0.419940 0.449474
603866.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.496585 0.514957 0.583748 0.486741 0.882353 0.257642 0.472982 0.481321 0.525547 0.559596 0.489394 0.493902 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603868.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.352359 0.514957 0.583748 0.486741 0.644068 0.406877 0.398585 0.411404 0.441472 0.484615 0.432225 0.404762 0.401848 0.516216 0.456961 0.480460 0.529600 0.509733 0.476807 0.422505 0.481352 0.419940 0.498455
603877.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.472982 0.481321 0.502509 0.471213 0.327119 0.404762 0.153846 0.516216 0.456961 0.484496 0.585492 0.509733 0.530612 0.491477 0.447995 0.442251 0.449474
603883.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.473164 0.396009 0.486717 0.527295 0.533662 0.481718 0.418367 0.475610 0.543882 0.536729 0.530405 0.514612 0.496585 0.514957 0.583748 0.486741 0.644068 0.319415 0.514706 0.477193 0.490313 0.559596 0.489394 0.404762 0.401848 0.454545 0.414088 0.480460 0.405952 0.820513 0.426791 0.498027 0.548456 0.388430 0.538905
603885.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.571042 0.498027 0.548456 0.556069 0.601250
603888.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.274194 0.461350 0.502509 0.527578 0.501742 0.471655 0.593350 0.561014 0.456961 0.435277 0.529600 0.587654 0.511290 0.575334 0.773333 0.477185 0.449474
603899.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.556270 0.473568 0.491394 0.553103 0.406957 0.329616 0.399211 0.475394 0.583333 0.504266 0.305322 0.481718 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.641689 0.498027 0.473763 0.295455 0.464960

871 rows × 59 columns

研究搭建回测

输入:factor_df数据

  • index为日期列表
  • columns为股票名称
  • values为因子值

输出:

  • 做多头部超额收益
  • 分组收益
factor_df = df_y.T
'''
选取头部股票计算超额收益
输入:factor_df,index为日期,column是股票名字,values是进行排序的因子值
'''
#选取头部股票构造组合进行回测
return_df = pd.DataFrame()
for d1,d2 in zip(factor_df.index[:-1],factor_df.index[1:]):
    #获取头部股票
    df_temp = factor_df.loc[d1,:].sort_values() #mo默认从小到大排序
    #pool_temp = df_temp.index[:50]   
    pool_temp = df_temp.index[-50:]
    #计算组合收益
    df1 = get_price(list(pool_temp),end_date=d1,count=1,fields=['close'])['close'] #index为日期,columns为股票名称
    df1 = df1.dropna(axis=1) #去掉NAN值,删除列
    df2 = get_price(list(df1.columns),end_date=d2,count=1,fields=['close'])['close']
    ret = (df2.values/df1.values - 1).mean() #计算组合收益均值
    #计算同期指数收益率
    df_index1 = get_price('000905.XSHG',end_date=d1,count=1,fields=['close'])['close']
    df_index2 = get_price('000905.XSHG',end_date=d2,count=1,fields=['close'])['close']
    index_ret = df_index2.values[-1]/df_index1.values[-1]-1
    
    return_df[d1] = [ret-index_ret]  #记录超额收益
    #print(ret)
return_df = return_df.T
return_df.columns = ['return']
print(return_df.head(5))
(return_df+1).cumprod().plot(figsize=(12,6))
              return
2014-01-02 -0.048063
2014-02-07 -0.034945
2014-03-03 -0.024557
2014-04-01  0.013225
2014-05-05  0.020049
<matplotlib.axes._subplots.AxesSubplot at 0x7fd5f38f44a8>
'''
分组回测部分
'''
#分组回测部分
#输入:index为日期,column是股票名,values是因子值得factor_df
#输出:股票池分组收益
group = 10 #分组组数
pool_dict = {}
for i in range(len(factor_df.index)):
    temp_se = factor_df.iloc[0,:].sort_values(ascending=False)#从大到小排序
    #pool = temp_se[temp_se>0].index #去掉小于0的值
    temp_se = temp_se.dropna() #去掉空值
    pool = temp_se.index #不做负值处理
    num = int(len(pool)/group)
    #print('第%s期每组%s只股票'%(i,num))
    pool_dict[factor_df.index[i]] = pool
trade_list = factor_df.index
group_pct = get_all_pct(pool_dict,trade_list,groups=group)
group_pct.columns = ['group'+str(i) for i in range(len(group_pct.columns))]
group_pct.cumprod().plot(figsize=(12,6))
<matplotlib.axes._subplots.AxesSubplot at 0x7fd59dcebef0>
#进行模型样本内样本外得分记录
print(df_score.mean(axis=1))
(df_score.T).plot(figsize=(12,6))
score_p    0.532614
score_r    0.514247
dtype: float64
<matplotlib.axes._subplots.AxesSubplot at 0x7fd59dbf9eb8>
#回归方式
#进行因子值预测(回归方式)
df_y_r = pd.DataFrame()
df_score_r = pd.DataFrame(index = ['score_p','score_r'])
colus = factor_data_dict[date_list[60]].columns[:-4]
df_features = pd.DataFrame(index=colus)
for i in range(60,len(date_list)-1):
    print('正在计算{0}...数据'.format(date_list[i]))

    #数据合并,用于模型训练
    #将字典组成一个无日期的大表
    all_data = pd.DataFrame()
    for d in date_list[i-60:i]:
        all_data = pd.concat([all_data,factor_data_dict[d]],axis=0) #进行纵向拼接

    #空值NAN值处理
    for colu in all_data.columns:
        if sum(all_data[colu].isnull())> 0.2*len(all_data[colu]):
            print('因子:%s缺失值较多,不做为统计特征处理'%colu)
            del all_data[colu]
    #进行空值处理
    for colu in all_data.columns:
        if sum(all_data[colu].isnull())> 0:#0.05*len(all_data[colu]):
            all_data[colu].fillna(all_data[colu].mean(),inplace=True)
            #del all_data[colu]

    #获取前三分之一和后三分之一的数据
    all_data = all_data.sort_values('pct_init')
    #print(all_data.shape)
    all_data['num'] = list(range(len(all_data)))
    all_data = all_data[(all_data['num']<=len(all_data)/3) | (all_data['num']>=2*len(all_data)/3)]

    #print(all_data.shape)

    #记录标签y
    y1 = (all_data["pct_init"]>0).astype("int") #走完流程在改?
    y  = all_data['pct_init']
    x = all_data.iloc[:,:-5]

    #拟合模型
    #对数据进行分割,训练集、测试集
    X_train, X_test, y_train, y_test = train_test_split(x.values,y.values, test_size=0.3)
    #建立最大深度为2的决策树,并用测试数据来训练这颗树
    rlf = tree.DecisionTreeRegressor(max_depth = 6
                                     )
    rlf = rlf.fit(X_train, y_train) #模型训练
    #print(rlf.score(X_test,y_test)) #模型得分
    s_p = rlf.score(X_test,y_test)#样本内得分
    
    #模型预测y
    factor_df_temp = factor_data_dict[date_list[i]].iloc[:,:-4]
    factor_df_temp1 = factor_df_temp.dropna(axis=0)
    df_temp = pd.DataFrame(index=factor_df_temp1.index)
    df_temp[date_list[i]] = rlf.predict(factor_df_temp1)

    #记录模型真实数据得分
    y_t = factor_data_dict[date_list[i]].dropna()
    x_s = y_t.iloc[:,:-4]
    y_s = y_t["pct_init"]
    s_r = rlf.score(x_s,y_s)
    df_score_r[date_list[i]] = [s_p,s_r]
    
    #记录特征重要性
    df_features[date_list[i]] = rlf.feature_importances_
    #记录预测值进行拼接
    df_y_r = pd.concat([df_y_r,df_temp],axis=1) #进行横向拼接
    
df_y_r
正在计算2014-01-02 00:00:00...数据
正在计算2014-02-07 00:00:00...数据
正在计算2014-03-03 00:00:00...数据
正在计算2014-04-01 00:00:00...数据
正在计算2014-05-05 00:00:00...数据
正在计算2014-06-03 00:00:00...数据
正在计算2014-07-01 00:00:00...数据
正在计算2014-08-01 00:00:00...数据
正在计算2014-09-01 00:00:00...数据
正在计算2014-10-08 00:00:00...数据
正在计算2014-11-03 00:00:00...数据
正在计算2014-12-01 00:00:00...数据
正在计算2015-01-05 00:00:00...数据
正在计算2015-02-02 00:00:00...数据
正在计算2015-03-02 00:00:00...数据
正在计算2015-04-01 00:00:00...数据
正在计算2015-05-04 00:00:00...数据
正在计算2015-06-01 00:00:00...数据
正在计算2015-07-01 00:00:00...数据
正在计算2015-08-03 00:00:00...数据
正在计算2015-09-01 00:00:00...数据
正在计算2015-10-08 00:00:00...数据
正在计算2015-11-02 00:00:00...数据
正在计算2015-12-01 00:00:00...数据
正在计算2016-01-04 00:00:00...数据
正在计算2016-02-01 00:00:00...数据
正在计算2016-03-01 00:00:00...数据
正在计算2016-04-01 00:00:00...数据
正在计算2016-05-03 00:00:00...数据
正在计算2016-06-01 00:00:00...数据
正在计算2016-07-01 00:00:00...数据
正在计算2016-08-01 00:00:00...数据
正在计算2016-09-01 00:00:00...数据
正在计算2016-10-10 00:00:00...数据
正在计算2016-11-01 00:00:00...数据
正在计算2016-12-01 00:00:00...数据
正在计算2017-01-03 00:00:00...数据
正在计算2017-02-03 00:00:00...数据
正在计算2017-03-01 00:00:00...数据
正在计算2017-04-05 00:00:00...数据
正在计算2017-05-02 00:00:00...数据
正在计算2017-06-01 00:00:00...数据
正在计算2017-07-03 00:00:00...数据
正在计算2017-08-01 00:00:00...数据
正在计算2017-09-01 00:00:00...数据
正在计算2017-10-09 00:00:00...数据
正在计算2017-11-01 00:00:00...数据
正在计算2017-12-01 00:00:00...数据
正在计算2018-01-02 00:00:00...数据
正在计算2018-02-01 00:00:00...数据
正在计算2018-03-01 00:00:00...数据
正在计算2018-04-02 00:00:00...数据
正在计算2018-05-02 00:00:00...数据
正在计算2018-06-01 00:00:00...数据
正在计算2018-07-02 00:00:00...数据
正在计算2018-08-01 00:00:00...数据
正在计算2018-09-03 00:00:00...数据
正在计算2018-10-08 00:00:00...数据
正在计算2018-11-01 00:00:00...数据
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
2014-01-02 00:00:00 2014-02-07 00:00:00 2014-03-03 00:00:00 2014-04-01 00:00:00 2014-05-05 00:00:00 2014-06-03 00:00:00 2014-07-01 00:00:00 2014-08-01 00:00:00 2014-09-01 00:00:00 2014-10-08 00:00:00 2014-11-03 00:00:00 2014-12-01 00:00:00 2015-01-05 00:00:00 2015-02-02 00:00:00 2015-03-02 00:00:00 2015-04-01 00:00:00 2015-05-04 00:00:00 2015-06-01 00:00:00 2015-07-01 00:00:00 2015-08-03 00:00:00 2015-09-01 00:00:00 2015-10-08 00:00:00 2015-11-02 00:00:00 2015-12-01 00:00:00 2016-01-04 00:00:00 2016-02-01 00:00:00 2016-03-01 00:00:00 2016-04-01 00:00:00 2016-05-03 00:00:00 2016-06-01 00:00:00 2016-07-01 00:00:00 2016-08-01 00:00:00 2016-09-01 00:00:00 2016-10-10 00:00:00 2016-11-01 00:00:00 2016-12-01 00:00:00 2017-01-03 00:00:00 2017-02-03 00:00:00 2017-03-01 00:00:00 2017-04-05 00:00:00 2017-05-02 00:00:00 2017-06-01 00:00:00 2017-07-03 00:00:00 2017-08-01 00:00:00 2017-09-01 00:00:00 2017-10-09 00:00:00 2017-11-01 00:00:00 2017-12-01 00:00:00 2018-01-02 00:00:00 2018-02-01 00:00:00 2018-03-01 00:00:00 2018-04-02 00:00:00 2018-05-02 00:00:00 2018-06-01 00:00:00 2018-07-02 00:00:00 2018-08-01 00:00:00 2018-09-03 00:00:00 2018-10-08 00:00:00 2018-11-01 00:00:00
000006.XSHE 0.013863 0.019758 0.028390 0.002353 -0.017193 -0.002673 0.011286 0.009783 0.001467 0.001896 0.029300 0.020826 0.014670 0.009687 0.020470 -0.004673 0.013800 0.013458 0.016438 0.012882 0.011197 0.001453 0.013045 0.021602 0.007759 0.023798 0.014361 0.018921 -0.005887 0.014236 -0.001105 0.017573 0.018513 -0.003725 0.010863 0.011911 -0.024021 0.027097 0.018773 0.032351 0.016862 0.017236 0.014037 0.023714 0.015246 0.015925 0.015289 0.022329 0.011037 0.015728 -0.000236 0.026428 0.012160 0.022158 0.004940 0.029092 0.000221 -0.005788 0.000571
000008.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.001105 0.008811 0.019598 0.020795 0.034290 0.011911 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.009361 0.016521 0.000221 -0.005788 0.000571
000009.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.009577 0.015065 0.008240 0.011292 0.007162 0.010917 0.009361 0.010274 0.000221 -0.005788 0.000571
000012.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.014670 -0.004920 -0.000698 0.007758 -0.016386 -0.008721 0.016438 0.000518 0.011197 0.001453 0.013045 0.021602 -0.010440 0.006314 0.008809 0.018921 -0.020646 0.007749 0.007453 0.015075 0.007038 0.020795 0.009413 -0.012978 0.019187 0.027097 0.018773 0.032351 0.033318 0.023087 0.016997 0.019876 0.009416 0.003141 0.015431 -0.007051 -0.006972 -0.010187 0.008240 0.026428 0.007162 0.022158 0.014032 0.016521 0.000221 -0.005788 0.000571
000021.XSHE 0.023409 -0.011808 0.012830 0.020186 0.010609 0.030709 -0.015532 0.009783 0.020044 0.017563 0.015686 -0.000277 0.014670 0.023249 0.020470 0.019475 0.001153 0.018304 0.001001 0.005113 0.011197 0.031662 0.013045 -0.027176 0.005294 0.006314 0.014361 0.011931 0.009856 0.025562 0.007453 0.008962 0.000552 0.020795 0.009413 0.012716 0.019187 0.009517 0.003809 0.011809 0.033318 0.023087 0.016997 0.001481 -0.005800 0.015925 0.015289 0.022329 -0.006972 0.015728 0.027528 0.011292 0.012160 0.022158 0.014032 0.016521 0.024996 0.001260 0.039368
000025.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.019187 0.005186 0.009267 0.014491 0.009851 -0.003393 -0.020390 -0.025535 -0.002589 0.029237 0.015431 0.020761 -0.006972 0.027269 0.008240 0.016302 0.007162 -0.015160 0.009361 -0.008432 0.000221 -0.005788 0.000571
000027.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.015075 0.001008 0.009416 0.023267 0.035519 0.004805 0.009577 0.015065 0.008240 -0.002946 0.007162 0.004251 0.009361 0.010274 0.008524 -0.005539 0.022022
000028.XSHE -0.009346 0.073799 0.008309 0.001471 -0.016223 0.007200 -0.015532 0.000734 -0.024229 0.017563 0.011700 -0.003933 -0.016233 0.005881 0.003666 -0.014259 0.005866 0.018304 -0.010810 0.003197 0.011197 0.005229 -0.007331 0.007616 0.007759 -0.026900 0.008809 0.011931 -0.020646 -0.004054 -0.001105 -0.017639 0.019598 0.001351 0.010102 -0.012978 0.019187 0.015003 0.009267 -0.023091 0.009851 0.014140 0.015075 0.019876 0.009416 0.003141 0.015431 0.004805 0.009577 0.008193 0.009522 0.026428 0.007162 0.010917 0.009361 -0.006303 -0.013374 -0.005788 0.000571
000030.XSHE 0.000027 0.019758 -0.009084 -0.137624 0.045546 0.026043 0.011286 0.028835 0.011149 0.001788 0.015686 0.020636 -0.003317 0.009687 0.020470 0.007758 0.001153 0.013458 0.016438 0.000518 0.011197 0.031662 0.013045 0.021602 -0.019382 0.006314 0.014361 0.018921 0.019580 0.025562 0.033811 0.032155 0.007038 0.014032 0.010863 0.011911 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000031.XSHE 0.023409 0.019758 0.012830 0.020186 0.019951 0.026043 0.011286 -0.037403 0.034241 0.017563 0.015686 -0.003933 -0.003317 0.009687 0.020470 0.007758 0.001153 -0.008721 -0.039304 -0.017507 -0.050837 0.001453 0.026241 0.021602 0.027959 0.023798 0.029047 0.018921 0.019580 0.025562 0.033811 0.015075 0.019598 0.003908 0.010102 0.012716 0.019187 0.015003 0.009267 0.032351 -0.002505 0.014140 0.015075 0.022751 -0.002589 0.007412 0.015289 -0.007051 -0.006972 -0.010187 -0.000236 -0.002946 0.012160 0.022158 0.033299 0.006653 0.024996 0.023558 0.039368
000039.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.002873 0.001008 0.009416 0.023267 -0.001248 0.004805 0.023710 0.008193 0.009522 0.007555 0.012160 0.010917 0.009361 0.016521 0.017711 0.018425 0.022022
000042.XSHE -0.009346 0.019758 0.008309 0.001471 0.019951 0.034713 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000049.XSHE 0.013164 0.000386 0.008309 0.001471 0.005926 -0.002673 0.019455 0.025199 0.086220 -0.057074 0.011700 0.020826 -0.000444 0.047791 0.014207 0.026811 0.005866 0.075808 -0.010810 0.003197 0.032239 0.015697 -0.001494 0.008067 -0.010440 -0.010765 0.029047 0.018921 0.019580 -0.004054 0.020574 0.017573 0.019598 0.001351 -0.027572 -0.012978 0.019187 -0.022562 0.003809 0.004149 -0.023085 -0.001519 0.495375 0.019876 0.015246 0.003141 0.015431 0.020761 0.009577 -0.001742 0.009522 0.011292 0.012160 -0.005371 0.014032 -0.006303 0.015439 0.023558 0.030731
000050.XSHE 0.013164 0.000386 -0.006765 0.020186 -0.017193 0.000180 0.011286 -0.037403 -0.004603 -0.009907 0.002743 0.004381 0.001646 -0.015685 0.014207 -0.003615 0.005531 0.018304 NaN NaN NaN NaN NaN NaN 0.019722 -0.012178 0.014361 0.018921 -0.005887 -0.002692 0.020574 -0.017639 0.019598 0.003908 0.068413 -0.060975 0.019187 0.006311 0.009267 0.014491 0.009851 -0.003393 -0.020390 -0.025535 -0.002589 -0.005067 -0.001248 0.004805 0.023710 0.008193 0.008240 0.007555 0.007162 0.010917 NaN NaN NaN NaN NaN
000061.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.015075 0.019876 0.009416 0.003141 -0.001248 0.004805 0.009577 0.015065 0.008240 -0.022165 0.007162 0.010917 0.009361 0.010274 0.000221 -0.005788 0.000571
000062.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.000444 -0.000172 0.014207 0.007758 0.020726 0.202619 -0.010810 -0.009250 0.011197 0.020406 -0.023861 0.021602 0.007759 0.023798 0.014361 0.018921 0.019580 -0.004054 0.015706 0.032155 0.019598 0.020795 0.034290 -0.012978 0.003363 0.009517 0.034780 0.014017 0.033318 -0.031854 -0.020390 -0.031876 0.009416 0.008010 0.015431 0.094302 0.009577 -0.010187 0.009522 0.026428 -0.005277 0.015539 0.033299 0.029092 0.015439 0.023558 0.011560
000066.XSHE -0.009346 0.019758 0.012830 0.020186 0.004403 -0.002673 -0.035722 0.000734 -0.004603 0.017563 -0.004102 0.020636 0.034379 -0.000172 0.018884 -0.030362 0.005531 -0.010566 -0.039304 -0.000386 -0.003974 0.172818 0.187641 -0.048669 0.022459 0.114230 0.008809 -0.051140 0.019580 0.014236 -0.001105 -0.003966 0.000552 0.020795 0.010102 -0.012978 -0.024021 0.005186 0.009267 0.014491 0.009851 0.014140 0.015075 0.019876 0.009416 0.003141 -0.001248 0.004805 0.009577 0.015065 0.008240 -0.022165 -0.005277 -0.005371 0.004940 0.016521 0.000221 -0.005788 0.000571
000078.XSHE 0.000027 -0.007357 -0.008638 -0.021023 0.004403 0.006595 0.019455 -0.037403 0.011149 -0.014513 -0.018904 -0.031389 0.003007 0.023249 0.000640 -0.030362 0.001153 -0.008721 0.001348 -0.015010 -0.006618 -0.009531 0.000935 0.078220 -0.019382 0.006314 0.008809 0.018921 -0.020646 -0.002692 -0.010771 0.015075 0.019598 0.020795 0.010102 0.012716 0.019187 0.015003 0.003809 0.014491 0.009851 0.014140 0.015075 -0.031876 0.009416 -0.018036 0.015431 0.028268 0.023710 0.015728 0.027528 0.016302 0.028996 0.010917 0.009361 0.029092 0.017711 0.023558 0.000571
000088.XSHE 0.000027 0.019758 0.012830 0.020186 0.019951 0.026043 0.017821 0.028835 0.034241 0.018986 -0.003641 0.020826 -0.016233 0.009687 0.020470 0.007758 0.020726 0.018304 -0.039304 0.026005 0.011197 -0.009531 0.013045 -0.007937 -0.019382 0.006314 0.008809 0.011931 0.019580 0.025562 0.015706 -0.003966 0.018513 0.001351 0.000130 0.011911 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000089.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.019187 0.027097 0.034780 0.011809 -0.002505 -0.003740 -0.006392 0.001481 0.009416 0.008010 0.015431 -0.007051 -0.006972 -0.010187 0.008240 0.011292 0.007162 0.010917 0.001265 -0.008432 -0.013374 -0.005788 0.000571
000090.XSHE 0.023409 0.019758 -0.009084 0.020186 0.004403 -0.002673 -0.015532 0.009783 0.020044 0.040008 0.029300 -0.000277 -0.003317 0.045626 0.020470 0.007758 -0.016386 0.011158 0.016438 0.026005 0.032239 0.015697 -0.007331 0.010531 0.007759 0.023798 0.014361 0.011931 0.019580 0.014236 0.033811 0.032155 0.019598 -0.023005 0.022497 0.011911 0.019187 0.015003 0.018773 0.032351 -0.025936 0.017236 0.014037 0.001481 0.028245 0.003141 0.015431 0.020761 0.011037 0.015728 0.009522 -0.002946 0.007162 0.004251 0.009361 0.020591 0.000221 -0.005788 0.000571
000099.XSHE 0.000027 -0.010814 -0.006765 0.020186 0.004403 0.026043 -0.027047 0.005838 0.009186 -0.016801 -0.005898 0.025864 -0.000444 -0.000172 0.014207 -0.003615 -0.016386 -0.008721 0.004716 -0.017507 0.011197 0.001453 0.026241 0.021602 0.027959 0.034513 0.029047 -0.022950 0.009856 -0.025409 -0.010771 0.017573 0.019598 0.020795 0.010102 0.025371 0.019187 0.005186 0.009267 0.014491 0.009851 -0.003740 -0.006392 0.001481 0.009416 0.007412 -0.006576 -0.007051 0.023710 0.027269 0.008240 -0.022165 0.007162 0.010917 NaN NaN NaN NaN NaN
000156.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.009577 0.022444 0.008240 0.039215 -0.570322 0.004251 -0.018514 0.029092 0.017711 -0.005539 0.022022
000158.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.010771 0.008811 0.019598 0.003908 0.010102 0.012716 0.019187 0.015003 0.009267 0.011809 -0.023085 -0.001519 -0.006392 0.019876 0.009416 0.003141 0.015431 0.004805 0.009577 0.015065 0.027528 0.007555 0.007162 0.004251 -0.018514 0.029092 0.017711 0.001260 0.022022
000400.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.007453 0.015075 0.019598 0.020795 0.010863 -0.012978 0.015830 0.006311 0.003809 0.032351 0.007190 0.017236 -0.020390 0.019876 -0.014671 0.003141 0.015431 0.020761 0.009577 0.015065 0.027528 0.011292 0.012160 0.010917 0.009361 -0.006303 -0.013374 -0.005539 0.000571
000401.XSHE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.004716 -0.017507 0.011197 0.020406 0.013045 -0.027176 0.005294 -0.026900 -0.024086 -0.001467 0.009856 0.006835 -0.030453 0.032155 0.019598 0.003908 0.010102 -0.012978 0.003363 0.009517 0.003809 0.011809 0.009851 -0.031854 -0.020390 0.001008 0.009416 0.003141 0.015431 0.004805 0.022293 0.015065 -0.000236 -0.022165 0.007162 0.010917 0.009361 0.010274 0.015439 0.023558 0.000514
000409.XSHE -0.009346 0.000386 0.000550 0.001471 0.005926 0.026043 0.019455 0.004286 0.001467 -0.016801 0.011700 0.014321 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000413.XSHE 0.023409 0.123077 0.012830 0.001111 0.004403 0.057091 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000415.XSHE 0.000027 -0.007357 -0.008638 -0.001046 0.045546 0.026043 0.019455 0.028835 0.020044 0.001896 0.015686 0.214684 0.026857 0.017240 -0.072357 -0.104641 -0.154848 0.011158 0.016438 0.005113 -0.006618 0.001453 0.013045 0.007616 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
000417.XSHE 0.023409 0.019758 0.028390 0.012001 0.025409 0.034225 0.033462 0.000734 0.020044 0.018986 0.015686 0.020636 -0.003317 0.023249 0.020470 -0.030362 0.005531 -0.008721 0.016438 0.000518 -0.003974 0.001123 0.028651 0.021602 -0.040279 0.034513 0.008809 0.018921 0.009856 0.025562 0.015706 0.032155 0.017311 0.014032 0.010863 0.011911 0.019187 0.009517 0.003809 0.011809 0.016862 0.017236 0.014037 0.019876 -0.002589 0.007412 0.015289 0.022329 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
603228.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.020390 0.019876 0.015246 0.015925 -0.012655 -0.007051 0.009577 -0.001742 -0.020854 -0.002946 0.007162 -0.005371 0.014032 -0.008432 -0.005801 0.023558 0.005113
603328.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.014670 0.023249 0.020470 0.007758 0.005531 0.013458 0.001348 0.000518 0.011197 0.011246 0.000935 -0.007937 0.027959 0.006314 0.029047 0.018921 0.009856 0.007749 0.007453 0.008962 0.007038 0.020795 -0.027572 -0.012978 0.003363 0.027097 0.018773 0.014017 0.019121 -0.003740 0.016997 0.022751 0.015246 -0.013841 -0.012655 0.020761 0.009577 -0.001742 0.027528 0.026428 0.028996 0.022158 0.001265 -0.006303 0.024996 0.023558 0.011560
603355.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.007759 0.023798 0.014361 0.018921 0.019580 -0.004054 -0.010771 0.015075 0.019598 0.001351 -0.010360 -0.012978 -0.024021 -0.022562 -0.016532 -0.023091 0.019121 -0.001519 0.016997 0.019876 0.030139 0.003141 0.015431 -0.007051 0.009577 -0.001742 0.008240 0.007555 0.007162 -0.015160 0.009361 -0.008432 0.015439 0.023558 0.030731
603366.XSHG -0.019893 -0.007125 -0.008638 -0.013836 0.003650 0.000180 0.048009 0.005838 0.020044 0.018986 0.002743 -0.000277 0.034379 0.009687 -0.000698 -0.004673 0.020726 -0.008721 0.016438 0.026005 0.012404 0.005229 0.028651 0.021602 0.024717 0.023798 0.014361 0.018921 0.009856 0.007749 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603369.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.014670 0.023249 0.020470 0.007758 0.001153 0.013458 0.001348 0.026005 0.011197 -0.009531 0.013045 -0.027176 0.005294 0.023798 0.014361 -0.022950 0.009856 -0.004054 NaN NaN NaN NaN NaN NaN 0.019187 0.015003 0.003809 0.014017 -0.037970 0.023087 -0.006392 0.002841 -0.005800 0.015925 0.015431 0.020761 0.023710 0.027269 0.027528 -0.002946 -0.005277 -0.005371 0.014032 0.029092 0.015439 0.001260 0.000571
603377.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.024021 0.006311 0.009267 0.014017 0.009851 0.017236 -0.020390 0.019876 0.015246 0.029237 -0.012655 0.001334 -0.006972 -0.013670 -0.000236 -0.022165 0.007162 0.010917 0.009361 -0.007449 -0.005801 0.023558 0.039368
603444.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.016997 0.019876 0.015246 0.029237 0.015431 -0.007051 0.009577 -0.001742 0.009522 0.011292 0.012160 -0.005371 0.004940 -0.006303 -0.005801 0.023558 0.039368
603515.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.020390 0.019876 0.003342 0.008010 -0.012655 0.020761 -0.006972 -0.010187 0.008240 0.016302 -0.005277 -0.015160 0.009361 -0.007449 0.015439 0.023558 0.000514
603528.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.019187 0.005186 0.018773 0.032351 0.019283 0.023087 0.016997 0.019876 0.015246 0.029237 -0.012655 0.020761 0.009577 0.015065 0.008240 -0.002946 -0.036809 0.015539 NaN NaN NaN NaN NaN
603555.XSHG NaN NaN NaN NaN NaN NaN -0.005885 0.004286 0.034241 0.017563 0.002743 -0.001681 -0.016233 -0.015685 0.406466 -0.033193 0.005866 -0.008721 -0.010810 0.003197 0.011197 0.015697 -0.007331 -0.015015 -0.010440 0.034720 0.014361 0.018921 0.019580 -0.004054 0.033811 0.015075 0.019598 0.020795 -0.027572 -0.012978 0.003363 0.006311 0.003809 0.014491 0.033318 0.023087 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603556.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.016997 0.019876 0.015246 0.008010 -0.012655 0.020761 0.009577 0.015065 0.009522 -0.002946 0.012160 0.022158 0.009361 -0.006303 0.000221 0.001260 0.009010
603567.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.005294 -0.012178 0.014361 0.018921 0.009856 0.007749 0.007453 0.015075 0.019598 0.020795 0.026821 -0.012978 0.019187 0.027097 0.018773 0.014017 0.019283 0.023087 0.033020 0.001008 0.009416 0.003141 0.015431 0.020761 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603568.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.027959 0.023798 0.029047 0.018921 0.019580 -0.004054 0.015706 0.015075 0.019598 -0.023005 -0.010360 -0.012978 0.019187 0.027097 -0.016532 0.032351 0.019283 0.023087 0.014037 -0.025535 0.015246 -0.041533 0.015289 0.001334 0.011037 0.015728 -0.020854 0.016302 -0.005277 0.015539 0.033299 -0.008432 -0.005801 0.023558 0.030731
603569.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.020390 0.019876 0.015246 0.029237 -0.012655 0.020761 0.009577 -0.001742 0.008240 0.016302 -0.005277 0.015539 0.004940 -0.008432 0.015439 0.001260 0.000571
603589.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.040279 0.023798 0.029047 0.018921 0.019580 -0.004054 0.015706 0.015075 0.019598 0.020795 0.010102 0.025371 0.019187 0.005186 0.003809 -0.003302 -0.002505 -0.003740 -0.020390 -0.025535 -0.005800 0.015925 0.015289 0.020761 0.023710 0.027269 0.008240 0.011292 -0.005277 -0.005371 0.009361 0.010274 0.015439 0.001260 0.005113
603658.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.016997 0.019876 -0.005800 0.015925 -0.012655 -0.007051 0.011037 0.027269 -0.000236 -0.002946 -0.005277 -0.005371 0.004940 -0.008432 -0.005801 0.001260 0.000514
603659.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.004940 -0.008432 0.015439 0.001260 0.000514
603698.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.004716 -0.017507 0.011197 0.020406 -0.023861 -0.007937 0.007759 -0.012178 0.014361 0.000939 0.009856 -0.004054 -0.010771 -0.022939 0.018513 0.020795 0.026821 -0.004448 0.019187 0.005186 -0.016532 0.032351 0.019283 0.023087 0.033020 0.019876 0.015246 0.029237 -0.012655 0.020761 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603699.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.010810 0.003197 0.011197 0.020406 -0.001494 0.021602 0.027959 0.006314 0.008809 0.018921 0.019580 0.014236 -0.010771 -0.003966 0.018513 0.020795 -0.027572 0.025371 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603766.XSHG 0.000027 0.019758 0.019346 0.020186 0.004403 0.026043 0.011286 0.004286 0.020044 0.001788 0.002743 0.020636 0.014670 0.009687 0.020470 0.007758 0.001153 0.013458 0.016438 0.000518 0.011197 -0.009531 0.000935 0.047430 0.019722 0.006314 0.029047 0.018921 0.019580 0.025562 0.007453 0.008962 0.007038 0.020795 -0.027572 0.025371 0.003363 -0.016125 0.009267 0.014017 0.033318 0.023087 0.016997 0.022751 0.015246 0.015925 0.015431 0.051008 0.009577 -0.010187 0.027528 -0.002946 0.028996 0.022158 0.014032 0.006653 0.024996 0.025898 0.039368
603799.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.020390 0.022751 0.290984 0.015925 -0.006576 0.022329 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603806.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.040279 -0.010765 -0.002080 0.018921 0.009856 0.025562 0.007453 0.008962 0.018513 0.020795 0.010863 -0.012978 0.019187 0.027097 0.018773 0.032351 0.019283 0.023087 0.016997 0.019876 0.015246 0.015925 -0.012655 -0.007051 -0.006972 -0.010187 0.009522 -0.002946 0.012160 -0.005371 0.014032 -0.006303 -0.013374 0.001260 0.030731
603816.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.020390 0.019876 0.015246 0.029237 0.015431 -0.007051 0.011037 -0.010187 0.008240 -0.002946 0.007162 0.015539 0.004940 -0.007449 0.015439 0.023558 0.000514
603866.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.019187 0.005186 0.018773 0.014017 -0.000268 0.023087 0.016997 0.019876 0.015246 0.015925 -0.006576 0.001334 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
603868.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.003363 0.005186 0.018773 -0.023091 -0.037970 -0.001519 -0.020390 -0.025535 0.003342 -0.019944 -0.012655 0.001334 -0.006972 0.027269 0.008240 0.011292 0.007162 0.022158 0.004940 -0.008432 0.015439 0.023558 0.000514
603877.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.002873 0.019876 0.009416 0.003141 -0.012655 -0.007051 -0.006972 -0.010187 -0.020854 -0.002946 0.012160 0.015539 0.004940 -0.008432 0.000221 -0.005788 0.000571
603883.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.010440 -0.010765 0.014361 0.018921 -0.020646 0.007749 0.007453 0.015075 0.019598 0.020795 0.009413 -0.012978 0.019187 0.027097 0.018773 0.032351 0.004720 -0.001519 0.014037 0.023714 -0.005800 0.015925 -0.006576 0.001334 -0.006972 0.015728 -0.020854 -0.002946 -0.005277 -0.005371 0.014032 -0.008432 0.000221 -0.005788 0.000571
603885.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.014032 0.010274 0.000221 -0.005788 0.005113
603888.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -0.020390 0.019876 0.015246 0.029237 -0.012655 0.020761 0.009577 -0.001742 0.008240 0.011292 -0.005277 0.010917 0.009361 0.010274 0.000221 0.001260 0.000571
603899.XSHG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.004716 0.003197 0.011197 -0.009531 -0.023861 -0.007937 -0.019382 0.023798 -0.002080 -0.001467 0.009856 -0.002692 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.033299 -0.008432 -0.005801 0.023558 0.030731

871 rows × 59 columns

factor_df = df_y_r.T
'''
选取头部股票计算超额收益
输入:factor_df,index为日期,column是股票名字,values是进行排序的因子值
'''
#选取头部股票构造组合进行回测
return_df = pd.DataFrame()
for d1,d2 in zip(factor_df.index[:-1],factor_df.index[1:]):
    #获取头部股票
    df_temp = factor_df.loc[d1,:].sort_values() #mo默认从小到大排序
    #pool_temp = df_temp.index[:50]   
    pool_temp = df_temp.index[-50:]
    #计算组合收益
    df1 = get_price(list(pool_temp),end_date=d1,count=1,fields=['close'])['close'] #index为日期,columns为股票名称
    df1 = df1.dropna(axis=1) #去掉NAN值,删除列
    df2 = get_price(list(df1.columns),end_date=d2,count=1,fields=['close'])['close']
    ret = (df2.values/df1.values - 1).mean() #计算组合收益均值
    #计算同期指数收益率
    df_index1 = get_price('000905.XSHG',end_date=d1,count=1,fields=['close'])['close']
    df_index2 = get_price('000905.XSHG',end_date=d2,count=1,fields=['close'])['close']
    index_ret = df_index2.values[-1]/df_index1.values[-1]-1
    
    return_df[d1] = [ret-index_ret]  #记录超额收益
    #print(ret)
return_df = return_df.T
return_df.columns = ['return']
print(return_df.head(5))
(return_df+1).cumprod().plot(figsize=(12,6))
              return
2014-01-02 -0.048063
2014-02-07 -0.034945
2014-03-03 -0.024557
2014-04-01  0.013225
2014-05-05  0.020049
<matplotlib.axes._subplots.AxesSubplot at 0x7fd59dbd8be0>
'''
分组回测部分
'''
#分组回测部分
#输入:index为日期,column是股票名,values是因子值得factor_df
#输出:股票池分组收益
group = 10 #分组组数
pool_dict = {}
for i in range(len(factor_df.index)):
    temp_se = factor_df.iloc[0,:].sort_values(ascending=False)#从大到小排序
    #pool = temp_se[temp_se>0].index #去掉小于0的值
    temp_se = temp_se.dropna() #去掉空值
    pool = temp_se.index #不做负值处理
    num = int(len(pool)/group)
    #print('第%s期每组%s只股票'%(i,num))
    pool_dict[factor_df.index[i]] = pool
trade_list = factor_df.index
group_pct = get_all_pct(pool_dict,trade_list,groups=group)
group_pct.columns = ['group'+str(i) for i in range(len(group_pct.columns))]
group_pct.cumprod().plot(figsize=(12,6))
<matplotlib.axes._subplots.AxesSubplot at 0x7fd59d818b70>
#进行模型样本内样本外得分记录(回归)
print(df_score_r.mean(axis=1))
(df_score_r.T).plot(figsize=(12,6))
score_p   -0.064946
score_r   -0.166074
dtype: float64
<matplotlib.axes._subplots.AxesSubplot at 0x7fd59d78ec50>

第四部分 特征统计(因子重要性)

特征重要性进行说明

模型调用featureimportances即可获取

下面我们针对这个内容进行图形化展示

df_features.mean(axis=1).plot(kind='bar',figsize=(12,6))
<matplotlib.axes._subplots.AxesSubplot at 0x7fd59d6f7470>

全部回复

0/140

量化课程

    移动端课程