3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易与短线策略中,**换手率(Turnover Rate)**是衡量个股流动性和市场关注度的核心指标。高换手率通常意味着资金交投活跃、热度高,常伴随着短期波段行情。
本文将详细介绍如何在 QMT(迅投量化交易系统)中使用 Python API 函数 ContextInfo.get_turnover_rate() 批量获取指定时间段内股票的换手率数据,并计算日均换手率进行选股。
QMT 提供了专门获取股票历史换手率数据的内置函数:
ContextInfo.get_turnover_rate(stock_list, startTime, endTime)
list): 股票代码列表,例如 ['600000.SH', '000001.SZ']。str): 起始时间,格式为 'YYYYMMDD'(如 '20230101')。str): 结束时间,格式为 'YYYYMMDD'(如 '20230131')。返回一个 pandas.DataFrame 对象,索引(Index)为日期,列(Columns)为股票代码,元素值为对应的每日换手率(单位为 %)。
实现批量计算日均换手率并筛选热点股的完整流程如下:
mean())。以下代码展示了如何在 QMT 环境下运行换手率选股逻辑:
#encoding:gbk
import pandas as pd
def init(ContextInfo):
# 设置测试的起始与结束时间
ContextInfo.start_date = '20230501'
ContextInfo.end_date = '20230531'
# 设置换手率筛选阈值 (日均换手率大于 5%)
ContextInfo.turnover_threshold = 5.0
def handlebar(ContextInfo):
# 仅在最后一根 K 线(或最新状态)时执行选股逻辑,避免重复计算
if not ContextInfo.is_last_bar():
return
print("=== 开始执行高换手率选股策略 ===")
# 1. 获取目标股票池(以沪深300成份股为例,也可替换为全A股板块)
index_code = '000300.SH'
stock_list = ContextInfo.get_sector(index_code)
if not stock_list:
print("股票池为空,请检查数据下载情况!")
return
print(f"获取到股票池数量: {len(stock_list)}")
# 2. 批量获取指定时间段内的换手率数据
df_turnover = ContextInfo.get_turnover_rate(stock_list, ContextInfo.start_date, ContextInfo.end_date)
if df_turnover.empty:
print("获取换手率数据为空,请确认是否补充了历史财务与行情数据。")
return
# 3. 计算区间内每只股票的日均换手率
avg_turnover = df_turnover.mean(axis=0)
# 4. 筛选日均换手率高于阈值的股票
selected_stocks = avg_turnover[avg_turnover > ContextInfo.turnover_threshold].sort_values(ascending=False)
print(f"\n在 {ContextInfo.start_date} 至 {ContextInfo.end_date} 区间内,")
print(f"日均换手率大于 {ContextInfo.turnover_threshold}% 的股票共有 {len(selected_stocks)} 只:")
for stock, val in selected_stocks.items():
stock_name = ContextInfo.get_stock_name(stock)
print(f"代码: {stock} | 名称: {stock_name:<8} | 日均换手率: {val:.2f}%")
get_turnover_rate 可能返回空值。ContextInfo.get_open_date() 剔除次新股;同时配合 ContextInfo.is_suspended_stock() 剔除长期停牌股。VOL)共同构建复合选股策略。