Requirements v1.3.1
定稿日期:2026年2月24日
参与:露露(Claude Opus 4.6)、小周(GPT-5.3-Codex)、范总确认
状态:✅ 需求锁定,待开发
版本:v1.3.1(部署方案确认)
0. 文档定位
- 文档类型:项目基石级 PRD + 技术需求定稿(用于研发、验收、后续商业化)
- 优先级:安全性 > 可控性 > 稳定性 > 收益表现 > 开发速度
- 约束前提:先需求锁定,再开发;先 API 全测通,再实盘;先 Dry Run 1 周,再 Real
1. 项目定义与商业化定位
- 产品名:套利引擎(ArbitrageEngine,简称 AE)
- 定位升级:从 v1.2 的"范总单用户工具"升级为"可商业化产品雏形"
- Phase 1:服务范总实盘验证(单用户形态)
- 但架构上 Day1 预埋多租户和计费能力,避免二次重构
- 核心价值主张:
- 对用户:低门槛执行资金费率套利(PM + 风控 + 可视化)
- 对团队:沉淀可复制交易基础设施,具备对外 SaaS 化能力
- 竞争差异化:
- 完整前端(非CLI黑框)
- 安全第一(TOTP、审计、熔断)
- Dry Run验证(降低用户心理门槛)
- PM优化(资金效率提升)
- 自定义风控(非黑盒)
2. 目标与边界
目标(Phase 1):
- Binance 上完成 BTC/ETH 对冲套利闭环
- 支持 PM 模式,执行"开/平人工确认,中间自动运行"
- 全链路审计、风控、告警、报表可用
非目标(Phase 1 不做):
- 不做多交易所聚合
- 不做自动择时开平仓
- 不做资金托管与代客资管
- 不做公开注册与支付计费(仅预埋)
3. 已确认业务决策(锁定)
| 项目 | 确认结果 |
|---|---|
| 执行模式 | C — 开仓/平仓需人工确认,持仓期间自动化 |
| 初始实盘资金 | $500(BTC $250 + ETH $250) |
| 收益处理 | 留账户复利,不自动提取 |
| 部署服务器 | 小周服务器 34.84.9.167(GCP东京,Binance延迟11ms) |
| 上线节奏 | Phase 0 API测通 → Dry Run 1周 → Real 2个月 |
| 费率为负 | 完全不动(A方案) |
4. 系统状态机
模式状态
DRY_RUN ──(Phase 0 checklist 100%通过 + 范总确认)──→ REAL
REAL ──(手动降级)──→ DRY_RUN交易生命周期
IDLE ──(用户点"开始执行"+二次确认)──→ OPENING
OPENING ──(双腿成交+偏差≤1%)──→ HOLDING
OPENING ──(单边失败+补偿失败/超时/API连续失败)──→ HALTED
HOLDING ──(用户点"平仓"+确认)──→ CLOSING
HOLDING ──(uniMMR<1.25)──→ HALTED(不自动平仓,禁止新操作,立即告警)
CLOSING ──(双腿平完+仓位归零)──→ IDLE
任意状态 ──(硬风控触发/关键系统异常)──→ HALTED
HALTED ──(范总手动恢复)──→ IDLE5. 风控参数(硬编码,不可前端修改)
| 参数 | 值 | 说明 |
|---|---|---|
| 最大单次名义 | $600 | $500本金+20%缓冲 |
| 最大滑点 | 0.10% | 超过取消下单 |
| 最大对冲偏差 | 1.00% | |spot-perp|/target |
| 最大杠杆 | 1x | 不可修改 |
| uniMMR预警线 | 1.35 | 告警 |
| uniMMR危险线 | 1.25 | 自动HALTED |
| API失败熔断 | 连续5次 | 进入HALTED |
| 单腿超时(补单) | 8s | 触发补单逻辑 |
| 单腿超时(熔断) | 30s | 触发HALTED |
| 时钟漂移阈值 | >1000ms | 禁止交易请求 |
6. Dry Run 对照机制
Dry Run 期间必须记录"拟交易账本":
- 拟下单价格、拟成交数量、拟手续费、拟持仓
- 拟资金费率收入(按实际市场费率与拟仓位估算)
产出对照报告:
- 如果 Real 执行,理论会得到的收益区间
- 引擎计算准确性与一致性验证
通过标准:Dry Run 1周内无关键错配、无状态机死锁、无风险漏报
7. 功能模块清单(Phase 1)
认证与安全
- 账号密码 + TOTP(Google Authenticator)
- 会话超时(30分钟)
- 连续登录失败锁定(5次失败后锁定15分钟)
- 审计日志全记录(append-only)
Binance 接入
- API权限自检(Read/Trade only,禁Withdraw)
- 行情、费率、账户、持仓、下单、回查
- 连接状态实时监控(心跳检测)
- API调用频率控制(避免触发限流)
执行引擎
- REST并发下单(现货买入 + 永续做空同时发出)
- WebSocket订阅成交回报、仓位变化
- 单边失败补偿、对冲偏差修复、熔断
- 下单前检查:余额、价格、滑点预估
监控告警
- uniMMR、对冲偏差、当前/预测费率、累计收益
- Discord实时告警 + 每日自动汇报
- 双通道告警预留(Discord + 邮件/短信)
报表
- 8小时/日/周/月收益统计
- 手续费统计、资金费率贡献
- 净值曲线图表
- Dry Run对照报告
运维
- PM2健康检查、自动拉起
- 重启后自动对账恢复
- 分api/worker进程
8. 多租户架构预埋(v1.3核心新增)
数据模型要求
- 所有核心业务表强制包含
user_id(或tenant_id)
执行隔离要求
- Worker任务必须携带
user_id上下文 - 严禁跨用户读取订单、仓位、密钥、日志
密钥管理
- 按用户分区加密存储(每用户独立密钥上下文)
- 主密钥与业务库分离,密钥不落盘
权限模型预留
- 用户表保留
role字段(RBAC扩展位) - 前端不写死"唯一管理员"
审计不可篡改
- 审计日志 append-only,禁止更新/删除业务接口
- 仅允许归档,不允许逻辑改写
- 预留哈希链字段(后续可选)
9. Binance API 接口清单
认证与账户(Phase 0 必测)
| 接口 | 用途 |
|---|---|
GET /api/v3/account | Spot账户资产、权限 |
GET /fapi/v2/account | Futures账户信息 |
GET /fapi/v2/balance | Futures余额 |
GET /fapi/v2/positionRisk | 永续持仓风险 |
GET /fapi/v1/leverageBracket | 杠杆/名义分档 |
GET /sapi/v1/portfolio/account | PM账户信息 |
行情与费率
| 接口 | 用途 |
|---|---|
GET /api/v3/ticker/bookTicker | Spot最优买卖价 |
GET /fapi/v1/ticker/bookTicker | Perp最优买卖价 |
GET /fapi/v1/premiumIndex | 标记价格+当前/预测费率 |
GET /fapi/v1/fundingRate | 历史费率 |
GET /api/v3/depth | Spot深度(滑点估算) |
GET /fapi/v1/depth | Perp深度(滑点估算) |
交易执行
| 接口 | 用途 |
|---|---|
POST /api/v3/order | Spot下单(市价/限价) |
GET /api/v3/order | Spot订单回查 |
DELETE /api/v3/order | Spot撤单 |
POST /fapi/v1/order | Futures下单(开空/平空) |
GET /fapi/v1/order | Futures订单回查 |
DELETE /fapi/v1/order | Futures撤单 |
GET /fapi/v1/openOrders | 未完成单查询 |
| WebSocket listenKey | 成交回报+仓位变化 |
资金与收益
| 接口 | 用途 |
|---|---|
GET /fapi/v1/income | 资金费率收入、手续费、盈亏 |
GET /fapi/v2/positionRisk | 未实现PnL、保证金风险 |
10. 前端页面清单
/login
- 用户名/密码 + TOTP输入
- 登录审计记录
/dashboard
- 当前模式(Dry Run / Real)+ 状态机状态
- BTC/ETH仓位卡片:持仓量、对冲偏差、当前/预测费率
- uniMMR + 风险灯(🟢 >1.35 / 🟡 1.25-1.35 / 🔴 <1.25)
- 当日收益、累计收益、手续费
- 净值收益曲线图
/execute
- 参数展示(只读):BTC $250 / ETH $250
- 「开始执行(开仓)」按钮(二次确认弹窗)
- 「请求平仓」按钮(二次确认弹窗)
- 执行过程实时日志流(SSE)
/risk
- 风控阈值参数表(只读展示)
- 告警历史列表
- 熔断记录 + 恢复操作按钮
/records
- 订单记录(Spot/Futures,可筛选)
- 费率收入记录(8h维度,可按日/周/月汇总)
- 审计日志(全操作记录)
/settings
- API Key配置(加密存储,显示为***)
- Discord Webhook配置
- 模式切换(Dry Run ↔ Real,需二次确认)
11. 数据库结构(PostgreSQL,v1.3)
-- 用户(多租户预埋)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(64) UNIQUE NOT NULL,
password_hash VARCHAR(256) NOT NULL,
totp_secret_enc VARCHAR(256) NOT NULL,
role VARCHAR(16) DEFAULT 'admin', -- RBAC预留
status VARCHAR(16) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW(),
last_login_at TIMESTAMPTZ
);
-- API凭据(按用户分区)
CREATE TABLE api_credentials (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
account_name VARCHAR(64),
api_key_enc TEXT NOT NULL,
api_secret_enc TEXT NOT NULL,
perm_read BOOLEAN DEFAULT true,
perm_trade BOOLEAN DEFAULT true,
perm_withdraw BOOLEAN DEFAULT false,
ip_whitelist_ok BOOLEAN DEFAULT false,
pm_enabled BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 策略实例
CREATE TABLE strategy_instances (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
mode VARCHAR(16) NOT NULL, -- DRY_RUN / REAL
state VARCHAR(16) NOT NULL, -- IDLE / OPENING / HOLDING / CLOSING / HALTED
base_capital DECIMAL(18,2),
btc_alloc DECIMAL(18,2),
eth_alloc DECIMAL(18,2),
started_at TIMESTAMPTZ,
closed_at TIMESTAMPTZ
);
-- 订单
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
strategy_id INT REFERENCES strategy_instances(id),
venue VARCHAR(8) NOT NULL, -- SPOT / FUTURES
symbol VARCHAR(16) NOT NULL,
side VARCHAR(8) NOT NULL,
type VARCHAR(16) NOT NULL,
client_order_id VARCHAR(64),
exchange_order_id VARCHAR(64),
price DECIMAL(18,8),
orig_qty DECIMAL(18,8),
executed_qty DECIMAL(18,8),
status VARCHAR(16),
is_reduce_only BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 仓位快照
CREATE TABLE positions_snapshot (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
strategy_id INT REFERENCES strategy_instances(id),
symbol VARCHAR(16) NOT NULL,
spot_qty DECIMAL(18,8),
futures_qty DECIMAL(18,8),
spot_notional DECIMAL(18,2),
futures_notional DECIMAL(18,2),
hedge_deviation DECIMAL(8,4),
mark_price DECIMAL(18,2),
captured_at TIMESTAMPTZ DEFAULT NOW()
);
-- 资金费率收入
CREATE TABLE funding_income (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
symbol VARCHAR(16) NOT NULL,
funding_time TIMESTAMPTZ NOT NULL,
income_asset VARCHAR(8),
income_amount DECIMAL(18,8),
rate DECIMAL(18,8),
position_notional DECIMAL(18,2),
source_tx_id VARCHAR(64)
);
-- 风控事件
CREATE TABLE risk_events (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
strategy_id INT REFERENCES strategy_instances(id),
event_type VARCHAR(32) NOT NULL,
severity VARCHAR(16) NOT NULL,
metric_value DECIMAL(18,8),
threshold_value DECIMAL(18,8),
action_taken VARCHAR(64),
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 审计日志(append-only,不可删改)
CREATE TABLE audit_logs (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),
actor VARCHAR(64) NOT NULL,
action VARCHAR(64) NOT NULL,
target VARCHAR(128),
payload_json JSONB,
ip VARCHAR(64),
hash_chain VARCHAR(128), -- 预留哈希链字段
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 系统运行记录
CREATE TABLE system_runs (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) NOT NULL,
mode VARCHAR(16) NOT NULL,
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ,
result VARCHAR(16),
notes TEXT
);12. 三阶段产品路线图
| 阶段 | 目标 | 交付 | 预计周期 |
|---|---|---|---|
| Phase 1 | 范总$500跑通2个月 | 单用户验证版(含风控+审计+告警+报表) | 开发2-3周 + 实盘2月 |
| Phase 2 | 开放小规模内测 | 注册体系+RBAC+订阅计费+运维扩容 | 2-4周 |
| Phase 3 | 公开获客规模化 | 营销站点+渠道投放+客户成功+合规增强 | 持续 |
13. Phase 2 新增模块预览
账户体系
- 注册、邮箱验证、找回密码、设备管理、2FA强制策略
RBAC权限
- Owner / Admin / Operator / Viewer 角色与资源权限矩阵
订阅计费
- 套餐分层、试用期、续费、到期降级、账单与发票记录
多租户运维
- 队列隔离、限流配额、租户级熔断、租户级监控面板
客服与支持
- 工单、系统公告、状态页
14. 商业模式设计
方案A:SaaS订阅制(推荐先做)
- 参考定价:$29 / $59 / $99 月费分层(按功能与账户规模)
- 优势:合规压力相对低、收入稳定、扩展快
- 用户资金在自己Binance账户,平台不碰钱
方案B:收益分成制(后评估)
- 管理费(1-2%/年)+ 超额收益分成(20%)
- 风险:合规、牌照、托管责任显著上升
建议路径
- 先SaaS,再评估收益分成
- 不在Phase 1/2落地资管模式
15. 技术选型(锁定)
| 层 | 技术 | 说明 |
|---|---|---|
| 执行层 | 自建引擎 | 不fork Hummingbot |
| API层 | Binance官方SDK | @binance/connector |
| 后端 | Node.js + Express | 和灵镜统一 |
| 前端 | Next.js | 深色UI |
| 数据库 | PostgreSQL | 多租户友好 |
| 进程管理 | PM2 | 分api/worker |
| 部署 | 34.84.9.167 (GCP东京) | Binance延迟11ms |
15.1 部署与网络安全方案(v1.3.1 新增)
部署服务器
- 机器:34.84.9.167(GCP asia-northeast1-b)
- 选择理由:
- Binance API TCP延迟 11ms(露露服务器22ms的一半)
- 内存可用 6.4GB、磁盘可用 187GB
- 仅1个PM2服务运行,负载极低
- GCP基础设施安全性高于普通VPS
- 非root用户运行(fzq1228)
网络访问方案(域名 + HTTPS + 强认证)
- 访问方式:子域名 + Caddy自动HTTPS
- 不使用IP白名单(范总IP不固定)
- 安全靠认证层保障:
| 安全层 | 措施 |
|---|---|
| 传输层 | HTTPS(Caddy自动TLS证书) |
| 认证层 | 账号密码 + TOTP双因素 |
| 会话层 | 30分钟超时自动登出 |
| 防暴破 | 连续5次登录失败锁定15分钟 |
| 审计层 | 所有登录/操作记录,append-only |
| 数据库 | PostgreSQL仅监听localhost |
| 进程隔离 | 单独系统用户运行套利引擎 |
GCP防火墙规则(需配置)
- 开放端口:仅HTTPS(443)
- 其他端口:全部关闭
- SSH:仅密钥登录
Phase 2 安全升级路径
- 可选:Cloudflare Zero Trust(Tunnel + Access认证)
- 可选:WAF规则(防SQL注入/XSS)
- 可选:Cloudflare Access策略(邮箱OTP二次验证)
16. Phase 0 验收Checklist
认证与权限
- API签名请求成功
- 读取余额成功
- 读取持仓成功
- 验证无提现权限
- PM状态可读
行情与费率
- Spot/Perp bookTicker可读
- premiumIndex可读
- fundingRate历史可拉取(BTC/ETH)
- 深度数据可拉取
交易闭环
- Spot下单/回查/撤单成功
- Futures下单/回查/撤单成功
- WebSocket成交推送正常
- 单腿失败补偿流程演练通过
- 熔断触发与恢复流程通过
风控机制
- 滑点超阈拦截通过
- 对冲偏差超阈拦截通过
- API连续失败熔断通过
- 重启后自动对账通过
- uniMMR预警/危险触发通过
报表与告警
- 8小时收益计算正确
- 每日汇报自动推送成功
- 异常告警实时送达成功
验收标准:Checklist 100%通过才允许进入 1周 Dry Run。
17. 风险与原则
- 原则:真金白银系统,宁慢勿错
- 风险优先级:执行错误 > 权限泄露 > 可用性 > 收益偏差
- 处置原则:触发风险先停机后恢复,先对账后继续
18. 下一步(文档后动作)
- 独立服务器准备完成
- API Key权限配置完成(Read+Trade,禁Withdraw,白名单)
- Phase 0执行计划与验收人确认
- 开始开发