3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化平台中,理解订单撮合机制是构建精确回测与模拟交易的关键。平台通过 MarketOrderStyle(市价单)和 LimitOrderStyle(限价单)提供不同类型的下单指令,其撮合规则因运行频率和撮合模式(盘口撮合/Bar撮合)的不同而存在差异。
order(security, amount, style=MarketOrderStyle()) 或默认不传 style 参数。MarketOrderStyle(limit_price)。买入时成交价不得高于保护价,卖出时不得低于保护价,超出部分撤单。limit_price,只有当市场价格达到或优于指定价格时才触发成交。order(security, amount, style=LimitOrderStyle(10.0))。订单处理过程遵循:订单创建 -> 订单检查 -> 报单 -> 确认委托 -> 撮合。
在未启用盘口撮合时,系统根据“最新价 + 滑点”及 Bar/Tick 信息进行撮合:
| 委托类型 | 运行频率 | 首次撮合逻辑 | 挂单后续撮合逻辑 | 成交价格 |
|---|---|---|---|---|
| 市价单 | 天 / 分钟 / Tick | 当“最新价+滑点”在涨跌停范围内时尝试撮合。若触及涨跌停(如涨停买/跌停卖),则直接撤单。 | 剩余未成交部分直接撤单,不进行挂单。 | 最新价 + 滑点(开盘时刻运行为开盘价,其他为上一Bar/Tick价格) |
| 限价单 | 天 / 分钟 | 下单时尝试按最新价+滑点撮合。若涨跌停无法成交,则挂单等待。 | 按分钟 Bar 撮合:每分钟Bar结束时尝试撮合。 • 买入:委托价 > Bar最低价 • 卖出:委托价 < Bar最高价 |
首次成交按“最新价+滑点”;挂单撮合成功按委托价成交 |
| 限价单 | Tick | 下单时尝试按最新价+滑点撮合。 | 按 Tick 撮合:每个Tick结束时尝试撮合。 • 买入:委托价 > Tick最新价 • 卖出:委托价 < Tick最新价 |
挂单撮合成功按委托价成交 |
通过 set_option('match_with_order_book', True) 开启:
order_volume_ratio(默认1.0,可通过 set_option('order_volume_ratio', 0.25) 自定义)。| 特性 | 市价单 (MarketOrderStyle) | 限价单 (LimitOrderStyle) |
|---|---|---|
| 价格确定性 | 不确定(受滑点和市场波动影响) | 确定(成交价优于或等于指定限价) |
| 成交优先度 | 高,下单即尝试撮合 | 依赖市场价格是否达到触发条件 |
| 挂单机制 | 不挂单,未成交部分立即撤单 | 未完全成交部分自动挂单,直至收盘撤单 |
| 涨跌停限制 | 涨停买单、跌停卖单会被直接拒绝/撤单 | 允许挂单等待解封后撮合 |
| 适用场景 | 追求快速入场/出场,对流动性要求高的策略 | 对成本敏感、追求精确建仓价格的策略 |
import jqdata
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 设定成交量上限比例为25%
set_option('order_volume_ratio', 0.25)
def handle_data(context, data):
security = '000001.XSHE'
current_price = data[security].close
# 1. 市价单:以当前市场价快速买入 1000 股
order(security, 1000, style=MarketOrderStyle())
# 2. 限价单:当价格低于当前价 1% 时低吸挂单 1000 股
target_price = current_price * 0.99
order(security, 1000, style=LimitOrderStyle(target_price))
# 3. 科创板市价单:必须设置保护价
# order('688001.XSHG', 200, style=MarketOrderStyle(limit_price=current_price * 1.02))