35. Stock Trading 股票交易
V1 — 1个用户:纯前端模拟交易
Section titled “V1 — 1个用户:纯前端模拟交易”你想学炒股但不想亏真钱,做一个模拟交易器,看K线、练买卖。
你要解决什么
Section titled “你要解决什么”- 用硬编码数据模拟股票价格波动
- 显示K线图(开高低收)
- 模拟买入/卖出,计算盈亏
给AI的Prompt
Section titled “给AI的Prompt”用纯HTML+JS实现一个股票模拟交易器:
功能:1. 硬编码5只股票的基础数据(名称、代码、初始价格)2. 每秒随机波动价格(±0.5%以内),模拟实时行情3. K线图:用Chart.js画最近30根1分钟K线(开高低收)4. 交易功能: - 初始资金10万 - 买入:输入股数,扣减资金,增加持仓 - 卖出:输入股数,增加资金,减少持仓5. 持仓面板:显示每只股票持仓数量、成本价、当前价、盈亏6. 所有数据存localStorage
技术:纯HTML+CSS+JavaScript,Chart.js单个index.html文件- 价格每秒波动,数字实时变化
- K线图正确显示开高低收
- 买入后资金减少、持仓增加
- 卖出后资金增加、持仓减少
- 盈亏计算正确(当前价-成本价)×持仓数
- 刷新页面后数据不丢失
你学到了什么
Section titled “你学到了什么”- K线图数据结构(OHLC)→ Module: 数据可视化
- 定时器模拟实时数据 → Module: JavaScript异步
- 简单交易逻辑 → Module: 业务建模
V2 — 10个用户:真实行情+持仓管理
Section titled “V2 — 10个用户:真实行情+持仓管理”想看真实的股票行情,记录自己的交易操作,分析历史盈亏。
你要解决什么
Section titled “你要解决什么”- 调用免费行情API获取真实数据
- 后端管理持仓和交易记录
- 盈亏统计和交易历史
给AI的Prompt
Section titled “给AI的Prompt”用Go+Gin实现股票交易后端:
行情数据:1. 调用免费API(如Alpha Vantage或Yahoo Finance)获取实时报价2. 定时拉取(每分钟),缓存到内存避免频率限制3. API:GET /api/quotes — 返回所有关注股票的最新价格
交易系统:1. SQLite表: - accounts(id, balance)— 账户余额 - positions(id, account_id, symbol, quantity, avg_cost)— 持仓 - trades(id, account_id, symbol, side, quantity, price, total, created_at)— 交易记录2. API: - POST /api/trades — 下单(买入/卖出) - GET /api/positions — 当前持仓 - GET /api/trades — 交易历史 - GET /api/pnl — 盈亏统计
买入逻辑:检查余额 → 扣款 → 更新持仓(加权平均成本)卖出逻辑:检查持仓 → 增加余额 → 减少持仓 → 记录实现盈亏
前端:React页面,显示行情、持仓、交易表单、盈亏图表
技术:Go+Gin, SQLite, React- 真实行情数据正确获取
- 买入后余额和持仓正确更新
- 卖出后实现盈亏正确计算
- 交易历史完整记录
- 加权平均成本计算正确
- API频率限制内正常工作
你学到了什么
Section titled “你学到了什么”- 外部API调用与缓存 → Module: API集成
- 加权平均成本算法 → Module: 金融计算
- 事务保证数据一致性 → Module: 数据库事务
V3 — 100个用户:实时行情与订单撮合
Section titled “V3 — 100个用户:实时行情与订单撮合”多用户同时交易,需要实时行情推送和基本的订单撮合机制。
你要解决什么
Section titled “你要解决什么”- WebSocket推送实时行情
- 限价单和市价单支持
- 基本撮合逻辑
给AI的Prompt
Section titled “给AI的Prompt”在V2基础上实现实时行情和订单撮合:
实时行情:1. WebSocket连接,服务端定时推送行情变化2. 前端收到推送后实时更新K线和价格3. 支持订阅/取消订阅指定股票
订单系统:1. PostgreSQL表: - orders(id, account_id, symbol, type, side, price, quantity, filled_qty, status, created_at) - type: market(市价单)/ limit(限价单) - status: pending / partial / filled / cancelled2. 市价单:立即以当前价成交3. 限价单:买单价格>=卖方 或 卖单价格<=买方 时成交
撮合引擎(简化版):1. 内存中维护每只股票的买卖队列2. 新订单进来时尝试撮合3. 撮合成功 → 更新双方订单状态、持仓、余额4. 未完全成交的限价单留在队列中
前端:行情页面+下单面板+订单列表(含状态)
技术:Go+Gin, PostgreSQL, WebSocket(gorilla/websocket), React- WebSocket连接稳定,行情实时推送
- 市价单立即成交
- 限价单在价格匹配时成交
- 部分成交状态正确
- 撮合后双方持仓和余额正确
- 取消未成交限价单正常
你学到了什么
Section titled “你学到了什么”- WebSocket实时通信 → Module: 实时系统
- 订单状态机 → Module: 状态管理
- 基本撮合逻辑 → Module: 交易系统
V4 — 1000个用户:订单薄与撮合引擎
Section titled “V4 — 1000个用户:订单薄与撮合引擎”交易量增大,需要高性能的撮合引擎和完整的订单薄展示。
你要解决什么
Section titled “你要解决什么”- 标准订单薄(价格优先-时间优先)
- 高效内存撮合引擎
- 深度图和交易历史实时展示
给AI的Prompt
Section titled “给AI的Prompt”在V3基础上实现完整的订单薄撮合引擎:
订单薄:1. 买单队列:按价格从高到低排,同价按时间先后2. 卖单队列:按价格从低到高排,同价按时间先后3. 数据结构:TreeMap(有序映射)存价格层级,每层一个FIFO队列4. 撮合算法: - 新买单:从卖单最低价开始匹配 - 新卖单:从买单最高价开始匹配 - 价格交叉则成交,否则挂单
深度图:1. 前端实时展示买卖盘深度2. 聚合显示(价格区间内的总量)3. WebSocket推送深度变化(增量更新)
交易历史:1. 最近成交记录实时滚动显示2. 成交价走势图3. Redis缓存最近成交记录(最新500条)
性能:1. 撮合引擎用单独goroutine,通过channel接收订单2. 避免锁竞争,订单薄操作串行化3. 撮合结果异步写数据库
技术:Go+Gin, PostgreSQL, Redis, WebSocket, React- 订单薄价格优先-时间优先排序正确
- 大量订单下撮合性能可接受
- 深度图实时更新
- 增量推送减少数据传输
- 交易历史实时滚动
- channel串行化无竞态问题
你学到了什么
Section titled “你学到了什么”- 订单薄数据结构 → Module: 数据结构
- 价格优先-时间优先撮合 → Module: 交易系统
- channel串行化并发 → Module: Go并发模式
- 增量推送优化 → Module: 实时系统
V5 — 1万个用户:风控与清算
Section titled “V5 — 1万个用户:风控与清算”交易规模大了,需要风控防止异常交易,每日结算保证数据准确。
你要解决什么
Section titled “你要解决什么”- 下单前风控检查
- 异步清算系统
- 每日结算与对账
给AI的Prompt
Section titled “给AI的Prompt”在V4基础上实现风控和清算系统:
风控引擎:1. 下单前检查(同步,必须通过才能下单): - 持仓限制:单只股票持仓不超过总资产30% - 涨跌停限制:价格触及涨跌停不允许对应方向下单 - 频率限制:每分钟下单不超过10次 - 金额限制:单笔不超过总资产50%2. 风控规则可配置(管理后台)3. 风控拦截日志记录
异步清算:1. 成交记录先写入消息队列2. 清算服务消费消息: - 更新持仓 - 计算手续费 - 更新账户余额 - 生成清算流水3. 清算失败 → 重试 + 告警
每日结算:1. 每日收盘后触发结算任务2. 计算每个账户当日盈亏3. 持仓市值重新估算4. 生成每日结算报告5. 与交易流水对账,差异告警
技术:Go, PostgreSQL, Redis(消息队列用Stream), 定时任务(cron)- 超限下单被风控拦截
- 风控规则动态生效
- 拦截日志完整记录
- 清算消息不丢失
- 清算失败正确重试
- 每日结算报告数据准确
- 对账发现差异能告警
你学到了什么
Section titled “你学到了什么”- 前置风控 vs 后置风控 → Module: 风控系统
- 消息队列保证最终一致性 → Module: 消息队列
- 对账系统设计 → Module: 金融系统
- 定时任务调度 → Module: 任务调度
V6 — 10万+用户:高频低延迟
Section titled “V6 — 10万+用户:高频低延迟”追求极致交易性能,微秒级撮合,多市场同时交易。
你要解决什么
Section titled “你要解决什么”- 超低延迟撮合引擎
- 无锁队列和内存优化
- 多市场支持
给AI的Prompt
Section titled “给AI的Prompt”在V5基础上实现高频低延迟交易系统:
LMAX Disruptor模式:1. 环形缓冲区(Ring Buffer)替代channel - 预分配固定大小内存,避免GC - 单生产者写入,多消费者读取 - 序号机制实现无锁同步2. 事件处理流水线: - 接收 → 风控 → 撮合 → 清算 → 推送 - 各阶段并行处理不同事件
无锁优化:1. 订单薄用无锁跳表(skip list)2. 账户余额用atomic操作3. 减少内存分配:对象池复用订单对象4. 关键路径避免系统调用
行情组播:1. 行情变化通过UDP组播分发(内网)2. 可靠组播:序号+重传机制3. 行情压缩:只发变化字段(delta encoding)
多市场:1. 每个市场独立撮合引擎实例2. 跨市场套利监控3. 统一风控(跨市场持仓汇总)4. 统一清算
技术:Go, 无锁数据结构, UDP组播, 对象池, 多核绑定- Ring Buffer正确实现,无数据竞争
- 撮合延迟降低到微秒级
- 无锁跳表操作正确
- 对象池减少GC压力(pprof验证)
- 行情组播正确接收
- 多市场独立运行互不影响
- 跨市场风控正确汇总
你学到了什么
Section titled “你学到了什么”- Disruptor模式(环形缓冲区)→ Module: 高性能系统
- 无锁数据结构 → Module: 并发编程
- UDP组播 → Module: 网络编程
- GC优化与对象池 → Module: 性能调优