Keep frozen research conclusions and code; raw ledgers and secrets stay out of git. Co-authored-by: Cursor <cursoragent@cursor.com>
206 lines
7.6 KiB
Markdown
206 lines
7.6 KiB
Markdown
# Project Status
|
||
|
||
## MM_EDGE_EXP_001 — CLOSED (FROZEN)
|
||
|
||
| Dimension | Status |
|
||
|-----------|--------|
|
||
| Research Phenomenon | **PASS** (conditional markout exists) |
|
||
| Economic Edge | **FAIL** |
|
||
| Prefill Predictability | **FAIL** (snapshot observability) |
|
||
| Strategy | **FROZEN** |
|
||
| Execution | **STOPPED** |
|
||
| Stage 3 | **LOCKED** |
|
||
|
||
EXP_001 Prefill strict conclusion:
|
||
|
||
> Under current **snapshot observability** (~1.66s), no CANDIDATE_V0_2_SIGNAL.
|
||
> This is **NOT** proof that pre-fill signal does not exist in the market.
|
||
|
||
Weak signals (research observations only — **not** trading filters):
|
||
|
||
- `depth_total_5`: ±3.8pp Path C separation, Economic gate FAIL
|
||
- `obi_change_5s`: +0.00027 USDT/fill economic Δ
|
||
- `pre_deteriorated_strict=False`: +0.00116 USDT/fill economic Δ
|
||
|
||
Reports: `logs/maker_edge/` — see sections below for detail.
|
||
|
||
---
|
||
|
||
## MM_EDGE_EXP_002 — Phase 1 STOPPED (artifact FROZEN)
|
||
|
||
| Dimension | Status |
|
||
|-----------|--------|
|
||
| Type | Data Collection / Observability |
|
||
| Strategy | **NONE** |
|
||
| Trading | **NO** |
|
||
| Execution | **STOPPED** 2026-09-10T08:45:24Z |
|
||
| Stage 3 | **LOCKED** |
|
||
| Gate 1 | **PASS** (smoke `EXP-002-RUN-001`) |
|
||
| Gate 2 | **PASS** |
|
||
| Gate 3 | **PASS** |
|
||
| Gate 4 | **BLOCKED** (no `fill_anchor`; not opened) |
|
||
| Long-run | **EXP-002-RUN-002** STOPPED + systemd **disabled** |
|
||
| Hypothesis Closure | **NO** — Gate 4 never ran |
|
||
|
||
Human decision 2026-09-10: stop further collection. Phase 1 is an observability artifact only.
|
||
This is **not** “market has no pre-fill signal” and **not** a v0.2 unlock.
|
||
|
||
`event-state-probe.service` (user): **inactive / disabled**. Do not restart `EXP-002-RUN-002`.
|
||
|
||
Ledger: `logs/event_state/EXP-002-RUN-002/` — 24 files, 2026-08-18 → 2026-09-10 (last day partial), **18.06 GiB**.
|
||
Event counts not fully censused; size-based estimate ~1.2e7 lines (volume gates clearly exceeded).
|
||
`fill_anchor` expected **0** (observability-only). Marker: `EXP-002-RUN-002.PHASE1_STOPPED.json`
|
||
|
||
Do **not** Path-C snoop this artifact. Frozen Gate 4 sample gates remain in `MM_EDGE_EXP_002.md`.
|
||
|
||
Spec: `MM_EDGE_EXP_002.md`
|
||
Smoke: `./scripts/smoke_test_event_state.sh`
|
||
Validate: `python scripts/validate_event_ledger.py --dir logs/event_state/EXP-002-RUN-001 --run-id EXP-002-RUN-001`
|
||
Logs: `logs/event_state/EXP-002-RUN-001/`
|
||
|
||
### EXP-002-RUN-001 Smoke (2026-08-18, ~12 min + restart)
|
||
|
||
Host: `jADUtR1041803` | Sessions: **2** (restart test) | Schema: `immutable_event_v1`
|
||
|
||
| Check | Result |
|
||
|-------|--------|
|
||
| Gate 1 Event Completeness | **PASS** (Phase 1 stream; no fill_anchor) |
|
||
| Gate 2 Temporal Integrity | **PASS** |
|
||
| Gate 3 Event Coverage | **PASS** |
|
||
| Restart contract | **PASS** (0 parse fail, 0 dup event_id, seq reset) |
|
||
| Gate 4 | **BLOCKED** |
|
||
|
||
Write rates:
|
||
- `aggressive_trade`: **3.21 / sec** (2300 events)
|
||
- `book_update`: **6.09 / sec** (4366 events)
|
||
- **total**: **9.30 / sec** (6666 market events)
|
||
|
||
Timestamp quality (100% exchange + local present):
|
||
- `local − exchange` lag: p50 **112.5ms**, p95 **237.7ms**, p99 **251.4ms**, max **443.4ms**
|
||
- `exchange > local + 50ms`: **0** violations
|
||
|
||
Event order (recorded, not sorted):
|
||
- `exchange_ts_ns` regressions: **1053** (max back **276ms**) — multi-source async; explicit in report
|
||
|
||
Raw schema sample (n=200 each): **0% missing** on core fields; **0** hollow book_update.
|
||
|
||
Manifest: `logs/event_state/EXP-002-RUN-001/EXP-002-RUN-001.manifest.json`
|
||
Report: `logs/event_state/EXP-002-RUN-001/Event_Ledger_Validation.json`
|
||
|
||
Long-run identity: **EXP-002-RUN-002** (separate from smoke) — **STOPPED** 2026-09-10. Status: `./scripts/event_state_status.sh`
|
||
|
||
---
|
||
|
||
## MM_EDGE_EXP_001 Detail
|
||
|
||
**Phase: Prefill Adverse-Selection Attribution v0.1** (probe **STOPPED**)
|
||
|
||
| Gate | Status |
|
||
|------|--------|
|
||
| Research Freeze | **ACTIVE** |
|
||
| Probe | **STOPPED** |
|
||
| Data Integrity | **PASS** |
|
||
| Maker-only | **PASS** (`TAKER=0`) |
|
||
| Account Reconciliation (RECON-01) | **PASS** |
|
||
| RECON-02 classification | **PASS** |
|
||
| Order-level closure (RECON-03) | **PASS** |
|
||
| Strict trade-level closure | **FAIL** (Testnet userTrades cutoff — **not** Alpha FAIL) |
|
||
| Economic Edge | **FAIL** (current execution economics) |
|
||
| Prefill Predictability (v0.1 strict) | **FAIL** (no CANDIDATE_V0_2_SIGNAL) |
|
||
| Stage 3 | **LOCKED** |
|
||
|
||
## Evidence taxonomy (4777 fills)
|
||
|
||
| Class | Count | Grade |
|
||
|-------|-------|-------|
|
||
| **MATCHED** | 3890 | Order + Trade (dual) |
|
||
| **VENUE_CONFIRMED_NO_TRADE_HISTORY** | 876 | Order FILLED, no trade row |
|
||
| **VENUE_PARTIAL_ORDER_CANCELED** | 11 | Partial fill + TTL cancel |
|
||
| DUPLICATE / MISMATCH / UNCONFIRMED | 0 | — |
|
||
|
||
`userTrades` cutoff: **2026-08-17T03:08 UTC** — see `TESTNET_LIMITATIONS.md`
|
||
|
||
Matched trade-level: qty residual **0**, |Δt| p50 **72ms**
|
||
|
||
## Separation
|
||
|
||
```
|
||
MakerAlpha (+0.008%) ≠ Account Δ (−61.66 = fee + realized)
|
||
Strict trade FAIL ≠ Maker Edge FAIL
|
||
887 orphans = VENUE-HISTORY-CUTOFF (now order-confirmed)
|
||
```
|
||
|
||
## Economic Attribution v0.1 (Hard Evidence Population only)
|
||
|
||
Population: **MATCHED=3890**
|
||
Core report: `logs/maker_edge/Economic_Attribution_v0_1.txt`
|
||
|
||
- Matched fills / paths / clusters: **3890 / 3886 / 3334**
|
||
- Fee total: **42.42 USDT**
|
||
- Realized component: **−8.52 USDT**
|
||
- Gross markout @30s: **−1.73 USDT**
|
||
- Net attributable @30s: **−52.67 USDT**
|
||
- Inventory carry:
|
||
- Max `|net BTC|`: **0.0059**
|
||
- TW `|net BTC|`: **0.0035**
|
||
- Turnover: **3.3316 BTC**
|
||
|
||
Counterfactual Attribution:
|
||
- Baseline matched net30: **−52.67 USDT**
|
||
- Exclude `Path C`: **−21.22 USDT**
|
||
- Exclude toxic: **−21.22 USDT**
|
||
- Exclude negative states: **−27.64 USDT**
|
||
|
||
Interpretation:
|
||
- v0.1 已完成 baseline 使命:**Maker markout phenomenon exists, economic edge not established**
|
||
- 当前主要拖累不是“假 alpha”,而是 **fee + realized / inventory economics**
|
||
|
||
## Metric Reconciliation (MATCHED=3890)
|
||
- Return-space MakerAlpha(fill-weighted):-0.000693%
|
||
- Return-space MakerAlpha(notional-weighted):-0.000816%
|
||
- Dollar-space gross markout @30s:-1.730780 USDT
|
||
结论:回报口径一致,但“加权方式”导致返回与美元金额的方向差异。
|
||
|
||
## Fee Sensitivity (counterfactual, fee only)
|
||
net_attr_30s @fee_factor:
|
||
1.00 → -52.674655 USDT
|
||
0.50 → -31.463582 USDT
|
||
0.25 → -20.858046 USDT
|
||
0.10 → -14.494724 USDT
|
||
0.00 → -10.252510 USDT
|
||
结论:即使假设 0 fee,net 仍 < 0,因此“真实拖累”不仅是 fee。
|
||
|
||
## Prefill Adverse-Selection Attribution v0.1 (strict contract)
|
||
|
||
Population: **MATCHED paths = 3886** (100% strict-prefill coverage)
|
||
Core report: `logs/maker_edge/Prefill_Adverse_Selection_Attribution_v0_1.txt`
|
||
|
||
Time contract: `feature_timestamp <= t_fill - 0.25s`
|
||
Feature source: sampled `mid_tick` / `inventory_tick` only (no fill-callback leakage)
|
||
|
||
Baseline (strict population):
|
||
- P(Path C): **33.20%**
|
||
- P(Toxic): **34.61%**
|
||
- P(Neg30s): **47.43%**
|
||
- P(Economic<0): **77.61%**
|
||
- Mean net_attr_30s: **−0.0136 USDT/fill**
|
||
- Feature age: mean **1681ms**, median **1660ms**
|
||
|
||
Conclusion Matrix (auto-grade):
|
||
- **CANDIDATE_V0_2_SIGNAL**: **0 / 19 features**
|
||
- **STATISTICAL_SIGNAL_ONLY**: spread_change_5s (Toxic/Neg30s), inventory/inventory_skew (Economic only)
|
||
- **NO_PREFILL_SIGNAL**: all others under strict gate
|
||
|
||
Unavailable under strict contract (deferred to EXP_002):
|
||
- `time_since_last_market_event`, intensity, large trades, fill-callback `market_event_before_fill`
|
||
|
||
## Forbidden (both experiments)
|
||
|
||
- Resume EXP_001 probe without new experiment ID
|
||
- Restart EXP_002 / `EXP-002-RUN-002` collection
|
||
- Enable trading under EXP_002
|
||
- Reclassify VENUE_CONFIRMED as MATCHED
|
||
- Unlock Stage 3 on observability or attribution alone
|
||
- Treat STATISTICAL_SIGNAL_ONLY as v0.2 candidate
|
||
- Design v0.2 or claim Hypothesis Closure without a later fill-authorized Gate 4
|