问题描述
老师,请问:get_history_data是否已经停用了?
解决方案
您好!在 QMT 平台中,get_history_data 函数并没有停用,您仍然可以正常使用它来获取历史行情数据。
您可能是将其与另一个函数混淆了。在 QMT 的官方文档中,明确指出已不建议使用(即将废弃)的函数是 get_market_data,官方建议将其替换为更强大的 get_market_data_ex。
1. get_history_data 的当前状态与用途
get_history_data 依然是有效的 API。它的主要特点是:
- 依赖股票池:必须先通过
ContextInfo.set_universe()设定基础股票池,它只能获取股票池中股票的历史行情数据。 - 返回数据结构:返回一个字典(dict)结构,key 为
stockcode.market,value 为行情数据 list(第 0 位为最早的价格,第 1 位为次早价格,依次类推)。 - 适用场景:主要用来构建简单的指标。
使用示例:
def init(ContextInfo):
# 必须先设置股票池
ContextInfo.set_universe(['000300.SH', '000004.SZ'])
def handlebar(ContextInfo):
# 获取股票池中所有股票的最近两日的收盘价
hisdict = ContextInfo.get_history_data(2, '1d', 'close')
for k, v in hisdict.items():
if len(v) > 1:
# 计算今日涨幅
print(k, ':', v[1] - v[0])
2. 为什么会产生“停用”的误解?
这通常是因为开发者在查阅文档时,看到了关于 get_market_data 的废弃警告。QMT 提供了多种获取数据的接口,它们之间有细微的区别:
get_history_data():正常使用。获取设定股票池中股票的某段行情,返回 dict,适合简单指标计算。get_market_data():不建议使用。官方建议用get_market_data_ex替代。get_market_data_ex():强烈推荐使用。可获取任意股票行情(无需预先设置 universe),返回 pandas.DataFrame 格式,支持更丰富的数据字段和周期,非常适合复杂的数据分析和 Pandas 处理。
3. 建议:使用 get_market_data_ex 替代
如果您需要获取历史数据进行复杂的策略计算,建议直接使用 get_market_data_ex,它的灵活性和返回的数据结构(DataFrame)更符合现代 Python 量化开发习惯。
get_market_data_ex 示例:
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取沪深300指数的日线开高低收数据,返回 DataFrame
data = ContextInfo.get_market_data_ex(
fields=['open', 'high', 'low', 'close'],
stock_code=['000300.SH'],
period='1d',
start_time='',
end_time='',
count=-1,
dividend_type='follow',
fill_data=True,
subscribe=True
)
print(data)
总结:get_history_data 没有停用,但如果您需要更强大的数据获取能力和 DataFrame 格式的返回值,推荐使用 get_market_data_ex。