分享

量化交易平台重构:选股因子篇

 AI量化实验室 2023-10-12 发布于北京

之前简单介绍的因子择时,主要是计算价格指标,比如N天走势突破,还可以是均线指标金叉等等。

另外一个很重要的维度是因子选股。选择一个好的股票是前提,在这个基础上择时才对。

择时的运算逻辑是,在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,还有各种财务指标,比如盈利能力,成长能力等。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多