模拟盘需求文档
V5.1 信号引擎模拟盘(Paper Trading)完整需求定稿
模拟盘需求文档 v1.0
状态:需求讨论中 | 目标:2026-02-28 晚上线 | 负责人:露露
一、产品定位
V5.1信号引擎的模拟交易系统。信号触发后自动虚拟开仓,实时追踪持仓盈亏,按规则自动平仓(TP/SL/超时),积累真实市场环境下的交易数据用于策略优化。
核心目标:验证策略在真实市场中的表现,为实盘上线提供数据支撑。
二、支持币种
BTC / ETH / XRP / SOL(4个)
三、页面结构
侧边栏入口
- 名称:
模拟盘 - 位置:在"信号引擎 V5.1"下方
页面布局(从上到下)
3.1 总览面板(顶部卡片组)
| 指标 | 说明 |
|---|---|
| 总盈亏(R) | 累计已平仓盈亏,绿色正/红色负 |
| 胜率 | 盈利笔数/总笔数 × 100% |
| 总交易数 | 已完成(已平仓)的交易笔数 |
| 当前持仓数 | 正在持有的仓位数量 |
| 盈亏比(PF) | 总盈利/总亏损 |
| 运行时长 | 模拟盘启动至今 |
3.2 当前持仓(实时更新)
每个活跃仓位显示:
| 字段 | 说明 |
|---|---|
| 币种 | BTC/ETH/XRP/SOL |
| 方向 | 🟢 LONG / 🔴 SHORT |
| 入场价 | 开仓时的价格 |
| 当前价 | 实时价格 |
| 浮动盈亏(R) | 实时计算,绿色/红色 |
| 评分 | 开仓时的V5.1评分 |
| 档位 | 轻仓/标准/加仓 |
| TP1 / TP2 / SL | 止盈止损价位 |
| 入场时间 | 开仓时间(北京时间) |
| 已持仓 | 持仓时长(分钟) |
3.3 K线图 + 交易标注(TradingView)
技术方案:使用 TradingView Lightweight Charts 渲染K线,数据源为币安合约API。
功能:
- 币种切换:BTC / ETH / XRP / SOL
- 时间周期:1m / 5m / 15m / 1h
- K线数据:从币安
/fapi/v1/klines实时获取 - 交易标注(核心功能):
- 🟢 绿色向上箭头 = 做多开仓
- 🔴 红色向下箭头 = 做空开仓
- ⬜ 白色/灰色标记 = 平仓点
- 虚线水平线 = TP1/TP2/SL价位(当前持仓时显示)
- 鼠标悬停标注可查看详情(评分、盈亏等)
3.4 历史交易列表
表格字段:
| 列 | 说明 |
|---|---|
| 币种 | BTC/ETH/XRP/SOL |
| 方向 | LONG/SHORT |
| 入场价 | 开仓价格 |
| 出场价 | 平仓价格 |
| PnL(R) | 盈亏(R单位) |
| 状态 | tp(止盈) / sl(止损) / sl_be(保本止损) / timeout(超时) |
| 评分 | 开仓时评分 |
| 档位 | 轻仓/标准/加仓 |
| 持仓时间 | 分钟 |
| 入场时间 | 北京时间 |
筛选功能:
- 按币种:全部 / BTC / ETH / XRP / SOL
- 按结果:全部 / 盈利 / 亏损
3.5 权益曲线图
- X轴:时间
- Y轴:累计PnL(R)
- 折线图,绿色区域填充(正收益)/ 红色(负收益)
- 可直观看到资金曲线走势和回撤
3.6 统计面板
| 指标 | 说明 |
|---|---|
| 胜率 | 总/做多/做空 分别统计 |
| 盈亏比(PF) | Profit Factor |
| 平均盈利(R) | 赢的交易平均赚多少 |
| 平均亏损(R) | 输的交易平均亏多少 |
| 盈亏比(Win/Loss) | 平均盈利/平均亏损 |
| 最大回撤(MDD) | 权益曲线最大回撤 |
| 夏普比率 | 年化风险调整收益 |
| 各币种胜率 | BTC/ETH/XRP/SOL 分别的胜率 |
| 各档位胜率 | 轻仓/标准/加仓 分别的胜率 |
四、后端逻辑
4.1 数据表:paper_trades
CREATE TABLE paper_trades (
id SERIAL PRIMARY KEY,
symbol VARCHAR(20) NOT NULL, -- BTCUSDT/ETHUSDT/...
direction VARCHAR(10) NOT NULL, -- LONG/SHORT
score INT NOT NULL, -- 开仓时V5.1评分
tier VARCHAR(20) NOT NULL, -- light/standard/heavy
entry_price DOUBLE PRECISION NOT NULL,
entry_ts BIGINT NOT NULL, -- 开仓时间戳(ms)
exit_price DOUBLE PRECISION,
exit_ts BIGINT, -- 平仓时间戳(ms)
tp1_price DOUBLE PRECISION NOT NULL,
tp2_price DOUBLE PRECISION NOT NULL,
sl_price DOUBLE PRECISION NOT NULL,
tp1_hit BOOLEAN DEFAULT FALSE,
status VARCHAR(20) DEFAULT 'active', -- active/tp1_hit/tp/sl/sl_be/timeout
pnl_r DOUBLE PRECISION DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);4.2 交易逻辑(集成到 signal_engine.py)
开仓条件:
- V5.1评分 ≥ 60分(有信号时)
- 该币种无活跃持仓
- 冷却期已过(10分钟)
开仓动作:
- 记录入场价(当前价格)
- 计算TP1/TP2/SL:
- LONG: SL = price - 2×ATR, TP1 = price + 1.5×ATR, TP2 = price + 3×ATR
- SHORT: SL = price + 2×ATR, TP1 = price - 1.5×ATR, TP2 = price - 3×ATR
- 写入
paper_trades表
持仓监控(每15秒检查一次):
- 用实时价格检查TP1/TP2/SL
- TP1触发 → 标记tp1_hit,移动SL到成本价
- TP2触发 → 平仓,PnL = 0.5×1.5R + 0.5×3.0R = 2.25R
- SL触发 → 平仓,PnL = -1R(或保本如果tp1已触发)
- 超时(60分钟) → 按当前价平仓
4.3 API接口
| 接口 | 说明 |
|---|---|
GET /api/paper/summary | 总览数据(总PnL、胜率、交易数等) |
GET /api/paper/positions | 当前活跃持仓(含实时浮盈) |
GET /api/paper/trades?symbol=&result= | 历史交易列表(支持筛选) |
GET /api/paper/equity-curve | 权益曲线数据点 |
GET /api/paper/stats | 详细统计数据 |
五、Discord推送(可选)
每次开仓/平仓时推送消息到Discord:
开仓通知:
🟢 模拟开多 BTCUSDT
入场价: $63,523.8 | 评分: 87 | 档位: 加仓
TP1: $63,850 | TP2: $64,200 | SL: $63,100平仓通知:
✅ 模拟平仓 BTCUSDT (做多)
入场: $63,523.8 → 出场: $63,850.0
盈亏: +2.25R | 状态: 止盈(TP)
持仓: 8.5分钟 | 累计: +45.3R六、开发计划
| 阶段 | 内容 | 预计耗时 |
|---|---|---|
| Phase 1 | 后端:paper_trades表 + signal_engine集成 + API | 1小时 |
| Phase 2 | 前端:模拟盘页面(总览+持仓+历史+统计) | 1.5小时 |
| Phase 3 | K线图:TradingView Lightweight Charts + 交易标注 | 1小时 |
| Phase 4 | Discord推送(可选) | 30分钟 |
目标:2026-02-28 晚上线运行