
1) 【一句话结论】
上交所交易系统通过订单簿的分层价格结构(价格优先队列)与时间顺序队列结合,结合交易规则引擎,确保“价格优先、时间优先”原则的合规性,法律依据为《证券法》《上海证券交易所交易规则》等。
2) 【原理/概念讲解】
老师解释:首先,“价格优先”是核心规则,即买入价高于或等于卖出价时,优先成交;若买入价等于卖出价,则“时间优先”,即先提交的订单优先。系统实现上,订单簿按价格分层存储(如卖一、卖二等价格层),每个价格层内的订单按提交时间顺序排列(时间优先队列)。撮合时,系统从最高买入价(买一)与最低卖出价(卖一)开始匹配,若价格匹配则取出时间最早的订单成交,匹配后继续处理下一个价格层,直到订单簿为空。比如,当买入价10元与卖出价10元匹配时,系统会优先处理提交时间更早的买入订单,确保时间优先。
3) 【对比与适用场景】
| 规则 | 定义 | 特性 | 处理逻辑 | 适用场景 |
|---|---|---|---|---|
| 价格优先 | 买入价≥卖出价时成交 | 优先考虑价格匹配 | 先匹配最高买入价与最低卖出价 | 市场交易核心规则,确保价格有效性 |
| 时间优先 | 同价时,先提交订单优先 | 优先考虑提交时间 | 同价订单按时间顺序匹配 | 平衡价格与时间,避免优先级冲突 |
4) 【示例】
伪代码示例(订单簿结构:Map<price, List<Order>>,List按时间排序):
# 订单簿初始化
order_book = defaultdict(list) # price: [order1, order2, ...] 按时间排序
# 撮合逻辑
def match_orders(bids, asks):
for price in sorted(asks.keys(), reverse=True): # 卖出价从低到高
while bids.get(price, []) and asks.get(price, []):
bid = bids[price].pop(0) # 时间最早的买入订单
ask = asks[price].pop(0) # 时间最早的卖出订单
if bid.price >= price and ask.price <= price:
# 成交处理
execute_trade(bid, ask)
else:
break # 价格不匹配,跳出当前层
示例:买入订单(10, t1),卖出订单(10, t2, t2>t1)。系统匹配时,先处理t1的买入订单,成交后处理下一个卖出订单。
5) 【面试口播版答案】
面试官您好,关于上交所如何确保“价格优先、时间优先”原则,核心是通过订单簿的分层价格结构(价格优先队列)与时间顺序队列结合,结合交易规则引擎。具体来说,系统将订单按价格分层存储,每个价格层按时间顺序排列。撮合时,从最高买入价和最低卖出价开始匹配,当价格匹配时,优先处理时间更早的订单。法律依据是《证券法》第四十六条(价格优先)和《上海证券交易所交易规则》第五条(时间优先)。比如,当买入价等于卖出价时,系统会优先处理提交时间更早的订单,确保公平性。这样设计既保证了价格的有效性,又避免了时间上的优先级冲突,符合监管要求。
6) 【追问清单】
7) 【常见坑/雷区】