问题描述
若是涨停再买入 状态会变为已撤,但是未涨停就能买入 |,如图中华塑控股就是涨停 然后自动被变为已撤了,京能未涨停能直接买入
使用的是:order-id 已经正常返回
order_id = self.xt_trader.order_stock(
self.account, stock_code = xq_stock_code, order_type = xtconstant.STOCK_BUY,
order_volume = buy_vol, price = price, price_type = xtconstant.MARKET_PEER_PRICE_FIRST, strategy_name = remark,
order_remark = ''
)
解决方案
问题原因分析
您遇到的“涨停买入自动撤单”并不是系统的 bug,而是交易所的交易规则导致的。
您在下单时使用了 MARKET_PEER_PRICE_FIRST(对手方最优价格委托)。在正常的交易状态下,买入时的“对手方最优价格”即为卖一价。但是,当股票涨停时,卖盘(卖一至卖五)通常是空的(没有人愿意以低于或等于涨停价的价格卖出,或者卖单瞬间被吃光)。
此时,交易所接收到您的“对手方最优价格”市价单,发现盘口没有对手方报价可以撮合,根据交易所规则,该笔市价委托会被直接作废(自动撤单)。
解决方案
要解决涨停板无法买入(或跌停板无法卖出)的问题,您需要将订单的报价类型(price_type)修改为限价委托(指定价)或最新价,并将价格明确指定为涨停价。
1. XTQuant (xt_trader) 修改方案
将 price_type 修改为 xtconstant.FIX_PRICE(指定价)或 xtconstant.LATEST_PRICE(最新价)。
# 修改后的代码示例:使用指定价(限价单)下单
order_id = self.xt_trader.order_stock(
self.account,
stock_code=xq_stock_code,
order_type=xtconstant.STOCK_BUY,
order_volume=buy_vol,
price=price, # 这里的 price 传入涨停价
price_type=xtconstant.FIX_PRICE, # 修改为指定价
strategy_name=remark,
order_remark=''
)
2. QMT 内置 Python (passorder) 修改方案
如果您在 QMT 策略编辑器中使用 passorder,请将 prType 参数设置为 11(指定价)或 5(最新价)。
# QMT passorder 示例:prType=11 为指定价
passorder(23, 1101, ContextInfo.accid, xq_stock_code, 11, price, buy_vol, remark, 2, '', ContextInfo)
总结
- 涨停打板买入或跌停按板卖出时,绝对不能使用“对手方最优价格”或“本方最优价格”等依赖盘口挂单的市价单类型。
- 必须使用限价单(FIX_PRICE / prType=11),并直接以涨停价/跌停价进行申报,这样订单才会进入交易所的排队序列中等待撮合。