🚀 AI 一键生成 qmt 策略代码

QMT 策略中如何设置和管理股票池 (set_universe)?

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

问题描述

我如何设定一个由几只特定股票组成的列表,让我的策略只对这些股票进行操作?

解决方案

在 QMT 中,您可以通过在 init(ContextInfo) 函数中使用 ContextInfo.set_universe(stocklist) 方法来设定策略的股票池。

设定后,您可以在策略的其他部分(如 handlebar 函数中)通过 ContextInfo.get_universe() 获取这个列表并进行遍历操作。

以下是具体的代码示例:

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 定义您想要操作的特定股票列表
    # 注意:股票代码格式通常为 '数字代码.市场后缀'
    # SH 代表上海证券交易所,SZ 代表深圳证券交易所
    target_stocks = ['600000.SH', '000001.SZ', '600519.SH']
    
    # 2. 使用 set_universe 将其设定为策略的股票池
    ContextInfo.set_universe(target_stocks)
    
    print(f"策略初始化完成,已设定股票池: {target_stocks}")

def handlebar(ContextInfo):
    # 3. 获取当前设定的股票池
    universe = ContextInfo.get_universe()
    
    # 4. 遍历股票池,对每一只股票执行逻辑
    for stock_code in universe:
        # 示例:获取该股票的最新收盘价
        # 注意:get_market_data 如果不传 stock_code 参数,默认取 universe 中的股票
        # 这里为了演示清晰,显式指定了 stock_code
        market_data = ContextInfo.get_market_data(['close'], stock_code=[stock_code], period=ContextInfo.period, count=1)
        
        if not market_data.empty:
            close_price = market_data.iloc[-1]['close']
            print(f"股票: {stock_code}, 最新收盘价: {close_price}")
            
            # 在此处编写您的具体交易逻辑
            # 例如:if close_price > ... : passorder(...)

关键点说明:

  1. 位置:必须在 init 函数中进行设置,这样策略启动时才会生效。
  2. 格式:股票列表必须是一个 Python 列表(List),列表中的元素是字符串,且必须包含市场后缀(如 .SH.SZ)。
  3. 获取数据:设定 set_universe 后,使用 ContextInfo.get_market_dataContextInfo.get_history_data 时,如果不指定具体的 stock_code 参数,系统通常会默认使用您设定的这个股票池来获取数据。