Keep frozen research conclusions and code; raw ledgers and secrets stay out of git. Co-authored-by: Cursor <cursoragent@cursor.com>
9.3 KiB
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 Stage3(Economic 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)
三不动
- Quote Logic
- 成本模型:
Net = Raw − Fee − Slip − Latency - 失败定义:
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:
- Maker-only hard check:
TAKER_FILLED_COUNT == 0(exchangeuserTrades.maker) - 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:
- Use MATCHED only for core conclusions
- Keep
VENUE_CONFIRMED_NO_TRADE_HISTORY/VENUE_PARTIAL_ORDER_CANCELEDas extension evidence, not core population - 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_ONLYas 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 1–3 + 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:
- Event Completeness — PASS (smoke)
- Temporal Integrity — PASS (smoke)
- Event Coverage — PASS (smoke)
- 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”