3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)平台进行回测或模拟交易时,下单后未成交或仅部分成交通常是由撮合机制、市场流动性限制、资金持仓限制或交易规则导致的。
以下是导致该情况的详细原因分析及排查方法:
open(已委托),直到收盘后被系统自动撤销。set_slippage)。最新价 + 滑点 超过了涨停价(买入时)或低于跌停价(卖出时),订单可能无法成交或被撤销。聚宽为了模拟真实的交易环境,防止策略对市场产生过大冲击,对成交量有严格限制。
order_volume_ratio)
initialize 中通过 set_option('order_volume_ratio', value) 修改比例(例如设为 1.0 表示允许成交该分钟全部真实成交量,但这会降低回测真实性)。set_option('match_with_order_book', True)),系统会严格按照买一/卖一等盘口数据撮合。如果对手盘挂单量不足,您的订单将只能部分成交。available_cash 不足。closeable_amount(可卖持仓)。total_amount(总持仓)显示有货,但 closeable_amount(可卖持仓)为 0,导致卖单无法生成或无效。open 状态)将在本交易日结束后(通常是 15:00 后)自动撤销。如果当天没成交,第二天不会自动补单,需要策略重新下单。建议在代码中添加以下检查逻辑:
get_open_orders() 查看订单状态。context.portfolio.available_cash 和 context.portfolio.positions[security].closeable_amount。Q: 为什么我的市价单(Market Order)在涨停板买入失败?
A: 在回测和模拟中,如果标的涨停,市价买单会被直接撤销,因为在真实市场中涨停板通常无法以市价买入。
Q: 如何解决“成交量限制”导致的部分成交?
A: 您可以在 initialize 函数中设置 set_option('order_volume_ratio', 1.0) 来允许策略成交该时间段内市场真实成交量的 100%,但这可能会导致回测结果失真(高估了策略的资金容量)。
Q: 为什么我明明有持仓,却提示可卖数量为0?
A: 请检查是否受 T+1 规则限制。如果是当日买入的股票,当日不可卖出,closeable_amount 会为 0,直到下一个交易日才会变成可卖持仓。
Q: 为什么收盘后我的挂单不见了?
A: 聚宽遵循交易所规则,所有当日未成交的委托单会在收盘后(日终清算时)自动撤销。如果需要继续交易,需要在下一个交易日重新下单。