Snapshot nautilus_mm after EXP_002 Phase 1 stop.

Keep frozen research conclusions and code; raw ledgers and secrets stay out of git.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-09-10 16:53:22 +08:00
co-authored by Cursor
commit e2fbe1c2b3
49 changed files with 9633 additions and 0 deletions
+342
View File
@@ -0,0 +1,342 @@
# Research Freeze / Data Collection Phase
**研究框架已冻结。** 研究对象:可验证的市场现象(不是策略)。
验证的假设是:
> 在当前 BTC 永续、当前交易所、当前报价假设、当前执行条件下,被动成交是否产生正向 Maker Alpha。
不是:「我的策略有没有赚钱」。
| 报告结论 | 含义 | 下一步 |
|----------|------|--------|
| **FAIL** | 这个市场假设不成立 | 换假设(Carry / Basis / Funding…) |
| **PARTIAL_PASS** | 优势仅局部存在 | Event-driven LP |
| **PASS** | 普遍可捕获 | Economic Simulation → Symmetric MM |
| **COLLECTING** | 样本不足 | 继续采集 |
三个答案都推进系统。只有盈利才算成功 —— 错误。
---
## 状态机(锁定)
```
Research Freeze
|
v
Data Collection
|
v
Maker Edge Report v0.1
|
+---- FAIL --------------→ 换假设
|
+---- PARTIAL_PASS ------→ Event-driven LP
|
+---- PASS --------------→ Economic Simulation
| ↓
| Symmetric MM / Quote Engine
|
+---- COLLECTING --------→ 继续采集
```
---
## 观察窗口(不要过早解释)
| 规模 | 用途 |
|------|------|
| **~500 fills** | 发现异常 / 管道是否工作 |
| **~2000 fills** | 初步判断(Decision 门槛默认) |
| **~10000 fills** | 才讨论稳定性 |
**cluster 数量比 fill 数量更重要。**
5000 fills / 80 clusters ≠ 3000 fills / 900 clusters。
第一份报告最值得看的不是 Decision,而是三个**分布**Fill Alpha / Cluster Alpha / Toxicity。
---
## Unlock Stage3Economic Simulation)必须同时满足
```
Data Integrity PASS
AND cluster-weighted MakerAlpha > 0
AND benchmark-adjusted alpha > 0
AND edge not concentrated in one event/regime
```
否则:继续 Data Collection,或判定 FAIL / PARTIAL_PASS。
**禁止**用改 Quote Logic / 改成本假设 来「凑」解锁。
---
## 冻结期间只允许 / 禁止
### ✅ 允许
- 数据字段(不改变报价行为)
- 数据质量检查
- 报告解释能力(分布、归因、可比格式)
### ❌ 禁止(直到 Gate 解锁)
- 新交易规则 / 动态 spread / inventory skew
- 新过滤条件(Pulse / AI
- 新收益优化参数(为结果改 fee/slip/latency
### 三不动
1. Quote Logic
2. 成本模型:`Net = Raw Fee Slip Latency`
3. 失败定义:`PASS` / `PARTIAL_PASS` / `COLLECTING` / `FAIL`
---
## Report v0.1 固定格式
```
Executive Summary
Section 1 — Data Integrity
Section 2 — Fill Alpha (+ distribution: mean/median/p25/p75)
Section 3 — Toxicity Profile (+ loss concentration)
Section 4 — Observed Edge Attribution (事实,非策略建议)
Section 5 — Decision + Stage3 unlock checklist
```
第一份报告不期待 PASS。价值在于:市场在哪些情况下愿意付给流动性提供者溢价。
---
## Experiment ID(强制绑定)
每轮 Data Collection 绑定固定身份,写入每条 jsonl + 每份报告:
```
Experiment: MM_EDGE_EXP_001
Version: probe_v0.1
Quote: frozen
Fee: frozen
Exchange: frozen
```
环境变量:`EXPERIMENT_ID` / `PROBE_VERSION`(见 `.env.example`)。
换实验假设时换新 ID(如 `MM_EDGE_EXP_002`),禁止在同一 ID 下改报价逻辑后重解释旧数据。
报告阅读顺序:**Integrity → 分布(非均值)→ Cluster → Toxicity → Decision**。
Integrity FAIL → `Decision=INVALID`,不解释 Alpha。
---
## Post-Report Phase (2026-08-18)
Maker Edge Report → **PARTIAL_PASS**.
Account wallet moved ≈ 62 USDT vs assumed 5000 start — **not** Maker Edge FAIL evidence;
also **not** ignorable. Research markout ≠ account equity.
**Probe volume STOPPED** until:
1. Maker-only hard check: `TAKER_FILLED_COUNT == 0` (exchange `userTrades.maker`)
2. Order→Fill→Fee→Position→Funding→Equity ledger residual ≈ 0
See `STATUS.md` and `scripts/reconcile_account.py`.
Stage3 remains **LOCKED**. Economic Edge = **UNKNOWN**.
---
## Economic Attribution Phase (2026-08-18)
`MM_EDGE_EXP_001 / probe_v0.1` is now a **FROZEN BASELINE**.
Execution state:
- Probe: **STOPPED**
- Strategy modifications: **forbidden**
- Purpose: **Economic Attribution only**
First hard-evidence population:
```
MATCHED = 3890
```
This means:
- Local Fill
- Venue Trade
- venue_trade_id
- quantity closure
- price verification
- fee verification
- maker-only verification
Economic Attribution v0.1 must:
1. Use **MATCHED only** for core conclusions
2. Keep `VENUE_CONFIRMED_NO_TRADE_HISTORY` / `VENUE_PARTIAL_ORDER_CANCELED`
as extension evidence, not core population
3. Treat counterfactuals as **attribution**, not backtest / simulation
Current baseline conclusion:
> Maker markout exists, but economic edge is **not established** under v0.1.
Known explanation path:
```
MakerAlpha
matched fills
fee + realized / inventory economics
account outcome
```
Next allowed work:
- Fee attribution
- Inventory carry / exposure attribution
- Counterfactual attribution (`Path C`, toxic, negative states)
- Real-time immutable fill ledger design for future runs
Still forbidden:
- Resume v0.1 live execution
- Change quote offset / TTL / cooldown as a shortcut
- Unlock Stage3 from attribution alone
---
## Prefill Adverse-Selection Attribution Phase (2026-08-18)
Purpose: **Pre-fill adverse-selection predictability audit** — NOT strategy / backtest / optimization / model training.
Hard contract:
```
feature_timestamp <= t_fill - 0.25s
```
Features: sampled `mid_tick` / `inventory_tick` only.
Forbidden as features: fill price, post-fill states, Path A/B/C/D, markout, future book/trade/inventory, realized PnL, cancel-after-fill.
Population: **MATCHED paths = 3886** (100% strict coverage)
Executability gate (three tiers):
| Grade | Meaning |
|-------|---------|
| `NO_PREFILL_SIGNAL` | P(C) / economic almost unchanged |
| `STATISTICAL_SIGNAL_ONLY` | probability shift, economic improvement insufficient |
| `CANDIDATE_V0_2_SIGNAL` | probability + economic separation — only this enters v0.2 hypothesis |
Sample-size policy:
- n < 30 → `LOW_N` (exploratory only)
- n < 100 → `WEAK_EVIDENCE`
- n >= 100 → `USABLE`
v0.1 strict conclusion:
> **0 / 19 features** reach `CANDIDATE_V0_2_SIGNAL`.
> Fill 前可观测信号不足以支撑 v0.2 设计。Stage 3 remains **LOCKED**.
Deferred (requires richer pre-fill event log):
- `time_since_last_market_event`
- intensity / large trades
- fill-callback `market_event_before_fill`
Still forbidden:
- Treat `STATISTICAL_SIGNAL_ONLY` as v0.2 candidate
- Resume probe or design v0.2 strategy without new experiment ID + prefill signal pass
---
## MM_EDGE_EXP_002 — Event-State Observability (2026-08-18)
**Type:** Data Collection / Observability Experiment
**NOT:** strategy experiment, backtest, optimization, model training
```
MM_EDGE_EXP_001 → phenomenon PASS, economic FAIL, prefill FAIL (snapshot)
MM_EDGE_EXP_002 → close observability gap (immutable event ledger)
→ Gate 4 only after Gates 13 + fill anchors
→ (only then) v0.2 hypothesis allowed
```
Identity:
| Field | Value |
|-------|-------|
| Experiment | MM_EDGE_EXP_002 |
| Probe | event_state_v0.1 |
| Strategy | NONE |
| Trading | NO |
| Stage 3 | LOCKED |
| Depends on | MM_EDGE_EXP_001 FROZEN |
Core change: **Immutable Event Ledger** — raw events first, features offline later.
Pre-fill window schema (frozen):
```
[-5s, fill - 250ms) → all market_event rows
fill_anchor → immutable fill metadata (Gate 4; Phase 1 may have none)
```
Success gates:
1. **Event Completeness** — PASS (smoke)
2. **Temporal Integrity** — PASS (smoke)
3. **Event Coverage** — PASS (smoke)
4. **Predictability** — BLOCKED until frozen sample gates in `MM_EDGE_EXP_002.md`
Long-run: `EXP-002-RUN-002` / `event-state-probe.service` / trading=NO.
Frozen before long-run (do not change after seeing more data):
- Phase 1 dataset: ≥ 7 days AND ≥ 5,000,000 market events
- Gate 4: ≥ 2,000 MATCHED fill_anchors AND ≥ 500 clusters (requires later fill-authorized phase)
No daily Path C analysis during collection.
Still forbidden:
- Resume EXP_001 or modify v0.1 quote logic
- Enable trading under EXP_002
- Unlock Stage 3 from observability data alone
- Peek at Gate 4 before the frozen sample threshold
---
## MM_EDGE_EXP_002 Phase 1 STOPPED (2026-09-10)
Human decision: **stop collection**. Do not open a fill-authorized phase. Do not design v0.2.
| Field | Value |
|-------|-------|
| Run | `EXP-002-RUN-002` |
| Stopped | **2026-09-10T08:45:24Z** |
| systemd | user `event-state-probe` **inactive / disabled** |
| Ledger | `logs/event_state/EXP-002-RUN-002/` (24 files, 18.06 GiB, 2026-08-18 → 2026-09-10 partial) |
| Trading | **NO** |
| Stage 3 | **LOCKED** |
| Gate 4 | **BLOCKED** (no `fill_anchor`) |
| Hypothesis Closure | **NO** |
Phase 1 volume thresholds are met as an **observability freeze** only.
That does **not** unlock Gate 4 or Stage 3.
Marker: `logs/event_state/EXP-002-RUN-002/EXP-002-RUN-002.PHASE1_STOPPED.json`
Still forbidden:
- Restart `EXP-002-RUN-002`
- Enable trading under EXP_002
- Path-C / Gate 4 peek on this artifact
- Treat this stop as “no pre-fill signal exists”