相对市盈率

因子的定义
市盈率对于不同的行业差别巨大,本文中的相对市盈率因子出发点则是股票市盈率在全市场中的分位位置的变化,下面给出该因子的具体计算步骤:

取股票的TTM市盈率数据(此处舍去市盈率为负和市盈率数值特别大的股票),该数据再和每天的全市场市盈率均值求比值,该比值可以认为是该股票目前的市盈率在全市场中的排序位置;
对每只股票,第一步中求得的比值再求一段时间的均值(本文采用六个月),该均值可认为是股票市盈率在全市场排序位置的参考值;
将第二步中的均值除以第一步中的比值,得到的值可以表征股票是否高估或低估,这个值大于1则股票低估,这个值小于1则股票高估,这个值就是相对市盈率因子
用公式表示相对市盈率因子,就是:

RollingMean(PEstockPEmarket)PEstockPEmarket

此处求均值的窗口为6个月。

from quartz_extensions import * import numpy as np import pandas as pd start = ‘2016-01-01’ # 回测起始时间 end = ‘2016-12-01’ # 回测结束时间 benchmark = ‘HS300’ # 策略参考标准 universe = set_universe(‘A’) # 证券池,支持股票和基金 refresh_rate = ‘fri’ # 调仓频率,表示每周五结束之后生成调仓 delay_number = 5 # 信号最大衰减周期 quantile_number = 5 # 分位分组的组数 function_list = [“winsorize”, “neutralize”, “standardize”] # 信号处理函数列表,从前到后进行处理 industry_type = ‘SW1’ # 行业分类类型 ## 自定义因子函数 def foo(data, dependencies=[‘PE’], max_window=120): factor_df = data[‘PE’] factor_mean_se = factor_df.mean(axis=1) factor_df = factor_df.apply(lambda x: x / factor_mean_se) # window为120即求均值的6个月 factor_df = factor_df.rolling(window=120).mean() / factor_df return factor_df.iloc[-1, :] ## 注册因子名称 def initialize(account): a = Signal(‘relativePE’, foo) account.signal_generator = SignalGenerator(a) ## 调用自定义因子分析函数 create_factor_tear_sheet(‘relativePE’, start=start, end=end, benchmark=benchmark, universe=universe, refresh_rate=refresh_rate, delay_number=delay_number, quantile_number=quantile_number, function_list=function_list, industry_type=industry_type, initialize=initialize)

你可能感兴趣的:(相对市盈率)