前言
在量化策略开发中,获取全市场 A 股标的清单是绝大多数选股策略的第一步。手动维护股票代码库不仅繁琐,还容易出现遗漏、退市标的未剔除等问题。PTrade 内置的get_Ashares函数完美解决了这个痛点 —— 只需一行代码,即可获取指定交易日沪深两市全部 A 股的代码清单,是量化新手必掌握的基础 API 之一。
本文将从功能说明、语法参数、基础用法到实战场景,全方位讲解get_Ashares函数的使用方法,附可直接运行的策略代码。
一、函数核心功能
get_Ashares的核心作用是:获取指定日期沪深市场全部 A 股的股票代码列表。 我们可以把它理解为 A 股市场的「时间快照生成器」:输入一个交易日日期,就能拿到当天所有在市 A 股的完整代码清单,同时可直接通过列表长度统计当日 A 股总数量。
典型适用场景:
- 全市场选股策略的基础股票池搭建
- 统计不同时点 A 股市场总规模
- 复现历史截面的股票池,保证回测真实性
- 分析 A 股市场扩容节奏与趋势
二、语法与参数说明
函数原型
get_Ashares(date=None)
参数详情
| 参数名 | 数据类型 | 是否必填 | 格式要求 | 说明 |
|---|---|---|---|---|
date | 字符串 | 可选 | YYYYmmdd | 指定查询的交易日,例如"20230101"代表 2023 年 1 月 1 日 |
返回值
返回一个 Python 列表(list),每个元素为带交易所后缀的 A 股代码字符串,格式为股票代码.交易所:
- 深交所标的后缀为
.SZ,如'000001.SZ'(平安银行) - 上交所标的后缀为
.SH,如'600000.SH'(浦发银行) - 此处只用作举例说明
默认规则
- 不传入
date参数时,回测环境默认取当前回测周期的交易日;研究环境 / 实盘交易环境默认取当日日期。 - 该函数自动匹配当日在市标的,适配历史回测的股票池复现需求。
三、基础调用示例
示例 1:获取当日 A 股代码与总数
无参调用,直接获取当前环境下的 A 股清单,适合研究环境快速查询或实盘策略每日调用。
# 获取当日全部A股代码列表
current_ashares = get_Ashares()
# 输出前10只股票代码
print("当日A股前10只标的:", current_ashares[:10])
# 输出当日A股总数量
print("当日沪深A股总数:", len(current_ashares))
示例 2:获取指定历史日期的 A 股清单
传入指定日期字符串,可回溯任意历史交易日的全市场标的,适合历史数据分析。
# 获取2020年1月1日的A股完整清单
ashares_2020 = get_Ashares("20200101")
print("2020-01-01 A股总数:", len(ashares_2020))
print("2020-01-01 前5只标的:", ashares_2020[:5])
四、实战场景完整代码
场景 1:回测每日自动构建全市场股票池
这是全市场选股策略的标准模板:每日开盘前获取当日全部 A 股,作为选股母池存入全局变量,供后续因子计算、标的筛选逻辑调用。
def initialize(context):
"""策略初始化函数,仅运行一次"""
log.info("策略启动,每日自动更新全市场A股股票池")
# 定义全局变量存储当日股票池
g.stock_universe = []
def before_trading_start(context, data):
"""每日开盘前执行,用于更新股票池"""
# 获取当日全部A股代码
g.stock_universe = get_Ashares()
stock_count = len(g.stock_universe)
# 输出日志便于排查
log.info(f"当日A股代码清单(前10支):{g.stock_universe[:10]}")
log.info(f"当日沪深两市A股总数:{stock_count} 支")
def handle_data(context, data):
"""盘中交易主逻辑"""
# 在此基于g.stock_universe做因子计算、选股、下单等操作
pass
运行后日志效果:
INFO-策略启动,每日自动更新全市场A股股票池
INFO-当日A股代码清单(前10支):['000001.SZ', '000002.SZ', '000004.SZ', ...]
INFO-当日沪深两市A股总数:5164 支
场景 2:跨日期对比 A 股市场扩容情况
对比不同历史时点的 A 股总量,直观观察市场扩容速度,可用于策略容量评估、市场环境分析。
def initialize(context):
"""策略初始化"""
log.info("策略启动,对比不同时期A股市场规模")
# 设置要对比的历史基准日期
g.base_date = "20200101"
def before_trading_start(context, data):
"""每日开盘前执行对比"""
# 1. 获取当前回测日A股数量
current_list = get_Ashares()
current_count = len(current_list)
# 2. 获取基准日期A股数量
base_list = get_Ashares(g.base_date)
base_count = len(base_list)
# 3. 输出对比结果
log.info(f"当前回测日A股数量:{current_count} 支")
log.info(f"{g.base_date} A股数量:{base_count} 支")
log.info(f"区间新增A股数量:{current_count - base_count} 支")
def handle_data(context, data):
pass
运行后日志效果:
INFO-策略启动,对比不同时期A股市场规模
INFO-当前回测日A股数量:5164 支
INFO-20200101 A股数量:3758 支
INFO-区间新增A股数量:1406 支
五、新手避坑指南
-
严格遵守日期格式 日期参数必须为
YYYYmmdd格式的字符串,例如"20230520"。禁止使用横杠、斜杠分隔的格式(如"2023-05-20"、"2023/05/20"),否则函数无法正常返回结果。 -
回测环境无需手动传参 在回测场景下,不传日期参数时函数会自动匹配当前回测的交易日,非常适合遍历历史行情的策略开发,无需循环手动修改日期。
-
返回值可直接对接其他 API 函数返回的股票代码自带交易所后缀,可直接传入
get_history、order等其他 PTrade API,无需额外格式转换。
六、总结
get_Ashares是 PTrade 量化体系中最基础也最高频的工具函数,堪称 A 股市场的「全景清单生成器」。从简单的市场规模统计,到复杂的全市场多因子选股,都离不开这个函数作为底层支撑。
掌握它之后,我们可以在此基础上叠加量价因子、财务指标、行业分类等过滤逻辑,快速搭建出完整的量化选股策略,是量化入门的必学知识点。
风险提示:本文仅为量化 API 技术用法讲解,不构成任何投资建议。所提上市公司称呼仅做举例说明,量化交易存在风险,入市需谨慎。