3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!您的理解是非常准确的。在 QMT 平台中,get_market_data_ex 的返回值格式确实是 {stock_code: DataFrame},即以股票代码为键,以包含该股票历史数据的 DataFrame 为值的字典。
文档中出现的 {field1: DataFrame, index=stock_list, columns=time_list} 描述,实际上是旧版 get_market_data 函数在获取多股多期数据时的一种数据结构表现形式(或者说是早期版本文档的遗留错误)。
为了让您在编写策略时更加清晰,以下是这两个接口在返回值上的核心区别与详细解析:
get_market_data_ex 的真实返回值结构(推荐使用)根据 QMT 官方 API 文档,ContextInfo.get_market_data_ex 的返回值为:
dict (字典){code1: data1, code2: data2, ...}str 类型,合约代码(如 '000300.SH')。pandas.DataFrame 类型,该合约的数据集。
'20231010' 或 '20231010093000')。'open', 'high', 'low', 'close')。代码示例:
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取沪深300和平安银行的日线数据
data_dict = ContextInfo.get_market_data_ex(
fields=['open', 'high', 'low', 'close'],
stock_code=['000300.SH', '000001.SZ'],
period='1d',
count=5
)
# 解析返回值
for stock_code, df in data_dict.items():
print(f"股票代码: {stock_code}")
print(df) # 打印出该股票的 DataFrame,行是时间,列是 OHLC
# 获取最新收盘价
if not df.empty:
latest_close = df['close'].iloc[-1]
print(f"最新收盘价: {latest_close}")
get_market_data 的返回值结构(不建议使用)旧版的 get_market_data 接口设计较为复杂,其返回值类型会根据传入参数(股票数量、时间范围)的不同而发生变化:
pandas.Series。pandas.DataFrame(Index 为时间,Columns 为字段)。pandas.DataFrame(Index 为股票代码,Columns 为字段)。pandas.Panel(三维数组,Items 为股票代码,Major_axis 为时间,Minor_axis 为字段)。由于 Pandas 较新版本已废弃 Panel,这会导致兼容性问题。{stock_code: DataFrame} 为准来处理 get_market_data_ex 的数据。_ex 版本:由于旧版 get_market_data 返回值类型不固定且依赖已废弃的 Panel 结构,强烈建议在所有新策略中统一使用 get_market_data_ex。它的返回值结构稳定(永远是字典嵌套 DataFrame),非常利于 Pandas 的向量化处理和数据清洗。