3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在构建截面选股策略时,全市场因子的相对排名是评估股票强弱的核心指标。QMT(迅投量化平台)提供了强大的扩展数据引用接口,通过 ext_data_rank 函数,开发者可以轻松获取自定义扩展数据在全市场品种中的排名,并支持设置 K 线偏移量(deviation) 来实现历史信号的回溯与对齐。
ext_data_rank 用于获取指定的扩展数据在当前时间点(或偏移对应时间点)全市场所有品种中的排名。
ext_data_rank(extdataname, stockcode, deviation, ContextInfo)
'mycci'、'my_factor')。代码.市场(例如 '600000.SH')。0: 取当前 K 线周期的扩展数据排名。-N: 向左偏移 N 根 K 线(获取 N 个周期前的历史排名)。N: 向右偏移 N 根 K 线。以下是一个基于 ext_data_rank 的截面选股策略骨架,展示如何在 handlebar 函数中动态获取截面排名并进行筛选:
#encoding:gbk
def init(ContextInfo):
# 设定初始股票池
stock_list = ['600000.SH', '000001.SZ', '000002.SZ', '600519.SH']
ContextInfo.set_universe(stock_list)
print("策略初始化完成,扩展数据排名截面模型启动")
def handlebar(ContextInfo):
# 仅在最后一根 Bar 或每日收盘前运行策略逻辑
if not ContextInfo.is_last_bar():
return
ext_name = 'mycci' # 替换为在客户端中定义的扩展数据名
universe = ContextInfo.get_universe()
rank_dict = {}
for stock in universe:
# 获取当前 Bar 的全市场排名(deviation = 0)
current_rank = ext_data_rank(ext_name, stock, 0, ContextInfo)
# 获取上 1 周期(前一根 K 线)的全市场排名(deviation = -1)
prev_rank = ext_data_rank(ext_name, stock, -1, ContextInfo)
rank_dict[stock] = {
'current_rank': current_rank,
'prev_rank': prev_rank
}
print(f"{stock} -> 当前排名: {current_rank}, 前一周期排名: {prev_rank}")
# 按照当前截面排名升序排序(排名越靠前越优秀)
sorted_stocks = sorted(rank_dict.items(), key=lambda x: x[1]['current_rank'])
top_picks = [stock for stock, info in sorted_stocks[:2]] # 选取截面排名前2的股票
print("当前截面选中的目标股票:", top_picks)
ext_data_rank 前,须确保客户端【数据管理】/【扩展数据】中已正确配置并完成了对应扩展数据的计算与下载。deviation = -1 可以有效防止未来函数(Look-ahead Bias),确保信号触发使用的排名数据在交易决策时刻完全可用。init 中使用 ContextInfo.get_ext_all_data(extdataname) 一次性调入内存以提升回测速度。