3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投 Quant Trading)量化平台中,跨品种选股和多因子横截面分析是构建量化策略的重要环节。利用扩展数据(Ext Data)功能,开发者可以获取技术指标或自定义数据,并对其进行全市场股票横向排名。
当我们需要评估某一标的数据在特定历史时间区间内的横向表现和排名时,ext_data_rank_range 接口能够提供精准的数据支持。
ext_data_rank_rangeext_data_rank_range 用于获取指定的扩展数据在指定时间区间内、全市场所有品种中的横向排名结果。
ext_data_rank_range(extdataname, stockcode, begintime, endtime, ContextInfo)
extdataname (string): 扩展数据名称(需提前在 QMT 客户端的扩展数据管理器中定义并计算)。stockcode (string): 合约代码,格式为 代码.市场,例如 '600000.SH'。begintime (string): 统计区间的起始时间(含),格式为 'YYYY-MM-DD HH:MM:SS'。endtime (string): 统计区间的结束时间(含),格式为 'YYYY-MM-DD HH:MM:SS'。ContextInfo (PythonObj): 策略全局上下文对象。dict),包含指定区间段内该品种扩展数据在全市场品种中的排名分布数据。下例展示了如何在 handlebar 行情驱动函数中调用 ext_data_rank_range 获取某只股票(如浦发银行 600000.SH)基于自定义扩展数据(如 'mycci')在 2016 至 2017 年指定时间段内的横向排名情况:
#coding:gbk
def init(ContextInfo):
# 设定基准与股票池
ContextInfo.set_universe(['600000.SH', '000001.SZ'])
print("策略初始化完成,准备获取扩展数据区间排名...")
def handlebar(ContextInfo):
# 只在最后一个 bar 运行以避免重复打印
if not ContextInfo.is_last_bar():
return
ext_name = 'mycci'
target_stock = '600000.SH'
start_date = '2016-08-02 12:12:30'
end_date = '2017-08-02 12:12:30'
# 获取指定时间区间内该扩展数据在全市场中的排名情况
rank_dict = ext_data_rank_range(ext_name, target_stock, start_date, end_date, ContextInfo)
print(f"{target_stock} 在区间 [{start_date} 至 {end_date}] 的扩展数据 '{ext_name}' 排名结果:")
print(rank_dict)
ext_data_rank_range 返回的是指定时间段内的区间排名字典。如果仅需要当前 Bar 的全市场实时排名,可以配合使用单点排名函数 ext_data_rank(extdataname, stockcode, deviation, ContextInfo)。init() 中使用 ContextInfo.get_ext_all_data() 一次性将全部数据读取到内存中,提升策略回测速度。