qwen3.8-flash 在「实现股票交易撮合引擎」的评测结果

这是该 AI 模型在此测试用例上的详细评测结果。

基本信息

  • 模型名称:qwen3.8-flash
  • 用例名称:实现股票交易撮合引擎
  • 测试类型:文本生成
  • 评测维度:代码生成

系统提示词(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.4 分(满分 100 分),已通过

基础难度评测结果

  • 得分:95.4 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

下面给出一个可直接运行的 Python 实现。由于题目中 `getOrderBook()` 的返回格式被截断,这里采用**订单级**返回格式,以便同时体现价格优先与时间优先: ```python { "bids": [ {"orderId": "B1", "price": Decimal("10"), "quantity": 60} ], "asks": [ {"orderId": "S1", "price": Decimal("11"), "quantity": 100} ] } ``` 其中: - `bids`:未成交买单,按价格从高到低、同价按提交时间先后排序。 - `asks`:未成交卖单,按价格从低到高、同价按提交时间先后排序。 - 若需要聚合深度,可在 `getOrderBook()` 中合并同价订单;撮合核心逻辑不受影响。 --- ```python from decimal import Decimal, InvalidOperation from enum import Enum from dataclasses import dataclass from typing import Any, Dict, List, Optional, Set, Tuple import heapq import unittest class Side(Enum): """订单方向。""" BUY = "BUY" SELL = "SELL" @dataclass class Order: """ 限价单对象。 字段说明: - order_id: 订单唯一 ID - side: 买卖方向 - price: 限价 - quantity: 原始数量 - filled_quantity: 已成交数量 - timestamp: 单调递增序号,用于时间优先 """ order_id: str side: Side price: Decimal quantity: int filled_quantity: int = 0 timestamp: int = 0 @property def remaining_quantity(self) -> int: """剩余可成交数量。""" return self.quantity - self.filled_quantity class MatchingEngine: """ 基础限价单撮合引擎。 设计要点: 1. 使用两个最小堆维护买卖队列: - 买单堆 key: (-price, timestamp) 堆顶表示价格最高、时间最早的买单。 - 卖单堆 key: (price, timestamp) 堆顶表示价格最低、时间最早的卖单。 2. 使用 _orders 字典维护当前活动订单,便于快速查询、取消和生成 order book。 3. 使用 _known_order_ids 防止重复订单 ID。 4. 堆中可能存在已成交或已取消的“脏数据”,撮合时通过 _best_maker() 惰性清理。 5. 成交价格使用被动方价格,即先挂出、已被对手方吃到的订单价格。 """ def __init__(self) -> None: # 当前活动订单:orderId -> Order self._orders: Dict[str, Order] = {} # 所有曾经创建过的订单 ID,用于防止重复 ID self._known_order_ids: Set[str] = set() # 买单堆:(-price, timestamp, orderId) self._buy_heap: List[Tuple[Decimal, int, str]] = [] # 卖单堆:(price, timestamp, orderId) self._sell_heap: List[Tuple[Decimal, int, str]] = [] # 时间优先序号,单调递增 self._sequence: int = 0 # 成交日志,便于审计或测试 self._trade_log: List[Dict[str, Any]] = [] # ------------------------------------------------------------------ # 公共接口 # ------------------------------------------------------------------ def addBuyOrder( self, price: Any, quantity: int, orderId: str, ) -> List[Dict[str, Any]]: """ 功能:...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】这是一份高质量的撮合引擎实现。核心撮合逻辑(价格-时间优先、被动方成交价、部分成交)均正确无误,接口设计完整且返回格式规范,代码结构清晰、注释详尽、测试覆盖全面。针对题目中 getOrderBook 返回格式被截断的情况,候选人主动说明并给出合理方案,体现了工程素养。整体可达到生产可用的基础水准。 【GEMINI】这是一份教科书级别的撮合引擎实现。作者不仅完美实现了所有核心撮合规则,还在数据结构选择(堆+哈希表)、边界条件校验、惰性垃圾回收(处理堆中脏数据)以及单元测试编写上展现了极高的专业素养。针对题目截断的 getOrderBook 格式也给出了完美的兼容设计,无可挑剔。 【KIMI】该实现是一个非常专业且完整的限价单撮合引擎,核心逻辑完全正确,代码结构清晰,测试覆盖充分。面向对象设计、Decimal精度处理、堆结构选择均体现了量化交易系统工程师的专业水准。在题目getOrderBook返回格式被截断的情况下,做出了合理假设并明确说明。整体达到生产代码质量水平,仅在部分性能优化空间和格式确定性上有微小提升空间。

相关链接

您可以通过以下链接查看更多相关内容:

加载中...