Files
crypto_monitor/manual_trading_hub/使用说明.md
T
2026-05-22 10:56:42 +08:00

14 KiB
Raw Blame History

多账户交易中控 — 使用说明

本文档说明 manual_trading_hub(方案 A)的架构、启动方式、三页界面操作与故障排查。中控聚合四所 监控 + 下单 + 关键位 + 趋势回调(仅 Gate 趋势户)交易复盘仍进入各实例网页,中控只提供跳转链接。


1. 架构总览

浏览器
  ├─ /monitor   监控区(持仓、关键位、趋势计划、全平)
  ├─ /trade     下单区(人工下单 / 关键位 / 趋势回调)
  └─ /settings  系统设置(hub_settings.json

中控 hub.py(默认 :5100
  ├─ HTTP → 子代理 agent.py × N/status、/emergency/close-all
  └─ HTTP → 各实例 Flask app.py/api/hub/*、/api/price_snapshot
组件 职责 默认端口(可在设置页改)
hub.py 聚合 UI、转发下单/监控 API、全平 5100
agent.py 交易所只读状态 + 紧急市价全平 币安 15200、OKX 15201、Gate 15202、Gate趋势 15203
crypto_monitor_*.app 策略库、关键位、人工单、趋势预览/执行 币安 5001、Gate 5000、Gate趋势 5002、OKX 5004

1.1 四账户默认配置

id 名称 Flask Agent 能力 默认启用
0 币安 :5001 :15200 下单、关键位
1 OKX :5004 :15201 下单、关键位 HUB_DISABLED_IDS=1
2 Gate 训练 :5000 :15202 下单、关键位
3 Gate 趋势 :5002 :15203 下单、趋势回调(无关键位 Tab
  • Gate 趋势户:保留 人工下单趋势回调;监控区可看到运行中的趋势计划,但 不展示关键位capabilities 无 key)。
  • OKX:默认关闭;需要时在「系统设置」勾选启用,并去掉环境变量 HUB_DISABLED_IDS 中的 1

1.2 实例侧改动(最小)

crypto_monitor_* 仅增加:

  1. login_requiredhub_auth.request_allowed(支持请求头 X-Hub-Token)。
  2. 文件末尾 hub_bridge.install_on_app(...) 注册 /api/hub/*

业务逻辑、数据库、复盘页面 未改;复盘请打开各实例 /records(设置里的「复盘链接」)。


2. 环境准备

2.1 依赖安装

cd c:\Users\dekun\Desktop\crypto_monitor\manual_trading_hub
pip install -r requirements.txt

2.2 鉴权令牌(推荐生产启用)

四实例 Flask 与中控、子代理需 同一密钥

变量 作用
HUB_BRIDGE_TOKEN 中控 → Flask 使用头 X-Hub-Token;各实例 hub_auth 校验
CONTROL_TOKEN 可与上相同;中控 → 子代理使用头 X-Control-Token

中控 hub.py 会读取 HUB_BRIDGE_TOKEN,若无则回退 CONTROL_TOKEN

开发本机可临时在各实例 .envAPP_AUTH_DISABLED=true,则 Flask 不校验令牌(仍建议子代理设 CONTROL_TOKEN 防误暴露)。

2.3 强制关闭某账户

$env:HUB_DISABLED_IDS="1"    # 默认即关闭 OKXid=1

与设置页「启用」取 关系:环境变量强制关闭时,网页勾选框会灰掉且无法启用。

2.4 配置文件

  • 路径:manual_trading_hub/hub_settings.json(在网页 系统设置 → 保存设置 后写入)。
  • 未保存前使用 settings_store.py 内置默认四所地址。
  • 建议 不要 把含内网 IP 的 hub_settings.json 提交到公开仓库。
  • 环境变量模板:manual_trading_hub/.env.example;四实例模板中已补充 HUB_BRIDGE_TOKEN 说明。

3. 启动顺序(Windows 示例)

原则:先子代理与四实例 Flask,再中控。

3.1 子代理(每所一个终端)

在对应策略目录加载 .env 后:

# 币安
cd c:\Users\dekun\Desktop\crypto_monitor\crypto_monitor_binance
$env:EXCHANGE="binance"; $env:PORT="15200"; $env:HOST="127.0.0.1"
# 可选:$env:CONTROL_TOKEN="你的随机串"
python ..\manual_trading_hub\agent.py
# OKX(若启用)
cd ..\crypto_monitor_okx
$env:EXCHANGE="okx"; $env:PORT="15201"
python ..\manual_trading_hub\agent.py
# Gate 训练
cd ..\crypto_monitor_gate
$env:EXCHANGE="gate"; $env:PORT="15202"
python ..\manual_trading_hub\agent.py
# Gate 趋势
cd ..\crypto_monitor_gate_bot
$env:EXCHANGE="gate"; $env:PORT="15203"
python ..\manual_trading_hub\agent.py

3.2 四实例 Flask

在各目录按原有方式启动 app.py(确保 APP_PORT 与设置页 Flask URL 一致)。

3.3 中控

cd c:\Users\dekun\Desktop\crypto_monitor\manual_trading_hub
$env:HUB_HOST="0.0.0.0"          # 仅本机可改为 127.0.0.1
$env:HUB_PORT="5100"
$env:HUB_BRIDGE_TOKEN="你的随机串"  # 与各实例、子代理一致
python hub.py

浏览器打开:


4. 页面操作说明

4.1 监控区 /monitor

功能 说明
2×2 卡片 仅显示「已启用」账户;每卡含子代理持仓、浮盈、余额
机器人持仓 来自实例 /api/hub/monitororder_monitorsactive
关键位 capabilitieskey 的户;展示门控摘要(/api/price_snapshot
趋势计划 仅 Gate 趋势户;trend_pullback_plans active
交易复盘 新标签打开该户 /records中控不做复盘。链接默认由 flask_url 生成;若配置 HUB_PUBLIC_ORIGIN(如 http://192.168.x.x),会把 127.0.0.1 换成 Ubuntu 内网 IP,方便局域网其它设备打开
关键位 来自实例 /api/hub/monitor + /api/price_snapshot(须 Flask 已启动);无记录或 Flask 未连通时卡片会提示原因;Gate 趋势户无关键位
该户全平 POST 子代理 /emergency/close-all,仅平该 API Key 仓位
全局紧急全平 对所有已启用户依次全平(不含 HUB_DISABLED_IDS 强制关闭的 id
自动刷新 默认每 5 秒请求 /api/monitor/board

持仓数据以 子代理 ccxt 为准;关键位/趋势/机器人单以 Flask 数据库 为准。若 Flask 未启动,卡片仍会显示 agent 持仓,但下方策略信息可能为空或报错。

4.2 下单区 /trade

顶部 账户下拉 切换目标所;下方 Tab 根据该户 能力 自动启用/禁用:

Tab:人工下单

  • 字段与各实例「手工开仓」一致:合约、方向、止盈止损模式(价格/百分比)、趋势单/波段单、杠杆、移动保本、止损/止盈。
  • 提交后中控转发 POST /api/hub/add_order,逻辑与在实例网页下单相同(含以损定仓、门控等)。
  • Gate 趋势户 同样可使用本 Tab(保留人工下单)。

Tab:关键位

  • 币安、Gate 训练、OKXcapabilities 含 key)显示。
  • 类型:箱体突破、收敛突破、斐波回调、关键阻力/支撑等;模式含标准突破、箱体 1R、趋势单自填止盈。
  • 提交转发 POST /api/hub/add_key
  • 页面上方会显示该实例 关键位门控规则 文案(来自 /api/hub/meta)。

Tab:趋势回调

  • Gate 趋势户capabilities 含 trend)。
  • 流程:填写参数 → 生成预览 → 确认执行(实盘)
  • 预览转发 POST /api/hub/trend/preview;执行须带 preview_id,转发 POST /api/hub/trend/execute
  • 预览有效期内展示补仓档位表;过期需重新生成。
  • 做空时「补仓上沿」在 UI 上提示为补仓下沿价(字段名仍为 add_upper,与实例一致)。

操作结果在页面底部 Toast 显示实例返回的 flash 汇总信息。

4.3 系统设置 /settings

可用:打开 http://127.0.0.1:5100/settings ,修改表格后点 保存设置 即写入 hub_settings.json重新加载 从磁盘/默认再读(会重新套用 HUB_DISABLED_IDS)。保存后监控区、下单区立即使用新 URL/启用状态,无需重启 hub

含义
启用 是否参与监控与全局全平;被 HUB_DISABLED_IDS 锁定的无法勾选
显示名 监控卡片标题
Flask URL 实例根地址,如 http://127.0.0.1:5001
Agent URL 子代理根地址,如 http://127.0.0.1:15200
复盘链接 一般为 {Flask}/records
能力 勾选 order / key / trend,控制下单区 Tab
id HUB_DISABLED_IDS、全平 API 路径中的 id 对应
  • 保存设置:写入 hub_settings.json,重启 hub 后仍生效。
  • 添加交易所:可增第五所等,需自行启动对应 Flask + agent 并填写 URL。
  • :从列表移除(保存后生效)。

5. 能力矩阵(下单区 Tab

账户 人工下单 关键位 趋势回调
币安
OKX
Gate 训练
Gate 趋势

6. HTTP API 摘要(中控)

访问控制:默认允许 本机RFC1918 私网HUB_TRUST_LAN=true);公网 IP 访问返回 403。

方法 路径 说明
GET /api/settings 读取配置
POST /api/settings 保存配置
GET /api/monitor/board 监控聚合
POST /api/close/{id} 单户全平
POST /api/close-all 全局全平,body 可选 exclude_ids
GET /api/trade/meta/{id} 实例 meta(门控文案等)
POST /api/trade/order/{id} 人工下单
POST /api/trade/key/{id} 添加关键位
POST /api/trade/trend/preview/{id} 趋势预览
POST /api/trade/trend/execute/{id} 趋势执行

实例侧(需 X-Hub-Token 或已登录):

路径 说明
/api/hub/ping 连通与能力
/api/hub/meta 表单规则、预览 TTL 等
/api/hub/monitor 关键位、机器人单、趋势计划
/api/hub/add_order 人工开仓
/api/hub/add_key 添加关键位
/api/hub/trend/preview 趋势预览
/api/hub/trend/execute 趋势执行

7. 环境变量速查

中控 hub.py

变量 默认 说明
HUB_HOST 0.0.0.0 监听地址
HUB_PORT 5100 监听端口
HUB_BRIDGE_TOKEN Flask 桥接令牌;可同 CONTROL_TOKEN
HUB_DISABLED_IDS 1 逗号分隔,强制关闭的账户 id
HUB_TRUST_LAN true false 时仅本机可访问中控页面

子代理 agent.py

变量 说明
EXCHANGE binance / okx / gate
PORT / HOST 监听
CONTROL_TOKEN 与中控一致时必填头 X-Control-Token

各实例 Flask

变量 说明
HUB_BRIDGE_TOKEN 与中控一致
APP_AUTH_DISABLED true 时跳过登录与令牌(仅建议本机调试)

8. 安全与边界

  1. 中控可下单:下单区操作会真实调用交易所逻辑,与在实例网页操作等价,请确认账户与参数。
  2. 全平为市价减仓:监控区全平不可撤销,操作前二次确认。
  3. 子代理建议只监听 127.0.0.1,不要对局域网暴露 API Key 通道。
  4. 公网暴露 hub:请防火墙限制 5100,或 HUB_HOST=127.0.0.1 + HUB_TRUST_LAN=0
  5. 复盘不在中控:时间筛选、导出 CSV、编辑笔记仍在各实例 /records
  6. OKX 默认关:避免未部署 OKX 时监控卡片持续报错。

9. 故障排查

现象 可能原因 处理
监控卡片「子代理不可用」 agent 未启动或端口错 检查 Agent URL、启动 agent
无关键位/趋势信息 Flask 未启动或令牌错误 启动 app.py;核对 HUB_BRIDGE_TOKEN
下单返回 401 令牌不一致 四实例与中控设相同 HUB_BRIDGE_TOKEN
全平 401 子代理 CONTROL_TOKEN 与中控不一致 中控用 X-Control-Token 转发,需与 agent 一致
OKX 始终灰色 HUB_DISABLED_IDS=1 清空该环境变量并在设置页启用
趋势预览成功但执行失败 预览过期 重新「生成预览」再执行
关键位 Tab 灰色 该户 capabilities 无 key 正常;Gate 趋势户无关键位
局域网无法打开中控 防火墙 / HUB_TRUST_LAN=0 放行端口或恢复默认信任私网

手动探测实例桥接:

$tok = "你的令牌"
Invoke-WebRequest -Uri "http://127.0.0.1:5001/api/hub/ping" -Headers @{"X-Hub-Token"=$tok}

10. 与旧版 README 的差异

早期中控 仅监控 + 全平,使用环境变量 HUB_AGENTS 列表。当前版本改为:

  • hub_settings.json(或内置默认)管理四所 URL 与能力;
  • 三页 UI:监控 / 下单 / 设置;
  • 通过 hub_bridge 调用实例下单 API。

子代理 agent.py 仍负责持仓与全平;HUB_AGENTS 环境变量在新版 hub 中 不再使用(以设置文件为准)。

PM2 守护(推荐 Linux

cd manual_trading_hub
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
pm2 start ecosystem.config.cjs    # 一次启动 4 个 agent + manual-trading-hub
pm2 save && pm2 startup

快捷:bash scripts/pm2_hub.sh start|restart|logs(同样 hub+agent 一起)。

更细的安装顺序、反代、验收见 《部署文档.md》screen / systemd 见 scripts/


11. 日常推荐流程

  1. 启动四所 agent + FlaskOKX 按需)。
  2. 启动 hub.py,打开监控区确认持仓与关键位门控正常。
  3. 在下单区选账户 → 人工单 / 关键位 / 趋势(按能力)。
  4. 复盘、导出记录 → 点击监控卡片「复盘」进入对应实例。
  5. 异常行情 → 单户全平或全局紧急全平。

如有新交易所,在 系统设置 添加一行并勾选能力,无需修改 hub.py 源码(需该所有 Flask 注册 hub_bridge 且 agent 已部署)。