历史文档

【历史文档】因子构建与标注-自定义函数构建因子

由clearyf创建,最终由small_q 被浏览 1149 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发IDE(AIStudio):

https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW

新版模版策略:

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU

新版数据平台:

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

新版表达式算子:

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

新版因子平台:

https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5

\

导语

本文将详细展示如何自定义函数构建因子。我们先来回顾一下,当我们构建因子时,目前有几种方式。

这里以过去5日成交总额因子举例说明:

  1. 根据因子库默认因子构建

    {w:100}{w:100}运算符构建因子 {w:100}{w:100}表达式引擎构建因子 表达式引擎构建因子比较灵活,下列三种方式效果相同。 {w:100}{w:100}

  2. 但是在策略开发过程中,有些因子比较难以构建,比如个股相对于上证50、或者中证800的超额收益率,这样的因子用刚刚提到的方式很难实现,因此今天又必要介绍如何通过自定义函数构建因子。本文以个股相对于中证800的超额收益率为例。

构建因子流程

  1. 拖入证券代码列表模块 {w:100}{w:100}这里我们时间跨度为1年左右,为了减少运行时间,只输入了10只股票。
  2. 拖入 输入特征列表模块,并输入特征 {w:100}{w:100}
  3. 拖入 基础特征抽取模块,并连线。 {w:100}{w:100}基础特征抽取结果如下: {w:100}{w:100}
  4. 拖入 输入特征列表模块,并输入个股相对中证800的超额收益率的特征名称 {w:100}{w:100}
  5. 拖入衍生特征抽取模块,计算出个股相对中证800的超额收益率的特征名称 {w:100}{w:100} 这里是全文最主要的地方,理解清楚就能非常自由灵活地构建因子。 这里详细讲解下:
bigquant_run = {
    'relative_ret':  relative_ret
}

代码解释: 在这里自定义表达式函数,为字典格式,例:{‘user_rank’:user_rank},字典的key是方法名称,字符串类型,字典的value是方法的引用。

def relative_ret(df, close_0):
    return df.groupby('instrument', group_keys=False).apply(calcu_relative_ret)

代码解释: 计算特征需要先按股票代码进行groupby然后单独计算每只股票的特征数据。

def calcu_relative_ret(df):
    # 先获取中证800指数数据
    start_date = min(m7.data.read_df().date).strftime('%Y-%m-%d')
    end_date = max(m7.data.read_df().date).strftime('%Y-%m-%d')
    hs800_df = D.history_data(
    '000906.SHA',
    start_date=(pd.to_datetime(start_date) - datetime.timedelta(days=10)).strftime('%Y-%m-%d'),  # 多取几天的数据
    end_date=end_date)[['date', 'close']].rename(columns={'close': 'hs800_close'})
    
    # 与个股数据合并
    df = df[['date', 'close_0']].reset_index().merge(hs800_df, on='date', how='left').set_index('index')
    
    # 返回超额收益率
    return df['close_0'].pct_change() - df['hs800_close'].pct_change()

代码解释: 先根据开始日期和结束日期,通过平台的数据接口获取中证800的指数数据,然后将按股票代码groupby后的数据(个股数据)与中证800数据合并,最后在一个数据框中计算出超额收益率。

查看个股超额收益率特征: {w:100}{w:100}

  1. 拖入衍生特征抽取模块,继续抽取其他特征 {w:100}{w:100}查看最终的特征数据,该特征数据可直接和标注数据合并,训练模型。

    {w:100}

策略案例

https://bigquant.com/experimentshare/5e1430d1b3a146d4ab7ac379b9103577

\

评论
  • mark
  • 为什么我跑出来没有relative_ret字段呢?
{link}