3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant (聚宽) 量化平台中,调用 get_all_securities 函数获取标的信息时,官方 API 文档并没有明确承诺或规定返回数据的绝对排序规则。
不过,根据实际运行情况和底层数据结构,默认情况下,返回的 pandas.DataFrame 通常是按照标的代码(即 DataFrame 的 index,如 '000001.XSHE')的字典序进行排列的。
在编写严谨的量化交易策略时,强烈建议不要依赖 API 的默认返回顺序。因为底层数据库的查询优化或平台升级可能会导致默认返回顺序发生变化。如果您的策略逻辑(例如:截面选股、取前 N 只股票)对数据的顺序有严格要求,依赖默认顺序可能会引入难以察觉的 Bug。
由于 get_all_securities 返回的是一个标准的 pandas.DataFrame 对象,您可以非常方便地使用 pandas 内置的排序方法,显式地对数据进行排序,以确保顺序完全符合您的策略需求。
import jqdata
def initialize(context):
# 获取所有股票信息
df = get_all_securities(['stock'])
# 显式地按照 index (即股票代码) 进行升序排序
df_sorted_by_code = df.sort_index(ascending=True)
log.info("按代码排序后的前5只股票:\n", df_sorted_by_code.head())
import jqdata
def initialize(context):
# 获取所有股票信息
df = get_all_securities(['stock'])
# 按照上市日期 'start_date' 降序排列
df_sorted_by_date = df.sort_values(by='start_date', ascending=False)
log.info("最新上市的前5只股票:\n", df_sorted_by_date.head())
sort_index() 或 sort_values() 对返回的 DataFrame 进行显式排序,以保证策略的稳定性和可靠性。