问题描述
解决方案
在PTrade量化交易平台中,根据股票代码查询中文名称主要有两种简便的方法:使用 get_stock_name 函数(推荐)或 get_stock_info 函数。
以下是具体的接口说明和代码示例。
方法一:使用 get_stock_name(推荐)
这是最直接的方法,专门用于获取股票、可转债、ETF等的名称。
- 接口:
get_stock_name(stocks) - 参数:
stocks可以是单个股票代码字符串(如'600570.SS'),也可以是股票代码列表(如['600570.SS', '000001.SZ'])。 - 返回值: 返回一个字典(dict),Key是股票代码,Value是股票名称。
方法二:使用 get_stock_info
该函数用于获取股票的基础信息,如果不指定 field 参数,默认也会返回包含股票名称的字典。
- 接口:
get_stock_info(stocks, field=None) - 参数:
stocks为股票代码;field可选,若不填则默认包含stock_name。 - 返回值: 返回一个嵌套字典。
策略代码示例
以下代码展示了如何在策略中调用这两个函数并将结果打印到日志中:
def initialize(context):
# 设置我们要查询的股票代码,注意PTrade中需要带后缀 (.SS 或 .SZ)
g.security_list = ['600570.SS', '000001.SZ']
set_universe(g.security_list)
def handle_data(context, data):
# --- 方法一:使用 get_stock_name (最简单) ---
# 获取股票名称字典
names = get_stock_name(g.security_list)
log.info("=== 方法一: get_stock_name ===")
for code in g.security_list:
# 从字典中取出名称
name = names.get(code)
log.info("代码: %s, 名称: %s" % (code, name))
# --- 方法二:使用 get_stock_info ---
# 获取股票基础信息
infos = get_stock_info(g.security_list)
log.info("=== 方法二: get_stock_info ===")
for code in g.security_list:
# 注意 get_stock_info 返回的是嵌套字典
# 结构如: {'600570.SS': {'stock_name': '恒生电子', ...}}
if code in infos:
name = infos[code].get('stock_name')
log.info("代码: %s, 名称: %s" % (code, name))
# 为了演示只运行一次,这里抛出异常或停止策略,实际交易中不需要
# raise Exception("演示结束")
注意事项
- 代码后缀:PTrade中的股票代码必须包含后缀。上海证券交易所的后缀为
.SS(或.XSHG),深圳证券交易所的后缀为.SZ(或.XSHE)。例如:600570.SS。 - 返回值类型:无论传入的是单个字符串还是列表,这两个函数返回的都是 字典 (Dict) 类型,因此需要通过 Key(股票代码)来获取 Value(名称)。
- 适用范围:这两个函数在研究、回测和交易模块中均可使用。
Q&A
Q: 如果输入的股票代码不存在或拼写错误,函数会返回什么?
A: 如果代码无法识别或没有查询到数据,字典中对应的 Value 通常会返回 None,或者该 Key 根本不会出现在返回的字典中。建议在使用前判断 Key 是否存在或 Value 是否有效。
Q: get_stock_info 除了查名字还能查什么?
A: get_stock_info 还可以查询上市日期 (listed_date) 和退市日期 (de_listed_date)。如果需要这些额外信息,建议使用此函数;如果只需要名字,get_stock_name 更高效。
Q: 这些函数可以在 initialize 中直接调用吗?
A: 可以。这两个函数不依赖于盘中实时数据流,属于基础信息查询,可以在 initialize、handle_data、before_trading_start 等环节调用。