选择器算法组件|SE
实现标的、系统策略的评估和选取算法。
公共参数:
get_n (int | 0) : 仅取选中的前 get_n 个系统,小于等于0时为取全部
depend_on_proto_sys (bool |False) : 需要原型系统可独立运行
通常原型系统不参与计算, 但某些特殊的场景, 需要依赖于伴生系统策略, 此时可以认为实际执行的系统行为跟随伴生系统的买卖交易, 如依赖于SG进行选择 (不过由于仅依赖SG的场景不严谨, 因为原型和实际系统的SG是一样的) 此时, 需要在自身计算之前执行原型系统, 然后SE自行时可以使用. 而对于实际系统和被跟随的系统完全不一样的情况, 可以自行设计特殊的SE.
基于多因子评分的选择器, 推荐使用 SE_MultiFactor2, 可以自定义添加对 MF 返回的截面评分记录进行组合过滤。参见:截面评分过滤|SCFilter
# 如为 SE_MultiFactor2 实例,设置过滤:分值不为Nan|分成10组取第0组|价格大于等于10元|成交金额不在当日排名末尾20%之内|取前10
se.set_scores_filter(SCFilter_IgnoreNan()|SCFilter_Group(10, 0)SCFilter_Price(
10.) | SCFilter_AmountLimit(0.2) | SCFilter_TopN(10))
内建选择器
- hikyuu.trade_sys.SE_Fixed([stk_list, sys])
固定选择器,即始终选择初始划定的标的及其系统策略原型
- 参数:
stk_list (list) -- 初始划定的标的
sys (System) -- 系统策略原型
- 返回:
SE选择器实例
- hikyuu.trade_sys.SE_Signal([stk_list, sys])
信号选择器,仅依靠系统买入信号进行选中
- 参数:
stk_list (list) -- 初始划定的标的
sys (System) -- 系统策略原型
- 返回:
SE选择器实例
- hikyuu.trade_sys.SE_MultiFactor(input[, topn=10, ic_n=5, ic_rolling_n=120, ref_stk=None, spearman=True, mode="MF_ICIRWeight"])
创建基于多因子评分的选择器,支持多种创建方式:
直接指定 MF:
SE_MultiFactor(mf, topn=10)使用 FactorSet:
SE_MultiFactor(factor_set, topn=10, ic_n=5, ic_rolling_n=120, ref_stk=None, mode="MF_ICIRWeight")使用 Indicator 序列:
SE_MultiFactor(indicators, topn=10, ic_n=5, ic_rolling_n=120, ref_stk=None, mode="MF_ICIRWeight")
- 参数:
input -- 因子输入,可以是 MultiFactorBase 对象、FactorSet 对象或 Indicator 序列
topn (int) -- 只选取时间截面中前 topn 个系统, 小于等于0时代表不限制
ic_n (int) -- 默认 IC 对应的 N 日收益率
ic_rolling_n (int) -- IC 滚动周期
ref_stk (Stock) -- 参考证券 (未指定时,默认为 sh000300 沪深300)
spearman (bool) -- 默认使用 spearman 计算相关系数,否则使用 pearson
mode (str) -- "MF_ICIRWeight" | "MF_ICWeight" | "MF_EqualWeight" 因子合成算法名称
- 返回:
SE选择器实例
# 使用Indicator列表(原有方式) indicators = [MA(CLOSE(), 5), MA(CLOSE(), 10)] selector1 = SE_MultiFactor(indicators, topn=10) # 使用FactorSet(新增方式) factor_set = FactorSet("my_factors") factor_set.add(MA(CLOSE(), 5)) factor_set.add(MA(CLOSE(), 10)) selector2 = SE_MultiFactor(factor_set, topn=10) # 直接使用预创建的MultiFactor对象 mf = MF_ICIRWeight(factor_set, stocks, query) selector3 = SE_MultiFactor(mf, topn=10)
- hikyuu.trade_sys.SE_MultiFactor2(input[, ic_n=5, ic_rolling_n=120, ref_stk=None, spearman=True, mode="MF_ICIRWeight", filter=SCFilter_IgnoreNan()])
创建基于多因子评分的选择器,支持多种创建方式。截面评分过滤|SCFilter
直接指定 MF:
SE_MultiFactor2(mf, filter)使用 FactorSet:
SE_MultiFactor2(factor_set, ic_n=5, ic_rolling_n=120, ref_stk=None, mode="MF_ICIRWeight", filter=SCFilter_IgnoreNan())使用 Indicator 序列:
SE_MultiFactor2(indicators, ic_n=5, ic_rolling_n=120, ref_stk=None, mode="MF_ICIRWeight", filter=SCFilter_IgnoreNan())
SE_MultiFactor2 有一个单独参数 "mf_recover_type", 使用 set_param 设置。指定 mf 使用固定的复权类型进行计算,比如使用固定前复权
- 参数:
input -- 因子输入,可以是 MultiFactorBase 对象、FactorSet 对象或 Indicator 序列
ic_n (int) -- 默认 IC 对应的 N 日收益率
ic_rolling_n (int) -- IC 滚动周期
ref_stk (Stock) -- 参考证券 (未指定时,默认为 sh000300 沪深300)
spearman (bool) -- 默认使用 spearman 计算相关系数,否则为 pearson
mode (str) -- "MF_ICIRWeight" | "MF_ICWeight" | "MF_EqualWeight" 因子合成算法名称
filter (ScoresFilter) -- 评分过滤器
- 返回:
SE选择器实例
# 使用Indicator列表 indicators = [MA(CLOSE(), 5), MA(CLOSE(), 10)] selector1 = SE_MultiFactor2(indicators) # 使用FactorSet factor_set = FactorSet("my_factors") factor_set.add(MA(CLOSE(), 5)) factor_set.add(MA(CLOSE(), 10)) selector2 = SE_MultiFactor2(factor_set) # 直接使用预创建的MultiFactor对象 mf = MF_ICIRWeight(factor_set, stocks, query) selector3 = SE_MultiFactor2(mf)
自定义选择器策略
自定义选择器策略接口:
SelectorBase.is_match_af()- 【必须】判断是否和AF匹配SelectorBase.get_selected()- 【必须】获取指定时刻的系统实例列表SelectorBase._calculate()- 【必须】计算接口SelectorBase._reset()- 【可选】重置私有属性SelectorBase._clone()- 【必须】克隆接口
选择器策略基类
- class hikyuu.trade_sys.SelectorBase
选择器策略基类,实现标的、系统策略的评估和选取算法
- name 名称
- proto_sys_list 原型系统列表
- real_sys_list 运行时的实际系统列表
- __init__(self[, name="SelectorBase])
初始化构造函数
- 参数:
name (str) -- 名称
- get_param(self, name)
获取指定的参数
- 参数:
name (str) -- 参数名称
- 返回:
参数值
- 抛出:
out_of_range -- 无此参数
- set_param(self, name, value)
设置参数
- 参数:
name (str) -- 参数名称
value (int | bool | float | string) -- 参数值
- 抛出:
logic_error -- Unsupported type! 不支持的参数类型
- reset(self)
复位操作
- clone(self)
克隆操作
- add_stock_list(self, stk_list, sys)
加入初始标的列表及其系统策略原型
- 参数:
stk_list (StockList) -- 加入的初始标的列表
sys (System) -- 系统策略原型
- remove_all(self)
清除所有已加入的原型系统
- set_scores_filter(self, scfilter)
设置 ScoresFilter, 将替换现有的过滤器, 仅适用于 SE_MultiFactor
- 参数:
filter (ScoresFilter) -- ScoresFilter
- add_scores_filter(self, scfilter)
在已有过滤基础上新增过滤, 仅适用于 SE_MultiFactor
- 参数:
filter (ScoresFilter) -- 新的过滤器
- is_match_af(self)
【重载接口】判断是否和 AF 匹配
- 参数:
af (AllocateFundsBase) -- 资产分配算法
- get_selected(self, datetime)
【重载接口】获取指定时刻选取的系统实例
- param Datetime datetime:
指定时刻
- return:
选取的系统实例列表
- rtype:
SystemList
- _calculate(self)
【重载接口】子类计算接口
- _reset(self)
【重载接口】子类复位接口,复位内部私有变量
- _clone(self)
【重载接口】子类克隆接口