条件过滤
由clearyf创建,最终由clearyf 被浏览 607 用户
导语
过滤是量化交易中最常用的选股功能,本文就来介绍几种常用过滤实现。
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)
小结: 本文总结了实际策略开发过程中的常用的策略过滤案例,希望可以帮助大家开发策略,验证策略思想。
\