v2026-07-21: 实战教训汇总 (push 11 文件)
新增 8 reference: - dividend-stability-score: A 股 5 维评分 (派息年数/CAGR/波动/最近/连续) → 0-100 分 + 5 星 - dividend-yield-rate-sort: 按股息率% 倒序 (用户偏好 2026-07-13) - longport-http-module: longport_http.py 公共模块 (替代 SDK WSS) - leverage-pass-through-bug: process_signal.py 丢失 leverage 字段 (5x 实际 10x) - follow-trading-iron-laws: 跟单铁律 (用户原话 5+ 次 2026-07-21) - forced-skill-entry-okx-trade: okx_trade.sh 强制入口 (替代 ccxt 裸调) - mihomo-clash-node-supplier-dns: Clash 节点供应商 DNS 失败处理 - mihomo-ssl-reconnect-pattern: mihomo 反复 SSL/Timeout 模式 - v4.5.44-mu-add-to-75pct-cap: MU 加仓 75% 单币种 cap 标准流程 改 2 SKILL.md: - dividend-investing: 加 5 维评分 + 长桥 http 模块 - longbridge-cli: 标注 '不要写 openapi.QuoteContext' + 迁移说明
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# OKX 跟单铁律 (v4.5.45, 2026-07-21 用户原话 5+ 次纠错)
|
||||
|
||||
## 上下文
|
||||
|
||||
2026-07-21 用户原话: **"按信号跟单为什么能跑出这么多问题?"**
|
||||
|
||||
**踩的坑**:
|
||||
1. ETH 1.24 张 long @ $1900(错误标的,leverage 5→10, 报告 $53 实际 $26.92)
|
||||
2. BTC 0.014 张(0.014 是乱算,min_sz 凑整后 0.01)
|
||||
3. 反问"3 次 yes/no/几张"
|
||||
4. 报 advisor 推荐值当事实,不 fetch_positions verify
|
||||
5. mihomo 反复 SSL/timeout
|
||||
|
||||
**根因**: agent 跳过 skill 路径,直接调 ccxt,每个动作自己重写代码。
|
||||
|
||||
---
|
||||
|
||||
## 🚨 5 条铁律 (硬约束,任何 OKX 跟单必须遵守)
|
||||
|
||||
### 铁律 1: 跟单不许反问
|
||||
- **信号来了立刻 advisor → 下单**,不讨论
|
||||
- 禁问: yes/no/几张/方向对不对/是否执行
|
||||
- 用户说"按信号来"=立即执行
|
||||
- (累计 4 次用户指出 2026-07-17 违反, 2026-07-21 又一次)
|
||||
|
||||
### 铁律 2: 强制走 skill 入口,禁直接 ccxt
|
||||
- 所有 OKX 下单/平仓 → `okx_trade.sh open/close/status`
|
||||
- 禁 agent 自己写 ccxt 调用
|
||||
- advisor 路径:算 size + 下单 + 立即 verify(autoseat)
|
||||
- (2026-07-21 错单根因)
|
||||
|
||||
### 铁律 3: 下单后立即 fetch_positions verify
|
||||
- execute 完成后 1-3 秒,raw REST 查 `/api/v5/account/positions`
|
||||
- 验证 3 件事: actual_leverage == requested, actual_margin == expected, actual_side == expected
|
||||
- 任何不对 → 立即手动 raw REST 平 + 重开 (template 见 references/leverage-pass-through-bug.md)
|
||||
- **advisor 推荐值 ≠ 实际成交值**
|
||||
|
||||
### 铁律 4: 任何回复前 5 秒内,实时查
|
||||
- 涉及持仓/余额/价格/未实现盈亏的回复必须以 `[实测数据]` 前缀起头
|
||||
- 禁说: "刚才查的" / "之前" / "仍然" / "应该"
|
||||
- 用 `scripts/check_account.py` (positions + balance + 关键 ticker 三连查)
|
||||
|
||||
### 铁律 5: 错单处理流程 (出问题 1 分钟内)
|
||||
- 立即手动 raw REST 平错单(`reduceOnly: True` + `tdMode: 'cross'`)
|
||||
- 立刻报用户: 错单 ID + 原因 + 已平 + USDT 损失
|
||||
- **不"等行情走到哪"**(用户原话)—— 1 分钟内必须清,不在挂的错单
|
||||
- 然后才查根因 / 改代码
|
||||
|
||||
---
|
||||
|
||||
## 🔗 关联
|
||||
|
||||
- `references/forced-skill-entry-okx-trade-2026-07-21.md` — okx_trade.sh 脚本
|
||||
- `references/leverage-pass-through-bug.md` — leverage 5→10 bug 完整复现 + 修源码
|
||||
- `references/mihomo-clash-node-supplier-dns-2026-07-21.md` — mihomo timeout 处理
|
||||
- `references/mihomo-ssl-reconnect-pattern.md` — SSL 反复连接重置
|
||||
|
||||
## 与铁律 14/15 (MEMORY) 关系
|
||||
|
||||
MEMORY 存指针,SKILL 存规则。MEMORY 铁律 14/15 长期有效,但本章节更详细,**下次 session 加载 okx-auto-position skill 时直接看到**,不需要先问 MEMORY。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 强制 skill 入口: okx_trade.sh (2026-07-21 实战)
|
||||
|
||||
## 问题
|
||||
|
||||
按信号跟单,反复踩的坑(用户原话 2026-07-21):
|
||||
> "按信号跟单为什么能跑出这么多问题?"
|
||||
|
||||
**根因**: agent 跳过 skill 路径,**直接调 ccxt 下单**。每次自己重写代码 → 拼凑错单(leverage 5→10, min_sz 凑整错, 0.014→0.01)。
|
||||
|
||||
**正确做法**: **所有 OKX 下单/平仓强制走 skill 内置路径**,不绕过 advisor.execute 流程。
|
||||
|
||||
## 强制入口脚本
|
||||
|
||||
**位置**: `~/.hermes/scripts/okx_trade.sh`
|
||||
|
||||
```bash
|
||||
# 用法
|
||||
okx_trade.sh open <symbol> <side> <leverage> # 开仓(自动算 size)
|
||||
okx_trade.sh close <symbol> # 平仓
|
||||
okx_trade.sh close-all # 全部平仓
|
||||
okx_trade.sh status # 看持仓
|
||||
```
|
||||
|
||||
**open 内部流程**:
|
||||
1. 跑 `okx_position_advisor.py --symbol X --side Y --leverage Z --json` 算 size + SL + TP
|
||||
2. 跑 `okx_position_advisor.py ... --execute --rec-json ...` 下单(自动设 leverage, 75% cap)
|
||||
3. **立刻** `fetch_positions()` 验证(lever / margin / side)
|
||||
|
||||
**为什么这个设计能避免错单**:
|
||||
- ✅ advisor 算的 size 是 min_sz 凑整过的(BTC 1.43 张,不是 0.014)
|
||||
- ✅ advisor 内部用 setLeverage 私有 API 强制设杠杆(虽然 v4.5.44 仍 10x bug,但走 advisor 路径)
|
||||
- ✅ execute 后立即 verify → 不依赖 advisor 的 "成功" 返回
|
||||
|
||||
## 实战教训 (2026-07-21)
|
||||
|
||||
### 错单 1: ETH 1.24 张 long
|
||||
- agent 看到 advisor 报 5x + 1.0 张 → **手动调 ccxt 下 1.24 张 ETH**
|
||||
- 实际: leverage 10x (process_signal.py bug), ETH 不是 BTC,1.24 张不是 1.0 张
|
||||
- **应该用** `okx_trade.sh open BTC long 5`(advisor 路径)
|
||||
|
||||
### 错单 2: BTC 0.014 张 long
|
||||
- agent 看到 BTC 多 5x signal, **手动 ccxt 下 0.014 张**(乱算的)
|
||||
- 实际: 0.014 张小于 min_sz (0.01), 只成交 0.01 张
|
||||
- **应该用** `okx_trade.sh open BTC long 5` → advisor 算 1.43 张
|
||||
|
||||
## 部署状态
|
||||
|
||||
- ✅ `okx_trade.sh` 已写
|
||||
- ❌ **没自动化** — agent 默认走 ccxt,需要主动调用
|
||||
- ❌ mihomo 反复 timeout 时 okx_trade.sh 也失败
|
||||
|
||||
## 建议: 强制 alias
|
||||
|
||||
把 `okx_trade.sh` 设成 OKX 下单唯一入口(把 ccxt 调 OKX 私有 API 限制到只能 advisor 用):
|
||||
|
||||
```bash
|
||||
# ~/.bashrc 加 alias
|
||||
alias okx_open='bash ~/.hermes/scripts/okx_trade.sh open'
|
||||
alias okx_close='bash ~/.hermes/scripts/okx_trade.sh close'
|
||||
```
|
||||
|
||||
但**真正治本**是 process_signal.py 内部 hardcode 强制走 advisor 路径,不加 fallback。
|
||||
@@ -28,6 +28,14 @@
|
||||
- 强平价: 1136.92 (信号 2x 应该 ~940+(940/2)*0.01 = 944.70,实际 10x 推到 1137)
|
||||
- 浮亏: -$0.28
|
||||
|
||||
### Case 4: 熬鹰 BTC long 20x (2026-07-21)
|
||||
- 信号: 49.958 BTC long @20x @65547.73
|
||||
- 实际 execute: 0.01 张 BTC long @10x @65407.6 (用 OKX 私有 API setLeverage 强制设 20x, 仍被覆盖成 10x)
|
||||
- 浮亏: -0.01 USDT (立刻平了)
|
||||
- **教训**: setLeverage 私有 API 不生效, 下单时仍用 10x (process_signal 内部写死)
|
||||
- **新加 bug**: OKX 最小下单单位 min_sz 触发 → 我传 0.014 张, 实际成交 0.01 张 (0.01 是 min_sz)
|
||||
- 双重 bug: leverage 5→10 + min_sz 截断。**两个都没在 process_signal 修过**
|
||||
|
||||
## 规律
|
||||
|
||||
- 信号 5x → 实际 10x (2 倍)
|
||||
@@ -115,4 +123,24 @@ cmd = ['python3', 'okx_position_advisor.py', '--symbol', symbol,
|
||||
## 相关 SKILL.md 章节
|
||||
|
||||
- "v4.5.2 process_signal 杠杆丢失 bug" - 主入口
|
||||
- "v4.5.0 平仓信号自动跟单" - 检测时需查 lever 字段
|
||||
- "v4.5.0 平仓信号自动跟单" - 检测时需查 lever 字段
|
||||
## Agent 行为铁律 (2026-07-17 用户原话)
|
||||
|
||||
### 1. 跟单不许反问
|
||||
- **信号来了立刻 advisor → 下单**
|
||||
- 不问 yes/no/几张
|
||||
- 用户说"按信号来"=立即执行,不讨论
|
||||
- (累计 3 次用户指出 2026-07-17 违反此规则)
|
||||
|
||||
### 2. 下单后立即验证 (不要把 advisor 推荐当事实)
|
||||
- 下单后**立刻** `fetch_positions()` 查**真实**:lever, margin, notional, entryPrice
|
||||
- advisor 推荐值 ≠ 实际成交值
|
||||
- 实战教训(2026-07-17): 用户说"5x 杠杆", advisor 算 5x, 实际下单 10x (process_signal.py bug)
|
||||
- 实际占 $26.92, 报告时错说 $53,**用户立即指出"又是猜的"**
|
||||
- 教训:**下单后必须 fetch_positions 验证 3 件事**
|
||||
- actual_leverage == requested
|
||||
- actual_margin == expected
|
||||
- actual_side == expected
|
||||
|
||||
## references index 更新
|
||||
此 reference 是 OKX advisor 杠杆 + 下单事实校验的权威来源。任何新错误 / 修复补这里, MEMORY 只存指针。
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
# Clash 节点供应商 DNS 解析失败处理 (2026-07-21 实测)
|
||||
|
||||
**问题场景**: mihomo 反复 timeout,但订阅没动,所有节点都连不上。
|
||||
|
||||
**根因 (实测)**: 节点供应商的多个域名 DNS 解析**返回乱码**:
|
||||
|
||||
```
|
||||
ns1.accor.co.im → IP: sdaf.rezg.6tie.a.rros.cc. # 不是 IP
|
||||
ns1.mercure.zone → IP: sdaf.rezg.6tie.a.rros.cc. # 同上,同一 IP
|
||||
ns1.accor.zone → IP: hhaq.wwcm.bukx.a.vvps.xyz. # 也不是 IP
|
||||
01-synexvm-hk-std.node-ddns.top → IP: 42.200.173.113 # 真 IP, 但 TCP 也 timeout
|
||||
```
|
||||
|
||||
**两个原因叠加**:
|
||||
1. **节点供应商的 DDNS 域名过期 / 被 DNS 污染** → DNS 返乱码
|
||||
2. **mihomo 选 `select` 类型 selector** → 不会自动跳死的节点,会反复 retry timeout
|
||||
|
||||
**诊断步骤 (5 秒内)**:
|
||||
|
||||
```bash
|
||||
# 1. 看 mihomo 还在不在
|
||||
pgrep mihomo
|
||||
|
||||
# 2. 看端口监听
|
||||
ss -tlnp | grep -E ":7890|:9090"
|
||||
|
||||
# 3. 看 mihomo 日志最后几行
|
||||
tail -10 /tmp/mihomo.log
|
||||
|
||||
# 4. 测各节点 DNS + TCP 连通
|
||||
for dom in ns1.accor.co.im ns1.mercure.zone ns1.accor.zone 01-synexvm-hk-std.node-ddns.top; do
|
||||
ip=$(timeout 5 dig +short $dom 2>&1 | head -1)
|
||||
echo "$dom → IP: $ip"
|
||||
# 正常 IP 应该是 x.x.x.x
|
||||
done
|
||||
|
||||
# 5. 测 TCP 连通 (只对有真 IP 的)
|
||||
timeout 3 bash -c "echo > /dev/tcp/42.200.173.113/443" 2>&1 && echo "OK" || echo "timeout"
|
||||
|
||||
# 6. 确认节点供应商死,不是本地网络问题
|
||||
# → 手工跑一次订阅更新 (重新拉节点列表)
|
||||
timeout 30 bash ~/clash/update-sub.sh
|
||||
```
|
||||
|
||||
**修复方案**:
|
||||
|
||||
### 1. 短期(等供应商修)
|
||||
- **不要重启 mihomo**(浪费 CPU, 也救不了)
|
||||
- 换 selector type 从 `select` → `fallback`(自动跳死的)
|
||||
- 手动重启 mihomo 看新订阅是否还包含相同节点
|
||||
|
||||
### 2. 改 BiXin Network selector 为 fallback(实测有效)
|
||||
|
||||
`~/clash/config/config.yaml`:
|
||||
```yaml
|
||||
# 改 select → fallback, 排序好的节点放前面
|
||||
proxy-groups:
|
||||
- { name: BiXin Network, type: fallback, url: 'http://cp.cloudflare.com/generate_204', interval: 300, proxies: ['🇭🇰 [Lv2] 香港 02', '🇭🇰 [Lv1] 香港 02', '🇭🇰 [Lv2] 香港 01', '🇭🇰 [Lv2] 香港 03', '🇨🇳 [Lv2] 台湾 01', '🇨🇳 [Lv2] 台湾 02', '🇨🇳 [Lv2] 台湾 03', '🇺🇸 [Lv2] 美国 01', '🇺🇸 [Lv2] 美国 02', '🇺🇸 [Lv2] 美国 03', 'Lv2 节点已经全部过时', 请前往官网下载最新版软件, 官网www.bixiny.org] }
|
||||
```
|
||||
|
||||
**关键参数**:
|
||||
- `type: fallback`(不是 `select` 也不是 `url-test`)—— fallback 按顺序试,死节点自动跳到下一个
|
||||
- `interval: 300`(5 分钟重测,比 url-test 24h 短)—— 死的能被快速跳过
|
||||
- 排序: 已知最稳的节点放前(可先用 curl 测一遍每个)
|
||||
|
||||
### 3. 长期
|
||||
- **换订阅源**: bxy.re 节点供应商问题多,换其他
|
||||
- **自建节点**: 买个 VPS 跑 SS/VLESS/WireGuard(mihomo 内置支持,见 `references/wireguard-outbound-setup.md` 如果有)
|
||||
- **加多源备份**: config.yaml 加 `proxy-providers:` 多源,某个源挂了自动切
|
||||
|
||||
**实战教训 (2026-07-21)**:
|
||||
- mihomo timeout 第一次出现时,**不应该 restart**,应该先 `dig +short` 查 DNS
|
||||
- `select` 类型 selector 是反模式,永远用 `fallback` 或 `url-test` (短 interval)
|
||||
- 节点供应商的 4 个域名中 3 个 DNS 失败 — **这是节点供应商的"硬挂"标志**, 换订阅源才是治本
|
||||
|
||||
**对 cron 影响**:
|
||||
- `bdf27f3d76f8` Clash 订阅自动更新 (每 2h) — 拉得到,但节点列表没变(订阅源死)
|
||||
- 不会自动恢复,需要手动换订阅源
|
||||
@@ -0,0 +1,124 @@
|
||||
# mihomo 反复 SSL/Timeout 模式 (2026-07-21 实测)
|
||||
|
||||
## 现象
|
||||
|
||||
ccxt 调 OKX API 时频繁遇到:
|
||||
- `urllib3.exceptions.SSLError: [SSL: UNEXPECTED_EOF_WHILE_READING]`
|
||||
- `ccxt.base.errors.NetworkError: okx GET https://www.okx.com/api/v5/asset/currencies`
|
||||
- `RequestTimeout: HTTPSConnectionPool(host='www.okx.com', port=443): Read timed out`
|
||||
|
||||
## 根因 (按概率)
|
||||
|
||||
### 1. mihomo 选了"挂掉的"出口节点 (最常见)
|
||||
|
||||
**诊断**:
|
||||
```bash
|
||||
# 看 mihomo 日志找超时节点
|
||||
tail -50 ~/.hermes/cron/output/.../mihomo.log 2>/dev/null
|
||||
# 或实时:
|
||||
tail -f /tmp/mihomo.log | grep "dial\|timeout"
|
||||
```
|
||||
|
||||
**症状**:
|
||||
```
|
||||
[TCP] dial BiXin Network (match Match/) ... ns1.accor.zone:23100 connect error: connect failed: dial tcp 112.119.223.235:23100: i/o timeout
|
||||
```
|
||||
|
||||
**修复**:
|
||||
- 节点真挂了 → 等节点恢复,或换 BiXin Network selector 顺序
|
||||
- 改 selector 从 `type: select` 为 `type: fallback` (自动跳过死的):
|
||||
```yaml
|
||||
- { name: BiXin Network, type: fallback, url: 'http://cp.cloudflare.com/generate_204', interval: 300, proxies: [活的节点, 死的节点] }
|
||||
```
|
||||
|
||||
### 2. 同一节点 TCP 连接被 mihomo 复用,服务器端 RST
|
||||
|
||||
**症状**:
|
||||
- `Connection reset by peer` (Errno 104)
|
||||
- 同一进程跑 5-10 次 OKX API 后开始 EOF
|
||||
|
||||
**修复**:
|
||||
- 短连: process_signal 每次新 process
|
||||
- 长连: 不可行(进程池问题)
|
||||
|
||||
### 3. mihomo 版本或 config 异常
|
||||
|
||||
**症状**:
|
||||
- 重启 mihomo 后短暂能用,再 5-10 分钟又坏
|
||||
- 节点 timeout 时间越来越长
|
||||
|
||||
**修复**:
|
||||
- 升级 mihomo (当前 v1.19.8, 2025-05-13)
|
||||
- 换 sing-box (国内 VPS 更稳)
|
||||
|
||||
## 实战: 排查 + 临时恢复
|
||||
|
||||
### Step 1: 看 mihomo 是否活着
|
||||
```bash
|
||||
pgrep mihomo
|
||||
# 期望: 输出 1-2 个 PID
|
||||
```
|
||||
|
||||
### Step 2: 看节点 timeout 日志
|
||||
```bash
|
||||
tail -30 /tmp/mihomo.log | grep -E "dial|error|timeout"
|
||||
```
|
||||
|
||||
### Step 3: 临时恢复
|
||||
```bash
|
||||
pkill mihomo
|
||||
sleep 2
|
||||
nohup bash ~/clash/start.sh > /tmp/mihomo.log 2>&1 &
|
||||
sleep 5
|
||||
pgrep mihomo
|
||||
```
|
||||
|
||||
### Step 4: 验证 OKX 通了
|
||||
```bash
|
||||
curl -x http://127.0.0.1:7890 --max-time 8 -s https://www.okx.com/api/v5/public/time
|
||||
# 期望: {"code":"0","data":...}
|
||||
```
|
||||
|
||||
## 永久修复建议
|
||||
|
||||
1. **process_signal.py 加 mihomo 健康检查 + 自动重启**
|
||||
- 每次 advisor.execute 前 ping OKX
|
||||
- 失败 2 次 → 自动 kill mihomo + restart
|
||||
- 重试 advisor.execute 1 次
|
||||
|
||||
2. **proxychains 升级到 4.17+**
|
||||
- 当前 4.14 已知有 TLS 重协商问题
|
||||
- 4.17+ 修复 + SOCKS5 keepalive 改进
|
||||
|
||||
3. **BiXin Network 改 fallback + 加健康检查 cron**
|
||||
- 每 5 分钟 cron ping 一次所有节点
|
||||
- 死节点自动踢出 selector
|
||||
|
||||
4. **关键路径双 proxy**
|
||||
- mihomo 7890 (HTTP)
|
||||
- clash 7891 (SOCKS5)
|
||||
- 任一不通立刻切另一条
|
||||
|
||||
## 已知 FAIL 模式 (写进 cron)
|
||||
|
||||
| 错误 | 触发 | 修复 |
|
||||
|------|------|------|
|
||||
| SSL EOF | 节点死/拥塞 | 切 fallback |
|
||||
| Connection reset | 节点 RST 复用连接 | 换节点 |
|
||||
| Request timeout | 节点慢/丢包 | 换节点 |
|
||||
| 5xx OKX 错误 | OKX 服务问题 | 立即重试 1 次 |
|
||||
| 401 auth | API key 过期 | 立即停(需人工) |
|
||||
| 429 rate limit | 频率高 | 退避 30s 重试 |
|
||||
|
||||
## agent 实战原则
|
||||
|
||||
**当遇到 SSL/timeout 错误**:
|
||||
1. 立即尝试 1 次重试(同 selector)
|
||||
2. 重试失败 → `pkill mihomo && nohup start.sh` 30 秒内恢复
|
||||
3. 仍失败 → 提示用户"网络问题,需手动处理",**不假装成功**
|
||||
4. **绝不**把 advisor 计算值当成交回报 (铁律 15)
|
||||
|
||||
**对用户**:
|
||||
- "网络 SSL 错误,正在重启 mihomo..." 简短告知
|
||||
- 重启成功 → 立即重试原任务
|
||||
- 重启 2 次失败 → 停止并报告,不无限循环
|
||||
@@ -0,0 +1,110 @@
|
||||
# MU 加仓到 75% 单币种 cap 的标准流程 (2026-07-21)
|
||||
|
||||
**Captured**: 2026-07-21
|
||||
**Skill version**: okx-auto-position v4.5.44
|
||||
**Severity**: High (跟单质量)
|
||||
|
||||
## 背景
|
||||
|
||||
2026-07-21 用户说:**"加仓了, 保证金要加到75%"**。 我之前流程是 advisor 推荐 0.31 张(MU 加仓 1 次)→ 用户没说要 75% → 后来又加了一次 0.30 张。这违反了铁律 14(不许反问 + 信号来了立刻下)的精神 —— **用户给"信号/指令"就立刻执行, 不要讨价还价**。
|
||||
|
||||
## 正确流程(用户原话触发时)
|
||||
|
||||
### 1. 立即算 75% cap(不反问)
|
||||
```python
|
||||
# 真实数据(从 fetch_balance + fetch_positions 拿, 不从 advisor 算)
|
||||
acct_total = usdt_total # 70.40 USDT
|
||||
cap = acct_total * 0.75 # 52.80 USDT
|
||||
already_used = mu_margin # 26.82 USDT (已有 0.31 张 @ 10x)
|
||||
can_add = cap - already_used # 25.98 USDT 还能加
|
||||
price = mark_price # 865.14
|
||||
can_add_contracts = (can_add * leverage) / price # 0.30 张 (10x)
|
||||
```
|
||||
|
||||
### 2. 立刻下单(不反问)
|
||||
```python
|
||||
order = ex.create_order(
|
||||
symbol='MU/USDT:USDT',
|
||||
type='market',
|
||||
side='buy',
|
||||
amount=0.30, # 算好的 0.30 张
|
||||
params={'tdMode': 'cross'} # 不加 reduceOnly (加仓)
|
||||
)
|
||||
```
|
||||
|
||||
### 3. 立即 fetch_positions 验证(铁律 15)
|
||||
```python
|
||||
# 下单后 1-3 秒
|
||||
for p in ex.fetch_positions():
|
||||
if 'MU' in p['symbol'] and abs(p['contracts']) > 0.01:
|
||||
actual_qty = abs(p['contracts']) # 应该是 0.61 张 (0.31+0.30)
|
||||
actual_margin = p['initialMargin'] # 应该是 52.92
|
||||
actual_leverage = p['leverage'] # 验证不是 10x 而非用户要的 5x
|
||||
actual_pct = (actual_margin / total) * 100 # 应该是 71.5% (75% cap)
|
||||
```
|
||||
|
||||
### 4. 推 QQ 报告真实值
|
||||
```
|
||||
✅ MU 加仓完成
|
||||
📊 MU long 0.61 张 @ $864.79 (加 0.30 张 @ $865.14)
|
||||
📌 leverage: 10x (信号说 5x 实际 10x) ← 真实值, 不是 advisor 推荐
|
||||
📌 margin: $52.92 / 占总 71.5% / 75% cap
|
||||
📍 浮盈: +$1.68
|
||||
━━━
|
||||
USDT free: $21.12
|
||||
```
|
||||
|
||||
## 关键教训(从这次会话提取)
|
||||
|
||||
### 教训 1: 用户说"加到 75%" 立即执行
|
||||
- **不要**问"加到 75% 好不好"
|
||||
- **不要**只加 1 次(0.31 张占 37%)然后等用户批准
|
||||
- **直接**算 75% cap 缺多少 → 下单
|
||||
- 用户原话 = 立即执行
|
||||
|
||||
### 教训 2: leverage 信号 5x 实际 10x 还是 bug
|
||||
- 用户说"5x 杠杆"→ advisor 显示 5x → 实际下单 10x
|
||||
- 参考 `references/leverage-pass-through-bug.md` v4.5.2 (还没修)
|
||||
- **现状**: 改 source code 没排期, agent 只查"实际 leverage" + 在推 QQ 里**显式报告**"信号 5x 实际 10x" (让用户知道)
|
||||
|
||||
### 教训 3: 报告 margin 用真实,不用 advisor
|
||||
- advisor 算 53 美元 (75% cap - 已用) → 实际 26.92
|
||||
- advisor 用 `cap - used`, 实际 `initialMargin` 是 26.82 (不是 53)
|
||||
- 报错说 53 → 用户说"53 怎么来的? 又是猜的" → 实际 $26.82
|
||||
- **铁律 15 严格执行**: 推 QQ 之前必须 fetch_positions 验真实值
|
||||
|
||||
## 实战时间表(2026-07-21)
|
||||
|
||||
| 时间 | 事件 | 备注 |
|
||||
|------|------|------|
|
||||
| 23:50 | 收到熬鹰 MU 加仓信号 5x 12K USD 名义 | 8 次信号连发,前 7 次被 dedup 跳 |
|
||||
| 23:50 | 算 advisor: 0.31 张 @ 5x | 没核实 leverage, 直接信 5x |
|
||||
| 23:51 | 下单 buy 0.31 张 | 实际 leverage 10x, entry $862.35 |
|
||||
| 23:55 | 推 QQ "0.31 张, 5x, margin $53" | **错**(实际 $26.82) |
|
||||
| 00:05 | 用户问"保证金只占 26 刀, 53 怎么来的? 又是猜的?" | 铁律 15 触发 |
|
||||
| 00:06 | fetch_positions 验: actual margin $26.82, lever 10x | 立即认错 |
|
||||
| 00:15 | 用户说"加仓了,保证金要加到75%" | 立即算 75% cap = 55.02 USDT, 还可加 $28.20 |
|
||||
| 00:16 | 下单 buy 0.30 张, 总 0.61 张 | 验证 total 0.61, margin $52.92 (71.5% cap) |
|
||||
| 00:17 | 推 QQ 真实数据 | leverage 10x + margin $52.92 |
|
||||
|
||||
## 永久修复建议(待排期)
|
||||
|
||||
```python
|
||||
# process_signal.py L-下单前-加75%-cap-check
|
||||
def calculate_75pct_cap_qty(symbol, side, leverage, total_capital, existing_margin, price, ct_val, lot_sz):
|
||||
"""用户说"加到 75%" 或 "加仓" 时调用, 算出该加多少"""
|
||||
target_margin = total_capital * 0.75
|
||||
can_add_margin = max(0, target_margin - existing_margin)
|
||||
contracts = (can_add_margin * leverage) / (price * ct_val)
|
||||
contracts = int(contracts / lot_sz) * lot_sz # 取整
|
||||
return contracts
|
||||
```
|
||||
|
||||
## references index
|
||||
|
||||
本 reference 是 **加仓到 75% cap 流程** 的权威来源。任何相关错误补这里:
|
||||
- `references/leverage-pass-through-bug.md` - leverage bug 详细
|
||||
- `references/single-coin-75pct-cap.md` - 75% cap 规则
|
||||
- `references/v4.5.43-min-size-reached-and-mu-avgpx-recalc.md` - MU 加权平均 + 最小单位
|
||||
|
||||
MEMORY.md 只存指针 (铁律 14/15), 不复制本文件内容。
|
||||
Reference in New Issue
Block a user