200702d066
Co-authored-by: Cursor <cursoragent@cursor.com>
4.6 KiB
4.6 KiB
审计说明 — 策略 SoT / 资金门 / 自动兑 USDC(2026-07-30)
基线假设
- 不会在交易所人工开仓/平仓。
- 运行中不会使用本系统「手动全平 / 手动开一组」(策略跑着时手动开仓本就 409)。
- 以策略主线为唯一真相源:盯仓 →(等待预览兑 USDC)→ 选约 → 定仓落库 → 兑 USDC → 资金门 fail-closed → 开仓 → 锁定出场。
结论(三轮严格审计后)
本轮按审计清单落地后:P0 资金门 fail-open、热切 LIVE 护栏、等待写定仓打架、force 砸单、手动/自动双管道、持仓改参、下载备份带密钥 已关闭或显著收敛。
残留:币安 LIVE 余额仍未接入(现 fail-closed 拒绝开仓,需接余额或改手动本金);SIM 资金重置仍默认进资金账户(需划转至交易账户才能开);机内 zip 仍可能含 .env(仅 HTTP 下载已剥离)。
第一轮审计(改完即审 · 对照清单)
| 原发现 | 处置 | 证据 |
|---|---|---|
| P0 资金门 fail-open | 已修 | funds_gate_blocks:仅双方 is True 放行;None/异常拦截。open_pipeline.size_and_gate + engine/sim 共用 |
| P0 热切 LIVE | 已修 | put_runtime:非默认 AUTH_SECRET;切 LIVE 强制 running=0/paused |
| P1 等待每 tick 写定仓 | 已修 | prepare_okx_trading_usdc / preview_capacity_for_convert 只预览;落库仅在 size_and_gate |
| P1 force 砸单 | 已修 | force 参数忽略,45s 冷却始终生效 |
| P1 容量 ask ≠ 选约腿 | 已修 | assess_open_capacity(option_ask=…);size_and_gate 传入 pick 卖一 |
| P1 手动≠自动 | 已修 | api/sim.py 与引擎共用 size_and_gate |
| P1 持仓改出场/名义 | 已修 | put_strategy_settings 持仓禁止改 exit/qty/leverage/risk_* |
| P1 备份下载含 .env | 已修 | materialize_download_zip 剥离后下载 |
| P2 划转不清缓存 | 已修 | funds.transfer LIVE 后 invalidate_live_balance_cache |
| P2 SIM 弱占坑 | 已修 | matcher.open_group 拒绝全部 BLOCKING_STATUSES |
第一轮残留: 币安余额未接 → LIVE BN 将长期 wait_funds(刻意 fail-closed,非放行)。
第二轮审计(干扰/打架复查)
路径重读:engine._tick_async → prepare_usdc_while_waiting → pick → size_and_gate → LIVE assert_safe → open_group。
| 检查点 | 结果 |
|---|---|
等待阶段是否写 perp_qty_eth/net_profit_target |
否(仅 preview assess) |
| 选约失败是否仍兑 USDC | 是(预览名义),不挡「无合格期权」文案分支 |
| 选约后资金门异常是否放行 | 否(size_and_gate 返回 ok=False) |
手动开仓是否仍 except: pass |
否(409 + detail) |
持仓 exit_target 与设置 |
设置被锁;盯盘用锁定目标(既有逻辑保留) |
| 自动兑与定仓顺序 | 定仓落库 → 兑 → 门;等待只有兑不落库 |
第二轮新发现(已记残留,未扩 scope):
- SIM:
reset_from_equity仍进资金账户 → 交易账户空时正确 fail-closed,需手动划转(符合「只认交易账户」)。 state()空仓仍 preview 覆盖展示字段名(展示层,不写库,不改出场执行)。
第三轮审计(实盘安全 + 回归)
| 检查 | 结果 |
|---|---|
| LIVE 开仓 claim/assert | 未改坏;仍在 size_and_gate 之后 |
| 冷启动 AUTH_SECRET | 保留;热切现对齐 pause + secret |
| 兑汇账户 | 交易账户;与手动 /convert 一致 |
| 单测 | test_funds_gate / test_auto_usdc / test_exit_lock / test_risk_sizing 通过 |
| 基线「无交易所人工开平」 | 文档化;代码不依赖该行为做对账放弃 |
第三轮残留(接受或后续):
- 币安 LIVE 余额未接线 → 开仓被拒直至接入或强制手动本金策略。
- 机内自动备份 zip 默认可含
.env(磁盘权限模型);HTTP 下载已无密钥。 - LIVE 兑换/划转仍无二次口令(仅登录态)——运行中无人工操作为基线时风险降低。
localStorage长 token / XFF 登录限流等通用 Web 项未本轮改。
涉及文件
strategy/open_pipeline.py(新)· open_capacity.py · auto_usdc.py · engine.py · api/sim.py · api/settings.py · api/funds.py · api/backup_routes.py · backup.py · sim/matcher.py · tests/test_funds_gate.py · tests/test_auto_usdc.py
与上一份审计关系
承接 审计说明-2026-07-29-开平仓与实盘安全.md(开平仓 claim/recover)。本份专注 策略 SoT 不打架 + 资金门/兑汇/热切 LIVE。