问题描述
我在模拟交易,下单股票都是正常的,国债逆回购一直无法下单,报 100009 的错误代码,代码如下,请问为什么报错
stock = '204001.SH'
order_type = xtconstant.STOCK_SELL
trade_vol = 10
tag = '逆回购'
current_price = 1.52
order_id = xt_trader.order_stock(account, stock, order_type, trade_vol, xtconstant.FIX_PRICE, current_price, 'strategy_name', tag)
解决方案
在 QMT (XtQuant) 中进行国债逆回购下单时遇到 100009 错误,通常是由于柜台拒绝委托引起的。结合您在“模拟交易”环境下的情况,主要有以下几个常见原因及排查方向:
1. 模拟交易柜台不支持国债逆回购(最常见原因)
绝大多数券商提供的模拟交易环境(模拟柜台)是不支持国债逆回购(如 204001.SH、131810.SZ)等业务的。模拟柜台通常只支持普通的 A 股买卖。当您向模拟柜台发送逆回购的委托指令时,柜台无法识别或不支持该业务,就会直接拒绝并返回 100009(委托失败/废单)错误。
解决方法:建议在实盘环境中用小资金(如 1000 元)进行测试,实盘柜台通常都能正常处理逆回购指令。
2. 委托数量(trade_vol)的单位问题
沪市国债逆回购(204001.SH)的交易规则在近年来有过调整,目前门槛为 1000 元(即 10 张,1张=100元)。
您的代码中 trade_vol = 10 在新规下是合法的(代表 10 张,即 1000 元)。但是,部分老旧的模拟柜台系统可能还停留在旧规则(沪市逆回购门槛 10 万起,即 1000 张),或者某些柜台接口要求的 trade_vol 单位是“金额”而非“张数”。
排查建议:如果在实盘中依然报错,请尝试将 trade_vol 调整为 1000(代表 10 万)或咨询对应券商接口对逆回购数量单位的具体要求。
3. 委托方向确认
您的代码中使用了 xtconstant.STOCK_SELL(卖出),这是完全正确的。国债逆回购的本质是“借出资金”,在交易系统中对应的操作就是“卖出”(融券卖出/卖出开仓)。
4. 价格类型与价格精度
逆回购的报价是“年化收益率”。您的报价 1.52 是合理的。但请注意,逆回购的价格变动单位通常是 0.005。确保传入的价格符合该品种的最小变动单位(PriceTick),否则也可能被柜台拒单。
总结排查步骤
- 切换实盘测试:这是解决模拟盘逆回购报错的最有效方法。
- 检查可用资金:确保账户内有足够的可用资金(至少 1000 元以上)。
- 捕获详细错误信息:可以通过订阅交易主推回调(如
on_order_error或on_order_stock_async的回调),打印出具体的error_msg,柜台通常会返回类似“该市场/品种不支持”或“资金不足”的详细中文提示。