问题描述
解决方案
在 QMT 中,要在下单前获取股票的涨跌停价格,最直接的方法是使用 ContextInfo.get_instrumentdetail(stockcode) 接口。
该接口返回一个包含合约详细信息的字典,其中 UpStopPrice 字段代表涨停价,DownStopPrice 字段代表跌停价。
代码示例
以下是一个完整的策略示例,展示如何在 handlebar 中获取指定股票的涨跌停价格:
# -*- coding: gbk -*-
def init(ContextInfo):
# 在初始化中设置股票池,这里以浦发银行为例
ContextInfo.set_universe(['600000.SH'])
def handlebar(ContextInfo):
# 获取当前主图的股票代码,也可以指定具体的代码字符串,如 '600000.SH'
stock_code = ContextInfo.stockcode
# 获取合约详细信息
detail = ContextInfo.get_instrumentdetail(stock_code)
# 判断是否成功获取到数据
if detail:
# 提取涨停价
up_limit = detail['UpStopPrice']
# 提取跌停价
down_limit = detail['DownStopPrice']
print(f"代码: {stock_code}")
print(f"涨停价: {up_limit}")
print(f"跌停价: {down_limit}")
# 示例:在下单逻辑中使用
# 如果当前价格低于涨停价,则执行买入逻辑(仅作演示)
# last_price = ContextInfo.get_market_data(['close'], stock_code=stock_code, count=1)
# if last_price < up_limit:
# passorder(...)
else:
print(f"未能获取到 {stock_code} 的合约信息")
关键点说明
- 接口名称:
ContextInfo.get_instrumentdetail(stockcode) - 参数:
stockcode为股票代码,格式如'600000.SH'。 - 返回值:返回一个字典(dict),包含合约的静态属性。
- 字段键名:
'UpStopPrice': 当日涨停价'DownStopPrice': 当日跌停价
替代方案(Tick 数据)
如果您正在处理高频 Tick 数据,也可以通过 ContextInfo.get_full_tick(stock_code) 获取最新的分笔数据,其返回的字典中同样包含 UpStopPrice 和 DownStopPrice 字段。但对于一般的下单前检查,get_instrumentdetail 更为常用和直接。
Q&A
Q: get_instrumentdetail 获取的是实时涨跌停价格吗?
A: 是的,它获取的是该交易日交易所规定的涨跌停价格。对于创业板或科创板,该价格会根据前收盘价和涨跌幅限制(如20%)计算得出。
Q: 如果股票停牌了,还能获取到涨跌停价吗?
A: 通常可以获取到,因为涨跌停价是基于前一交易日收盘价计算的静态属性,与股票当前是否正在交易(IsTrading)无直接关系,但具体取决于交易所数据的推送情况。
Q: 这个接口支持期货吗?
A: 支持。对于期货合约,该接口同样返回涨跌停板价格。