3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 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)
来源:
ContextInfo.get_universe() 会自动获取这些被选中的标的。init 函数中调用了 ContextInfo.set_universe(['600000.SH', '000001.SZ']),那么后续调用 get_universe() 将返回代码中设置的这个列表。返回值类型:
list 类型。string 类型,格式为 数字代码.市场后缀(例如 000001.SZ, 600000.SH)。使用场景:
handlebar 中遍历所有标的进行选股逻辑判断。ContextInfo.get_market_data_ex 的 stock_code 参数。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("股票池为空")。