3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT (Quantitative Trading Platform) 中,若需要不联网直接读取本地已下载的历史行情数据,可以使用 ContextInfo.get_local_data 接口。
该接口直接读取客户端本地存储的行情文件,不向服务器发送请求,因此适用于离线回测或需要极高读取速度的场景。
函数名: ContextInfo.get_local_data
参数说明:
stock_code (必填): 合约代码,格式为 code.market (如 '600000.SH')。start_time (可选): 开始时间,格式为 'YYYYMMDD' 或 'YYYYMMDDHHMMSS'。end_time (可选): 结束时间,格式同上。period (可选): 周期,默认为 '1d' (日线)。支持 '1m', '5m', 'tick' 等。divid_type (可选): 复权方式,默认为 'none' (不复权)。可选 'front' (前复权), 'back' (后复权) 等。count (可选): 数据条数。默认为 -1。注意事项:
以下代码展示了如何读取 '600000.SH' (浦发银行) 在指定时间段内的本地日线数据,并将其转换为更易读的 Pandas DataFrame 格式。
# -*- coding: gbk -*-
import pandas as pd
def init(ContextInfo):
# 设置要获取的股票代码
stock_code = '600000.SH'
# 调用本地数据接口
# 注意:必须使用关键字参数传参 (如 period='1d')
local_data_dict = ContextInfo.get_local_data(
stock_code=stock_code,
start_time='20230101',
end_time='20230201',
period='1d',
divid_type='none',
count=-1
)
# 打印原始返回类型
print("返回数据类型:", type(local_data_dict))
# 如果获取到了数据,进行处理
if local_data_dict:
# 将字典转换为 DataFrame 以便查看和分析
# get_local_data 返回格式为 {timetag: {open: x, close: y, ...}, ...}
df = pd.DataFrame.from_dict(local_data_dict, orient='index')
# 索引是时间戳,通常需要转换成可读日期
# QMT的时间戳通常是毫秒级,需要根据实际情况调整
df.index = pd.to_datetime(df.index, unit='ms')
df.index.name = 'datetime'
# 按时间排序
df = df.sort_index()
print("本地数据读取成功,前5行如下:")
print(df.head())
else:
print(f"未获取到 {stock_code} 的本地数据,请检查是否已通过数据管理下载数据。")
def handlebar(ContextInfo):
pass
ContextInfo.get_local_data 返回的数据结构如下:
lastPrice (最新价), amount (成交额), volume (成交量), openInt (持仓量), askPrice (卖价五档列表), bidPrice (买价五档列表) 等。open, high, low, close, volume, amount。Q: get_local_data 和 get_market_data_ex 有什么区别?
A: get_local_data 仅读取本地磁盘上的数据文件,速度极快但依赖于用户是否手动下载了数据,且返回格式为字典。get_market_data_ex 会尝试从服务器获取最新数据(如果开启了订阅),返回格式通常为 Pandas DataFrame,使用更方便,但在回测模式下通常也依赖本地数据。
Q: 为什么调用 get_local_data 返回空字典?
A: 最常见的原因是本地没有数据。请在 QMT 客户端顶部菜单栏点击“数据管理”,选择对应的市场、品种和周期,点击“下载”补充历史数据。另外,请检查 start_time 和 end_time 格式是否正确。
Q: 如何将 get_local_data 的时间戳转换为日期字符串?
A: 返回的 Key 是毫秒级时间戳。可以使用 Python 的 datetime 模块或 QMT 提供的 timetag_to_datetime 函数进行转换。例如:timetag_to_datetime(timetag, '%Y-%m-%d %H:%M:%S')。