📋 期货AI基金经理 · 工作日报 (交易日 2026-10-14_策略迭代评估_zadj近期亏损诊断) ⏭ 跳到最新(2026-11-12)

📅 全部日报已保留 · 交易时段每小时更新 · 休息日无日报 · 夜盘21:00后归下一交易日 · → 切到股票AI基金经理日报
历史日报: 2026-11-122026-11-112026-11-102026-11-092026-11-062026-11-052026-11-042026-11-032026-11-022026-10-302026-10-292026-10-282026-10-272026-10-262026-10-232026-10-222026-10-212026-10-20_TLM失控开仓事故与修复2026-10-20_IFOS同类隐患排查2026-10-202026-10-192026-10-16_TL优化复核2026-10-162026-10-15_未完成项推进_铜重建_配对口径_通道前视闭环_AG冻结溯源2026-10-15_方案B_主力连续序列重做与H10复验2026-10-152026-10-14_策略迭代评估_zadj近期亏损诊断2026-10-14_未完成项2_菜油费率敏感度2026-10-14_数据重建与zadj基线重算2026-10-14_zadj_walkforward复核2026-10-14_TL国债复刻与WF复核2026-10-142026-10-132026-10-122026-10-092026-10-082026-09-302026-09-292026-09-282026-09-242026-09-232026-09-222026-09-212026-09-182026-09-172026-09-162026-09-152026-09-142026-09-112026-09-102026-09-092026-09-082026-09-072026-09-042026-09-03

# 近期模拟交易亏损诊断:要不要"迭代策略"?(zadj v4,2026-10-14)

> 用户提问:"最近几天模拟交易的成果不好,是不是可以迭代一下策略"
> 结论先行:**不要迭代。** 现在动手等于对着一个**坏抽样**去拟合,而且要对齐的那个"回测期望值"本身
> 建立在**不完整的数据**上。先修测量基准与执行层,再谈迭代。

## 一、口径与方法(先说清楚数是怎么来的)

| 项 | 口径 |
|---|---|
| 账本 | `trades_history.csv`(账户60)/`trades_history_sr1.csv`(账户68),FIFO 配对,含双边手续费 |
| 故障剔除 | `ai_state/system_faults.json`(已登记 2026-09-30 zadj 的 SC 故障 **−48,400**,考核时剔除) |
| 实盘窗口 | 2026-09-28 ~ 2026-10-14(zadj 上线至今) |
| 回测 | `zadj_v4/strategy_zadj_momentum.py`,`flat_by_session=True`、1手、1 tick 滑点 |
| 数据 | 旧:`data_tq/<C>_clean15m.csv`(**回测 EXPECTED 用的那份**);新:本次 TqSdk 现拉 `<C>_live15m.csv`(2025-09-29~2026-10-14) |
| 脚本 | `verify_recent_pnl.py`(把"成果不好"拆到配对级)、`verify_zadj_live_vs_bt.py`(同窗口对照+方差+时间集中度)、`fetch_zadj_15m.py` |

**基线复现**:`strategy_zadj_momentum.py --selfcheck` ✅ 全部通过 ——
SC 409笔/+247,120、AU 158笔/+124,994、AG 206笔/+46,905,
且**增量实现(实盘用的 StrategyCore)与向量化回测逐笔一致(Δ=0)**。
→ 所以"实盘与回测不一样"**不是**两套代码不等价造成的。

## 二、数字

### 1. 实盘窗口实际结果(账户60 · zadj台)

| | 笔数 | 金额 |
|---|---|---|
| 实盘合计 | 24 | **−71,560** |
| 其中:已登记系统故障(09-29→10-08 的 SC 持仓失管) | 1 | −42,140 |
| **剔除故障后** | 23 | **−29,420** |

### 2. ⭐ 同窗口对照:**把验证过的模型放到同一段行情上跑**

| 品种 | 模型(同窗口) | 实盘(同窗口) | 差 |
|---|---|---|---|
| SC | **−57,260**(8笔) | −66,020(13笔) | −8,760 |
| AG | −735(6笔) | −5,540(11笔) | −4,805 |
| AU | 0 | 0 | 0 |
| **合计** | **−57,995** | **−71,560** | **−13,565** |

**方差检验(SC)**:模型历史上所有"8 笔滚动窗"净利分布 = 最差 **−98,160** / 中位 +540 / 最好 +76,440
→ 本窗口的 −57,260 落在 **第 2 百分位**。即:**模型自己就常有这么差的 8 笔。**
(成因是真实行情:SC 在 2026-09-29 夜盘开盘由 711.9 跳空到 678.3 = **−4.7%**,随后又拉回 705 ——
模型在其中一笔做空上亏 −26,020。这不是数据错,是行情本身。)

### 3. 🚨 基线数据不完整:同模型、同月份、符号相反

| 2026-03(SC) | 旧回测数据 | 新拉数据 |
|---|---|---|
| 当月盈亏 | **+89,040**(23笔) | **−51,400**(30笔) |

两套数据的**收盘价在同一时刻中位差 0.000、最大 0.67%**(即不是"价不一样"),差异在**缺根**:

| 品种 | 重叠区间根数 | 根数不符的 session 段 | 占比 | 最严重 |
|---|---|---|---|---|
| SC | 7516 | 151 / 734 | **21%** | 2026-03-04 夜盘 旧**0根** / 新22根 |
| AU | 7149 | 219 / 734 | **30%** | 2025-12-11 夜盘 旧**0根** / 新22根 |
| AG | 8503 | 79 / 734 | **11%** | 2026-09-29 夜盘 旧**0根** / 新22根 |

实例:**SC 2026-03-03 上午,旧数据只剩 1 根(09:00),真实有 9 根**;
03-04 上午旧数据只剩 11:00/11:15 两根。
→ 缺根会让"时段末强平"落在错误的 bar 上、并改变信号序列,在一个 mult=1000 的品种上
放大成单月 ±14 万的差异。**所以 EXPECTED(+419,019)不能当作策略的期望值。**

### 4. 干净数据上的真实边际(近 12 个月)

| 品种 | 笔数 | 净利 | 每笔 | 集中度 |
|---|---|---|---|---|
| SC | 384 | +63,520 | **+165** | 最好的3个月占 210% |
| AG | 214 | +20,955 | **+98** | 最好的3个月占 176% |
| AU | 19 | +57,570 | +3,030 | **100% 来自 2026-01 一个月** |
| 合计 | 617 | **+142,045** | — | 头条 EXPECTED 是 +419,019 |

⚠️ **SC 每笔净利 +165 元,而 SC 一个 tick = 100 元。** 也就是说:入场/出场各多滑 1 个 tick,
SC 的边际就归零。旧回测按 1 tick 计,**真实滑点更大**(见下)。

### 5. 执行层:策略自己的 paper_log 就记着异常

| 项 | 模型假设 | 实盘实际 |
|---|---|---|
| SC 入场滑点 | 1 tick | 中位 0~2 tick,但出现 **36 tick**(09-29 02:00)与 **76 tick**(10-08 14:30) |
| 一次平仓手数 | 1 手 | 10-12 11:27 记为 **`close -2`(一次平 2 手)** |
| 最短持仓 | ≥1 bar | 多笔 **`bars_held=0`** |
| 开仓去重 | 1 手/信号 | 10-12 09:15:35 与 09:30:00 各开 1 手空(间隔 15 分钟,共 2 手) |
| 时段末强平 | 每时段强平 | 出现跨 session 遗留仓 |
| SC 平今费 | `fee_close_today=0.0` | 外部资料:SC 平今 **60 元/手**(模拟盘收 20) |

→ 同窗口实盘比模型多亏 **−13,565**,与上表吻合的量级。

## 三、判读(三态)

| 命题 | 结论 |
|---|---|
| 「最近几天亏损 = 策略边际坏了」 | **❌ 证伪**:同窗口模型也亏 −57,995;SC 落在其自身分布的**第2百分位** |
| 「EXPECTED +419,019 是可用的期望值」 | **❌ 不成立**:回测数据缺根(session 段 11~30% 不符),同月可翻符号 |
| 「实盘与回测不一致是执行层造成」 | **⚠️ 部分成立**:执行差异约占总差的 **1/4**(−13,565 / −71,560) |
| 「干净数据上策略仍为正边际」 | **⚠️ 极薄**:SC +165/笔 vs 1 tick = 100 元;AG +98/笔;AU 全靠单月 |
| 「现在该迭代参数/结构」 | **❌ 不该**:样本 24 笔、且目标函数(回测基线)本身失真 |

**先怀疑顺序**(按 skill):数据 → 执行 → 过拟合 → 信号。本次**前两项都有实质问题**,所以还没轮到"信号"。

## 四、建议动作(按优先级,含代价)

1. **【最高】重建三品种 15m 数据集**:TqSdk 具体合约口径(承接 2026-09-28「主连换月缝接」教训),
并对**每个 session 断言根数完整性**;重算 EXPECTED。
→ 同时给 `data_quality_gate.py` 加"**缺根检查**":现有闸门只抓"假柱/停更",**抓不到整段缺根**(这就是本次漏网的原因)。
2. **【高】成本口径**:SC `fee_close_today` 改为 60(外部来源,需你在账户核实);
加 **1/2/3 tick 滑点敏感度**(因为边际 ≈ 1 tick,这一项比费率更致命);OI 的 28 元已改。
3. **【高,且与策略无关】执行层取证与修复**:10-12 双开、`close -2`、`bars_held=0`、36/76 tick 入场、
跨 session 持仓(与 `flat_by_session=True` 矛盾)、paper_log 与账本按日对账。
→ 这些是**真金白银**,且不触碰策略参数。
4. **【中】账本口径修一处**:`pnl_attrib.realized()` 用朴素 FIFO、**忽略 `CLOSETODAY`/`CLOSE`**,
跨日持仓会把整段盈亏压到平仓日。总额不变,但"某天亏 2 万"的归因会错
(本次首轮就被它误导:10-13 显示 −22,954,而当日开平其实 **+2,286**)。面板与日报读的就是它。
5. **【之后】才谈迭代**:干净数据 + 真实成本下重算每笔期望;若仍 > 0 再考虑参数,
且必须 walk-forward + 样本内外 + Deflated Sharpe(harness 已具备)。**预期是小效应。**
6. **【不要做】**:改 zadj 的 CONFIG(用户红线);给原油/沪银加止损(用户红线:实测加了净亏)。

## 五、附带事实(避免误伤)

- **账户68 的 AI 台是正的**:纯交易 **+9,412**,能力 **+9,412**。亏损集中在
账户60 的「多策略(银硅油)」−21,802(**已废止**)、「zadj金银油」−23,160、「30年国债(G1/G2)」−7,080。
- 账户60 策略能力合计 **−48,702**(已剔除故障 −132,629)。
- 实盘窗口内 zadj 的**当日开平部分是正的**(10-08 +13,657、10-12 +5,056、10-13 +2,286、10-14 +1,261),
大亏来自**跨 session 的两笔 SC**(−42,140 故障 + 一笔跨日 −25,240 口径*)。
\* 该 −25,240 是朴素 FIFO 的归因;按 `CLOSETODAY` 语义应归属 10-13 当日开平(详见四.4)。