之前简单介绍的因子择时,主要是计算价格指标,比如N天走势突破,还可以是均线指标金叉等等。 ![](http://image109.360doc.com/DownloadImg/2023/10/1215/273692355_1_20231012033811398_wm.jpeg)
另外一个很重要的维度是因子选股。选择一个好的股票是前提,在这个基础上择时才对。 择时的运算逻辑是,在fit_day函数里,调用process_factors。这里会对universe股票集合里的每支股票,都对所有的factor进行运算。择时是只要一个因子触发,就会产生信号。因子之间是OR的关系。 选股逻辑则相反,只要有一个因子投了反对票,则这支股票出局,不在选择范围,也就是因子之间是AND的关系。 def __process_pick_stock_factors(self,date): new_universe = [] for symbol in self.universe: b_pick = True for factor in self.pick_stock_factors: if factor.fit_day(symbol,date) == False: b_pick = False break if b_pick: new_universe.append(symbol) self.universe = new_universe def calc_regress_deg(y, show=True): """ 将y值 zoom到与x一个级别,之后再fit出弧度转成角度 1 多个股票的趋势比较提供量化基础,只要同一个时间范围,就可以比较 2 接近视觉感受到的角度 :param y: 可迭代序列 :param show: 是否可视化结果 :return: deg角度float值 """ # 将y值 zoom到与x一个级别 model, _ = regress_y(y, mode=True, zoom=True, show=show) rad = model.params[1] # fit出弧度转成角度 deg = np.rad2deg(rad) return deg 一个按照角度的选股因子就OK了。 from .factor_base import FactorBase from ..utils import *
class FactorPickRegressAngle(FactorBase): def __init__(self, context, **kwargs): super(FactorPickRegressAngle,self).__init__(context,**kwargs)
def fit_day(self,symbol,date): # 计算走势角度 ang = calc_regress_deg(kl_pd.close, show=False) # 根据参数进行角度条件判断 min = 20 max = 60 if min < ang < max: return True return False 这里还是技术型选股,当然可以实现基本面选股,比如市值,PE,PE,PS,还有各种财务指标,比如盈利能力,成长能力等。
|