51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

请解释证券交易中的撮合算法(如时间优先、价格优先),并分析其优缺点,以及如何优化算法以适应不同交易场景(如科创板、创业板)。

上海证券交易所A03 信息技术类难度:中等

答案

1) 【一句话结论】证券交易撮合算法以“价格优先、时间优先”为核心规则,需根据市场规则(如科创板市值优先、创业板涨跌停规则)动态调整,优化方向包括引入多维度优先级(如市值、订单量)或动态规则,以平衡效率与公平性,适应不同交易场景。

2) 【原理/概念讲解】老师可以解释,撮合算法是交易系统匹配买卖订单的核心逻辑。价格优先规则:在买卖双方中,同方向(买或卖)订单里,价格最接近市场价格的优先匹配(比如买方中价格最高的先匹配,卖方中价格最低的先匹配);时间优先规则:当价格相同时,先提交的订单优先成交。类比的话,就像排队买咖啡,先到的(时间优先)和价格合适的(价格优先)优先,两者结合保证公平。具体来说,市场价是当前买卖订单的匹配价格,比如买单中最低价(买方出价最低)和卖单中最高价(卖方要价最高)的交集就是市场价,撮合时比较这个价格是否满足成交条件(买价≥卖价)。

3) 【对比与适用场景】

算法类型定义特性使用场景注意点
价格优先同方向订单中,价格最接近市场价格的优先成交(买方最高价,卖方最低价)价格驱动,成交价格更贴近市场,可能引发价格剧烈波动常规市场(如主板、创业板非特殊时段)需防范价格操纵,如大额订单导致价格跳涨
时间优先价格相同时,先提交的订单优先成交时间驱动,减少价格波动,但可能延迟成交特定时段(如创业板部分时段)、小单交易可能导致小单延迟,影响流动性
科创板(市值优先)在价格优先基础上,若价格相同,按市值(如流通市值)排序,市值大的优先结合市值维度,提升流动性,适应科创板高波动性科创板市场需明确市值计算方式(如流通市值、总市值),避免规则歧义
创业板(涨跌停规则)涨跌停时,采用“时间优先+价格优先”混合模式,或暂停价格优先平衡涨跌停时的效率和公平,避免价格操纵涨跌停时段需设定涨跌停阈值,规则调整需符合监管要求

4) 【示例】
用伪代码模拟订单簿处理(含高并发优化说明):
订单簿结构:buy_orders = [( -price, timestamp, quantity ), ...](价格负数转为升序,方便优先队列按价格降序匹配),sell_orders = [( price, timestamp, quantity ), ...](价格正数转为降序)。
处理逻辑:

  1. 提取卖单头部(最小卖价,即队列最小值)和买单头部(最大买价,即队列最大值,因价格负数)。
  2. 成交条件:买单头部价格 ≥ 卖单头部价格。
  3. 成交后,从对应队列移除该订单(价格优先处理时,移除价格匹配的订单;时间优先时,先移除最早提交的,即时间戳最小的)。
  4. 高并发优化:使用线程安全锁(threading.Lock)保证队列操作线程安全,缓存订单簿(如Redis缓存最新价格和数量,减少数据库访问)。
import threading
from queue import PriorityQueue

class OrderBook:
    def __init__(self):
        self.buy_orders = PriorityQueue()  # 元素为 ( -price, timestamp, quantity )
        self.sell_orders = PriorityQueue()  # 元素为 ( price, timestamp, quantity )
        self.lock = threading.Lock()  # 线程安全锁

    def add_order(self, side, price, quantity, timestamp):
        with self.lock:
            if side == 'buy':
                self.buy_orders.put( (-price, timestamp, quantity) )
            else:
                self.sell_orders.put( (price, timestamp, quantity) )

    def match_orders(self):
        with self.lock:
            while not self.buy_orders.empty() and not self.sell_orders.empty():
                best_buy = self.buy_orders.queue[0]  # ( -price, timestamp, quantity )
                best_sell = self.sell_orders.queue[0]  # ( price, timestamp, quantity )
                buy_price = -best_buy[0]
                sell_price = best_sell[0]
                if buy_price >= sell_price:
                    # 成交
                    buy_price_val, buy_ts, buy_qty = best_buy[1:]
                    sell_price_val, sell_ts, sell_qty = best_sell[1:]
                    if buy_qty >= sell_qty:
                        # 买方数量大于卖方,卖方全部成交
                        self.sell_orders.get()  # 移除卖单
                        remaining_qty = buy_qty - sell_qty
                        # 更新买单数量
                        self.buy_orders.queue[0] = (-buy_price_val, buy_ts, remaining_qty)
                    else:
                        # 卖方数量大于买方,买单全部成交
                        self.buy_orders.get()  # 移除买单
                        remaining_qty = sell_qty - buy_qty
                        # 更新卖单数量
                        self.sell_orders.queue[0] = (sell_price_val, sell_ts, remaining_qty)
                else:
                    break  # 价格不匹配,停止匹配

5) 【面试口播版答案】
面试官您好,关于证券交易中的撮合算法,核心是价格优先和时间优先规则。价格优先是指买卖双方同方向订单里,价格最接近市场价格的优先成交,比如买方中价格最高的先匹配,卖方中价格最低的先匹配;时间优先则是价格相同时,先提交的订单优先。两者结合保证公平。价格优先的缺点是可能引发价格剧烈波动,比如大额订单导致价格跳涨;时间优先的缺点是成交效率可能受影响,比如小单延迟成交。针对不同场景,比如科创板,引入了“市值优先”规则——在价格优先基础上,若价格相同,按股票市值(如流通市值)排序,市值大的订单优先,因为科创板对市值有要求,提升市场流动性;创业板则在涨跌停时调整规则,比如涨跌停时采用“时间优先+价格优先”的混合模式,平衡效率和公平。优化算法时,可通过多维度优先级(如加入订单量、市值)或动态规则调整,比如根据市场波动调整优先级权重,确保算法适应不同交易场景。总结来说,撮合算法需根据市场规则动态调整,以平衡效率与公平性。

6) 【追问清单】

  • 科创板的市值优先具体如何实现?
    回答要点:计算市值时,用股票的流通市值(或总市值),排序时价格相同则市值大的优先,提升流动性。
  • 如何处理大额订单对价格优先的影响?
    回答要点:采用“冰山订单”(只显示部分数量,实际成交时分批),或设置限价订单的匹配阈值,避免价格剧烈波动。
  • 创业板与主板的撮合算法差异?
    回答要点:创业板在涨跌停时,可能暂停价格优先,改为时间优先,避免价格操纵;主板则严格遵循价格优先+时间优先。
  • 算法性能优化方面,如何保证高并发下的响应?
    回答要点:使用优先队列(堆结构)、多线程处理订单匹配,缓存订单簿(如Redis缓存最新价格和数量)。
  • 如果引入新的优先级(如市值优先),如何避免规则冲突?
    回答要点:设置规则优先级,核心规则(价格优先)优先级最高,其他规则作为补充,冲突时按优先级处理。

7) 【常见坑/雷区】

  • 混淆价格优先和时间优先的顺序,比如认为价格优先先于时间优先,而实际两者是并列规则。
  • 忽略科创板、创业板的具体规则细节,比如没有提到市值优先的具体计算方式。
  • 未分析优缺点对工程的影响,比如只说价格优先引发波动,没说波动幅度或延迟时长。
  • 优化方向不具体,比如只说“优化算法”,没有具体措施(如多维度优先级、动态规则调整)。
  • 示例不清晰,比如没有模拟订单簿的处理逻辑,导致面试官无法理解。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1