--- name: crypto-t-monitor description: "OKX 币圈日内做T监控 - 多币种 + 动态 ATR + 网络重试 + 新币自动挑选,推结果到QQ。t-monitor cron 每15分钟跑。v2.6: 加减仓 ≠ 平仓 (用户纠正) + 按比例算法 (信号强度+持仓感知)。v2.5: 新币监控但绝不开仓(只对已持仓币执行做T);cron silent模式用 `deliver: local` 真正静默。" version: 2.6.0 author: Hermes Agent license: MIT platforms: [linux, macos] metadata: hermes: tags: [trading, crypto, okx, t-monitor, position, automatic, backtest, multi-coin, new-coin-scanner] related_skills: [okx-auto-position, okx-crypto, intraday-trading] scripts: - "scripts/t_monitor.py: '币圈做T cron 脚本 (okx t-monitor). 2026-07-24 迁移到 skill 仓库. cron db03f9255ad0 引用此路径 (no_agent=true).'" - okx_t_monitor.py: "核心做T脚本, 多币种 + 动态 ATR + 自动重试 + 新币扫描" - backtest.py: "回测工具, 验证策略在历史 K 线上的表现" requires: - python3 - OKX API 凭证 (in ~/.bashrc) - Clash 代理 (http://127.0.0.1:7890) - push_to_qq.sh --- # Crypto T-Monitor (币圈日内做T) v2.6.0 ## 🆕 v2.6.0 (2026-07-15): 加减仓 ≠ 平仓 + 按比例算法 **用户原话纠正 (关键)**: > "之前你是空单时, 要加仓, 加反了吧" > "平仓就是平仓, 加减都不是平仓" > "能根据信号算出一个比例吗" ### Bug 现状 (v2.6 仍未修复, 记录用) `okx_t_monitor.py` 第 512-526 行: ```python if action == 'buy': reduce_only = pos_qty < 0 # 空仓 buy = 平仓 ❌ ``` **问题**: - 空仓+buy1/buy2 触发 → `reduceOnly=True` 下单 → **平仓** (不是用户要的"减仓回补") - 用户原话: "加减仓都不是平仓" - 加减仓幅度固定 `t_qty`, 不是按比例 ### 修复方向 (v2.7 实施) 详见 `references/signal-strength-and-position-aware-qty.md`: | 持仓 | 触发 buy1/buy2 | 触发 sell1/sell2 | |---|---|---| | **空仓** | **sell 减仓回补** (按比例, 留底仓) | sell 加仓 (按比例) | | **多仓** | buy 加仓 (按比例) | **buy 减仓高抛** (按比例, 留底仓) | **关键算法**: ```python strength = 1 - distance_pct / 0.005 # 信号强度 0-1 qty_pct = base(10-30%) × size_factor # 持仓感知 ``` 详见 reference 文件 + 实战示例。 OKX 币圈日内做T自动监控系统。**核心定位**:**与股票做T(长桥)完全独立**,本 skill 只负责币圈。 ## 🚦 何时使用本 skill **使用场景**: - 用户在 OKX 持有币种(ETH/BTC/SOL/DOGE/XRP)做T - 想在动态 ATR 价位自动低吸/高抛 - 验证策略历史表现(用 backtest) **不要使用**: - 跟单交易员信号 → 用 `okx-auto-position` - 现货/DCA 长持 → 用 `dividend-investing` / `dca-monitor` - 股票做T → 用 `longbridge-t-monitor` ## 🆕 v2.5.0 (2026-07-10): 新币只监控、绝不开仓 + cron silent 真相 **两个潜规则,反复踩坑**: ### 1. 新币扫描器只监控,不会凭空开仓 `new_coin_picks` 进了 `syms_to_monitor`,但 `monitor()` **只在 `pos_qty > 0.01` 时才进 `syms_to_trade` 触发 execute_trade**(v2.5 容错版用 `abs(pos_qty) > 0.01` 防止 OKX 浮点残值误触发)。所以: - ✅ 新币加进池 → 看到价格触及 → 推 `📍 价格触及 buy1=...` 警告 - ❌ 不会自动开多 1.0 张(因为默认 SPECS 给了 `t_qty=1.0`, 但 `pos_qty==0`, 不进 `syms_to_trade`) **这是 by-design**:"看着, 不抄着"。用户原话: "新币最多保留六个, 每次扫描后筛选" —— 不是"自动买新币"。要买新币得显式 `--symbol CAP --side long --leverage 10` 走 `okx-auto-position` advisor 路径。 ### 2. cron `silent` 模式 ≠ 真正静默推送 `no_agent: true` 的 cron job,`last_status: "silent"` 只代表 stdout 字符串是空,**不代表 QQ 不推送**。`deliver: qqbot` 默认会推 stdout 到 QQ(连 print 都推)。 要 QQ 真正静默: - 必须 `deliver: local` (cron `action: update` 时显式设) - 或者让 print 也沉默 (`logger` 不 print) `t-monitor` cron (`db03f9255ad0`) 之前 `deliver: qqbot:B1EF...` 导致每次空推到 QQ。**已改为 `deliver: local`**。 ### 3. OKX `code='0'` 不等于真成交 (2026-07-10 实战) `okx_request('POST', '/api/v5/trade/order')` 返回 `{"code": "0", "ordId": "..."}` ≠ 真成交。 **校验流程**: 下单 → 等 2s → 再调 `fetch_positions()`,对比 `pos_before` vs `pos_after`。如果持仓没变,说明订单实际被拒/失败。 详见 `references/okx-order-verification.md`。 ### 4. 国内 VPS 必须走 Clash (2026-07-10) 成都电信 VPS 直连 OKX `https://www.okx.com/api/v5/public/time` 返回 `No route to host`。 **OKX 脚本也必须带 `--proxy http://127.0.0.1:7890`**,不只是长桥。 详见 `references/vps-proxy-requirement.md`。 ## ✨ v2.3.0 新功能 (2026-07-10): 新币自动挑选池 **问题**: 用户想要 **30 天内新上市的币** 自动监控,但: - 不全要 (太多噪音) - 每次扫描都刷新(非累积) **解决方案** (用户原话: "新币最多保留六个, 每次扫描后筛选"): | 常量 | 值 | 含义 | |------|---|------| | `NEW_COIN_PICKS` | `2` | **每次扫描后筛 X 个** (按 24h vol 排序) | | `NEW_COIN_POOL_MAX` | `6` | **永久保留上限** (超过自动裁最早加入) | | `NEW_COIN_DAYS` | `30` | 30 天内新列 | | `NEW_COIN_MIN_VOLUME_USDT` | `1_000_000` | 24h vol ≥ $1M (排除无人币) | **实现逻辑**: ``` 1. 拉 OKX 所有 SWAP (公共 endpoint, 不需 credentials) 2. 筛 list_time 在 30 天内的 3. 拉每个的 24h 成交量 (tickers 端点) 4. 过滤 vol < $1M 5. 按 24h vol 降序排序, 取前 NEW_COIN_PICKS=2 6. 比对 state['_new_coin_picks'] 当前次, 变化才推 QQ 7. 加入永久池 state['_new_coin_pool'] 8. 池子 > NEW_COIN_POOL_MAX=6 → 按 added_at 升序, 删最早的 ``` **QQ 推送格式**: ``` 🆕 新币扫描 (30 天内新上市, vol 前 2): 📊 CAP: 24h vol $442.5M | 上线 13.6 天前 📊 NES: 24h vol $67.0M | 上线 15.6 天前 💡 已自动加入监控池 (上限 6 个) ``` **裁剪通知** (超限时): ``` 🗑️ 新币池超限 (>6), 移除: ['OLDXYZ', 'ABC123'] ``` **代码位置**: `crypto/okx_t_monitor.py:194` (常量) + `:328` (`monitor()` 调用) ## ✨ v2.1.0 新功能 (2026-07-10): 变化驱动推送 (C 方案) **问题**: v2.0 每次 cron 跑都推"💤 无持仓, 跳过做T",用户**嫌噪音**,问"有变化时推, 计划怎么改?" **解决方案**: 实现 v2.1 推送规则 (用户拍板的 **C 方案**): - ❌ 之前: 每次 cron 都推 (噪音) - ✅ 现在: **只在有变化时推**,其他时间静默 (本地 print 但不推 QQ) **推送触发条件 (4 类事件,任一触发就推)**: | # | 事件 | 检测方法 | 推送格式 | |---|------|---------|---------| | 1 | **持仓变化** | 对比 `state[sym]_prev_pos` 与当前 `pos_qty`, 差异 > 0.001 张 | `🔄 持仓变化: 1.45 → 1.00 张` | | 2 | **价格触及关键位** | 当前价距 buy1/buy2/sell1/sell2 任一 < 0.5% | `📍 价格触及 buy2=1762 (距 0.32%)` | | 3 | **浮盈大幅波动** | 浮盈 ≥ 5% 且相对上次 ≥ 3% | `📈 浮盈变化: -2% → +5% (+7%)` | | 4 | **做T成交** | buy/sell 实际成交 (原有逻辑) | `✅ 做T自动执行 v2.1` | | 5 | **做T失败** | buy/sell `code != '0'` | `❌ {sym} {action} 失败: {msg}` | **静默分支** (全部跳过,只本地 print): - 没持仓 + 无变化 → `💤 静默: 无持仓, 无变化` - 有持仓 + 价格距最近关键位 > 0.5% + 浮盈变化 < 3% → `💤 静默: 有持仓但无变化` **详细实现** 见 `references/change-driven-push.md`。 ## ✨ v2.0.0 新功能 **相比 v1.0.0**: 1. **多币种自动** (ETH/BTC/SOL/DOGE/XRP), 不再硬编码 ETH 2. **动态 ATR 价位** (基于 1H K线, 14期 ATR) 3. **网络重试机制** (Clash 抽风时自动重试 2 次) 4. **STATE_FILE 自动清理** (7 天前自动删除) 5. **支持 limit 单** (替代 market 滑点) 6. **回测工具** (`backtest.py`) ## 📦 核心组件 ### 1. 监控脚本: `crypto/okx_t_monitor.py` **位置**: `~/.hermes/scripts/crypto/okx_t_monitor.py` **兼容**: `~/.hermes/scripts/t_monitor.py` (symlink) **核心逻辑**: ``` 1. 加载 ~/.bashrc 的 OKX_* 凭证 2. 对每个币种: a. 查 OKX 持仓 (用 abs(pos_qty) > 0.01 容错) b. 如果有持仓 → 拉 1H K线 c. 计算 ATR(14 期) d. 动态算 buy1/buy2/sell1/sell2 价位 (ATR × 0.5) 3. 检查价格是否触及 buy/sell 价位 4. 拉余额/持仓, 成交 (下单后必查持仓变化验证) 5. 记录到 STATE_FILE (自动清理 7 天前) 6. 推结果到 QQ ``` ### 2. 回测工具: `crypto/backtest.py` **位置**: `~/.hermes/scripts/crypto/backtest.py` **默认参数 (用户偏好: 默认短期做T, 2026-07-10)**: | 参数 | 默认 | 说明 | |------|------|------| | `--mode` | **trend** | 用户原话"新币最多保留六个", 1H K线 + 30 天窗口。要 short 显式 `--mode short` | | `--days` | 30 (trend) / 7 (short) | 自适应 | | `--bar` | 4H (trend) / 1H (short) | 自适应 | | `--atr-multiplier` | 1.5 (trend) / 0.5 (short) | 用户原话"短线推荐 0.5",**默认是 0.5** | **用户实测发现** (2026-07-10): - `--mode trend` 默认是 4H K线 + 翻页有 bug, 拉不到数据。**只能 stable 跑 1H**, 需要显式 `--bar 1H` - `--mode short` 跑 1H K线稳 - ATR=0.7 在 short 模式下 200 根 K 线回测胜率 81.6%, 优于 0.5/1.0/1.5 - 但用户原话 "短线推荐 0.5", **实战用户要 0.5** (默认), backtest 验证 0.7 最好但成交频繁高手续费 **用法**: ```bash # 默认 (trend 模式, 用户原话"短线推荐 0.5", 但默认是 trend) python3 ~/.hermes/scripts/crypto/backtest.py ETH --mode short --days 7 # 短期 + 用户推荐参数 python3 ~/.hermes/scripts/crypto/backtest.py ETH --mode short --days 7 --atr-multiplier 0.5 # 短期 + 自测更优参数 python3 ~/.hermes/scripts/crypto/backtest.py ETH --mode short --days 7 --atr-multiplier 0.7 # 自定义 python3 ~/.hermes/scripts/crypto/backtest.py ETH \ --days 14 \ --bar 1H \ --atr-multiplier 0.5 \ --t-qty 0.03 ``` **数据限制**: OKX 历史 K 线 `bar=4H` 翻页有 bug。**Backtest 实测只能用 1H K 线**, trend 模式要 `--bar 1H`。 ### 3. cron 任务 | Job ID | 名称(**已重命名清晰化**) | 频率 | delivery | |--------|------|------|---------| | `db03f9255ad0` | **币圈OKX做T** | `*/15 * * * *` | **`local`** (v2.5 真正静默) | | `a82a3ab0d48d` | signal-queue-retry | `*/5 * * * *` | qqbot (信号重试) | **命名教训 (2026-07-10)**: cron 名 "t-monitor" 太模糊,用户问"是币圈还是股票"。已重命名 `db03f9255ad0` 为 "币圈OKX做T"。股票侧用 `港股日内交易监控` / `美股日内交易监控` 已经清晰,**所有做T cron 一律带市场名 + 交易所** (例: `币圈OKX做T` / `港股日内交易监控` / `美股日内交易监控` / `A股...`)。**规则**: 任何新的做T cron, 名称必须显式标 "市场 + 交易所 + 动作" 三段。 ## 🔧 配置 (`crypto/okx_t_monitor.py`) ### 默认币种 ```python DEFAULT_SYMBOLS = ['ETH', 'BTC', 'SPCX'] # v2.5 加了 SPCX ``` ### 合约规格 (v2.5.0) ```python SYMBOL_SPECS = { 'ETH': {'ct_val': 0.1, 'leverage': 25, 't_qty': 0.05}, 'BTC': {'ct_val': 0.01, 'leverage': 25, 't_qty': 0.03}, 'SOL': {'ct_val': 1.0, 'leverage': 20, 't_qty': 5.0}, 'DOGE': {'ct_val': 10.0, 'leverage': 20, 't_qty': 30.0}, 'XRP': {'ct_val': 10.0, 'leverage': 20, 't_qty': 30.0}, 'SPCX': {'ct_val': 1.0, 'leverage': 5, 't_qty': 0.5}, # 新币默认参数 (自动加) 'NEW': {'ct_val': 1.0, 'leverage': 10, 't_qty': 1.0, 'min_sz': 0.01}, } ``` ### 动态价位算法 ```python ATR = sum(trs[-14:]) / 14 buy1 = price - atr * atr_multiplier * 0.7 # 默认 atr_multiplier=0.7 buy2 = price - atr * atr_multiplier * 1.0 sell1 = price + atr * atr_multiplier * 0.7 sell2 = price + atr * atr_multiplier * 1.0 ``` ## 📊 STATE_FILE `~/.hermes/trading/t_state.json`: ```json { "ETH_2026-07-10": ["buy1", "sell1"], "BTC_2026-07-10": ["buy2"], "SPCX_prev_pos": -1.45, "SPCX_prev_upl_pct": -5.7, "_new_coin_picks": ["CAP", "NES"], "_new_coin_pool": [{"sym": "CAP", "added_at": 1783655143.41, "vol24h": 442053100}] } ``` **自动清理**: `cleanup_state(state, keep_days=7)`, 跨 7 天前的 entry 自动删除。 ## 📋 推送格式 **做T成交**: ``` ✅ 做T自动执行 v2.5 🟢低吸 SPCX 0.5张 @ $151.12 级别: 151.54(buy2) ATR: $1.17 📊 持仓: -0.95张 @ $151.05 💰 可用: $79.65 💹 浮盈: $-1.88 ``` **变化提醒** (持仓变化/价格触及/浮盈大幅): ``` 🔔 SPCX 变化提醒 💰 价格: $151.13 📦 持仓: -0.95张 🔄 持仓变化: -1.45 → -0.95 张 📍 价格触及 buy2=151.54 (距 0.27%) ``` ## 🚨 关键避坑 (2026-07-10 实战教训) ### 1. 默认是短期做T (用户偏好) 用户原话: "默认是短期". 所以: - 默认 `--mode short` (1H K线, 7 天窗口) - 默认 `atr_multiplier=0.5`(用户原话"短线推荐 0.5") - 默认单笔 t_qty 占持仓 5-10% - 不要默认跑 `--mode trend`(那是"等回调"思路,用户没要求) ### 2. 默认监控币种必须包含持仓 (Symbol Coverage Pitfall) 用户曾在 OKX 持有 SPCX 1.45张空 @ 149.15, 但 `DEFAULT_SYMBOLS` 没列、`SYMBOL_SPECS` 也没列 → cron 多次报"💤 无持仓,跳过做T"。结果: 用户误以为 cron 没在工作,**持仓浮亏没被任何 cron 检测/推送到 QQ**, 入场保护完全失灵。 **两类 pitfall (必须同时修)**: - `DEFAULT_SYMBOLS` 缺 → `monitor()` 跳过该币种, 没有任何监控, 静默 - `SYMBOL_SPECS` 缺 → 拉到持仓计算 LEVELS 时 `KeyError: 'SPCX'` - `t_qty` 设错:**是"每次做T张数", 不是总持仓** (SPCX 持仓 1.45 → t_qty=0.5, 不是 1.45) **修复** (本 skill 已应用): 1. ✅ 静态补全: 把持仓币种同时加进两个 dict (SPCX 已加) 2. ✅ **自动覆盖机制** `AUTO_INCLUDE_HOLDINGS = True` (v2.2+) — 启动时自动拉 OKX 持仓, 加进监控池 3. ✅ **`get_held_symbols()` 函数** 在 monitor() 调用, 替代死板的 DEFAULT_SYMBOLS 4. ✅ 新币池 `NEW_COIN_AUTO_WATCH = True` 自动包含新币 ### 3. 实盘前必跑回测 (200 根 K 线起步) ```bash # 测试新参数 (推荐 1H short 模式, 用户推荐 atr_multiplier=0.5) python3 ~/.hermes/scripts/crypto/backtest.py ETH --mode short --days 7 --atr-multiplier 0.5 # 要求: # - 胜率 ≥ 55%(预期值正) # - 最大回撤 ≤ 15% # - 交易频率适中(7天 20-50 次, 不要 > 100) # - 总盈亏 > 0 # 实战第一次跑, 必须用 0.01-0.05 张试水 # (SPOT/合约都从最小单位开始, 2-3 天后验证策略再扩仓) ``` ### 4. cron 失败 ≠ 没运行 (网络抽风) **症状**: cron 报 `💤 无持仓,跳过做T`,但实际你持 ETH/SPCX。 **原因**: 在 OKX `fetch_positions` 时网络超时(Clash 抽风), 抛异常被 try/except 吞掉, 误判为空仓。 **修复**: 在 `monitor()` 函数 `fetch_positions` 失败时记 ERROR, 不要当空仓处理。 **临时绕过**: 手动 `python3 ~/.hermes/scripts/crypto/okx_t_monitor.py` 复查。 ### 5. 状态文件 (t_state.json) 跨日会"恢复" 如果某天没成交 (例如网络挂了), 当天 `traded_levels` 是空。下一天 `state_key` 变了("ETH_2026-07-11"), `traded_levels` 也默认空, 所以**已经触及的价位, 隔夜会再次触发**(如果第二天价格还在那)。 **修复**: 如果你想"7日内一次性" 触发, 用 `keep_days=7` 删旧 state key 后重做。 v2.0.0 用的是 `cleanup_state(keep_days=7)` 自动删 7 天前的, 但**不**阻止"跨日重复触发同价位"。 ## ⚠️ 关键限制 1. **有持仓才做T** (没持仓的币种跳过)。SPCX 这类"已有持仓"会被监听到,**纯新增的币种不会自动开仓** (v2.5 修正)。 2. **网络依赖**: Clash 死了就完全不能跑(虽然有重试,但重试也失败就崩) 3. **不支持止损** (OKX advisor v4.5.0 才有 SL conditional algo). 持仓被套只能手动 App 或调用 `okx-auto-position/scripts/okx_position_advisor.py --execute` 走 SL-only conditional。 4. **atr_multiplier=0.7** 是回测最优甜点(不要退回 0.5,见上表)。`1.5` 太宽捕捉不到。 5. **不要假设有亏损保护**: `--mode short` 时 81% 胜率不代表实战也 81%——滑点/拒单/网卡都还没建模。 ## 🔄 跟其他 skill 的关系 | Skill | 用途 | 冲突? | |-------|------|------| | `okx-auto-position` | 信号跟单 (麻吉/熬鹰等) | ✅ 互补 | | `okx-crypto` | OKX 数据查询 | ✅ 配合 | | `intraday-trading` | 股票日内 | ❌ 独立 | | `longbridge-t-monitor` | 股票做T | ❌ 独立 | ## 🔧 故障排查 ### Cron 失败? 1. **检查 Clash**: `pgrep mihomo` 2. **测连通**: `curl -s --max-time 8 -x http://127.0.0.1:7890 https://www.okx.com/api/v5/public/time` 3. **看 cron output 文件**: `ls -lt ~/.hermes/cron/output/db03f9255ad0/ | head -3` 4. **看 cron delivery 是不是 local**: `cronjob list | grep -A3 db03f9255ad0`,应该 `deliver: local`(v2.5) ### 没触发做T? 1. **检查持仓**: `python3 ~/.hermes/scripts/crypto/okx_t_monitor.py` (dry-run 手动跑) 2. **看价格 vs 价位**: 脚本会 print "动态价位" 3. **手动改 LEVELS**: 不推荐 (v2.0.0 全自动) ### cron 没推 QQ 但代码说成功? `last_status: "silent"` 误导名字,实际可能是 `deliver: qqbot` 在推 stdout。改 cron: ```bash # 经 Hermes cronjob update 改 deliver 字段 cronjob update --job-id db03f9255ad0 --deliver local ``` ## 🔴 Dedup #4: Two-phase check-then-execute (2026-07-10) When a single cron tick triggers a trade, naive code runs change-detection FIRST then trade execution, producing two QQ pushes for the same event ("持仓变化: 1.45 → 0.95" + "✅ 做T自动执行 v2.1 @ $151.12"). The fix is a two-phase loop: 1. Pass 1: collect `pending_actions` (which symbols are about to trade) 2. Pass 2: execute trades, push only `✅ 做T自动执行` The change-detection in Pass 1 receives `skip_for=set(pending_actions)` and suppresses "持仓变化" / "价格触及" for symbols in that set. Float P&L change notifications still push (no semantic overlap with trade confirmations). **Crash bug**: `state[f'{sym}_trade_at']` defaults to 0 (= epoch 1970). This makes `now_ts - 0 = ~60 years` ALWAYS > 900 (15 min), so the dedup NEVER triggers via the time-based path until the symbol does its first trade. The structural fix (pass pending_actions directly) avoids this and is the correct one. If you use time-based dedup, also fix: `state.get(f'{sym}_trade_at', datetime.datetime.utcnow().timestamp())`. Full pattern: `references/push-dedup-and-order-direction.md` ## 📚 相关文档 - `references/change-driven-push.md` - **v2.1 推送策略** (持仓/价格/浮盈变化检测细节) - `references/push-dedup-and-order-direction.md` - **v2.4 dedup + 订单方向盲点** - `references/symbol-coverage-pitfall.md` - **持仓币种必须列入监控池** (SPCX 案例) - `references/vps-proxy-requirement.md` - **国内 VPS 必须走 Clash (不能直连 OKX)** - `references/okx-order-verification.md` - **code='0' 不等于真成交,下单后必查持仓** - `references/signal-false-trigger-pitfall.md` - **OKX 浮点残值,abs() > 0.01 容错** - `references/backtest-usage.md` - 回测详细使用 - `references/cron-delivery-push-pitfalls.md` - **cron `silent` vs `local` 区别**(v2.5 新增) - `references/okx-new-coin-data-sources.md` - **新币只监控不开仓**(v2.5 新增) ## 📚 相关文档 - `references/change-driven-push.md` - **v2.1 推送策略** (持仓/价格/浮盈变化检测细节) - `references/push-dedup-and-order-direction.md` - **v2.4 dedup + 订单方向盲点** - `references/symbol-coverage-pitfall.md` - **持仓币种必须列入监控池** (SPCX 案例) - `references/vps-proxy-requirement.md` - **国内 VPS 必须走 Clash (不能直连 OKX)** - `references/okx-order-verification.md` - **code='0' 不等于真成交,下单后必查持仓** - `references/signal-false-trigger-pitfall.md` - **OKX 浮点残值,abs() > 0.01 容错** - `references/backtest-usage.md` - 回测详细使用 - `references/cron-delivery-push-pitfalls.md` - **cron `silent` vs `local` 区别**(v2.5 新增) - `references/okx-new-coin-data-sources.md` - **新币只监控不开仓**(v2.5 新增) - `references/concise-output-style.md` - **风格铁律 (2026-07-13 用户偏好):** "简洁,重点" + memory vs skill 区分原则 - `references/signal-strength-and-position-aware-qty.md` - **v2.6 加减仓比例算法** (信号强度 + 持仓感知) ## 🔄 版本历史 - **v2.6.0** (2026-07-15): - **加减仓 ≠ 平仓** (用户纠正 "平仓就是平仓, 加减都不是平仓") - **按比例算法** (信号强度 + 持仓感知, 不是固定 t_qty) - **永远不平光** (减仓上限 50%, 留底仓) - **新 reference**: `signal-strength-and-position-aware-qty.md` - ⚠️ **Bug 仍未修复**: `okx_t_monitor.py` 仍用 `reduce_only = pos_qty < 0` 走平仓路径 (v2.7 实施) - **v2.5.0** (2026-07-10): - **新币只监控、绝不开仓**(by-design 验证文档) - **cron `deliver: local` 真正静默**(纠正 `silent` 误解) - **OKX `code='0'` 不等于真成交**(强调下单后验证持仓) - **国内 VPS 必须走 Clash** - 修 cron 名 `t-monitor` → `币圈OKX做T` - DEFAULT_SYMBOLS 加 SPCX - 浮点残值容错 `abs(pos_qty) > 0.01` - **v2.4.0** (2026-07-10): dedup + 订单方向盲点(详见 SKILL.md §Dedup #4) - **v2.3.0** (2026-07-10): **新币自动挑选池** (NEW_COIN_PICKS=2, POOL_MAX=6) - **v2.2.0** (2026-07-10): **静默模式+持仓自动包含** - **v2.1.0** (2026-07-10): 变化驱动推送 (C 方案) - **v2.0.0** (2026-07-10): 动态 ATR + 网络重试 + backtest - **v1.0.0** (2026-07-10): ETH 4 张硬编码