实盘开发计划
套利引擎从模拟盘到实盘的完整开发计划(v1.1 含前端页面设计+阈值配置)
实盘开发计划 v1.1
v1.0: 2026-03-02 露露初版 v1.1: 2026-03-02 露露×小范(xiaofan)讨论定稿
前置条件(范总准备)
- Binance API Key(开通合约权限,IP白名单绑小周服务器34.153.223.176)
- Portfolio Margin(可选,降低保证金占用)
- 测试资金:100U起步($2=1R最小量测试)
P0:必须完成
1. API Key 加密存储
- 方案:GCP Secret Manager(主) + .env(本地fallback)
- 启动时拉取一次,缓存在内存,零交易延迟
- Key不进Git,不写配置文件
- GCP项目:gen-lang-client-0835616737
2. 交易执行模块(live_executor.py)
- 信号接收方式:PostgreSQL LISTEN/NOTIFY(不轮询)
- signal_engine写入信号后执行
NOTIFY new_signal - live_executor通过
LISTEN new_signal实时接收 - 信号→开仓延迟从~0.5秒压到**<100ms**
- signal_engine写入信号后执行
- 调币安API下单/平仓/改止损
- 开仓:市价单(MARKET),确保成交
- 止损:STOP_MARKET挂单
- TP1:TAKE_PROFIT_MARKET挂单(半仓)
- TP2:TAKE_PROFIT_MARKET挂单(半仓)
- TP1触发后:撤原SL → 挂保本SL(entry ± 0.05%)
- 仓位大小:
risk_usd / risk_distance个币,按币安精度取整 - 逐仓模式,杠杆倍数自动设置
- 保护单裸奔监控:记录
protection_gap_sec(开仓成交→SL挂单成功)
3. 仓位同步(position_sync.py)
- 每30秒对账:本地DB状态 vs 币安实际持仓
- 检测项:
- 仓位数量差(张数+名义价值)
- 挂单差(本地x个/交易所y个)
- 方向不一致 → 最高级告警
- 差异持续时间:>60秒自动升级告警级别
- SL缺失自动补挂:
- 第1次检测缺失 → 立即补挂
- 3秒后复检,仍缺 → 再补挂一次
- 连续2次失败 → 红灯 + 只减仓模式 + Discord通知
- 对账面板提供修复建议按钮(重挂保护单/同步仓位/强制平仓)
- 默认不自动平仓,除非熔断策略明确要求
4. 风控熔断(risk_guard.py)
- 单日最大亏损:已实现R + 未实现亏损预估 > -5R → 全平 + 停机
- 连续亏损:5连亏 → 暂停开仓1小时
- API连接异常:断开>30秒 → 暂停开仓 + 告警
- 余额不足:可用余额 < 单笔风险×2 → 拒绝开仓
- 杠杆异常:实际杠杆>预期×1.5 → 告警
- 数据新鲜度:行情/账户/下单回执超时 → 禁止新开仓
- 熔断状态写DB:触发规则、触发时间、恢复条件
- 所有事件 Discord即时通知
5. Discord实时通知
- 每笔开仓:币种、方向、价格、仓位、SL/TP、裸奔时间
- 每笔平仓:盈亏R+$、持仓时间、出场原因、滑点
- 异常告警:风控触发、API错误、对账不一致、SL补挂
- 每日汇总:总盈亏、胜率、持仓数、成本占比
P1:建议完成
6. 执行质量追踪
- 记录全链路时间戳:signal_ts → order_submit_ts → exchange_ack_ts → fill_ts
- 滑点:signal_price vs avg_fill_price(按币种分档统计)
- 拒单率、部分成交率
- P50/P95滑点看板
7. 实盘 vs 模拟盘对照面板
- 按同一信号ID匹配
- 对比:入场价差、退出价差、R差
- 按币种/时段统计偏差 → 区分策略问题 vs 执行问题
8. 资金费率结算追踪
- 持仓跨8h结算节点时记录FR收支
- 纳入净PnL计算
- PnL拆解:gross_pnl / fee / funding / slippage / net_pnl
实盘前端页面设计(/live)
第零层:顶部固定风险条(sticky,永远可见)
| 字段 | 数据源 | 刷新 | 告警 |
|---|---|---|---|
| 交易状态 | 本地配置 | 实时 | 停机=红 |
| 可执行锁状态 | risk_guard | 实时 | 禁新开仓/只减仓/手动接管 是否生效 |
| 熔断状态+原因+恢复条件 | risk_guard | 实时 | 触发=红+文字说明 |
| 今日R预算:已实现R / 未实现R / 合计R / 日限额R | live_trades | 每笔 | >80%黄, >100%红 |
| 系统健康(WS延迟/API成功率/数据新鲜度) | 心跳 | 5秒 | 详见阈值JSON |
| 对账状态(含差异量化) | position_sync | 30秒 | 不一致=红,>60s升级 |
| 距清算最小距离% | 币安API | 10秒 | <20%黄/<12%红/<8%黑 |
第一层:一键止血区
🔴 紧急平全仓— 二次确认,显示影响金额🟡 禁新开仓— 保留现有仓位+保护单🟠 只减仓模式— 只允许平仓和移SL- 每个操作记录:操作人、时间、原因
- 恢复按钮(需二次确认)
第二层:账户概览(8卡片)
账户权益 | 可用保证金 | 已用保证金 | 有效杠杆 | 今日净PnL(R+$) | 总净PnL(R+$) | 成本占比 | 今日成交额
第三层:当前持仓(WS实时1-5秒)
每个仓位卡片:
- 币种、方向、入场价+时间(ms)、现价、实时R+$
- SL/TP1/TP2价格 + 挂单是否存在(✅/❌,缺失=红框最高危)
- 持仓时间(>45min黄, >60min红)
- 距清算%、开仓评分、币安订单ID
- 单仓操作按钮:手动平仓、手动移SL
第四层:执行质量面板(15-60秒刷新)
- 按币种分两档阈值(BTC/ETH vs XRP/SOL)
- 信号→下单延迟、下单→成交延迟、滑点bps、拒单率、部分成交率
- 裸奔时间(protection_gap_sec):黄>2s, 红>5s
- P50/P95滑点统计
第五层:对账面板(30秒)
- 三张表:本地仓位 vs 币安仓位 / 本地挂单 vs 币安挂单 / 差异项
- 差异量化:数量差、名义值差、挂单差、差异持续时间
- 修复建议按钮
第六层:风控状态(实时)
- 当前状态:正常🟢 / 告警🟡 / 熔断🔴
- 触发规则明文 + 触发时间 + 恢复条件
- 风控参数表 + 历史熔断记录
第七层:实时通知流(实时)
- 时间线,最新在上
- 分类标签:开仓(绿)、平仓(蓝)、风控(红)、对账(橙)、系统(灰)
第八层:实盘 vs 模拟盘对照(每笔更新)
- 按同一信号ID匹配
- 入场价差、R差、差异原因(滑点/延迟/价格偏差)
- 汇总统计
第九层:权益曲线+回撤(每笔平仓更新)
- 累计PnL + 回撤曲线
- 可叠加模拟盘曲线对比
第十层:历史交易表(15-60秒)
- 含实际成交价、滑点bps、手续费$、资金费$、币安订单ID
- PnL拆解:gross / fee / funding / slippage / net
第十一层:系统健康详情(底部运维区,5秒)
- WS连接状态+延迟+最后消息时间
- API成功率、429次数、时钟偏移
- 各进程心跳
- 最后行情时间、最后账户回报时间、最后下单回执时间
阈值配置(露露×小范讨论定稿)
{
"livePageThresholds": {
"liquidationDistancePct": {
"yellow": 20,
"red": 12,
"critical": 8,
"actions": {
"yellow": ["warn_ui"],
"red": ["warn_ui", "block_new_entries"],
"critical": ["warn_ui", "reduce_only_mode"]
}
},
"holdTimeMinutes": {
"yellow": 45,
"red": 60,
"autoCloseGraceMin": 10,
"actions": {
"yellow": ["warn_ui"],
"red": ["warn_ui", "enqueue_timeout_review", "notify_discord", "start_countdown_10min"],
"graceExpired": ["market_close", "notify_discord"]
},
"note": "60min进处置队列+10min倒计时,范总未处理则70min自动市价平仓"
},
"protectionOrderPolicy": {
"autoRehangEnabled": true,
"rehangRetryDelaysSec": [0, 3],
"maxRetries": 2,
"onFailureActions": ["warn_ui", "reduce_only_mode", "notify_discord"]
},
"protectionGapSec": {
"yellow": 2,
"red": 5,
"actions": {
"yellow": ["warn_ui"],
"red": ["warn_ui", "notify_discord"]
}
},
"executionQuality": {
"BTC_ETH": {
"signalToOrderMs": { "yellow": 250, "red": 1200 },
"orderToFillMs": { "yellow": 600, "red": 3500 },
"slippageBps": { "yellow": 2.5, "red": 8 },
"rejectRate5mPct": { "yellow": 2, "red": 6 },
"partialFillRatePct": { "yellow": 8, "red": 20 }
},
"XRP_SOL": {
"signalToOrderMs": { "yellow": 300, "red": 1500 },
"orderToFillMs": { "yellow": 900, "red": 5000 },
"slippageBps": { "yellow": 5, "red": 15 },
"rejectRate5mPct": { "yellow": 3, "red": 8 },
"partialFillRatePct": { "yellow": 12, "red": 30 }
}
},
"dataFreshness": {
"marketDataStaleSec": { "yellow": 5, "red": 10 },
"accountUpdateStaleSec": { "yellow": 10, "red": 20 },
"orderAckStaleSec": { "yellow": 3, "red": 8 },
"onRedActions": ["block_new_entries"]
},
"reconciliation": {
"checkIntervalSec": 30,
"mismatchEscalationSec": 60,
"fields": [
"position_qty_diff",
"position_notional_diff",
"open_orders_local_vs_exchange"
]
},
"riskGuard": {
"dailyLossLimitR": -5,
"consecutiveLossLimit": 5,
"consecutiveLossCooldownMin": 60,
"apiDisconnectThresholdSec": 30,
"minAvailableBalanceMultiple": 2,
"maxLeverageMultiple": 1.5,
"triggerLogic": "realized_r + max(unrealized_loss_estimate, 0)"
},
"refreshIntervals": {
"L0_riskBar_positionsSec": 5,
"L1_executionQuality_tradesSec": 30,
"L2_equityCurve": "per_close",
"L3_historicalStatsSec": 30
}
}
}技术架构
signal_engine.py (不变)
↓ 信号写入DB
live_executor.py (新) ← 读DB新信号 → 调币安API
↓
position_sync.py (新) ← 每30秒对账 + SL自动补挂
↓
risk_guard.py (新) ← 实时风控检查
↓
Discord通知- live_executor 替代 paper_monitor 的角色
- paper_monitor 继续运行(模拟盘不停,持续AB对照)
- 新增
live_trades表,结构同paper_trades,加binance_order_id、fill_price、slippage、protection_gap_ms、signal_to_order_ms、order_to_fill_ms字段
币安API要点
- 端点:
https://fapi.binance.com(正式)/https://testnet.binancefuture.com(测试网) - 签名:HMAC SHA256
- 下单:
POST /fapi/v1/order - 查仓位:
GET /fapi/v2/positionRisk - 查挂单:
GET /fapi/v1/openOrders - 设杠杆:
POST /fapi/v1/leverage - 设逐仓:
POST /fapi/v1/marginType - Rate Limit:1200次/分钟(足够)
时间估算
- P0开发:3-5天
- P0测试(Testnet + 最小量实盘):1-2天
- P1开发:2-3天
- 总计:约1周
测试计划
- Testnet先跑:币安测试网(testnet.binancefuture.com),用假钱验证全链路
- 最小量实盘:100U,$2=1R,验证开/平仓/SL/TP全流程
- 观察3天:对比模拟盘结果,确认无偏差
- 逐步加仓:$10→$50→$200/R
v1.0 创建:2026-03-02 露露 v1.1 更新:2026-03-02 露露×小范讨论定稿(新增前端页面设计+阈值JSON+对账补挂策略+数据新鲜度+清算距离三档+R拆分) 状态:待开发(等AB测试冻结期结束~03-16)