7.3 KiB
v4.5.48 (2026-08-07) 5 个新硬规则 — 用户明确报错要求
背景
用户在 8/7 这一天密集发火,5 次指出同一流程反复出问题:
"刚才的做多的能开仓了吗"—— 推了性价比低还下"还有一点,刚才下单的有提示性价比低的,还是下了,这种不该下""这个是多余的消息吧"—— 无持仓平仓信号还推"你算不出来就把字段删了吧"(前一天,本质同) +"刚才的BTC空单信号再处理一次""这种报错你要主动记录的,不然跟那个定时任务一样,我根本不知道有没有成功""那我根本不知道有没有成功"—— 错误不主动记"信号源不对"—— trader 标了 "X聚合社区" 但实际是 "未知"
5 个新硬规则(每条都对应"用户原话" + 修复路径)
1. 性价比低不自动下 (v4.5.48 P1)
用户原话: "刚才下单的有提示性价比低的,还是下了,这种不该下"
旧行为 process_signal.py:
auto_execute = rec.get('contracts', 0) > 0 # 有可开张数 = 自动执行
→ 性价比低(rating_text='性价比低')也照样下。
新行为 (2026-08-07):
cc_check = rec.get('cost_check', {})
rating_text_check = cc_check.get('rating_text', '')
is_low_rating = '性价比低' in rating_text_check
auto_execute = contracts > 0 and not is_low_rating # 性价比低**不**自动下
为什么: 性价比低 = 期望收益 < 手续费 = 净亏,自动下是亏钱。用户原话"这种不该下"。
注意: 不下 ≠ 不推。仍推 QQ 告知"性价比低,跳过"。
2. D 类信号"无持仓可平"静默 (v4.5.48 P2)
用户原话: "这个是多余的消息吧"
旧行为 process_signal.py format_close_message:
elif action == 'none':
return f"""ℹ️ {symbol} {side_cn} 平仓信号 | {trader}
无持仓可平"""
→ 推 QQ,但实际没平,纯冗余。
新行为 (2026-08-07):
if signal_type == 'close':
close_result = close_position_raw(symbol_usdt, signal_side_en)
action = close_result['action']
if action == 'none':
# 静默: 仍记录去重 + 释放锁 + 不推 QQ
record_signal(...)
dedup_conn.close()
release_lock(symbol_usdt, trader, auto=True)
return f"⏭️ 平仓信号无持仓静默 | {symbol_usdt} {signal_side_en}"
# 否则正常推
为什么: 用户之前多次说"只要有错就推,正常就静默" — close=none 不算错,也不算事件。主动记日志但 QQ 静默。
3. trader default 改 "未知" (v4.5.48 P3)
用户原话: "信号源不对,之前修复了一版,是脚本都没了吗?"
诊断: process_signal.py parse_signal 第 87 行:
# 旧
fields['trader'] = 'X聚合社区' # 默认值
问题: 当 raw_text 里没 trader 标记时,被标成 "X聚合社区"(误导)。
新行为 (2026-08-07):
# 2026-08-07: 不要硬编码 'X聚合社区', 标 '未知'
fields['trader'] = '未知'
为什么: 之前修复 v4.5.36 时把 "X聚合社区"写死当默认值,但很多信号 trader 标记缺失,这条会被错误归类成"X聚合社区"。
trader 解析 3 层 fallback:
【交易员】XXX👉 跟单就选 X- 第一个非字段【xx】(币种/方向/杠杆/仓位等跳过)
- 全失败 → "未知"
4. 订单错误主动记录 (v4.5.48 P4)
用户原话: "这种报错你要主动记录的,不然跟那个定时任务一样,我根本不知道有没有成功"
背景: 之前 okx_position_advisor.py execute_order() 失败只 results['steps'].append({status: error, msg: ...}) —— 只在内存,不写日志。Cron 失败不主动告警。
新行为 (2026-08-07):
# 0. 写错误日志的辅助函数
import json as _json
from datetime import datetime as _dt
_ERR_LOG = os.path.expanduser('~/.hermes/trading/order_errors.log')
def _log_error(stage, err_msg, extra=None):
"""主动记录订单错误到独立文件 (用户要求 2026-08-06)"""
try:
log_entry = {
'ts': _dt.now().isoformat(),
'stage': stage, # set_leverage / place_order / sl_algo
'symbol': symbol, 'inst_id': inst_id, 'side': side,
'contracts': contracts, 'leverage': leverage,
'error': str(err_msg)[:500],
'extra': extra or {},
}
with open(_ERR_LOG, 'a') as f:
f.write(_json.dumps(log_entry, ensure_ascii=False) + '\n')
except Exception:
pass # 写日志不能 fail 主流程
覆盖 4 个 stage:
set_leverage失败place_order失败sl_algo没返回 algoIdsl_algoexception
配套 cron 监控 order-errors-monitor.sh:
# 每小时(5 分)扫 ~/.hermes/trading/order_errors.log
# 有新错误 → 推 QQ
# 无错 → silent (cron deliver: origin)
两条 cron 都创建成功:
order-errors-monitor(job_id: 81bd534cebfc) — 每小时 5 分cron-self-check(job_id: 09ca1313822c) — 每小时 0 分
5. cron 失败不主动监控 (v4.5.48 P5)
用户原话: "修好了?测试一下" + "你看,现在这个定时任务跑失败了,你也不主动检查"
背景: 之前 lottery-hot-data cron 跑失败 30+ 小时,agent 完全没发现,直到用户看到推送告诉我。
新行为 (2026-08-07):
cron-self-check.sh— 每小时跑,拉hermes cron list拿所有 cron script,缺失从~/.hermes/自动找修复,缺失 file 推 QQorder-errors-monitor.sh— order 错误监控cron-self-check默认 silent,有错才推
Cron 配置:
cron-self-check(09ca1313822c) —schedule: 0 * * * *,deliver: local(silent)order-errors-monitor(81bd534cebfc) —schedule: 5 * * * *,deliver: origin
自我总结:8/7 用户 7 次报错 全都是"主动 vs 静默"问题
| 用户原话 | 修复 |
|---|---|
| "刚才的做多的能开仓了吗" | 推 OK + advisor 给 |
| "有提示性价比低的,还是下了,这种不该下" | auto_execute 跳过低 rating |
| "这个是多余的消息吧" | close=none 静默 |
| "这种报错你要主动记录的" | _log_error → order_errors.log |
| "我根本不知道有没有成功" | order-errors-monitor cron |
| "之前修复了一版,是脚本都没了吗" | trader default "X聚合社区" → "未知" |
| "修好了?测试一下" | cron-self-check + 静默模式 |
核心洞察: 8/7 用户的报错 = "主动 vs 静默"控制不对:
- 错的 → 主动推 + 主动记
- 正常的 → 静默
- 状态询问 → 主动给[实测数据]
关联
v4.5.45-lock-status-push-and-auto-unlock.md— 锁状态推送(8/6)v4.5.43-close-pnl-delete-display.md— 平仓 PnL 字段(8/5)v4.5.42-insufficient-funds-explicit-notify.md— 余额不足(8/5)forwarder-rule-enable-killer.md— forwarder silent killer(8/6)agent-workflow-feedback-rules.md— 用户工作流纠错 master 文档
部署状态
- auto_execute 跳过低 rating (process_signal.py 已改)
- close=none 静默 (process_signal.py 已改)
- trader default "未知" (process_signal.py 已改)
- _log_error → order_errors.log (okx_position_advisor.py 已改)
- order-errors-monitor cron (job_id: 81bd534cebfc)
- cron-self-check cron (job_id: 09ca1313822c)
- cron-self-check 改 silent (deliver: local)