【宽客学院】条件过滤


(iQuant) #1

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


作者:bigquant
阅读时间:10分钟
本文由BigQuant宽客学院推出,难度标签:☆☆☆

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

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

一、A股股票过滤模块

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

点击查看模块参数

image

案例链接

二、因子过滤

如图所示,我们可以在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)

案例链接

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


   本文由BigQuant宽客学院推出,版权归BigQuant所有,转载请注明出处。


怎么筛选股价过十日高的股票
如何排除指定股票列表?
AI选股模板增加A股过滤模块报错
回测模块买入问题
能否实现用某些时间段训练?比如09年1月至19年1月,但是剔除掉14年1月到15年6月。
如何进行特征过滤?
BigQuant平台常见问题汇总(持续更新)
过滤st问题
AI量化策略开发第一步:设置训练集、测试集数据范围
[量化学堂-策略开发]浅谈小市值策略
BigQuant平台常见问题汇总(持续更新)