微信大众地址:欢送宽大市民来电商量。,专心的辨析和量子化国际平民的量子化策略。,协同议论,协同进步!本文是因子棘手的的编码完成。,它可以作为后续多部分保险单草稿的要紧模块。,提议将单部分辨析棘手的参照系与t相结合。。以防你觉得乐于助人,期望成为关怀和预报。。 道谢的话!SignalFactorAnalyse单因子棘手的设计指前面提到的事物因子可以为结成出价超额进项?这是系统多因子花样的第一步,也最症结的一步。。

特点选择是至关要紧的。,只诱惹症结特点,才干受理DA的要紧性。,选择部分,为了通行超额进项。。

经外传说买卖体验、倾斜飞行参照系、微观行情、机具努力、吃水努力与别的宏大的待测部分,一种迅速地无效的因子棘手的设计,这将是多部分战术系统中最症结的比率。。

因子花样棘手的想

部分效度的判别与滤波器 候选部分的决定: 算学意义、财务状况意义、数数意义• 期待: 最高纪录开盘与不正确的、非常值的去除、ZSCORE等一下。 非限制因素辨析: 集合反向测验 限制因素辨析: 物系数的集成电路辨析、回归辨析

棘手的配乐:1。一任一某一无效的部分是与退让相互关系。,这也棘手的部分的直接的和初始条理。。在此基础上,对使发生部分停止物证辨析。,笔者的目的是滤波器出与退让缺乏高的相互关系的部分。,依据成为一任一某一无效的部分池。。2。部分效度、因子α-衰变、蜕变具有某个时代特征的、部分轮嬉戏。因子花样从本质上解说了自有资本进项率。,考虑一任一某一部分无效性的目标是物比率。。因子α-衰变、蜕变具有某个时代特征的,少数以为传达也对此停止了以为。,该因子的半衰期被建议。。半衰期指的是因子ICIIR下降到一半的的时间。。部分轮嬉戏,能力高的部分典型合理的不同。,基准最新的使发生部分,需求停止资产重组。,它会增殖使充满结成的转速,事业大批买卖。,因而,笔者还需求对部分结成的转速停止辨析。,买卖成本与部分进项的结平。三。回归辨析:用于棘手的部分的无效性。,表露于T因子也与T+1相互关系(第5周)、第20个月,自有资本进项的回归系数为T期因子进项率。。该设计包含回归花样正中鹄的编造变量。,移动使命差别,与此同时,额外的最小二乘回归(WLS)回归,重量是独奏自有资本行情牺牲的平方根。,小盘股和回归异方差的使发生是EXC。。短暂拜访序列t值的辨析,它可以判别有重大意义的回归系数的意义。。辨析:这时设计是鉴于部分报复的辨析。,IC辨析及其衍生的目标被用来停止多维。。IC(物系数)可以限界为每个时间截点上因子在单独自有资本的表露度和自有资本下期进项的 pearson 或 spearman 相互关系系数,该设计具有集成电路的牺牲。、集成电路方面、对P值的IC辨析等停止了多角度的辨析。。4。包回棘手的:集合反向棘手的将使笔者更轻易了解Act方式。。办法是基准部分大小人对自有资本停止排序。,自有资本池分为N个结成。,或许把每个使命使相等起来。。刚才与遍及选择。,该设计采取额外的行情牺牲法。。积聚进项图用于决定无论在单音调。。同时棘手的出路的多个评价合格的,拿 … 来说,年退让。、夏普比率、物比率、最大回撤等也能扶助笔者判别此因子策略将在真实行情周围的中起作用。

布置周围的合格的 器假释期:,JuyTyTeNT最高纪录源:联系在一起最高纪录信赖包:最高纪录处置(熊猫)、numpy)、算学器(SCIPY)、自有封装正式的花样、拉包装袋(MatPultLIB)、海运)

import pandas as pdimport numpy as npfrom scipy import statsimport scipy.stats as stfrom datetime import datetimeimport matplotlib.pylab as pltimport seaborn as snsimport statsmodels.api as SM最高纪录期待与中和处置

部分历史最高纪录的弥撒曲能够在差不多成绩。,为了忍住最高纪录弥撒曲对后续辨析的使发生,必需停止朝反方向的最高纪录处置褶皱。。

在极值处置中,采取箱形图法处置极值。,行将散布有尽量的最高纪录(±)两端的顶点最高纪录拉回边界上的的分位值,忍住极值对因子辨析的使发生。。

合格的化采取(部分牺牲因子平均水平)/因子合格的DEVIAL,尽量的部分标准化为划一的果核和合格的弄弯DIS。,它具有等权可加性。。

因子中性化因子中性化是为了忍住因子与稍微使命和作风在上的耦合所使发出的弄弯。在本文章,部分和使命被中和。,首要办法是:对勤劳笨蛋各具有某个时代特征的的因子值停止直线的回归。,通行回归残差代用原始因子VALU。

def winsorize_series(SE)): q = ([0.025, 0.975]) if isinstance(q, ) and 莱恩(Q) == 2: 硒[硒] < [0]] = [0] 硒[硒] > [1]] = [1] return sedef standardize_series(SE)): se_std = () se_mean = () return (SE) – se_mean)/se_stddef neutralization(forward_returns): N_L_R=forward_returns SW_Industry_List=list(SE)t(())) x = [:,SW_Industry_List+[”mkt_value”]] y = N_L_R[”factor”] result = (y, x)装置 return result.resid

计算合格的化和DE值的办法有很多种。,冠词很复杂。。

#TODO,外出设计中运用 MSTD median standard deviation winsorize”pcut”: percentile tails cutting winsorize “””def Clean_winsorize(SE)ries, method=”pcut”): def Clean_winsorize_pcut(SE)ries): 一副[一副]>=(SE)ries, )] = (SE)ries, ) 一副[一副]<=(SE)ries, )] = (SE)ries, ) return series def Clean_winsorize_mstd(SE)ries): up = (SE)ries) + 3*(SE)ries) down = (SE)ries) - 3*(SE)ries) 一副[一副]>向上 = up 一副[一副]<=down] = down return series if method == ''mstd'': series = Clean_winsorize_mstd(SE)ries) elif method == ''pcut'': Clean_winsorize_pcut(SE)ries)回归辨析

勤劳正中鹄的编造变量处置:forward_returns是短暂拜访最高纪录划一后的巨大的限制因素矩阵(处置模块参阅文尾)

每个数值勤劳混合物是0到1个哑变量。,拿 … 来说,自有资本600301属于使命12。,表露率为1。,自有资本对应于别的0个使命。。在这时棘手的中,它不会的按比例散开公司。,更确切地说,自有资本结果却属于特派使命。,在本使命上的表露率为1。,别的使命的打交道率为0。。

评价办法:牺牲模数平均水平值:2。因子产品大于0。:这一部分对自有资本进项的正视使发生被以为是更大的。:判别其要紧性无论稳固。t值为4。实际上:该因子的退让序列无论明显不为零。。

回归模块DEF regress(forward_returns,period=1): L_R=forward_returns SW_Industry_List=list(SE)t(())) X = [:,SW_Industry_List+[”factor”]] _return=”ROLL_”+str(持续) y = L_R[_return] # WLS回归 wls = (y, X, weights=L_R[”weight”]) result = () return result.params[-1],[-1]#回归出路WLS=(level=”Date”).apply(regress)_WLS_params=list()_t_test=list()for ppp in WLS.values: 傅(PPP〔0〕 (PPP〔1〕)WLSS-帕拉斯 = (_WLS_params, index=) t_test=(_t_test, index=)print t值序列平均水平值,莱恩(TayTest)油印 非数值的模数大于2。,莱恩(X) for x in if (x)>2)/LeN(Ty-测验)油印 部分退让序列平均水平值,()print 零假设测验的t值是,()/ (LeN(WLSSPARAMS)- 1)油印 t值的模数除号t的模数,集成电路辨析模块

该IC模块首要鉴于以下两个IC目标。,皮尔森相互关系系数(IC) 部分牺牲与自有资本进项的直线的相互关系。Spearman相互关系系数(RANKIC) 部分与自有资本进项的次相互关系性。

用IC评价因子的无效性,应率先停止因子中和(与回归辨析划一)。具体来说,更确切地说,在因子合格的化随后。,在每一节中,使用他变数对MA停止直线的回归。,以残差替代因子值,这种办法可以消释使命正中鹄的部分。、板块、行情弄弯。

目标评价: 牺牲序列的平均值和模数平均值 判别因子的无效性 牺牲序列合格的弄弯 判别因子的稳固性 值序列的比率大于零(或决不零)。 判别因子的划一性。

集成电路模块DEF IC_calculate(forward_returns,period=1): _Inf=forward_returns _return=”ROLL_”+str(持续) # 皮尔森相互关系系数因子 IC 值 ic, ic_p = 回归 # 秩相互关系系数因子 IC 值 rank_ic, rank_ic_p = ((),INF[α归还]秩 return ic, ic_p,rank_ic, rank_ic_p#IC辨析出路IC_C=(level=”Date”).apply(IC_calculate)_IC=list()_IC_p=list()_rank_ic=list()_rank_ic_p=list()for qqq in IC_C.values: _IC.append(qqq[0]) (QQQ)1 (QQQ)2 (QQQ(3))集成电路 = (_IC, index=)RANK_IC = (_rank_ic, index=)RANK_IC_p = (_rank_ic_p, index=)print IC 牺牲序列平均值,(),IC 值序列的模数的平均水平值。,((IC))成片展开 IC 牺牲序列合格的弄弯,()print 红外线的 比率(IC) 值序列的平均水平值与合格的差之比,()/()n = [x for x in IC.values if x>0]print IC 牺牲序列的比率大于零。,LN(n)/LeN(IC)TMP = (IC+).cumprod()-tmp.plot(figsize=(16,5)γ序列明显图 = (index=).Tdf_RANK_IC = (RANK_IC,ignore_index=True) df_RANK_IC = (RANK_IC_p,ignore_index=True) df_RANK_IC=df_RANK_IC.Tdf_RANK_IC.columns = [”RANK_IC”, ”RANK_IC_p”]from matplotlib.dates import DayLocator, HourLocator, DateFormatter, drangefig = plt.figure(figsize=(14,3)(真)AX1 = (111)ic_data = df_RANK_IC[~()]ic_data[”num”] = range(len(ic_data))ic_data_plus = ic_data[]ic_data_minus = ic_data[]ic_data_small_plus = ic_data[][]ic_data_small_minus = ic_data[][]print U'计算RANKIC的总额。:”, LIN(ICX最高纪录)油印 u明显正相互关系:”, LIN(ICXDATAYPLUS)油印 U'呈明显负相互关系。:”, LIN(IcDATA) U'相互关系数不明显。:”, len(ic_data) – len(ic_data_plus) – len(ic_data_minus)(ic_data_small_plus.num, ic_data_small_plus.RANK_IC, align=”center”, width=0.4, color=”black”)(ic_data_small_minus.num, ic_data_small_minus.RANK_IC, align=”center”, width=0.4, color=”black”)(ic_data_plus.num, ic_data_plus.RANK_IC, align=”center”, width=0.4, color=”r”)(ic_data_minus.num, ic_data_minus.RANK_IC, align=”center”, width=0.4, 色=G(u)秩 IC”, fontproperties=font, FUNTHOSIZE=14)(U)因子 RankIC 时间序列”, fontproperties=font, ftOnthSosi= 14)包回棘手的辨析

按部分值对自有资本停止评级。,系统使充满结成复审,是考虑目标最适于眼睛的的目标。。具体来说,把正式送入精神病院持续,自有资本可以基准一任一某一或多个因子值停止评分。,基准分对尽量的自有资本停止混合物。,那么将其分为N个结成。,停止回测。

群聚法部分无效性评价目标 战术占优势率:短期推进与普通的推进的比率大于零。。 – 战术月平均水平进项率:短期使充满结成的平均水平月报复率。 – 战术月合格的弄弯:中短期使充满结成月报复的合格的差。 – 战术物比:月退让/月合格的差 别的:结成齿轮齿数比、积聚年退让等。

这时集合模块是指字母的思绪。,翻滚模块和别的效能被援用。,事实请参阅字母系统相互关系物。。

集合棘手的DEF demean_forward_returns(factor_data, grouper=None): factor_data = () if not grouper: grouper = (日期) cols = get_forward_returns_columns() factor_data[cols] = (红眼鱼) 间隔的(λ) x: x – x.mean()) return factor_datadef rate_of_return(period_ret): 累计进项率 return 添加(1).PoW(1)。 / )(1)DEF compute_mean_returns_spread(mean_returns,upper_quant, lower_quant,std_err=None): mean_return_difference = (upper_quant, level=”factor_quantile”) – (lower_quant, level=”factor_quantile”) std1 = (upper_quant, level=”factor_quantile”) std2 = (lower_quant, level=”factor_quantile”) joint_std_err = (std1**2 + std2**2) return mean_return_difference, joint_std_errdef get_forward_returns_columns(columns): return 列[ [(STR)]·()] DEF factor_ret_and_IC_analyse(factor_data,by_fenzu=True): factor_data = () grouper = [(日期)] #group_adjust factor_data = demean_forward_returns(factor_data, grouper + [组] if by_fenzu: (”factor_quantile”) def src_ic(group): f = 组[因子] _ic = group[get_forward_returns_columns()].apply(希腊字母的第 11个字 x: (x, f)[0]) return _ic# 群进项辨析 group_stats = (grouper)[get_forward_returns_columns()].agg([”mean”, 发热的, 伯爵 mean_ret = (意义是), level=1).T std_error_ret = (发热的, level=1).T/ ((伯爵), level=1).T) mean_compret_quantile = (rate_of_return, axis=0) mean_compstd_quantile= std_error_ret .apply(rate_of_return, axis=0) mean_ret_spread_quant, std_spread_quant = compute_mean_returns_spread(mean_compret_quantile,factor_data[”factor_quantile”].max(),factor_data[”factor_quantile”].min(),std_err=mean_compstd_quantile) # 集合rank_IC ic = (石斑)使用(SRCIC) # = pd.Int64Index() return mean_ret, mean_compret_quantile, mean_ret_spread_quant, std_spread_quant,IC-复杂短棘手的重大聚会DEF factor_returns(factor_data):# 部分牺牲额外的 通行期 wise returns of dollar neutral portfolio weighted by factor 牺牲。 def to_weights(group):demeaned_vals = group – group.mean()return demeaned_vals / ().sum() grouper = [(日期)] weights = (红眼鱼)[因子] .apply(to_weights) weighted_returns = factor_data[get_forward_returns_columns()].multiply(weights, axis=0) returns = (level =日期)。和 return returnsdef factor_alpha_beta(factor_data): returns = factor_returns(factor_data) universe_ret = (level=”Date”)[get_forward_returns_columns()].mean().loc[] if isinstance(returns, ): returns.name = universe_ret.columns.values[0] returns = (归还) alpha_beta = () for period in returns.columns.values: x = UnviveSeRe[期]值 y = 归还[具有某个时代特征的]值 x = add_constant(x) reg_fit = OL(Y), x)装置 alpha, beta = reg_fit.params alpha_beta.loc[”Ann. 希腊字母的第一个字母, 时间 = (1 + 希腊字母的第一个字母) ** (252.0 / 持续) – 1 alpha_beta.loc[”beta”, 时间 = beta return alpha_betaforward_returns1.rename(columns={”ROLL_1”:int(1), Loopy5:int(5), 骨碌10:int(10), inplace = True)factor_returns1=factor_returns(forward_returns1)alpha_beta=factor_alpha_beta(forward_returns1)(mean_ret_quantile, mean_compret_quantile,mean_ret_spread_quant,std_spread_quant,ic_quantile) =factor_ret_and_IC_analyse(forward_returns1)#进项辨析拉模块-重大聚会def returns_df(alpha_beta, mean_ret_quantile, mean_ret_spread_quantile): returns_table = () returns_table = (alpha_beta) [ “Mean Period Wise Return Top Quantile (BPS) = \ [-1] * 10000 [ “Mean Period Wise Return Bottom Quantile (BPS) = \ [0] * 10000 [ “Mean Period Wise Spread (BPS) = () * 10000 return returns_table.apply(希腊字母的第 11个字 x: (3))summary_df = returns_df(alpha_beta, mean_ret_quantile, mean_ret_spread_quant)# 周转重大聚会 quantile_turnover_def(quantile_factor, quantile, period=1): quant_names = quantile_factor[quantile_factor == 分位数 quant_name_sets = (level=[”Date”]).apply( lambda x: 集合((资产)) new_names = (quant_name_sets – quant_name_sets.shift(持续)).dropna() quant_turnover = ( lambda x: 莱恩(X) / (希腊字母的第 11个字 x: 莱恩(X) quant_turnover.name = quantile return quant_turnoverdef factor_rank_autocorrelation(factor_data, period=1): grouper = [(日期)] ranks = (红眼鱼)[因子].rank() asset_factor_rank = 枢轴(贮藏所=日期), columns=”asset”, values=”factor”) autocorr = ((持续),axis=1) autocorr.name = period return autocorr#turnover辨析def turnover_analysis(factor_data): turnover_periods = get_forward_returns_columns() quantile_factor = factor_data[”factor_quantile”] quantile_turnover = {p: ([quantile_turnover_def(quantile_factor, q, p) for q in 扣押(1), int(()) + 1)],axis=1)for p in turnover_periods} autocorrelation = ([factor_rank_autocorrelation(factor_data, 持续) for period in turnover_periods], axis=1) return turnover_periods, quantile_turnover, autocorrelationdef turnover_analysis_summary_df(autocorrelation, quantile_turnover): turnover_table = () for period in sorted(()): for quantile, p_data in quantile_turnover[时间.iteritems():[“Quantile {} Mean Turnover 体式(分位数),”{}”.format(持续)] = () auto_corr = () for period, p_data in autocorrelation.iteritems(): [平均水平值] Factor Rank Autocorrelation”,”{}”.format(持续)] = () return turnover_table.apply(希腊字母的第 11个字 x: (3)), (希腊字母的第 11个字 x: (3))#出路(turnover_periods, quantile_turnover, 自相互关系) = turnover_analysis(forward_returns1)# turnover analysis summary dataframequantile_mean_turnover_df, period_autocorrelation_df= turnover_analysis_summary_df(autocorrelation, 划一限制因素矩阵

最高纪录最高纪录标准化模块是输出自有资本价钱矩阵(最高纪录报)。、勤劳词典(DICT)、自有资本因子和行情牺牲矩阵(最高纪录报)是集成的。,后续重大聚会的实用的限制因素援用。

最高纪录标准化模块首要分为三个比率。: industrytype比率、前瞻性支出计算比率、集合效能比率。比率使命典型将是使命词典。 16,””: 4,勤劳哑变量矩阵的间隔的。consistencypriceand_sector为附带重大聚会,它的专心的是横向结盟超越3个限制因素块。,移动不集合于三方的自有资本。。

def consistency_price_and_sector(prices_init, ticker_sector,factor_init): 价钱和部分在SEIDID上是相等的数量的。 univ = [x for x in factor_init.index] _univ=list() for ppp in univ: (PPP〔1〕 univ1=list(SE)t(_univ)) #prices_init = prices_init[univ1] sector0=() sector1=prices_init.columns.values sector2=list(SE)t(SE)ctor0).intersection(SE)t(univ1))) sector3=list(SE)t(SE)ctor1).intersection(SE)t(SE)ctor2))) prices_init=prices_init[sector3] ticker_sector={k:v for k,v in ticker_sector.iteritems() if k in sector3} return prices_init, ticker_sectordef DataProcess(factor_loadings,prices_matrix,industry_type=True,groupby=None,by_group=False,quantiles=5,bins=None,periods=(1, 5, 10),filter_zscore=20,groupby_labels=None): merged_data = compute_forward_returns(prices_matrix, periods, filter_zscore) factor = () factor.index = factor.index.rename([”date”, 资产 merged_data[”factor”] = [:,0] merged_data[”weight”] = ([:,1]) merged_data[”mkt_value”] =[:,2] if groupby is not None: if isinstance(groupby, DIST):SS = (groupby)groupby = (index = [(资产)]值 if groupby_labels is not 无:锡 = (groupby_labels)groupby = (index=[].values) merged_data[”group”] = (类别) merged_data = () merged_data[”factor_quantile”] = quantize_factor(merged_data,quantiles,bins,by_group) if industry_type: ticker_sector1={”sectorID”: ticker_sector} ticker_sector_df=(ticker_sector1) TikkySeCurthyDF [值]=1 ticker_sector_df.reset_index(level=0, inplace=True) ticker_sector_df=(columns={”index”:”secID”, ”sectorID”:”Industry”}) ticker_sector_df_LR = (index=”secID”, columns=”Industry”) (0.0, inplace=True) ticker_sector_df_LR1=ticker_sector_df_LR ticker_sector_df_LR1.index=ticker_sector_df_LR.index.rename(”asset”) ticker_sector_df_LR1=ticker_sector_df_LR1[”Value”] (level=0, inplace=True) merged_data1=merged_data (level=0, inplace=True) (level=0, inplace=True) merged_data2=(merged_data1,ticker_sector_df_LR1,how = 左,on=”asset”) merged_data2=([”Date”,资产 merged_data=merged_data2 merged_data = () return merged_datadef compute_forward_returns(prices, periods=(1, 5, 10), filter_zscore=None): forward_returns = (贮藏所) [prices.index, prices.columns], names=[”Date”, 资产) for period in periods: delta = (持续).shift(-持续) if filter_zscore is not 无:面罩 = 希腊语字母表第四字母δ – delta.mean()) > (filter_zscore * 变量增量[面罩] = np.nan period_name=”ROLL_”+ str(持续) forward_returns[period_name] = () forward_ = forward_.rename([”Date”, 资产 return forward_returnsdef quantize_factor(factor_data,quantiles=5,bins=None,by_group=False,no_raise=False): def quantile_calc(x, _quantiles, _bins, _no_raise): 尝试:以防 _quantiles is not None and _bins is None: return pd.qcut(x, _quantiles, labels=False) + 1elif _bins is not None and _quantiles is None: return pd.cut(x, _bins, labels=False) + 1 except Exception as 如:以防 _no_raise: return (index=)raise e grouper = [(日期)] if by_group: (组) factor_quantile = (红眼鱼)[因子] \ .apply(quantile_calc, quantiles, bins, no_raise) factor_quantile.name = ”factor_quantile” return factor_quantile.dropna()

END

发表评论

电子邮件地址不会被公开。 必填项已用*标注