3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化策略开发与验证过程中,策略回测的执行速度直接影响研发迭代效率。网络请求延迟与频繁的实时数据订阅往往是拖慢回测速度的主要瓶颈。通过 QMT(迅投量化交易系统)平台的离线数据管理功能,配合 ContextInfo.get_local_data API 接口,投资者可以直接读取已补充到本地的高清行情数据,实现高效、稳定的纯离线高速回测。
subscribe=False),避免多标的推流带来的内存与 CPU 计算资源占用。在使用 get_local_data 前,必须先将所需标的与周期的历史数据下载补充至本地:
ContextInfo.get_local_data(stock_code, start_time='', end_time='', period='1d', divid_type='none', count=-1)
'600000.SH'。缺省时默认为当前主图代码。'YYYYMMDD' 或 'YYYYMMDDhhmmss'。'tick':分笔数据'1m', '5m', '15m', '30m':分钟线'1d':日线'none'(不复权)、'front'(前复权)、'back'(后复权)、'front_ratio'、'back_ratio'。end_time 为基准向前取 count 条;缺省时取全部匹配数据。接口返回一个 Python dict 字典:
timetagvaluedict
'tick' 时:包含 'open', 'high', 'low', 'close', 'volume', 'amount'。'tick' 时:包含 'lastPrice', 'amount', 'volume', 'openInt', 'askPrice', 'bidPrice' 等盘口分笔明细。以下示例展示了如何在 QMT Python 策略中使用 get_local_data 读取本地日线数据,并实现快速指标计算:
#coding:gbk
import pandas as pd
def init(ContextInfo):
# 设置股票池
ContextInfo.stocks = ['600000.SH', '000001.SZ']
ContextInfo.set_universe(ContextInfo.stocks)
print("策略初始化完成,准备读取本地数据...")
def handlebar(ContextInfo):
# 仅在最后一根 Bar 上一次性进行本地数据计算,以实现最高回测效率
if not ContextInfo.is_last_bar():
return
start_date = '20230101'
end_date = '20231231'
for stock in ContextInfo.stocks:
# 从本地离线数据库获取历史日线行情
local_dict = ContextInfo.get_local_data(
stock_code=stock,
start_time=start_date,
end_time=end_date,
period='1d',
divid_type='front'
)
if not local_dict:
print(f"{stock} 本地无数据,请先通过 QMT 数据管理补充下载!")
continue
# 将返回的 dict 转为 Pandas DataFrame
df = pd.DataFrame.from_dict(local_dict, orient='index')
df.index = pd.to_datetime(df.index, unit='ms') # 转化时间戳
# 输出统计信息
close_price = df['close'].iloc[-1]
max_high = df['high'].max()
print(f"[{stock}] 本地读取成功! 数据条数: {len(df)}, 最新收盘价: {close_price}, 区间最高价: {max_high}")
handlebar 触发频率。init() 初始化函数中提前调用 get_local_data,将策略所需的离线数据一次性加载至内存字典或 Pandas DataFrame 中,避免在 handlebar 中重复读取硬盘。