本方案由 EasyQuant AI量化助手 提供。
问题背景
在 QMT 量化交易中,实时行情是策略判断价格变化、监控持仓和生成交易信号的重要数据来源。通过 xtdata.subscribe_quote() 可以订阅指定股票的行情数据,再使用回调函数处理实时行情。
QMT 的行情接口属于 XtData 模块,具体订阅参数和返回字段应以当前版本文档为准。
订阅实时行情
from xtquant import xtdata
def on_quote_callback(datas):
"""
实时行情回调
"""
for stock_code, data in datas.items():
print(
"股票:",
stock_code,
"行情:",
data
)
stock_code = "000001.SZ"
seq = xtdata.subscribe_quote(
stock_code=stock_code,
period="tick",
start_time="",
end_time="",
count=-1,
callback=on_quote_callback
)
print("订阅序号:", seq)
xtdata.run()
获取最新行情快照
from xtquant import xtdata
def get_latest_price(stock_code):
"""
获取最新行情快照
"""
data = xtdata.get_full_tick(
[stock_code]
)
if not data or stock_code not in data:
return None
tick = data[stock_code]
return {
"last_price": tick.get("lastPrice"),
"volume": tick.get("volume"),
"amount": tick.get("amount")
}
quote = get_latest_price("000001.SZ")
print("最新行情:", quote)
根据实时价格判断价格变化
last_price = None
def on_price_update(datas):
global last_price
for stock_code, data in datas.items():
current_price = data.get("lastPrice")
if current_price is None:
continue
if last_price is not None:
change = current_price - last_price
print(
f"{stock_code} 最新价:{current_price},"
f"价格变化:{change:.2f}"
)
last_price = current_price
seq = xtdata.subscribe_quote(
stock_code="000001.SZ",
period="tick",
count=-1,
callback=on_price_update
)
xtdata.run()
注意事项
-
QMT 行情订阅需要确保客户端已启动,并且行情服务连接正常。
-
subscribe_quote()的回调数据格式可能因版本和订阅周期而不同。 -
get_full_tick()返回的是行情快照,不应简单等同于完整逐笔成交数据。 -
实盘策略需要处理断线重连、重复订阅和行情数据为空等情况。
-
行情回调线程中不建议执行耗时计算或直接进行复杂批量下单,避免影响行情处理。
-
交易策略还需要结合交易时段和订单状态进行判断。
总结
QMT 可以通过 xtdata.subscribe_quote() 订阅实时行情,并利用回调函数接收价格更新。结合 get_full_tick(),可以搭建行情监控、实时指标计算和交易信号处理模块。

242

被折叠的 条评论
为什么被折叠?



