BigQuant使用文档

条件过滤

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

导语

过滤是量化交易中最常用的选股功能,本文就来介绍几种常用过滤实现。

BigQuant平台提供了 数据过滤 模块,可以方便地针对DataFrame做列过滤。

我们首先在编写策略界面中新建一个可视化AI策略,如下图所示。

A股股票过滤模块

平台提供了A股股票过滤模块,通过该模块可以很方便地实现成份股过滤、市场过滤、申万一级行业过滤、ST股票过滤和暂停上市股票过滤。如图所示,我们在训练集和预测集数据流中分别加入了过滤模块。

点击查看模块参数

案例链接

因子过滤

如图所示,我们可以在m5模块中输入上市天数对应的因子list_days_0和后复权收盘价因子close_0,然后在数据过滤模块的属性栏中输入过滤条件,多个条件之间用and/or等逻辑符号连接。

  • 取上市天数>40的股票,则输入表达式: list_days_0>40
  • 取上市天数>40且后复权收盘价>10的股票,则输入表达式:list_days_0>40 and close_0>10 数据过滤模块本质上是对已有的DataFrame做列条件过滤
  • 案例链接

按所属概念板块过滤股票

我们可以在模块导航树中搜索关键词概念,将“选取指定概念板块股”模块拖入画布,如下图连线后在模块的属性栏中填入希望选取的概念板块名称即可。

也可以使用自定义模块自行编写过滤函数 概念板块过滤代码示例


# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
def bigquant_run(input_1):
    # 示例代码如下。在这里编写您的代码
    df = input_1.read_df()#读取上一个模块的数据
    ins= list(df.instrument.unique())
    start = df.date.min()
    end = df.date.max()
    #获取股票的概念字段
    df_concept=D.history_data(instruments=ins, start_date=start, end_date=end,fields=['concept'])
    df_merge=pd.merge(df,df_concept,on=['instrument','date'])
    # 取出归属智能家居概念板块的股票
    df_filter=df_merge[df_merge['concept'].apply(lambda x:'智能家居' in x.split(';') if x else False)]
    data_1 = DataSource.write_df(df_filter)
    return Outputs(data_1=data_1, data_2=None, data_3=None)

案例链接

自定义指标过滤

如图所示展示了一个通过talib库自定义均线技术指标并过滤股价在均线之上的股票:

  • 在m4模块中输入计算均线所需要的基础因子close_0,注意这个m4模块并没有输出给训练模块,因此该因子不会参与模型训练。
  • 在训练集和预测集数据流程中分别插入自定义Python模块m16和m14,模块中我们计算均线指标和并实现过滤。
  • 自定义模块代码示例
# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
def bigquant_run(input_1, input_2, input_3):
    # 示例代码如下。在这里编写您的代码
    input_df = input_1.read_df().reset_index(drop=True)
    # 导入计算技术指标的talib库
    import talib
    def cal(df):
        # 将价格数据转化成float类型
        close = [float(x) for x in df['close_0']]
        # 通过talib计算移动平均值
        df['MA10'] = talib.MA(np.array(close), timeperiod=10)
        # 指标条件判断
        df['cond'] = (df['close_0']>df['MA10']).astype(int)
        df.drop('MA10',axis=1)
        return df
    # 计算指标条件
    result = input_df.groupby('instrument').apply(cal)
    # 过滤满足条件的股票
    filter_result = result[result['cond']>0]
    # 输出
    data_1 = DataSource.write_df(filter_result)
    return Outputs(data_1=data_1, data_2=None, data_3=None)

案例链接

小结: 本文总结了实际策略开发过程中的常用的策略过滤案例,希望可以帮助大家开发策略,验证策略思想。

\

标签

量化交易
{link}