集合竞价与连续竞价

集合竞价

股市在交易日上午9:30开盘的时候,会有一个开盘价,这个开盘价是怎么来的呢?正常情况下是通过集合竞价来的,下面简要介绍什么是集合竞价。

在交易日上午9:15-9:25,投资者会根据自己所能接受的价位自由进行买卖申报(投资者根据前一个交易日的收盘价和对股市的预测来给出报价),买卖申报指令上传至交易所(如上交所、深交所),电脑交易主机对全部有效委托进行一次集中撮合处理,这一过程称为集合竞价。(沪市:9:15-9:25,深市:9:15-9:25,14:57-15:00)

有效委托是指股票价格不能超过限制(比如说不能超过前一个交易日的收盘价的10%范围(创业板的股票是20%)),在集合竞价时间内为成交的委托单,自动进入开盘时(9:30)开始的连续竞价。

在这段时间内,输入电脑主机的所有价格都是平等的,即不需要按照价格优先、时间优先的原则交易,而是按照最大成交量的原则确定成交价,也即确定了开盘价。

在9:15-9:20这段时间投资者的买卖申报可以撤销,在9:20-9:25只能申报,而不能撤销,所以有时候在可以撤销申报的这段时间,或许会有主力挂单欺骗你。9:25-9:30既不能报单也不能撤单,9:27由集合竞价产生开盘价。

集合竞价会先按照价格排序,如果价格相同,那么会按照时间优先,在这个基础上,找出一个基准价格,并且这个基准价格要满足:

  • 成交量最大
  • 高于这个基准价的买入申报和低于这个价的卖出申报全部成交
  • 与基准价相同的买卖双方中有一方全部成交

最终这个基准价格即为成交价格,未成交的委托进入开盘时的连续竞价。如果产生一个以上满足上述3个条件的基准价格,那么沪市采用这几个价格的中间价,深市采用离前一个交易日收盘价最近的价作为成交价。

下面具体来说说集合竞价是如何运作的。

设某只股票开盘前有5笔申买委托、6笔申卖委托,按照价格优先(价格相同时,按时间优先)原则,按照买入价从高到低、卖出价从低到高排序(这就和日常买卖一样,出价高者得,卖价低的容易卖出)

序号买入价数量(手)序号卖出价数量(手)
14.90214.625
24.86624.671
34.75434.702
44.70744.756
54.64654.806

成交第一笔:4.90买入2手,4.62卖出5手,成交2手,所以成交价在[4.62,4.90]之间。

序号买入价数量(手)序号卖出价数量(手)
1\\14.623
24.86624.671
34.75434.702
44.70744.756
54.64654.806

成交第二笔:4.86买入6手,4.62卖出剩3手,然后4.67卖出有1手,4.70卖出有2手,刚好有6手,所以成交6手(4.62,4.67,4.70均小于4.86),那么成交价在[4.70,4.86]之间([4.70,4.86]一定是[4.62,4.90]的子集)

序号买入价数量(手)序号卖出价数量(手)
1\\1\\
2\\2\\
34.7543\\
44.70744.756
54.64654.806

成交第三笔:4.75买入4手,4.75卖出6手,成交4手,成交价为4.75

序号买入价数量(手)序号卖出价数量(手)
1\\1\\
2\\2\\
3\\3\\
44.70744.752
54.64654.806

现在买入价为4.70,卖出价为4.75,4.75>4.70。所以集合竞价结束,基准价为4.75

我们来看4.75这个基准价格是否符合3个条件:

  • 成交量最大:总共成交了12手,不能继续成交了,所以最大。
  • 高于4.75的买入申报全部成交、低于4.75的卖出申报全部成交
  • 4.75这个价格买卖双方有一方全部成交(这里是买方全部成交)

注:如果在最后一笔配对中,买入价和卖出价不等,则成交价取两者平均。

所以这时候就以4.75为成交价(即上面的12手均以此价格成交),那么这只股票的开盘价即为4.75

如果没有股票成交(买入价低,卖出价高)时,沪市将开盘价空着,以连续竞价产生的第一笔价格为开盘价。深市不一样,如果最高买入价高于前一个交易日收盘价,则以此价格为开盘价;如果最低卖出价低于前一个交易日的收盘价,那么以此价格为开盘价;如果前面两者都不满足,则以前一个交易日收盘价为开盘价。

连续竞价

在集合竞价为成交的有效委托,进入连续竞价撮合成交。

连续竞价的原则:将买单、卖单排序,按照价格优先,价格相同时按照时间优先的顺序依次配对成交。

1.如果最高买入申报和最低卖出申报价格相同,以该价格成交

2.如果申买价高于即时揭示最低申卖价,以最低申卖价成交

3.如果申卖价低于即时揭示的最高申买价,以最高申买价成交。

如果两个委托如果不能全部成交,剩余的继续留在单上,排队等待成交。

价格优先、时间优先的原则是,举个例子:同时出现了2笔申买申卖委托,如下所示:

序号买入价序号卖出价
1817.90
27.9627.98

结果是:愿意8元买的,以7.90元成交,愿意7.98卖的、7.96买的不会成交。

<think>好的,我现在要处理用户的问题,用户想了解关于集合竞价在量化交易中的回测方法或工具。首先,我需要回忆一下之前提供的引用内容,看看是否有相关的信息。用户提到的引用3是关于qteasy框架进行集合竞价选股回测的,这应该是一个关键点。 首先,用户可能需要知道如何在回测中处理集合竞价的数据。因为集合竞价连续竞价的机制不同,回测时需要特别考虑。比如,集合竞价的成交价格是撮合成交的,而回测通常基于历史数据,但历史数据中的集合竞价阶段的数据可能不够详细,或者需要特定的处理方式。 然后,用户可能需要工具推荐。引用3提到了qteasy,这是一个支持自定义策略的框架,能够处理集合竞价的选股策略。此外,可能还有其他工具,比如vn.py或者Backtrader,但需要确认它们是否支持集合竞价的模拟。 接下来,我得考虑用户的实际需求。用户可能是在开发一个涉及集合竞价的策略,比如在开盘时根据集合竞价的数据决定买入或卖出。这时候回测的准确性就很重要,因为集合竞价的成交机制不同于连续交易,如果回测不能正确模拟,结果可能不准确。 还要考虑回测中的撮合机制。引用2提到真格量化有不同级别的回测,比如每日或分钟级别,但集合竞价可能需要更精细的数据,比如Tick级别,或者特定的时间段处理。需要解释在回测时如何处理集合竞价阶段的订单撮合,比如使用开盘价作为成交价,或者模拟撮合过程。 另外,用户可能需要具体的步骤,比如如何获取集合竞价的历史数据,如何在策略中编写相关逻辑,以及如何验证回测结果的有效性。这里可能需要分点回答,结构清晰。 还要注意用户提到的“方法或工具”,所以回答中需要包括方法和工具两部分。方法部分可以包括数据处理、撮合逻辑、策略编写;工具部分可以介绍qteasy、vn.py等,并说明它们的优缺点。 最后,要确保回答符合系统指令,使用正确的中文,LaTeX格式,生成相关问题,并适当引用提供的资料。比如引用3中的qteasy示例,可以给出代码片段,说明如何实现集合竞价策略的回测。 检查是否有遗漏点,比如回测的挑战,比如数据精度、撮合规则的不同,以及如何解决这些问题。可能还需要提到回测结果的分析,比如滑点、成交率等指标。 总结,回答的结构应该是先介绍集合竞价回测的要点,然后分方法和工具两部分详细说明,接着给出示例代码,最后生成相关问题。确保引用正确,使用正确的格式,语言自然。</think>### 集合竞价在量化交易中的回测方法工具 #### 核心要点 集合竞价阶段的回测需重点处理**价格形成机制**和**订单撮合规则**。由于集合竞价通过最大成交量原则确定开盘价[^1],回测需模拟以下环节: 1. **数据获取**:需包含集合竞价时段的历史委托簿数据(如逐笔委托、成交量) 2. **撮合逻辑**:按价格优先、时间优先原则模拟订单匹配 3. **成交判定**:根据最终开盘价判断策略订单是否成交 #### 常用方法 1. **开盘价模拟法** 假设策略订单以开盘价成交,适用于高频数据不可得的情况。 例如:若策略在9:25提交买入委托且开盘价≤限价,则视为成交。 ```python # qteasy示例:开盘价触发策略 from qteasy import Strategy class AuctionStrategy(Strategy): def on_data(self, data): open_price = data.open[-1] if self.signal_condition(open_price): self.buy(price=open_price, volume=100) ``` 2. **委托簿重建法** 基于Level2数据重构集合竞价委托簿,更精确但计算复杂。需处理: - 价格层级的买卖量累积 - 虚拟成交价计算(最大成交量对应价格) 3. **混合撮合法** 在分钟级回测框架中嵌入特殊时间切片,例如将9:20-9:25作为独立时段处理[^2]。 #### 工具推荐 | 工具名称 | 特点 | 数据要求 | |---------------|----------------------------------------------------------------------|------------------------| | **qteasy** | 支持自定义交易时段划分,提供集合竞价事件触发器[^3] | 分钟级/日级+开盘价数据 | | **vn.py** | 开源框架,可扩展撮合引擎,需自行实现集合竞价规则 | Level2逐笔数据 | | **Backtrader**| 通过扩展`DataFeed`添加竞价阶段数据 | CSV自定义格式 | | **JoinQuant** | 内置集合竞价模拟模块,支持`before_open`函数处理竞价逻辑 | 平台集成数据 | #### 实现挑战解决方案 1. **数据缺口** - 问题:多数免费数据集仅包含开盘价,缺少委托明细 - 应对:使用`开盘价+成交量`估算成交概率,例如: $$ P(成交)=\begin{cases} 1 & \text{当 } P_{\text{order}} \geq P_{\text{open}} \text{(买)}\\ 0 & \text{否则} \end{cases} $$ 2. **撮合时延** - 问题:实盘订单提交时间影响成交优先级 - 模拟:在回测中引入随机延迟因子 ```python import numpy as np submit_time = auction_start + np.random.uniform(0, 300) # 随机分布在5分钟内 ``` 3. **价格穿透** - 问题:极端行情下开盘价跳空导致回测失真 - 校验:加入滑点控制模块 ```python executed_price = open_price * (1 + 0.0005) # 买入时增加0.05%滑点 ``` #### 验证方法 1. **敏感性分析**:调整订单提交时间参数,观察收益曲线稳定性 2. **样本外测试**:使用奇数/偶数日分割训练集测试集 3. **Monte Carlo检验**:对开盘价施加随机扰动,评估策略鲁棒性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值