Files
nautilus_mm/MM_EDGE_EXP_002.md
jackyu66gitandCursor e2fbe1c2b3 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>
2026-09-10 16:53:22 +08:00

5.6 KiB
Raw Permalink Blame History

MM_EDGE_EXP_002 — Event-State Observability Probe

Experiment Identity

Experiment:  MM_EDGE_EXP_002
Type:        Data Collection / Observability Experiment
Strategy:    NONE
Execution:   STOPPED (no trading)
Purpose:     Capture immutable pre-fill Event State
Dependency:  MM_EDGE_EXP_001 / v0.1 FROZEN
Stage 3:     LOCKED

NOT: strategy experiment, backtest, optimization, model training, v0.2 design.


Why EXP_002 Exists

EXP_001 Prefill Audit conclusion:

Under current snapshot observability (~1.66s sampled mid/inventory state), no sufficient pre-fill signal was found.

This must not be interpreted as:

The market has no pre-fill adverse-selection information.

EXP_001 strategy is event-driven, but observability was snapshot-driven. Information between snapshots (e.g. aggressive sweep 100ms before fill) is lost.

EXP_002 closes the observability gap, not the strategy gap.


Core Design Principle

Raw Event  >  Derived Feature

Store immutable events. Features are computed offline later.


Immutable Event Ledger

Each market event records (minimum):

Field Description
exchange_ts_ns Exchange event time
local_ts_epoch / local_ts Local receive time
event_type aggressive_trade, book_update, …
best_bid / best_ask / mid / spread Top-of-book
bid_depth_* / ask_depth_* Depth levels
*_delta Depth / spread / mid changes
time_since_last_* Event timing state

Fill anchor schema (frozen, for Gate 4 when fills exist):

[-5s, fill - 250ms)  →  all market_event rows
fill_anchor            →  immutable fill metadata

Event Categories (Priority)

  1. Aggressive Trade — side, qty, notional, large_trade_flag, intensity proxy
  2. Book Depletion — depth deltas, level removal velocity
  3. Spread / TOB Event — spread change, bid/ask/mid move
  4. Event Timing — time_since_last_trade / large_trade / depth_change / spread_change

Success Gates (frozen before collection)

Gate 1 — Event Completeness

For each fill_anchor:

100% reconstructable pre-fill event sequence in [-5s, fill - margin)

Phase 1 (observability-only): N/A until fill anchors exist.

Gate 2 — Temporal Integrity

all event_ts < fill_ts
feature_cutoff = fill_ts - 250ms

Gate 3 — Event Coverage

Metric Threshold
trade events present ≥ 99% of sessions with trades
book events present ≥ 99% of sessions with book updates
timestamp valid ≥ 99% rows with exchange_ts_ns or local_ts

Gate 4 — Predictability (BLOCKED until sample freeze + fill anchors)

Do not inspect Path C daily during collection (researcher degrees of freedom).

Frozen sample thresholds (set 2026-08-18, before long-run start):

Phase 1 Event-State dataset freeze (observability-only, no fills):

Metric Minimum
Calendar span ≥ 7 days
market_event count ≥ 5,000,000
aggressive_trade ≥ 1,500,000
book_update ≥ 3,000,000
timestamp valid ≥ 99%
parse_fail_lines 0

Reaching this freeze does not unlock Gate 4. It only freezes the Event-State stream as a research artifact.

Gate 4 (requires a later fill-authorized phase, not this systemd job):

Metric Minimum
MATCHED fill_anchor ≥ 2,000
event_cluster_id ≥ 500
reconstructable [-5s, fill250ms) 100% of MATCHED anchors
venue_trade_id + exchange_ts_ns on fill 100%

Then, once:

Event State → P(Path C) → Economic separation
→ CANDIDATE_V0_2_SIGNAL only if both probability and economic gates pass

Future fill collection (if ever authorized) must write:

Fill → venue_trade_id → exchange_ts_ns → Event Ledger → [-5s, fill_ts)

Do not resume snapshot-only fills.

Only CANDIDATE_V0_2_SIGNAL after Gate 4 may enter v0.2 hypothesis design.


Research Chain

EXP_001  Maker Edge Phenomenon
              ↓
         conditional markout exists
              ↓
         Economic FAIL
              ↓
         Prefill audit (snapshot) → NO SIGNAL
              ↓
EXP_002  Event-State Observability
              ↓
         Gate 13 PASS?
              ↓
         Gate 4 predictability
              ↓
         (only then) v0.2 hypothesis

Running

cd nautilus_mm
cp .env.example .env   # set EXP_002 block
export PYTHONPATH=src
./scripts/run_event_state.sh

Long-run (systemd, trading=NO):

LEDGER_RUN_ID=EXP-002-RUN-002
logs/event_state/EXP-002-RUN-002/
systemctl --user start event-state-probe
./scripts/event_state_status.sh   # counts only — not Path C analysis

Phase 1 STOPPED 2026-09-10T08:45:24Z — user unit event-state-probe is disabled.
Do not start it again on EXP-002-RUN-002. Ledger is a frozen observability artifact.


Forbidden

  • Resume EXP_001 probe or modify v0.1 quote logic
  • Restart EXP_002 / EXP-002-RUN-002 collection
  • Enable trading under EXP_002
  • Unlock Stage 3 from observability data alone
  • Treat weak EXP_001 statistical signals as v0.2 filters
  • Claim Hypothesis Closure or design v0.2 without a later fill-authorized Gate 4

Hypothesis Closure (if Gate 4 also fails)

Conditional Maker phenomenon exists, but is not sufficiently predictable pre-fill to be monetizable under this venue/execution model.

That would be a strong Research FAIL / Hypothesis Closure — not "try one more parameter."