3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,遇到清仓报错 “不允许该委托方式”(如 T2Connector::Receive Packet Failed[750823,不允许该委托方式...]),通常是由于**使用了当前股票或券商柜台不支持的委托类型(特别是市价单类型)**导致的。
以下是导致该报错的常见原因及详细的解决方法:
market_type)与股票所属市场不匹配如果你在清仓时使用了市价单接口(如 order_market),需要注意不同市场对市价单类型的支持是不同的。根据 ptrade API 文档:
1(最优五档即时成交剩余转限价)、4(最优五档即时成交剩余撤销)。0、1、2、4。0、2、3、4、5。如果你对上证主板股票使用了 market_type=0(对手方最优价格)或 market_type=5(全额成交或撤单),柜台就会直接拒绝并返回“不允许该委托方式”。
部分券商的特定账户类型(如某些两融账户或特定通道)可能在接口层面禁用了市价单,要求必须使用限价单(Limit Order)进行报单。
例如,可转债在 ptrade 中不支持使用 order_market 进行市价委托,必须使用限价单。
为了避免市价单带来的各种限制和滑点风险,建议在清仓时使用限价单接口(order_target 或 order),并结合跌停价或当前盘口价格来确保成交。
示例代码:使用跌停价清仓(模拟市价卖出)
def handle_data(context, data):
security = '600570.SS'
# 获取当前持仓
position = get_position(security)
if position.amount > 0:
# 获取跌停价
snapshot = get_snapshot(security)
down_price = snapshot[security]['down_px']
# 以跌停价挂单卖出所有持仓,通常会以当前买一价及以下价格迅速成交
order_target(security, 0, limit_price=down_price)
log.info(f"以跌停价 {down_price} 挂单清仓 {security}")
market_type 参数如果你必须使用市价单,请根据股票代码的后缀(市场)动态传入正确的 market_type。
示例代码:动态判断市场并使用市价单
def handle_data(context, data):
security = '600570.SS'
position = get_position(security)
if position.amount > 0:
# 判断市场类型
if security.endswith('.SS'):
# 上证股票(假设非科创板),使用 1:最优五档即时成交剩余转限价
market_type = 1
elif security.endswith('.SZ'):
# 深证股票,使用 4:最优五档即时成交剩余撤销
market_type = 4
else:
market_type = 1
# 使用 order_market 进行市价清仓
order_market(security, -position.amount, market_type)
log.info(f"使用市价单类型 {market_type} 清仓 {security}")
order_market,或者在调用 order / order_target 时没有传入 limit_price(ptrade 默认会用最新价报单,但在某些极端行情下可能被柜台拒绝)。get_gear_price)或直接使用跌停价(down_px)作为 limit_price 来实现快速清仓,这样可以最大程度避免“不允许该委托方式”的柜台报错。