🚀 AI 一键生成 qmt 策略代码

QMT API 教程:如何在 handlebar 中获取当前设置的股票池列表?

qmt | 发布时间: 2025/12/30
以下内容由 EasyQuant 生成。

问题描述

怎么在代码里获取当前策略选中的所有股票代码?

解决方案

在 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)

详细说明

  1. 来源

    • 如果在 QMT 界面上运行策略时,在“运行主图”或“标的设置”中选择了特定的股票或板块(如沪深300),ContextInfo.get_universe() 会自动获取这些被选中的标的。
    • 如果在代码的 init 函数中调用了 ContextInfo.set_universe(['600000.SH', '000001.SZ']),那么后续调用 get_universe() 将返回代码中设置的这个列表。
  2. 返回值类型

    • 返回值为 list 类型。
    • 列表中的元素为 string 类型,格式为 数字代码.市场后缀(例如 000001.SZ, 600000.SH)。
  3. 使用场景

    • 常用于 handlebar 中遍历所有标的进行选股逻辑判断。
    • 常用于批量获取行情数据,例如传给 ContextInfo.get_market_data_exstock_code 参数。

Q&A

Q: ContextInfo.get_universe() 获取到的代码包含市场后缀吗?
A: 是的,获取到的代码格式为 code.market,例如 600000.SH000001.SZ

Q: 如果我在代码里使用了 ContextInfo.set_universe()get_universe() 获取的是界面选的还是代码设定的?
A: 如果在 init 中调用了 set_universe,它会覆盖界面上的选择。之后的 get_universe() 将返回代码中设定的列表。

Q: 如何判断股票池是否为空?
A: 可以通过判断列表长度来实现,例如 if len(ContextInfo.get_universe()) == 0: print("股票池为空")