作者: 阿布
阿布量化版权所有 未经允许 禁止转载
abu量化系统github地址(欢迎+star,你的支持是我更新的动力!)
在第一节即说过:
- 在对的时间,遇见对的人(股票),是一种幸福
- 在对的时间,遇见错的人(股票),是一种悲伤
- 在错的时间,遇见对的人(股票),是一声叹息
- 在错的时间,遇见错的人(股票),是一种无奈
之前的节讲的都是择时(什么时候投资), 本节将讲解选股。
1. 选股因子的编写
与择时小节类似,实现示例在中abu量化系统实现一个选股策略。
如下代码AbuPickRegressAngMinMax为选股因子,它的作用是将股票前期走势进行线性拟合计算一个角度,参数为选股条件,将选股条件作用于角度后进行股票的筛选。
from abupy import AbuPickStockBase, ps, ABuRegUtil
class AbuPickRegressAngMinMax(AbuPickStockBase):
"""拟合角度选股因子示例类"""
def _init_self(self, **kwargs):
"""通过kwargs设置拟合角度边际条件,配置因子参数"""
# 暂时与base保持一致不使用kwargs.pop('a', default)方式
# fit_pick中 ang > threshold_ang_min, 默认负无穷,即默认所有都符合
self.threshold_ang_min = -np.inf
if 'threshold_ang_min' in kwargs:
# 设置最小角度阀值
self.threshold_ang_min = kwargs['threshold_ang_min']
# fit_pick中 ang < threshold_ang_max, 默认正无穷,即默认所有都符合
self.threshold_ang_max = np.inf
if 'threshold_ang_max' in kwargs:
# 设置最大角度阀值
self.threshold_ang_max = kwargs['threshold_ang_max']
@ps.reversed_result
def fit_pick(self, kl_pd, target_symbol):
"""开始根据自定义拟合角度边际参数进行选股"""
# 计算走势角度
ang = ABuRegUtil.calc_regress_deg(kl_pd.close, show=False)
# 根据参数进行角度条件判断
if self.threshold_ang_min < ang < self.threshold_ang_max:
return True
return False
def fit_first_choice(self, pick_worker, choice_symbols, *args, **kwargs):
raise NotImplementedError('AbuPickRegressAng fit_first_choice unsupported now!')
上面编写的AbuPickRegressAngMinMax即为一个完整的选股策略:
- 选股策略必须继承自AbuPickStockBase
- 选股策略必须实现fit_pick,即完成通过选股阶段金融时间序列对股票决策是否选中
- 选股策略必须实现fit_first_choice, 但是可以raise NotImplementedError,fit_first_choice后面的章节示例
- fit_pick上的装饰器ps.reversed_result稍后讲解
选股模块主要功能依托AbuPickStockWorker,其类似择时模块中的AbuPickTimeWorker,其通过init_stock_pickers()函数将所有选股因子实例化,然后在之后的fit()操作中,遍历所有选股因子,使用选股因子的fit_pick()函数,保留所有选股因子的fit_pick()都返回True的股票,只要有一个选股因子的fit_pi