openfund-arbitrage 3.9.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openfund_arbitrage-3.9.1/PKG-INFO +172 -0
- openfund_arbitrage-3.9.1/README.md +148 -0
- openfund_arbitrage-3.9.1/app/__init__.py +3 -0
- openfund_arbitrage-3.9.1/app/config.py +449 -0
- openfund_arbitrage-3.9.1/app/core/__init__.py +16 -0
- openfund_arbitrage-3.9.1/app/core/arbitrage_executor.py +3900 -0
- openfund_arbitrage-3.9.1/app/core/diagnostics.py +571 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/__init__.py +11 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/base.py +310 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/binance.py +84 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/bitget.py +318 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/bybit.py +123 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/factory.py +15 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/gate.py +138 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/generic.py +46 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/htx.py +187 -0
- openfund_arbitrage-3.9.1/app/core/exchange_dialects/okx.py +186 -0
- openfund_arbitrage-3.9.1/app/core/exchange_manager.py +186 -0
- openfund_arbitrage-3.9.1/app/core/exchange_wrapper.py +462 -0
- openfund_arbitrage-3.9.1/app/core/execution/state_machine.py +57 -0
- openfund_arbitrage-3.9.1/app/core/execution/strategies/__init__.py +5 -0
- openfund_arbitrage-3.9.1/app/core/execution/strategies/base_strategy.py +30 -0
- openfund_arbitrage-3.9.1/app/core/execution/strategies/dual_maker_strategy.py +430 -0
- openfund_arbitrage-3.9.1/app/core/execution/strategies/taker_fallback_strategy.py +60 -0
- openfund_arbitrage-3.9.1/app/core/execution/strategies/twap_strategy.py +266 -0
- openfund_arbitrage-3.9.1/app/core/execution_observation.py +871 -0
- openfund_arbitrage-3.9.1/app/core/funding_rate_fetcher.py +839 -0
- openfund_arbitrage-3.9.1/app/core/helpers.py +242 -0
- openfund_arbitrage-3.9.1/app/core/lsi_manager.py +311 -0
- openfund_arbitrage-3.9.1/app/core/notification.py +236 -0
- openfund_arbitrage-3.9.1/app/core/real_trade_guard.py +267 -0
- openfund_arbitrage-3.9.1/app/core/twap_backfillers.py +112 -0
- openfund_arbitrage-3.9.1/app/core/twap_manager.py +1110 -0
- openfund_arbitrage-3.9.1/app/data/__init__.py +5 -0
- openfund_arbitrage-3.9.1/app/data/mock_store.py +164 -0
- openfund_arbitrage-3.9.1/app/data/persistent_store.py +1088 -0
- openfund_arbitrage-3.9.1/app/dependencies.py +67 -0
- openfund_arbitrage-3.9.1/app/domain/opportunity_evaluator.py +841 -0
- openfund_arbitrage-3.9.1/app/logger.py +173 -0
- openfund_arbitrage-3.9.1/app/main.py +424 -0
- openfund_arbitrage-3.9.1/app/presentation/opportunity_formatter.py +1294 -0
- openfund_arbitrage-3.9.1/app/routers/__init__.py +1 -0
- openfund_arbitrage-3.9.1/app/routers/exchanges.py +98 -0
- openfund_arbitrage-3.9.1/app/routers/opportunities.py +110 -0
- openfund_arbitrage-3.9.1/app/routers/performance.py +123 -0
- openfund_arbitrage-3.9.1/app/routers/positions.py +125 -0
- openfund_arbitrage-3.9.1/app/routers/risk.py +113 -0
- openfund_arbitrage-3.9.1/app/scheduler/__init__.py +5 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/__init__.py +13 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/auto_close_check.py +1370 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/daily_profit_report.py +4191 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/funding_rate_sync.py +54 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/llm_review_report.py +73 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/opportunity_scan.py +329 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/paper_trading_job.py +54 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/position_monitor.py +199 -0
- openfund_arbitrage-3.9.1/app/scheduler/jobs/report_self_healing.py +107 -0
- openfund_arbitrage-3.9.1/app/scheduler/scheduler_manager.py +217 -0
- openfund_arbitrage-3.9.1/app/schemas/__init__.py +1 -0
- openfund_arbitrage-3.9.1/app/schemas/audit.py +36 -0
- openfund_arbitrage-3.9.1/app/schemas/common.py +36 -0
- openfund_arbitrage-3.9.1/app/schemas/exchange.py +38 -0
- openfund_arbitrage-3.9.1/app/schemas/funding_rate.py +39 -0
- openfund_arbitrage-3.9.1/app/schemas/opportunity.py +406 -0
- openfund_arbitrage-3.9.1/app/schemas/paper_trading.py +28 -0
- openfund_arbitrage-3.9.1/app/schemas/performance.py +130 -0
- openfund_arbitrage-3.9.1/app/schemas/position.py +115 -0
- openfund_arbitrage-3.9.1/app/schemas/risk.py +105 -0
- openfund_arbitrage-3.9.1/app/services/__init__.py +1 -0
- openfund_arbitrage-3.9.1/app/services/exchange_service.py +101 -0
- openfund_arbitrage-3.9.1/app/services/funding_sync_service.py +2323 -0
- openfund_arbitrage-3.9.1/app/services/llm_service.py +37 -0
- openfund_arbitrage-3.9.1/app/services/opportunity_service.py +947 -0
- openfund_arbitrage-3.9.1/app/services/paper_trading_service.py +418 -0
- openfund_arbitrage-3.9.1/app/services/performance_service.py +494 -0
- openfund_arbitrage-3.9.1/app/services/position_service.py +287 -0
- openfund_arbitrage-3.9.1/app/services/position_sync_service.py +950 -0
- openfund_arbitrage-3.9.1/app/services/risk_monitoring_service.py +322 -0
- openfund_arbitrage-3.9.1/app/services/risk_service.py +299 -0
- openfund_arbitrage-3.9.1/pyproject.toml +38 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: openfund-arbitrage
|
|
3
|
+
Version: 3.9.1
|
|
4
|
+
Summary: 跨交易所资金费率套利系统
|
|
5
|
+
Author: OpenFund Team
|
|
6
|
+
Requires-Python: >=3.10,<4.0
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Requires-Dist: aiohttp (>=3.9.0,<4.0.0)
|
|
13
|
+
Requires-Dist: apscheduler (>=3.10.0,<4.0.0)
|
|
14
|
+
Requires-Dist: ccxt (>=4.5.60,<5.0.0)
|
|
15
|
+
Requires-Dist: fastapi (>=0.109.0,<0.110.0)
|
|
16
|
+
Requires-Dist: filelock (>=3.13.0,<4.0.0)
|
|
17
|
+
Requires-Dist: numpy (>=1.26.0,<2.0.0)
|
|
18
|
+
Requires-Dist: pandas (>=2.2.0,<3.0.0)
|
|
19
|
+
Requires-Dist: pydantic (>=2.5.0,<3.0.0)
|
|
20
|
+
Requires-Dist: pyyaml (>=6.0,<7.0)
|
|
21
|
+
Requires-Dist: uvicorn[standard] (>=0.27.0,<0.28.0)
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# OpenFund Arbitrage
|
|
25
|
+
|
|
26
|
+
跨交易所资金费率套利系统 - 生产级实盘交易引擎
|
|
27
|
+
|
|
28
|
+
## 功能概述
|
|
29
|
+
|
|
30
|
+
- **套利机会发现**: 实时监控 9 个以上交易所的资金费率差异,识别净年化收益。
|
|
31
|
+
- **运行模式隔离**: 支持纯监控 (Monitor)、模拟交易 (Paper) 与 真实交易 (Live) 三种模式物理隔离。
|
|
32
|
+
- **安全守护引擎 (RealTradeGuard)**:
|
|
33
|
+
- **Audit A (强一致性对账)**: 开仓前强制对比本地数据库与交易所实盘持仓,防止“脑裂”。
|
|
34
|
+
- **熔断机制**: 10分钟内超过 3 次回滚失败自动锁定全局交易。
|
|
35
|
+
- **DIRTY 锁定**: 发现持仓不一致时立即锁定对应交易对,需人工介入。
|
|
36
|
+
- **实盘执行约束**:
|
|
37
|
+
- **IOC 限价保护**: 使用 Immediate-or-Cancel 订单配合 ±0.05% 价格偏移,防止滑点。
|
|
38
|
+
- **逐仓强制模式**: 自动切换至 Isolated Margin 模式,物理隔离单仓风险。
|
|
39
|
+
- **头寸硬约束**: 默认限制 1.0 USDT 极小头寸与 1x 杠杆,确保初期安全。
|
|
40
|
+
- **多交易所方言适配**: 针对 OKX, Gate, HTX 等交易所专门优化结算周期 (Interval) 与非标准接口的兼容性,确保费率对齐 100% 准确。
|
|
41
|
+
|
|
42
|
+
## 技术栈
|
|
43
|
+
|
|
44
|
+
- Python 3.10+
|
|
45
|
+
- FastAPI + Pydantic v2
|
|
46
|
+
- CCXT (异步模式)
|
|
47
|
+
- APScheduler (任务调度)
|
|
48
|
+
- python-dotenv (环境管理)
|
|
49
|
+
|
|
50
|
+
## 快速开始
|
|
51
|
+
|
|
52
|
+
### 1. 安装依赖
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
cd openfund-arbitrage
|
|
56
|
+
poetry install
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. 配置环境
|
|
60
|
+
|
|
61
|
+
创建 `.env` 文件并填入 API 密钥:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
cp .env.example .env
|
|
65
|
+
# 编辑 .env 填入各交易所 API Key, Secret, Password
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3. 配置策略参数
|
|
69
|
+
|
|
70
|
+
编辑 `arbitrage_config.yaml`:
|
|
71
|
+
|
|
72
|
+
- `arbitrage.is_paper_trading`: `false` (切换为实盘模式)
|
|
73
|
+
- `arbitrage.auto_trading.enabled`: `true` (开启自动执行)
|
|
74
|
+
- `arbitrage.live_trading.max_latency_ms`: `3000` (设置最大允许延迟)
|
|
75
|
+
|
|
76
|
+
### 4. 启动服务
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
poetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 运行模式说明
|
|
83
|
+
|
|
84
|
+
| 模式 | 配置要求 | 行为描述 |
|
|
85
|
+
|------|---------|---------|
|
|
86
|
+
| **监控模式 (Monitor)** | `auto_trading.enabled: false` | 仅扫描并通知,不注册持仓监控任务,无状态运行。 |
|
|
87
|
+
| **模拟模式 (Paper)** | `is_paper_trading: true` | 使用虚拟账户执行,记录模拟 PnL,不涉及真实资金。 |
|
|
88
|
+
| **实盘模式 (Live)** | `is_paper_trading: false` | 连接真实 API 执行,强制 1 USDT 限制及 RealTradeGuard 审计。 |
|
|
89
|
+
|
|
90
|
+
## 安全特性说明 (RealTrader)
|
|
91
|
+
|
|
92
|
+
- **价格保护**: 实盘不使用市价单,强制使用 `IOC Limit` 单,确保成交价优于 `LastPrice * (1 ± 0.05%)`。
|
|
93
|
+
- **延迟审计**: 自动复用费率扫描阶段的真实 REST 延迟,若延迟超过 `max_latency_ms` 则拦截执行。
|
|
94
|
+
- **保证金校验**: 下单前强制检查可用余额是否覆盖 `头寸 + 0.1%手续费缓冲`。
|
|
95
|
+
- **动态持仓同步**: 自动抓取并对齐多交易所资金费流水,支持全生命周期收益追踪。
|
|
96
|
+
|
|
97
|
+
## 收益报告系统 (Reporting System)
|
|
98
|
+
|
|
99
|
+
系统集成了自动化收益统计与可视化报表功能,支持每日定时生成或按需手动触发。
|
|
100
|
+
|
|
101
|
+
- **全生命周期追踪**: 不仅统计当日收益,还能自动回溯至开仓时刻,计算持仓全周期的累计收益。
|
|
102
|
+
- **多维度损益分析**:
|
|
103
|
+
- **当日贡献**: 细化至多空双腿各交易所的当日资金费收入。
|
|
104
|
+
- **累计收益**: 实时累计从开仓至今的所有已结算利息。
|
|
105
|
+
- **资金效率**: 自动计算 `累计收益 / 占用本金`,评估头寸质量。
|
|
106
|
+
- **可视化报表**:
|
|
107
|
+
- **Markdown 报表**: 生成位于 `reports/` 目录,包含每笔持仓的详细流水、时间分布及审计回顾。
|
|
108
|
+
- **JSON 镜像**: 同步生成位于 `data/reports/` 的数据文件,便于二开或程序化分析。
|
|
109
|
+
- **决策回顾 (Decision Review)**: 报表自动关联开仓时的审计快照,对比“预期 APR”与“实际收益 APR”,并展示审计置信度。
|
|
110
|
+
|
|
111
|
+
## 决策审计与对账 (Audit & Reconcile)
|
|
112
|
+
|
|
113
|
+
- **Audit B (持仓快照)**: 开仓时自动保存市场深度、中间价格及 4H TWAP 差值,作为后期收益评估的基准。
|
|
114
|
+
- **预期达成率**: 自动分析实际收到的利息是否符合开仓时的费率预测,及时识别“费率刺客”。
|
|
115
|
+
- **流水级对账**: 细化每一笔利息的时间、金额与流水 ID,确保交易所账单与本地数据完全匹配。
|
|
116
|
+
|
|
117
|
+
## 项目结构
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
openfund-arbitrage/
|
|
121
|
+
├── app/
|
|
122
|
+
│ ├── core/ # 核心逻辑 (Executor, Guard, Manager, Fetcher)
|
|
123
|
+
│ ├── scheduler/ # 调度任务 (Scan, Monitor, Sync, Jobs/Report)
|
|
124
|
+
│ ├── services/ # 业务服务 (PaperTrading, Opportunity, FundingSync)
|
|
125
|
+
│ ├── data/ # 持久化存储 (Sqlite, Positions, Reports JSON)
|
|
126
|
+
│ └── main.py # 应用入口
|
|
127
|
+
├── reports/ # 自动化生成的 Markdown 收益报表
|
|
128
|
+
├── arbitrage_config.yaml # 核心配置文件
|
|
129
|
+
├── .env # 敏感凭据
|
|
130
|
+
└── tests/ # 单元测试与诊断工具
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 运维与诊断
|
|
134
|
+
|
|
135
|
+
系统提供了一套完整的“烟雾测试 (Smoke Test)”工具,用于在启动实盘前验证各交易所的 API 连通性、权限及可用保证金。
|
|
136
|
+
|
|
137
|
+
### 交易所连通性测试 (V3)
|
|
138
|
+
该工具会自动执行:初始化连接 -> 检查余额 -> 自动调量 -> 开仓 -> 等待 -> 平仓(ReduceOnly)。
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# 1. 测试所有已启用的交易所 (默认使用 DUSK 以适配小额账户)
|
|
142
|
+
python tests/test_exchange_connectivity_v3.py
|
|
143
|
+
|
|
144
|
+
# 2. 极速测试特定交易所 (仅初始化目标交易所)
|
|
145
|
+
python tests/test_exchange_connectivity_v3.py -e okx
|
|
146
|
+
|
|
147
|
+
# 3. 指定交易所并指定特定币种进行测试
|
|
148
|
+
python tests/test_exchange_connectivity_v3.py -e htx -s XRP/USDT:USDT
|
|
149
|
+
|
|
150
|
+
# 4. 查看帮助文档
|
|
151
|
+
python tests/test_exchange_connectivity_v3.py --help
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
> **注意**:脚本具备“自适应账户余额”能力。如果账户余额紧张,它会自动降级至 1 张合约(物理最小单位)进行测试,确保即便只有 5-10U 的账户也能完成验证。
|
|
155
|
+
|
|
156
|
+
### 手动重发收益报表 (Manual Report)
|
|
157
|
+
|
|
158
|
+
如果需要重新生成特定日期的报表(例如 API 波动导致数据缺失后补救),可以使用以下脚本:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# 修改脚本中的 date_str 为目标日期,例如 "2026-03-10"
|
|
162
|
+
python tests/rerun_report_310.py
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
报表生成后将自动更新 `reports/` 下对应的 `.md` 文件和通知。
|
|
166
|
+
|
|
167
|
+
## 注意事项
|
|
168
|
+
|
|
169
|
+
- **API 权限**: 实盘模式需要 API 具有 `Read` (获取持仓/余额) 和 `Trade` (开仓/平仓) 权限。
|
|
170
|
+
- **代理建议**: 建议在 `arbitrage_config.yaml` 中配置稳定代理以保证 `max_latency_ms` 达标。
|
|
171
|
+
- **风险提示**: 即便有 RealTradeGuard 保护,量化交易仍存在不可预见的风险,请务必从极小本金开始。
|
|
172
|
+
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# OpenFund Arbitrage
|
|
2
|
+
|
|
3
|
+
跨交易所资金费率套利系统 - 生产级实盘交易引擎
|
|
4
|
+
|
|
5
|
+
## 功能概述
|
|
6
|
+
|
|
7
|
+
- **套利机会发现**: 实时监控 9 个以上交易所的资金费率差异,识别净年化收益。
|
|
8
|
+
- **运行模式隔离**: 支持纯监控 (Monitor)、模拟交易 (Paper) 与 真实交易 (Live) 三种模式物理隔离。
|
|
9
|
+
- **安全守护引擎 (RealTradeGuard)**:
|
|
10
|
+
- **Audit A (强一致性对账)**: 开仓前强制对比本地数据库与交易所实盘持仓,防止“脑裂”。
|
|
11
|
+
- **熔断机制**: 10分钟内超过 3 次回滚失败自动锁定全局交易。
|
|
12
|
+
- **DIRTY 锁定**: 发现持仓不一致时立即锁定对应交易对,需人工介入。
|
|
13
|
+
- **实盘执行约束**:
|
|
14
|
+
- **IOC 限价保护**: 使用 Immediate-or-Cancel 订单配合 ±0.05% 价格偏移,防止滑点。
|
|
15
|
+
- **逐仓强制模式**: 自动切换至 Isolated Margin 模式,物理隔离单仓风险。
|
|
16
|
+
- **头寸硬约束**: 默认限制 1.0 USDT 极小头寸与 1x 杠杆,确保初期安全。
|
|
17
|
+
- **多交易所方言适配**: 针对 OKX, Gate, HTX 等交易所专门优化结算周期 (Interval) 与非标准接口的兼容性,确保费率对齐 100% 准确。
|
|
18
|
+
|
|
19
|
+
## 技术栈
|
|
20
|
+
|
|
21
|
+
- Python 3.10+
|
|
22
|
+
- FastAPI + Pydantic v2
|
|
23
|
+
- CCXT (异步模式)
|
|
24
|
+
- APScheduler (任务调度)
|
|
25
|
+
- python-dotenv (环境管理)
|
|
26
|
+
|
|
27
|
+
## 快速开始
|
|
28
|
+
|
|
29
|
+
### 1. 安装依赖
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cd openfund-arbitrage
|
|
33
|
+
poetry install
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. 配置环境
|
|
37
|
+
|
|
38
|
+
创建 `.env` 文件并填入 API 密钥:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cp .env.example .env
|
|
42
|
+
# 编辑 .env 填入各交易所 API Key, Secret, Password
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3. 配置策略参数
|
|
46
|
+
|
|
47
|
+
编辑 `arbitrage_config.yaml`:
|
|
48
|
+
|
|
49
|
+
- `arbitrage.is_paper_trading`: `false` (切换为实盘模式)
|
|
50
|
+
- `arbitrage.auto_trading.enabled`: `true` (开启自动执行)
|
|
51
|
+
- `arbitrage.live_trading.max_latency_ms`: `3000` (设置最大允许延迟)
|
|
52
|
+
|
|
53
|
+
### 4. 启动服务
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
poetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 运行模式说明
|
|
60
|
+
|
|
61
|
+
| 模式 | 配置要求 | 行为描述 |
|
|
62
|
+
|------|---------|---------|
|
|
63
|
+
| **监控模式 (Monitor)** | `auto_trading.enabled: false` | 仅扫描并通知,不注册持仓监控任务,无状态运行。 |
|
|
64
|
+
| **模拟模式 (Paper)** | `is_paper_trading: true` | 使用虚拟账户执行,记录模拟 PnL,不涉及真实资金。 |
|
|
65
|
+
| **实盘模式 (Live)** | `is_paper_trading: false` | 连接真实 API 执行,强制 1 USDT 限制及 RealTradeGuard 审计。 |
|
|
66
|
+
|
|
67
|
+
## 安全特性说明 (RealTrader)
|
|
68
|
+
|
|
69
|
+
- **价格保护**: 实盘不使用市价单,强制使用 `IOC Limit` 单,确保成交价优于 `LastPrice * (1 ± 0.05%)`。
|
|
70
|
+
- **延迟审计**: 自动复用费率扫描阶段的真实 REST 延迟,若延迟超过 `max_latency_ms` 则拦截执行。
|
|
71
|
+
- **保证金校验**: 下单前强制检查可用余额是否覆盖 `头寸 + 0.1%手续费缓冲`。
|
|
72
|
+
- **动态持仓同步**: 自动抓取并对齐多交易所资金费流水,支持全生命周期收益追踪。
|
|
73
|
+
|
|
74
|
+
## 收益报告系统 (Reporting System)
|
|
75
|
+
|
|
76
|
+
系统集成了自动化收益统计与可视化报表功能,支持每日定时生成或按需手动触发。
|
|
77
|
+
|
|
78
|
+
- **全生命周期追踪**: 不仅统计当日收益,还能自动回溯至开仓时刻,计算持仓全周期的累计收益。
|
|
79
|
+
- **多维度损益分析**:
|
|
80
|
+
- **当日贡献**: 细化至多空双腿各交易所的当日资金费收入。
|
|
81
|
+
- **累计收益**: 实时累计从开仓至今的所有已结算利息。
|
|
82
|
+
- **资金效率**: 自动计算 `累计收益 / 占用本金`,评估头寸质量。
|
|
83
|
+
- **可视化报表**:
|
|
84
|
+
- **Markdown 报表**: 生成位于 `reports/` 目录,包含每笔持仓的详细流水、时间分布及审计回顾。
|
|
85
|
+
- **JSON 镜像**: 同步生成位于 `data/reports/` 的数据文件,便于二开或程序化分析。
|
|
86
|
+
- **决策回顾 (Decision Review)**: 报表自动关联开仓时的审计快照,对比“预期 APR”与“实际收益 APR”,并展示审计置信度。
|
|
87
|
+
|
|
88
|
+
## 决策审计与对账 (Audit & Reconcile)
|
|
89
|
+
|
|
90
|
+
- **Audit B (持仓快照)**: 开仓时自动保存市场深度、中间价格及 4H TWAP 差值,作为后期收益评估的基准。
|
|
91
|
+
- **预期达成率**: 自动分析实际收到的利息是否符合开仓时的费率预测,及时识别“费率刺客”。
|
|
92
|
+
- **流水级对账**: 细化每一笔利息的时间、金额与流水 ID,确保交易所账单与本地数据完全匹配。
|
|
93
|
+
|
|
94
|
+
## 项目结构
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
openfund-arbitrage/
|
|
98
|
+
├── app/
|
|
99
|
+
│ ├── core/ # 核心逻辑 (Executor, Guard, Manager, Fetcher)
|
|
100
|
+
│ ├── scheduler/ # 调度任务 (Scan, Monitor, Sync, Jobs/Report)
|
|
101
|
+
│ ├── services/ # 业务服务 (PaperTrading, Opportunity, FundingSync)
|
|
102
|
+
│ ├── data/ # 持久化存储 (Sqlite, Positions, Reports JSON)
|
|
103
|
+
│ └── main.py # 应用入口
|
|
104
|
+
├── reports/ # 自动化生成的 Markdown 收益报表
|
|
105
|
+
├── arbitrage_config.yaml # 核心配置文件
|
|
106
|
+
├── .env # 敏感凭据
|
|
107
|
+
└── tests/ # 单元测试与诊断工具
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 运维与诊断
|
|
111
|
+
|
|
112
|
+
系统提供了一套完整的“烟雾测试 (Smoke Test)”工具,用于在启动实盘前验证各交易所的 API 连通性、权限及可用保证金。
|
|
113
|
+
|
|
114
|
+
### 交易所连通性测试 (V3)
|
|
115
|
+
该工具会自动执行:初始化连接 -> 检查余额 -> 自动调量 -> 开仓 -> 等待 -> 平仓(ReduceOnly)。
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 1. 测试所有已启用的交易所 (默认使用 DUSK 以适配小额账户)
|
|
119
|
+
python tests/test_exchange_connectivity_v3.py
|
|
120
|
+
|
|
121
|
+
# 2. 极速测试特定交易所 (仅初始化目标交易所)
|
|
122
|
+
python tests/test_exchange_connectivity_v3.py -e okx
|
|
123
|
+
|
|
124
|
+
# 3. 指定交易所并指定特定币种进行测试
|
|
125
|
+
python tests/test_exchange_connectivity_v3.py -e htx -s XRP/USDT:USDT
|
|
126
|
+
|
|
127
|
+
# 4. 查看帮助文档
|
|
128
|
+
python tests/test_exchange_connectivity_v3.py --help
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
> **注意**:脚本具备“自适应账户余额”能力。如果账户余额紧张,它会自动降级至 1 张合约(物理最小单位)进行测试,确保即便只有 5-10U 的账户也能完成验证。
|
|
132
|
+
|
|
133
|
+
### 手动重发收益报表 (Manual Report)
|
|
134
|
+
|
|
135
|
+
如果需要重新生成特定日期的报表(例如 API 波动导致数据缺失后补救),可以使用以下脚本:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# 修改脚本中的 date_str 为目标日期,例如 "2026-03-10"
|
|
139
|
+
python tests/rerun_report_310.py
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
报表生成后将自动更新 `reports/` 下对应的 `.md` 文件和通知。
|
|
143
|
+
|
|
144
|
+
## 注意事项
|
|
145
|
+
|
|
146
|
+
- **API 权限**: 实盘模式需要 API 具有 `Read` (获取持仓/余额) 和 `Trade` (开仓/平仓) 权限。
|
|
147
|
+
- **代理建议**: 建议在 `arbitrage_config.yaml` 中配置稳定代理以保证 `max_latency_ms` 达标。
|
|
148
|
+
- **风险提示**: 即便有 RealTradeGuard 保护,量化交易仍存在不可预见的风险,请务必从极小本金开始。
|