3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,内置 Python 环境和原生 Python(通过 xtquant 库独立运行)在数据获取机制上存在差异。遇到 get_market_data_ex 返回空值(Empty DataFrame)的情况,通常是由以下原因引起的:
xtquant)的 get_market_data_ex 接口默认是从本地数据目录中读取数据的。如果本地没有该期权合约的历史数据,就会返回空值。在原生 Python 中获取数据前,必须先显式地下载或订阅数据。
在使用 get_market_data_ex 之前,调用 download_history_data 将数据下载到本地。
from xtquant import xtdata
stock_code = "10007803.SHO"
period = "1d"
# 1. 先下载历史数据到本地
print(f"开始下载 {stock_code} 的历史数据...")
xtdata.download_history_data(stock_code, period=period)
print("下载完成!")
# 2. 再次调用 get_market_data_ex 获取数据
price = xtdata.get_market_data_ex(
['open', 'high', 'low', 'close'],
[stock_code],
start_time='',
end_time='',
period=period
)
print(price)
如果你需要的是最新的实时数据,可以使用 subscribe_quote 进行订阅,订阅后本地会持续接收并更新数据。
from xtquant import xtdata
import time
stock_code = "10007803.SHO"
# 1. 订阅行情数据
seq = xtdata.subscribe_quote(stock_code, period='1d', count=-1)
# 等待数据接收(稍微延迟一下确保数据落盘)
time.sleep(2)
# 2. 获取数据
price = xtdata.get_market_data_ex(
['open', 'high', 'low', 'close'],
[stock_code],
period='1d'
)
print(price)
10007803.SHO 是否是已经退市的过期合约。如果是过期合约,可能需要通过特定的过期合约接口或在客户端的数据管理中勾选“包含过期合约”进行下载。.SHO,深交所期权后缀为 .SZO,请确保后缀拼写正确。