3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化选股和多因子策略中,评估某个标的在全市场的相对强度(如 CCI 排名、动量排名等)是非常常见的需求。QMT 平台提供了扩展数据(ext_data)系列接口,支持自定义指标计算与全市场截面排序。
本文将详细介绍如何在 QMT 中使用 ext_data_rank_range 函数获取指定时间区间内的全市场截面排名。
ext_data_rank_range()用法:
ext_data_rank_range(extdataname, stockcode, begintime, endtime, ContextInfo)
释义:
获取引用的扩展数据(如自定指标、排名因子等)的数值在指定时间区间内所有品种中的排名。
参数:
extdataname (string):扩展数据名称(需提前在 QMT 界面或系统配置中建立扩展数据)。stockcode (string):股票代码与市场,格式为 'stkcode.market'(如 '600000.SH')。begintime (string):区间的起始时间(包含该时间点),格式为 'YYYY-MM-DD HH:MM:SS'(如 '2023-01-01 00:00:00')。endtime (string):区间的结束时间(包含该时间点),格式为 'YYYY-MM-DD HH:MM:SS'(如 '2023-12-31 23:59:59')。ContextInfo (pythonObj):Python 策略上下文全局对象。返回值:
pythonDict:包含该时间段内各时刻及对应排名的字典数据。以下是一个简单的示例,展示如何在 handlebar 行情驱动函数中调用 ext_data_rank_range 获取某只股票在特定区间的全市场截面排名:
#coding:gbk
def init(ContextInfo):
# 设定基准与交易账号(根据实际需求配置)
ContextInfo.set_universe(['600000.SH'])
print("策略初始化完成,准备调用扩展数据截面排名接口...")
def handlebar(ContextInfo):
# 只在最后一根Bar执行,避免重复输出
if not ContextInfo.is_last_bar():
return
ext_name = 'mycci' # 替换为您在QMT中设置的扩展数据名称
stock_code = '600000.SH'
begin_time = '2023-01-01 00:00:00'
end_time = '2023-12-31 23:59:59'
# 获取指定区间内的全市场截面排名
rank_dict = ext_data_rank_range(ext_name, stock_code, begin_time, end_time, ContextInfo)
# 打印获取结果
print(f"{stock_code} 在区间 [{begin_time} 至 {end_time}] 内的扩展数据 '{ext_name}' 截面排名为:")
print(rank_dict)
ext_data_rank_range 前,必须确保 QMT 客户端中已经成功生成了对应的扩展数据(extdataname)。可以在客户端的扩展数据管理中添加并补充历史计算数据。begintime 与 endtime 必须写为标准的 'YYYY-MM-DD HH:MM:SS' 格式,否则可能导致无法准确检索到截面数据。