Skip to content

自定义算子

以下是 rqfactor.extension 包中用于开发自定义算子的抽象类辅助函数说明,涵盖类的功能定位、参数要求、函数原型及使用场景,为个性化算子开发提供标准化工具支持:

抽象类定义

抽象类用于封装不同类型算子的通用逻辑,只需实现核心运算函数,无需关注数据格式对齐、滑动窗口迭代等底层细节。

CombinedFactor

简单复合算子,接受一个函数及单因子或多因子的当期数据运算。

python
CombinedFactor(func, *factors)

参数

参数名说明
func原型为 def func(*series)series 对应输入的*factors,每个series 是单因子的时间序列,一维 np.ndarray),返回值为计算后的时间序列
*factors1 个或多个输入因子

RollingWindowFactor

滑动窗口算子

python
RollingWindowFactor(func, window, factor)

参数

参数名说明
func其原型为 def func(series, window),其中 seriesfactor 的因子值,一维 np.ndarraywindow 为滑动窗口大小(与类参数 window 一致),返回值为滑动计算后的时间序列
window滑动窗口大小
factor单个输入因子

CombinedRollingWindowFactor

复合滑动窗口算子

python
CombinedRollingWindowFactor(func, window, *factors)

参数

参数名说明
func其原型为 def func(window, *series), 注意,window 参数在前
window滑动窗口大小
*factors输入因子

CombinedCrossSectionalFactor

复合横截面算子,接受一个函数及一个或多个因子

python
CombinedCrossSectionalFactor(func, *factors)

参数

参数名说明
func原型为 def func(df1, df2, ...), 其中 df1/df2/... 对应输入的 *factors(每个 df 是横截面数据框,索引为交易日 pd.DatetimeIndex,列为股票代码 order_book_id,值为因子值),返回值为横截面计算后的 DataFrame
*factors1 个或多个输入因子

UserDefinedLeafFactor

用于创建自定义基础因子

python
UserDefinedLeafFactor(name, func)
  • name: 自定义因子的名字;
  • func: 其原型如下:
python
    def func(order_book_ids, start_date, end_date):
        """
        @param order_book_ids: 股票/指数代码列表,如 ['000001.XSHE', '600000.XSHG']
        @param start_date: 开始日期,pd.Timestamp 类型
        @param end_date: 结束日期,pd.Timestamp 类型

        @return pd.DataFrame, index 为 pd.DatatimeIndex 类型,可通过 pd.to_datetime(rqdatac.get_trading_dates(start_date, end_date)) 生成;column 为 order_book_id;注意,仅包含交易日
        """

辅助函数

rolling_window

python
rolling_window(series, window)

参数

参数名说明
series输入的一维时间序列(np.ndarray 或可转换为数组的序列,如 pd.Series
window滑动窗口大小(正整数)

可参考 这里。 其功能如下:

python
In[]:
a = np.arange(100)
rolling_window(a, 20)

Out[]:
array([[ 0,  1,  2, ..., 17, 18, 19],
    [ 1,  2,  3, ..., 18, 19, 20],
    [ 2,  3,  4, ..., 19, 20, 21],
    ...,
    [78, 79, 80, ..., 95, 96, 97],
    [79, 80, 81, ..., 96, 97, 98],
    [80, 81, 82, ..., 97, 98, 99]])