Claude Opus 4 7 在「实现股票交易撮合引擎」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:Claude Opus 4 7
- 用例名称:实现股票交易撮合引擎
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(System Prompt)
这是给 AI 模型的背景设定和角色指令:
你是一名资深量化交易系统工程师,熟悉金融交易所撮合引擎的核心设计原理。 回答要求: 1. 使用清晰的面向对象设计,代码结构层次分明,包含必要的注释 2. 严格遵循价格-时间优先原则,正确处理完全成交与部分成交两种场景 3. 对边界条件(如负数价格/数量、重复订单ID、订单不存在等)进行基本校验 4. 每个方法需说明其功能、参数含义及返回值格式 5. 提供至少3组测试用例验证撮合逻辑的正确性
用户提示词(User Prompt)
这是用户给 AI 模型的具体任务要求:
请实现一个基础的股票交易限价单撮合引擎(Python 或 Java 均可)。 ## 背景说明 撮合引擎是交易所的核心组件,负责将买方和卖方的订单进行配对成交。 本题要求实现最基础的限价单撮合逻辑。 ## 核心规则 1. **价格优先**:买单中出价最高的优先成交;卖单中要价最低的优先成交 2. **时间优先**:相同价格的订单,先提交的先成交 3. **成交条件**:当买单价格 ≥ 卖单价格时触发撮合 4. **成交价格**:以被动方(挂单方)的价格成交(即先挂出的订单价格) 5. **部分成交**:若数量不匹配,数量少的一方完全成交,另一方保留剩余数量继续挂单 ## 需要实现的接口 ### 1. `addBuyOrder(price, quantity, orderId)` - 添加一笔限价买单,添加后立即尝试撮合 - 若发生成交,返回成交记录列表;若未成交,挂入买单队列 - 成交记录格式:`{「buyOrderId」: ..., 「sellOrderId」: ..., 「price」: ..., 「quantity」: ...}` ### 2. `addSellOrder(price, quantity, orderId)` - 添加一笔限价卖单,添加后立即尝试撮合 - 规则同上,方向相反 ### 3. `getOrderBook()` - 返回当前未成交的挂单情况 - 返回格式:
评测结果
综合得分
该模型在此用例的得分为:95.2 分(满分 100 分),已通过
基础难度评测结果
- 得分:95.2 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
我来实现一个完整的限价单撮合引擎。我会使用Python,采用清晰的面向对象设计。 ```python from collections import deque from typing import List, Dict, Optional import heapq class Order: """ 订单类 属性: order_id: 订单唯一标识 price: 限价价格 quantity: 订单数量 timestamp: 订单时间戳(用于时间优先) """ def __init__(self, order_id: str, price: float, quantity: int, timestamp: int): self.order_id = order_id self.price = price self.quantity = quantity self.timestamp = timestamp def __repr__(self): return f"Order({self.order_id}, price={self.price}, qty={self.quantity})" class OrderBook: """ 订单簿类 - 使用堆维护价格优先,队列维护时间优先 buy_orders: 买单堆(最大堆,价格高的优先) sell_orders: 卖单堆(最小堆,价格低的优先) """ def __init__(self): self.buy_orders = [] # 最大堆:存储 (-price, timestamp, Order) self.sell_orders = [] # 最小堆:存储 (price, timestamp, Order) self.timestamp_counter = 0 def add_buy_order(self, order: Order): """添加买单到订单簿(价格取负实现最大堆)""" heapq.heappush(self.buy_orders, (-order.price, order.timestamp, order)) def add_sell_order(self, order: Order): """添加卖单到订单簿""" heapq.heappush(self.sell_orders, (order.price, order.timestamp, order)) def peek_best_buy(self) -> Optional[Order]: """查看最优买单(不移除)""" while self.buy_orders: _, _, order = self.buy_orders[0] if order.quantity > 0: return order heapq.heappop(self.buy_orders) # 移除已完全成交的订单 return None def peek_best_sell(self) -> Optional[Order]: """查看最优卖单(不移除)""" while self.sell_orders: _, _, order = self.sell_orders[0] if order.quantity > 0: return order heapq.heappop(self.sell_orders) return None def remove_empty_orders(self): """清理已完全成交的订单""" while self.buy_orders and self.buy_orders[0][2].quantity == 0: heapq.heappop(self.buy_orders) while self.sell_orders and self.sell_orders[0][2].quantity == 0: heapq.heappop(self.sell_orders) class MatchingEngine: """ 撮合引擎核心类 功能: 1. 接收买卖订单 2. 按价格-时间优先原则撮合 3. 生成成交记录 4. 维护订单簿状态 """ def __init__(self): self.order_book = OrderBook() self.order_registry = {} # 存储所有订单,用于查询和去重 def _validate_order(self, price: float, quantity: int, order_id: str) -> bool: """ 订单基础校验 参数: price: 订单价格 quantity: 订单数量 order_id:...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】这是一个高质量的撮合引擎实现。核心撮合逻辑完全正确,严格遵循价格-时间优先原则,成交价格和部分成交处理准确无误。接口设计完整规范,返回格式符合要求。代码架构清晰,采用堆+时间戳的经典方案,数据结构选择合理高效。注释详尽,测试覆盖全面,边界条件处理完善。整体达到了生产级代码的标准,展现了扎实的系统设计能力和工程实践水平。 【GEMINI】该生成结果是一份教科书级别的撮合引擎实现。不仅在算法选择(堆排序)上表现专业,在业务规则的理解(价格/时间优先、被动方定价)上也完全准确。代码结构优雅,可读性强,测试用例覆盖全面,完全符合“资深量化交易系统工程师”的人设要求。 【KIMI】整体实现较好,撮合逻辑正确,接口完整,代码质量较高。测试用例覆盖全面,验证了核心功能的正确性。但代码中仍有一些细节可以优化和改进。
进阶难度评测结果
- 得分:92.8 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```python from enum import Enum from dataclasses import dataclass from typing import List, Optional, Dict from sortedcontainers import SortedDict import time class Side(Enum): BUY = "BUY" SELL = "SELL" class OrderType(Enum): LIMIT = "LIMIT" MARKET = "MARKET" @dataclass class Order: order_id: str side: Side order_type: OrderType price: Optional[float] # 市价单为None quantity: int timestamp: float def __post_init__(self): # 边界条件校验 if self.quantity List[Trade]: """ 提交订单并执行撮合 返回:本次订单产生的成交记录列表 """ # 检查订单ID是否重复 if order.order_id in self._orders: raise ValueError(f"订单ID已存在: {order.order_id}") trades = [] if order.order_type == OrderType.MARKET: # 市价单处理:立即撮合,剩余部分取消(不进入订单簿) trades = self._match_market_order(order) else: # 限价单处理:先尝试撮合,未成交部分进入订单簿 trades = self._match_limit_order(order) # 如果订单还有剩余数量,加入订单簿 if order.quantity > 0: self._add_to_book(order) self._orders[order.order_id] = order return trades def cancel_order(self, order_id: str) -> bool: """ 取消订单 返回:是否成功取消(订单不存在返回False) """ if order_id not in self._orders: return False order = self._orders[order_id] self._remove_from_book(order) del self._orders[order_id] return True def get_order_book(self) -> Dict: """ 获取当前订单簿快照 返回格式: { 'bids': [(price, total_quantity), ...], # 买单,价格降序 'asks': [(price, total_quantity), ...] # 卖单,价格升序 } """ bids = [] for neg_price in self._buy_book.keys(): price = -neg_price orders = self._buy_book[neg_price] total_qty = sum(o.quantity for o in orders) bids.append((price, total_qty)) asks = [] for price in self._sell_book.keys(): orders = self._sell_book[price] total_qty = sum(o.quantity for o in orders) asks.append((price, total_qty)) return {'bids': bids, 'asks': asks} def _match_limit_order(self, order: Order) -> List[Trade]: """ 限价单撮合逻辑 撮合条件:买单价格 >= 卖单价格 成交价格:以被动方(订单簿中已有挂单)价格成交 """ trades = [] if order.side == Side.BUY: # 买单:与卖单簿中价格最低的卖单撮合 while order.quantity > 0 and len(self._sell_book) > 0: best_ask_price = self._sell_book.keys()[0] # 检查是否满足撮合条件 if order.price 0 and len(self._buy_book) > 0:...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】这是一个高质量的股票交易撮合引擎实现。核心撮合逻辑准确无误,严格遵循价格-时间优先原则和被动方价格成交规则。功能完整,涵盖限价单、市价单、订单取消等所有要求接口,边界条件处理全面。数据结构选择合理,时间复杂度达到 O(log M) 要求。代码注释详尽,测试用例覆盖充分。主要改进空间在于:修正 HTML 实体编码、优化订单移除操作的时间复杂度、增加生产级日志功能。总体而言,该实现展现了对金融交易系统的深刻理解,代码质量达到工业级标准。 【GEMINI】这是一个非常专业且高质量的撮合引擎实现。作者不仅在逻辑上完全对齐了交易所的核心规则(如被动成交价确定、市价单剩余取消),而且在数据结构选型上表现出深厚的功底,通过SortedDict巧妙解决了价格排序问题。测试用例覆盖全面,代码健壮性强,是一份教科书级别的量化系统设计答卷。 【KIMI】整体而言,这个实现基本满足了题目要求,撮合逻辑正确,功能完整,代码质量较高。在数据结构选择、代码可读性等方面表现较好。但在部分细节处理上还有优化空间,如市价单剩余部分处理提示、注释优化等。总体实现质量较高,基本达到了题目要求。
困难难度评测结果
- 得分:70.3 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```python """ 高性能股票交易撮合引擎 作者:资深量化交易系统架构师 """ from enum import Enum from dataclasses import dataclass, field from typing import Optional, List, Dict, Tuple from decimal import Decimal, ROUND_HALF_UP from sortedcontainers import SortedDict # 基于红黑树的有序字典,O(log n)插入/删除 import time import heapq from collections import deque # ==================== 枚举定义 ==================== class OrderType(Enum): """订单类型""" LIMIT = "LIMIT" # 限价单 MARKET = "MARKET" # 市价单 STOP = "STOP" # 止损单 ICEBERG = "ICEBERG" # 冰山订单 class OrderSide(Enum): """买卖方向""" BUY = "BUY" SELL = "SELL" class OrderStatus(Enum): """订单状态""" PENDING = "PENDING" # 待触发(止损单) ACTIVE = "ACTIVE" # 活跃(在订单簿中) PARTIALLY_FILLED = "PARTIALLY_FILLED" # 部分成交 FILLED = "FILLED" # 完全成交 CANCELLED = "CANCELLED" # 已撤销 REJECTED = "REJECTED" # 已拒绝 class MatchMode(Enum): """撮合模式""" CONTINUOUS = "CONTINUOUS" # 连续竞价 CALL_AUCTION = "CALL_AUCTION" # 集合竞价 class CircuitBreakerStatus(Enum): """熔断状态""" NORMAL = "NORMAL" # 正常 TRIGGERED = "TRIGGERED" # 已触发 # ==================== 数据结构 ==================== @dataclass class Order: """订单对象""" order_id: str symbol: str side: OrderSide order_type: OrderType price: Optional[Decimal] # 限价单/止损单的价格,市价单为None quantity: Decimal timestamp: int # 纳秒级时间戳,确保时间优先精度 # 冰山订单专用字段 display_qty: Optional[Decimal] = None # 显示数量 hidden_qty: Decimal = Decimal('0') # 隐藏数量 # 止损单专用字段 stop_price: Optional[Decimal] = None # 触发价格 # 状态字段 status: OrderStatus = OrderStatus.ACTIVE filled_qty: Decimal = Decimal('0') def remaining_qty(self) -> Decimal: """剩余未成交数量""" return self.quantity - self.filled_qty def visible_qty(self) -> Decimal: """订单簿中可见数量(冰山订单特殊处理)""" if self.order_type == OrderType.ICEBERG: return min(self.display_qty, self.remaining_qty()) return self.remaining_qty() @dataclass class Trade: """成交记录""" trade_id: str symbol: str buy_order_id: str sell_order_id: str price: Decimal quantity: Decimal timestamp: int aggressor_side: OrderSide # 主动方(吃单方) @dataclass class PriceLevel: """ 价格档位(使用双端队列维护同价订单的时间优先) 时间复杂度: - 添加订单:O(1) -...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】该实现展示了对交易撮合引擎核心机制的良好理解,数据结构选型合理,核心撮合逻辑基本正确。代码结构清晰,类型定义完整,注释详细。但存在明显的完整性问题:集合竞价撮合函数未完成、缺少性能测试和单元测试、部分接口未实现。工程质量方面,虽然整体设计合理,但在边界条件处理、异常处理和某些性能细节上仍有改进空间。作为一个接近工业级的实现,需要补充完整的测试代码、完善集合竞价逻辑,并加强边界条件和异常情况的处理 【GEMINI】该回答展示了深厚的数据结构功底和对金融交易业务的理解,特别是在订单簿选型、冰山订单处理和精度控制上非常专业。然而,作为一个编程任务,代码的严重截断导致其不可运行,且完全忽略了性能测试和单元测试这两个硬性要求,极大地影响了最终评分。建议在生成长代码时注意 Token 限制或分段输出。 【KIMI】整体而言,代码实现了题目要求的核心功能,覆盖了大部分功能模块和接口。数据结构选型合理,代码结构清晰,工程质量较高。但在单元测试、注释说明以及并发处理方面还有改进空间。
相关链接
您可以通过以下链接查看更多相关内容: