V5 短线交易信号系统方案
V5 短线交易信号系统方案
版本:v5.0 | 日期:2026-02-27 | 状态:方案定稿,待开发
来源:露露(Opus 4.6)× 小周(GPT-5.3-Codex)10轮讨论
1. 目标
将 aggTrades 成交流数据转化为可执行的短线做多/做空交易信号,实现从"监控工具"到"交易工具"的升级。
2. 信号体系
2.1 核心门槛(3/3 必须全部满足)
| # | 条件 | 做多 | 做空 |
|---|---|---|---|
| 1 | CVD_fast (30m 滚动) | > 0 且斜率正 | < 0 且斜率负 |
| 2 | CVD_mid (4h 滚动) | > 0 | < 0 |
| 3 | VWAP 位置 | price > VWAP_30m | price < VWAP_30m |
说明:CVD = Cumulative Volume Delta(累计买卖差额),是成交流分析最核心的指标。
- CVD_fast:30分钟滚动窗口,捕捉短线动量
- CVD_mid:4小时滚动窗口,确认大方向
- CVD_day:UTC日内重置,作为盘中强弱基线参考(不作为入场条件)
⚠️ CVD_fast 在剧烈波动时自适应:当1m成交量超过均值3倍时,窗口自动拉长到60m,防噪音误判。
2.2 加分条件(决定仓位大小,满分60分)
| 条件 | 分值 | 说明 |
|---|---|---|
| ATR 压缩→扩张 | +25 | 5m ATR分位从 <40% 突破 >60%,波动开始放大 |
| 无反向 P99 超大单 | +20 | 最近15分钟内无极端反向成交 |
| 资金费率配合 | +15 | 做多时费率<0.01%,做空时费率>0.01% |
2.3 仓位映射
| 加分总分 | 仓位等级 | 占总资金 |
|---|---|---|
| 0-15 | 最小仓 | 2% |
| 20-40 | 中仓 | 5% |
| 45-60 | 满仓 | 8% |
2.4 预估信号频率
核心3条件同时满足概率约 20-30%,每5分钟检查一次。去掉冷却期重复后,预计日均 5-15 个有效信号。
3. 指标计算
3.1 CVD(Cumulative Volume Delta)
CVD = Σ(主动买量) - Σ(主动卖量)
三轨并行:
- CVD_fast:滚动30m窗口(入场信号)
- CVD_mid:滚动4h窗口(方向过滤)
- CVD_day:UTC日内重置(盘中基线)入场优先看 fast,方向必须与 mid 同向。
3.2 大单阈值(动态分位数)
基于最近24h成交量分布:
- P99:超大单阈值
- P95:大单阈值
- 兜底下限:max(P95, 5 BTC)
区分"大单买"和"大单卖"的不对称性:
- 上涨趋势中出现P99大卖单,意义远大于P99大买单3.3 ATR(Average True Range)
周期:5分钟K线,14根
用于:
1. 波动压缩→扩张判断(分位数)
2. 止损距离计算3.4 VWAP(Volume Weighted Average Price)
滚动30分钟:VWAP_30m = Σ(price × qty) / Σ(qty)
用于:价格位置过滤(做多 price > VWAP,做空 price < VWAP)4. 风控体系
4.1 止盈止损
| 参数 | 值 | 说明 |
|---|---|---|
| 止损 (SL) | 1.2 × ATR(5m, 14) | 动态止损,适应波动 |
| 止盈1 (TP1) | 1.0R | 减仓50% |
| 止盈2 (TP2) | 2.0R | 剩余仓位移动止损 |
| 时间止损 | 30分钟 | 无延续即平仓,防磨损 |
R = 1倍止损距离
4.2 冲突与冷却
- 信号冲突:持仓中出现反向信号 → 先平仓 + 10分钟冷却再接受新信号
- 同方向冷却:10分钟内不重复入场
- 单币限频:每小时最多2次入场
4.3 多品种风控
- BTC / ETH 独立出信号
- 两个同时同向时,总仓位上限 10%
- 需要相关性过滤(ETH Delta 经常跟 BTC 走)
5. 回测达标线
| 指标 | 达标线 |
|---|---|
| 胜率 | ≥ 45% |
| 盈亏比 (Avg Win / Avg Loss) | ≥ 1.5 |
| 最大回撤 (MDD) | ≤ 5% |
| 日均信号数 | 2-8 个 |
| 扣手续费后 | 正收益 |
手续费模型:
- Maker: 0.02%, Taker: 0.04%(Portfolio Margin 档位)
- 按 Taker 0.04% 双向估算(保守)
- 回测报告必须包含净收益/毛收益对比
额外统计:
- 持仓时长分布(验证30min时间止损合理性)
- Rate-limit 重试统计(回补脚本用)
6. 技术架构
6.1 进程拓扑
┌─────────────────┐
Binance WS ──────→ │ agg-collector │ ──→ agg_trades_YYYYMM
└─────────────────┘
│
▼
┌─────────────────┐
│ signal-engine │ ──→ signal_indicators (5s)
│ │ ──→ signal_indicators_1m (聚合)
│ │ ──→ signal_trades
│ │ ──→ Discord推送
└─────────────────┘
│
┌─────────────────┐
│ backtest.py │ ──→ 回测报告
└─────────────────┘- agg-collector:只做采集+落库,不动(已有)
- signal-engine:新建独立进程,指标计算 + 信号生成
- backtest.py:离线回测脚本
6.2 数据库新增表
| 表名 | 用途 | 保留策略 |
|---|---|---|
| signal_indicators | 每5秒指标快照(CVD/ATR/VWAP/P95等) | 30天 |
| signal_indicators_1m | 1分钟聚合(前端默认读此表) | 长期 |
| signal_trades | 信号触发的开仓/平仓记录 | 长期 |
6.3 指标计算策略
- 内存滚动 + 增量更新(不是每次SQL全量聚合)
- 启动时回灌历史窗口(30m/4h/24h)到内存
- 之后只处理新增 agg_id 增量
- 每5秒把快照落库(幂等)
6.4 冷启动处理
signal-engine 重启后:
- 从DB回读最近4h的aggTrades重算所有指标
- 前N根标记为
warmup,不出信号 - warmup 完成后开始正常信号生成
7. 历史数据回补
7.1 回补脚本(backfill_agg_trades.py)
参数:--symbol BTCUSDT --days 7 --batch-size 1000
流程:
1. 查DB中最早的agg_id
2. 从最早agg_id向前REST分页补拉
3. 每次1000条,sleep 200ms防限流
4. INSERT OR IGNORE 写入agg_trades_YYYYMM
5. 断点续传:记录进度到meta表
6. 完成后输出统计+连续性检查7.2 速率控制
- Binance aggTrades REST 限流:weight 20/min
- 每请求 sleep 200ms,实际约 3-5 req/s
- 带指数退避重试,429后等60s
- 记录 rate-limit 统计(429次数、退避次数)
8. 开发时间线
| Day | 任务 | 交付物 | 负责 |
|---|---|---|---|
| 1 | 回补脚本 + 1天小样本 | backfill跑通,BTC/ETH各1天入库 | 露露开发,小周部署 |
| 2 | 全量7天回补 + 连续性验证 | 完整7天aggTrades,缺口=0 | 小周跑+验收 |
| 3-4 | signal-engine + 前端指标展示 | CVD三轨/ATR/VWAP/大单标记实时可视化 | 露露开发,小周部署 |
| 5 | 回测框架 + 首版回测报告 | 胜率/盈亏比/MDD/持仓分布/净收益 | 露露开发 |
| 6+ | 调参优化 → 达标后模拟盘 | 模拟交易记录 | 协同 |
9. 前置依赖
| 依赖 | 状态 | 影响范围 |
|---|---|---|
| aggTrades 实时采集 | ✅ 已运行 | Phase 1-3 已满足 |
| 历史数据回补 | ⏳ Day 1-2 | 回测需要 |
| Binance API Key | ⏳ 等范总 | 仅Phase 4实盘 |
| Portfolio Margin | ⏳ 等范总 | 仅Phase 4实盘 |
| 资金准备 | ⏳ 等范总 | 仅Phase 4实盘 |
Phase 1-3 不依赖范总,可立即开工。
10. 版本历史
| 版本 | 日期 | 内容 |
|---|---|---|
| v2-v4 | 2026-02-27 | 权限管控+aggTrades采集+成交流面板 |
| v5.0 | 2026-02-27 | 短线交易信号系统方案定稿 |