问题描述
目前只能右键加入我的自选股,自选股都是在本地的,不能同步云端。只能逐个加入自选股,不支持文件导入自选股。
解决方案
在 QMT 平台的客户端界面中,目前确实存在“我的自选”板块只能通过右键逐个添加,且数据保存在本地无法同步云端,也不支持直接通过文件导入到界面“我的自选”板块的限制。
但是,如果您是为了在量化策略中使用自定义的股票列表,QMT 提供了非常方便的 Python API 来实现这一需求。您完全不需要依赖界面上的“我的自选”板块,而是可以通过读取本地文件的方式,动态地将股票导入到策略的股票池中。
解决方案:使用 Python API 导入自定义股票池
QMT 提供了 ContextInfo.load_stk_list() 和 ContextInfo.load_stk_vol_list() 函数,允许您从本地的 txt 或 csv 文件中读取一篮子股票代码,并将其设置为策略的股票池。
1. 准备股票列表文件
首先,在您的本地电脑上创建一个文本文件(例如 my_stocks.txt)或 CSV 文件(例如 my_stocks.csv)。
文件格式要求:
- txt 文件:
600000.SH,600004.SH,600006.SH,或600000.SH600004.SH600006.SH(注意:最后一个代码后也需要有分隔符)。 - csv 文件:
600000.SH,600004.SH,600006.SH,(同样,最后一个代码后需要分隔符)。
2. 在策略中读取文件并设置股票池
在您的 Python 策略代码中,使用 ContextInfo.load_stk_list() 读取该文件,并使用 ContextInfo.set_universe() 将其设置为股票池。
#coding:gbk
def init(ContextInfo):
# 假设您的股票列表文件存放在 D 盘 data 目录下,文件名为 my_stocks.txt
file_path = 'D:/data/'
file_name = 'my_stocks.txt'
try:
# 读取文件内容,返回的是包含股票代码的字符串
stock_str = ContextInfo.load_stk_list(file_path, file_name)
# 将字符串处理成列表
# 假设文件内容是逗号分隔的:600000.SH,600004.SH,
if stock_str:
# 去除可能存在的空白字符,并按逗号分割
stock_list = [s.strip() for s in stock_str.split(',') if s.strip()]
# 设置为策略的股票池
ContextInfo.set_universe(stock_list)
print(f"成功导入股票池: {stock_list}")
else:
print("读取的股票列表为空")
except Exception as e:
print(f"读取股票列表文件失败: {e}")
def handlebar(ContextInfo):
# 获取当前股票池
universe = ContextInfo.get_universe()
# 在这里编写您的策略逻辑
pass
总结
虽然 QMT 客户端界面在“我的自选”管理上存在一定局限性,但通过其强大的 Python API,您可以轻松绕过这一限制,实现从本地文件批量导入股票并在量化策略中灵活使用的目的。这种方式不仅高效,而且便于您通过外部程序(如 Python 脚本)动态更新股票列表文件,从而实现更自动化的策略管理。