3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 量化交易平台中,进行离线分析或回测时,我们经常需要获取非标准分钟周期(如 3 分钟、15 分钟或多分钟)的 K 线数据。QMT 提供了高效的本地数据读取接口 ContextInfo.get_local_data(),可以直接从本地数据库中提取这些周期的数据。
ContextInfo.get_local_data(stock_code, start_time='', end_time='', period='1d', divid_type='none', count=-1)
code.market,例如 '600000.SH'。'YYYYMMDD' 或 'YYYYMMDDHHMMSS'。'3m':3分钟线'5m':5分钟线'15m':15分钟线'30m':30分钟线'mm':多分钟线'none'(不复权)、'front'(前复权)、'back'(后复权)等。-1 且指定了时间区间,则获取该区间内的全部数据。返回一个 Python 字典(dict),键(Key)为毫秒级时间戳(timetag),值(Value)为包含行情字段的字典:
{
1672531200000: {
'open': 10.1,
'high': 10.2,
'low': 10.0,
'close': 10.15,
'volume': 5000,
'amount': 50750
},
...
}
以下示例展示了如何在 handlebar 中提取 3 分钟和 15 分钟的本地 K 线数据,并使用 pandas 库将其转换为易于分析的 DataFrame 格式。
#coding:gbk
import pandas as pd
def init(ContextInfo):
# 设定基础股票池
ContextInfo.set_universe(['600000.SH'])
def handlebar(ContextInfo):
# 仅在最后一根 K 线执行一次,避免重复打印
if not ContextInfo.is_last_bar():
return
stock = '600000.SH'
start = '20230101'
end = '20230110'
# 1. 获取 3 分钟本地 K 线数据
data_3m = ContextInfo.get_local_data(
stock_code=stock,
start_time=start,
end_time=end,
period='3m',
divid_type='none'
)
# 2. 获取 15 分钟本地 K 线数据
data_15m = ContextInfo.get_local_data(
stock_code=stock,
start_time=start,
end_time=end,
period='15m',
divid_type='none'
)
print(f"成功获取 3分钟数据共 {len(data_3m)} 条")
print(f"成功获取 15分钟数据共 {len(data_15m)} 条")
# 3. 数据处理:转换为 Pandas DataFrame 并格式化时间戳
if data_3m:
df_3m = pd.DataFrame.from_dict(data_3m, orient='index')
# 将毫秒时间戳索引转换为可读的日期时间格式
df_3m.index = pd.to_datetime(df_3m.index, unit='ms') + pd.Timedelta(hours=8) # 转换为北京时间
df_3m.index.name = 'datetime'
print("\n--- 3分钟 K 线数据前 5 行 ---")
print(df_3m.head())
get_local_data 接口完全依赖本地数据库。在使用前,请务必通过 QMT 客户端的 【操作】-> 【数据管理】 -> 【补充数据】 功能,下载对应品种和对应分钟周期的历史数据,否则接口将返回空字典。pd.Timedelta(hours=8))以对齐北京时间。