v4.5.38: 实时数据查询硬规则(回复前必查)+ check_account.py封装

This commit is contained in:
2026-07-17 22:14:19 +08:00
parent 629ac197de
commit 533c342305
55 changed files with 5437 additions and 599 deletions
@@ -0,0 +1,120 @@
---
name: v2.6-trader-and-price-fix
description: "v2.6 修复: trader fallback + 价格格式化 (用户原话: 之前是有消息模板的)"
version: 2.6.0
type: reference
---
# 🔧 OKX Signal Push 修复 (2026-07-13)
## 🐛 问题 1: Trader 字段 = "币种"
**症状**: 推送显示 `信号源: 币种 ? SKHY(价值$?)`
**根因**: `parse_signal` L41 用 `re.search(r'【([^】]+)】', text)` 抓**第一个**方括号 → `【币种】` 被当成 trader。
**修复 (3 层 fallback)**:
```python
def parse_signal(text):
fields = {}
# 1. 优先: 【交易员】标签
m = re.search(r'【交易员】\s*[:]?\s*([^【\n]{1,20})', text)
if m_trader:
fields['trader'] = m_trader.group(1).strip()
else:
# 2. Fallback: 👉 跟单就选 X
m_follow = re.search(r'👉\s*跟单就选\s*(\S+)', text)
if m_follow:
fields['trader'] = m_follow.group(1).strip()
else:
# 3. 第一个【xx】但跳过字段名
FIELD_NAMES = {'币种', '方向', '杠杆', '仓位大小', '仓位价值',
'开仓价', '当前价', '未实现盈亏', '收益额'}
m_first = re.search(r'【([^】]{1,20})】', text)
if m_first and m_first.group(1) not in FIELD_NAMES:
fields['trader'] = m_first.group(1).strip()
else:
fields['trader'] = 'unknown'
return fields
```
**测试 SKHY**:
```
原始: 【币种】: SKHYUSDT|5x 【方向】做空 👉 跟单就选 X聚合社区
修复后: trader = 'X聚合社区' ✅
```
**实战 2026-07-15 二次修正**: 部分信号(如 🚨已平仓提醒 + 收益额格式)**无 trader 标签也无 👉尾缀**,三层 fallback 全 miss → trader='unknown' → 推送 `unknown ? BTC(价值$?)` 用户看不到头。
**v2.6.1 追加 fallback** (默认 X聚合社区,用户 TG 唯一信号源):
```python
if m_first and m_first.group(1) not in FIELD_NAMES:
fields['trader'] = m_first.group(1).strip()
else:
# 实在找不到 → 默认 X聚合社区 (用户 TG 唯一信号源, 比 'unknown' 有用)
fields['trader'] = 'X聚合社区'
```
**测试信号** (无 trader 信息):
```
🚨 已平仓提醒
【币种】: SKHYNIX
【方向】: 做多
【收益额】: +11.53%
→ trader = 'X聚合社区' (不再 'unknown')
```
## 🐛 问题 2: 价格 18 位小数
**症状**: `入场: $161.01076124567473` (OKX 浮点×比率算出 18 位)
**修复**: `_fmt()` helper:
```python
def _fmt(x, n=4):
"""数字 round 到 n 位,字符串保留原样"""
try:
return f"{float(x):.{n}f}"
except (ValueError, TypeError):
return str(x)
# 模板里所有 ${...} 替换:
入场: ${_fmt(entry_price)} | 当前: ${_fmt(current)}
SL: ${_fmt(rec['sl_price'])} 预亏 -{_fmt(sl_pnl)} USDT
```
⚠️ **value 字段** (`价值 $?`) 空时, `_fmt(?)` 抛异常 → catch 后保留原 `?`
## 📋 之前模板参考
```python
msg = f"""⚡ 跟单建议 | {symbol} {side_cn} {emoji} {leverage}x
📊 信号源: {trader}
入场: ${_fmt(entry_price)} | 当前: ${_fmt(current)}
浮盈: {pnl_sign}{pnl:.0f} {pnl_emoji}
📊 仓位变化
{comparison}
{trader_rating}
📐 性价比
• 你的仓位: {contracts}张 (保证金{_fmt(margin)} USDT)
• SL: ${_fmt(sl_price)} → 预亏 -{_fmt(sl_pnl)} USDT
• TP: ${_fmt(tp_price)} → 预盈 +{_fmt(tp_pnl)} USDT
• 盈亏比: {rr}:1 {rating_emoji} {rating_text}"""
```
## 🔧 测试用例
```python
test = """📈 大佬加仓
【币种】: SKHYUSDT|永续|5x
【方向】: 做空 🟥
【仓位】: 528.16 SKHY
【开仓价】: 161.90000
👉 跟单就选 X聚合社区"""
parse_signal(test)
# → {'trader': 'X聚合社区', 'symbol': 'SKHY', 'side': '做空', ...}
```