我用 Python 构建了一个迷你衍生品交易所。以下是我如何使用 Cursor 而不让它主导一切。

发布: (2026年3月2日 GMT+8 04:05)
7 分钟阅读
原文: Dev.to

I’m sorry, but I can’t translate the article without the actual text. Could you please paste the content you’d like translated (excluding any code blocks or URLs you want to keep unchanged)? Once I have the text, I’ll provide a Simplified‑Chinese translation while preserving the original formatting.

动机

今年,我想在 AI 辅助编码方面提升自己,作为一名高级工程师,同时探索交易领域。我构建了一个纸上衍生品交易所,包含订单簿、限价单和市价单、撮合引擎以及仓位跟踪。技术栈是 Python、FastAPI 和 PostgreSQL。整个项目中我使用了 Cursor,但并不是那种“只输入提示即可生成完整应用”的方式。

规划

单页架构

我先打开了一个文档(而不是 IDE),写了一个包含以下内容的单一架构和项目文件:

  • 仓库拆分 – 前端和后端始终分离,每个后端对应一个可部署单元。
  • 仓库职责 – 交易所 API、演示 UI,以及未来游戏化集成的占位符。
  • 技术选型 – FastAPI、PostgreSQL、Binance 公共 API 用于价格(尚未使用 Kafka)。
  • 模块边界coremarket_dataordersmatchingpositionsintegration,每个模块都有明确的职责和公共接口。

那份文档成为了指导 Cursor 的计划。当 Cursor 建议将 UI 放在与 API 同一仓库时,我指回那份文档并说不。这本质上就是 Cursor 的 计划模式:在让代理编写代码之前,先完成设计和文件层面的计划。

架构

我选择了 模块化单体:一个服务,一个数据库,但严格的模块边界。每个模块都公开一个接口(例如 OrderService.placeOrderBook.add)。没有模块会导入其他模块的内部实现。

为什么选择模块化单体?

  1. 保持运营简单。
  2. 让我能够给 Cursor 分配非常聚焦的任务,例如 “实现 orders 模块中的 OrderService.place 并将其连接到撮合引擎”,而不是 “构建完整的交易流程”。

实现细节

匹配引擎

匹配引擎是系统的核心。我希望实现价格‑时间优先级,支持限价单和市价单,并且能够在成交时更新持仓并可选地调用游戏化 API。

我将实现拆分为小的、可审查的步骤:

  1. 数据结构 – 定义 OrderFillOrderBook(按价格层级的买单和卖单)。我描述了期望的行为,并让 Cursor 实现了诸如 addinsertcancelbest_bidbest_ask 等方法。
  2. 匹配逻辑 – 当下单时,从数据库加载订单簿(所有未完成的限价单),执行 book.add(order),并得到一个 Fills 列表。Cursor 生成了代码;我审查了成交如何应用到订单和持仓上。
  3. 持久化 – 订单和持仓存储在 PostgreSQL 中。每次下单和撤单操作时都会从数据库重新构建订单簿,避免了长期驻留的内存状态。此权衡在原型阶段更倾向于简洁性和正确性,而非超低延迟。

每一步都是一个聚焦的提示,具有明确的成功标准。当出现问题时(例如,maker 订单在成交后未更新),我会回滚、收紧计划并重新运行代理,而不是在聊天中无休止地修补。

保持提示可管理

我从不把整个代码库粘贴到提示中。相反,我把架构文档和 README 作为“规则”。我指示 Cursor 查看已有文件,例如:“在我们应用成交的地方添加集成调用,遵循 positions/service.py 中的相同模式”。Cursor 使用 grep 和语义搜索定位订单保存位置和持仓更新位置,使提示保持简短,且代理在我设定的边界内工作。

结果

  • 限价单和市价单的订单簿。
  • 持仓跟踪。
  • 来自 Binance 的实时市场数据(无需 API 密钥)。
  • 可选的在成交后向游戏化 API 发送 POST 请求。
  • 包含架构图、系统设计说明和 API 表的 README。
  • 用于本地开发的 Docker Compose 配置。

生产就绪检查清单

在认为项目已具备生产就绪条件之前,我会补充以下内容:

  • 限流(例如,使用 Redis)。
  • 对匹配引擎的全面单元测试(OrderBook.addinsertcancel)。
  • 对订单下单、撤单以及订单簿重建的集成测试。

要点

  1. 首先编写架构和模块映射。
  2. 将实现拆分为小的、可审查的步骤。
  3. 为代理提供明确的边界和具体示例,而不是“构建所有内容”的请求。
  4. 当输出偏离规范时,回滚并完善计划。

结果是一个我可以在面试中解释的代码库,以及一个关于我如何利用 AI 而不让它主导设计的故事。

  • Backend: mini-derivatives-exchange – 包含 API、撮合引擎和数据库层。
  • Frontend: mini-exchange-ui – 一个演示 UI,用于调用 API。

两个仓库都包含带有架构图、API 文档和系统设计说明的 README。

0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...