首次上传

This commit is contained in:
dekun
2026-05-16 22:25:48 +08:00
commit 2b8f902548
88 changed files with 16386 additions and 0 deletions
@@ -0,0 +1,209 @@
# 多执行器与信号转发 · 设计归档
本文档归档 2026-05 前后关于 **onchain_scout_gate(扫描端)****gate_order_executor(执行器)** 联动的讨论结论与已实现能力,便于后期检阅。
---
## 1. 背景与目标
| 目标 | 说明 |
|------|------|
| **一套信号** | 扫描端在企微突破推送成功后,构造 **一份** 方案 A 止盈/止损 payload |
| **多套账户** | 可向多个执行器进程广播,各绑不同 Gate API,用于盈亏比等规则的对照实验 |
| **规则在执行器** | 最低盈亏比、仓位、移动保本等 **不在扫描端** 区分,由各执行器自行配置 |
| **统一 Webhook** | 全系统使用 **同一个** `webhook_secret` |
| **仅扫描端登记** | 执行器列表 **只能** 在扫描端 Web 面板(及对应 API)维护,**禁止执行器反向注册** |
---
## 2. 架构
```mermaid
flowchart LR
scout[onchain_scout_gate :8088]
scout -->|1 次| wecom[企业微信]
scout -->|同一 payload| exA[执行器 A]
scout -->|同一 payload| exB[执行器 B]
exA --> gateA[Gate 账户 A]
exB --> gateB[Gate 账户 B]
```
- 转发 **不走** 扫描端 `proxy`,直连各 `base_url`(通常 `http://127.0.0.1:8090` 或内网 IP)。
- 各执行器独立进程、独立 `config.yaml`、独立 SQLite;互不通信。
---
## 3. 扫描端实现要点(已实现)
### 3.1 持久化
| 文件 | 内容 |
|------|------|
| `runtime/order_executors.json` | 总开关、`webhook_secret``timeout_seconds`、执行器列表 |
| `config.yaml` `order_executor` | **仅冷启动**:首次无 json 时从 `base_url` / `enabled` / `secret` 导入一条 |
之后以 **面板修改** 为准;改 `config.yaml` **不会** 覆盖已有 json。
### 3.2 执行器列表字段
| 字段 | 说明 |
|------|------|
| `id` | UUID |
| `name` | 展示名(日志、面板) |
| `base_url` | 如 `http://127.0.0.1:8090` |
| `enabled` | 单条开关 |
| `last_forward` | 最近一次转发结果(HTTP、exec_status |
### 3.3 HTTP API(需登录)
| 方法 | 路径 | 作用 |
|------|------|------|
| GET | `/api/order-executors` | 读取完整配置 |
| PUT | `/api/order-executors/settings` | 总开关、webhook_secret、timeout |
| POST | `/api/order-executors` | 新增 |
| PATCH | `/api/order-executors/{id}` | 改名称/URL/启用 |
| DELETE | `/api/order-executors/{id}` | 删除 |
### 3.4 转发逻辑
1. `build_order_executor_payload()` 仍只构建 **一次**(与企微方案 A 一致)。
2.`enabled=true` 的列表项 **并行** `POST {base_url}/v1/signal`
3. **同一 `signal_id`** 发往所有目标。
4. 部分失败只记日志,不阻断其他执行器。
### 3.5 Web 面板
路径:Dashboard → **「下单执行器 · 转发链」**
- 总开关、Webhook 密钥(可改)、超时
- 添加 / 启用 / 停用 / 删除
- 展示上次转发状态
### 3.6 代码模块
| 文件 | 职责 |
|------|------|
| `app/order_executors_store.py` | 读写 json、CRUD |
| `app/order_executor_forward.py` | 构建 payload、多路 POST |
| `app/monitor.py` | 企微成功后调用转发 |
| `app/web.py` | API + 启动时 `ensure_store_initialized` |
---
## 4. 执行器侧(gate_order_executor
本次 **未改** 执行器业务代码。多账户 = 多实例部署:
| 实例 | 典型差异 |
|------|----------|
| 目录/PM2 名 | 两份 `gate_order_executor` |
| `app.port` | 8090 / 8091 |
| `gate.api_key/secret` | 不同子账户 |
| `security.webhook_secret` | 与扫描端面板 **相同** |
| `risk.*`、移动保本 | 各实例自行实验 |
另见执行器仓库已实现的 **移动保本**(1R 拉至开仓价±0.2%、面板开关、`breakeven_prefs` 等),与多路转发正交。
---
## 5. 部署套数怎么选
| 场景 | 面板操作 |
|------|----------|
| 单账户 | 列表 **1 条** URL |
| 双账户对照 | **2 条** URL,各指向不同端口/机器 |
| 临时只跑一套 | 另一条 `enabled: false` 或关总开关 |
| 完全停止自动下单 | 总开关 `enabled: false` |
---
## 6. 盈亏比对照实验(用法)
1. 扫描端产生同一 `signal_id`、同一 TP/SL。
2. 执行器 A`min_reward_risk_ratio = 1.3` → 可能 `accepted`
3. 执行器 B`min_reward_risk_ratio = 1.8` → 可能 `skipped` / `reward_risk_below_min`
4. 分别在两个执行器面板「信号流」与 Gate 平仓统计中对比结果。
---
## 7. 云服务器关闭代理
### 7.1 何时关闭
- **本机 + 本地 SOCKS**`proxy.enabled: true`
- **境外云、可直连 Gate**`proxy.enabled: false`
### 7.2 扫描端
```yaml
proxy:
enabled: false
```
仅影响 **Gate 行情**;企微、转发执行器本就直连。
### 7.3 执行器(每个实例)
```yaml
proxy:
enabled: false
```
影响 Gate 下单/查仓及(若开启)企微出站。
### 7.4 自检
```bash
curl -I --max-time 15 https://api.gateio.ws
```
### 7.5 文档索引
- `onchain_scout_gate/交易系统部署说明.md` §7、§8
- `onchain_scout_gate/docs/本地部署-SOCKS5代理.md`(本地 SOCKS
- `gate_order_executor/docs/部署说明.md` §6.1
---
## 8. 日志关键字
扫描端运行日志(面板「运行日志」或 `runtime/system.log`):
| 日志前缀 | 含义 |
|----------|------|
| `order_executor_ok name=...` | 该执行器 HTTP 成功 |
| `order_executor_failed name=...` | HTTP 或业务失败 |
| `order_executor_no_active_targets` | 总开关开但无启用条目 |
| `webhook_secret is empty` | 未配置密钥 |
---
## 9. 安全与约束
- **Webhook 密钥** 在面板修改后,须手动同步到 **每一个** 执行器 `security.webhook_secret`
- **勿** 将执行器 `8090/8091` 对公网裸奔;建议仅本机或内网 + 防火墙。
- 执行器 **不会****不能** 向扫描端注册;避免运维混乱。
---
## 10. 变更记录
| 日期 | 内容 |
|------|------|
| 2026-05 | 多执行器运行时存储、面板 CRUD、并行广播、部署与代理文档 |
---
## 11. 相关路径速查
```text
onchain_scout_gate/
runtime/order_executors.json # 执行器列表(面板写入)
app/order_executors_store.py
app/order_executor_forward.py
templates/dashboard.html # 「下单执行器」区块
static/app.js
gate_order_executor/ # 多实例部署,代码无需为多账户改动
config.yaml # 每实例独立 API / risk / proxy
```