问题描述
解决方案
在 QMT 策略代码中,获取当前策略选中的所有股票代码(即股票池),可以使用 ContextInfo.get_universe() 方法。
该方法会返回一个包含股票代码字符串的 Python 列表(List),代码格式通常为 code.market(例如 '600000.SH')。
以下是具体的代码示例:
# -*- coding: gbk -*-
def init(ContextInfo):
"""
初始化函数
"""
# 获取策略启动时界面勾选的股票池,或者在代码中通过 set_universe 设置的股票池
initial_universe = ContextInfo.get_universe()
print("策略启动时的股票池:", initial_universe)
def handlebar(ContextInfo):
"""
K线周期运行函数
"""
# 获取当前策略选中的所有股票代码
stock_list = ContextInfo.get_universe()
# 打印整个列表
print("当前股票池列表:", stock_list)
# 遍历列表进行操作
for stock_code in stock_list:
print("正在处理股票:", stock_code)
# 在此处可以添加针对该股票的行情获取或交易逻辑
# 例如: close = ContextInfo.get_market_data_ex(['close'], [stock_code], period='1d', count=1)
详细说明
-
来源:
- 如果在 QMT 界面上运行策略时,在“运行主图”或“标的设置”中选择了特定的股票或板块(如沪深300),
ContextInfo.get_universe()会自动获取这些被选中的标的。 - 如果在代码的
init函数中调用了ContextInfo.set_universe(['600000.SH', '000001.SZ']),那么后续调用get_universe()将返回代码中设置的这个列表。
- 如果在 QMT 界面上运行策略时,在“运行主图”或“标的设置”中选择了特定的股票或板块(如沪深300),
-
返回值类型:
- 返回值为
list类型。 - 列表中的元素为
string类型,格式为数字代码.市场后缀(例如000001.SZ,600000.SH)。
- 返回值为
-
使用场景:
- 常用于
handlebar中遍历所有标的进行选股逻辑判断。 - 常用于批量获取行情数据,例如传给
ContextInfo.get_market_data_ex的stock_code参数。
- 常用于
Q&A
Q: ContextInfo.get_universe() 获取到的代码包含市场后缀吗?
A: 是的,获取到的代码格式为 code.market,例如 600000.SH 或 000001.SZ。
Q: 如果我在代码里使用了 ContextInfo.set_universe(),get_universe() 获取的是界面选的还是代码设定的?
A: 如果在 init 中调用了 set_universe,它会覆盖界面上的选择。之后的 get_universe() 将返回代码中设定的列表。
Q: 如何判断股票池是否为空?
A: 可以通过判断列表长度来实现,例如 if len(ContextInfo.get_universe()) == 0: print("股票池为空")。