🚀 AI 一键生成 joinquant 策略代码

JoinQuant 动量策略中如何过滤停牌股票?Pandas 布尔索引详解

joinquant | 发布时间: 2026/5/27
以下内容由 EasyQuant 生成。

问题描述

新人请教下动量策略代码的问题

def set_feasible_stocks(stock_list,days,context):

# 得到是否停牌信息的dataframe,停牌的1,未停牌得0
suspened_info_df = get_price(list(stock_list), start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields='paused')['paused'].T
# 过滤停牌股票 返回dataframe
unsuspened_index = suspened_info_df.iloc[:,0]< 1
# 得到当日未停牌股票的代码list:
unsuspened_stocks = suspened_info_df[unsuspened_index].index
请问这个动量策略的代码,最后一行代码是什么意思呢?suspened_info_df后面接[unsuspened_index],是为什么呢?一个变量后面接一个列表么?是表示啥意思呢?有点看不懂。。。

解决方案

你好!欢迎来到量化交易的世界。你问的这个问题非常经典,它涉及到 Python 数据分析核心库 Pandas 中的一个重要概念:布尔索引(Boolean Indexing)

简单来说,suspened_info_df[unsuspened_index] 的意思就是:根据条件过滤数据

下面我们逐行拆解这段代码,帮你彻底弄懂它:

1. 获取停牌信息

suspened_info_df = get_price(list(stock_list), start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields='paused')['paused'].T

这一行通过 JoinQuant 的 get_price API 获取了股票池中所有股票当天的停牌状态。返回的 suspened_info_df 是一个 Pandas DataFrame(可以理解为一个表格)。

  • 行索引(Index):是股票代码(比如 '000001.XSHE')。
  • 列数据:是停牌状态(1 表示停牌,0 表示未停牌)。

2. 生成过滤条件(布尔数组)

unsuspened_index = suspened_info_df.iloc[:,0] < 1

这一行是关键。它提取了表格的第一列数据,并判断其是否小于 1(即等于 0,未停牌)。
返回的 unsuspened_index 并不是一个普通的列表,而是一个由 True 和 False 组成的 Pandas Series(布尔数组)

  • 如果某只股票未停牌(值为0),对应位置就是 True
  • 如果某只股票停牌了(值为1),对应位置就是 False

3. 应用条件并获取股票代码

unsuspened_stocks = suspened_info_df[unsuspened_index].index

这就是你提问的那一行。

  • suspened_info_df[unsuspened_index]:当把一个由 True/False 组成的数组(unsuspened_index)放入 DataFrame 的中括号 [] 时,Pandas 会自动执行过滤操作。它只会保留那些对应位置为 True 的行,剔除为 False 的行。也就是说,这一步把停牌的股票从表格里删掉了。
  • .index:过滤完之后,我们只需要剩下的股票代码。在 Pandas 中,行标签(这里就是股票代码)被称为 index。加上 .index 就可以把这些未停牌的股票代码提取出来,形成一个列表供后续策略使用。

举个通俗的例子

假设 suspened_info_df 是一个花名册:

  • 平安银行:0(未停牌)
  • 万科A:1(停牌)
  • 格力电器:0(未停牌)

那么 unsuspened_index 就是:

  • 平安银行:True
  • 万科A:False
  • 格力电器:True

执行 suspened_info_df[unsuspened_index] 后,花名册就只剩下:

  • 平安银行:0
  • 格力电器:0

最后加上 .index,你就得到了:['平安银行', '格力电器']

希望这个解释能帮你理清思路!在编写量化策略时,熟练掌握 Pandas 的数据筛选技巧是非常重要的。