# mc5 reference vectors (FW Analyst 1, sup-to-a1 v32/v33)

## READ THIS FIRST
- **What:** http://159.223.88.168/hx-c9ois/fw/lab/mc5-vectors.csv lists every Uniswap v3 WETH pool, any fee tier, whose TRUE first Swap falls in the last 3 days (the window is in the header). Each row gives what mc5 decides and why, plus the lab.py exit at each size. Live Desk can replay these to prove its mc5 module bit for bit.
- **This build:** window 4 Oct 14:20 to 7 Oct 14:20 Bangkok. 831 pools: **38 BUY**, 16 SKIP on the dust guard, 777 SKIP on the band.
- **Check against live:** all 4 live fmmc5 trades are BUY with the same exit. 0x8da021f34c2f2a95696c4fd842b0cd0cc4e18468 time 30.39x (live 29.43x); 0xe507152250372fadb2c6cb50f2b5ff5e89dd8d21 stop 0.48x (live 0.47x); 0x4fc807391d8dd76992043950248b26a610231075 stop 0.004x (live 0.004x); 0xa6caf95634d4bcffdfb535eec889c9c928ff13d5 stop 0.46x (live 0.55x).
- **Pool 0x86303aff9563213a7c5f877bbe15eacde98d7c50 (the v33 case):** the lab.py stop fires at block 82262763 (fee-in 0.4952, raw 0.5052). A raw-quote rule would fire 44 blocks (~4.5 s) later at block 82262807 (raw 0.4323). The bot sold about 2 min later at 0.341x, so most of that gap is bot lag, not the fee basis.
- **Columns:**
  - `first_swap_block` is the T0 block, the first Swap on chain. It is NOT taken from PoolCreated, and it is not when a feed first saw the pool.
  - `cap_block` is the block of the last swap before T0 + 300 s. `cap_usd_at_300s` = that swap's price x token supply at that block x ETH/USD for that hour (CoinGecko).
  - `decision` is BUY, SKIP or PENDING. `reason` gives the cause: band ($250,000 to $999,999), dust guard, no cap, or first swap too recent.
  - For each BUY, the `x_<size>`, `exit_<size>` and `exit_bkk_<size>` columns come from lab.py at $10, $50, $100, $200 and $1,000. OPEN means the 4 h window is not over yet.
- **Stop columns for $10, per the v33 ruling ("the bot copies lab.py"):**
  - `stop_block_lab_10` is the swap block where lab.py's stop fires.
  - `stop_value_lab_feein_10` is lab.py's trigger value: (constant-product quote with our buy kept) x 0.99 minus gas, divided by the ticket. It fires at 0.5 or below.
  - `stop_value_rawquote_at_lab_block_10` is the same quote at that block with no 1% fee and no gas.
  - `stop_block_if_rawquote_rule_10` and `rawquote_value_at_that_block_10` show where a raw-quote rule (raw value 0.5 or below) would have fired instead.
- **Rules lab.py applies (unchanged, rule file in the csv header):**
  - The cap is read at T0 + 300 s.
  - Fill at the end of the block at T0 + 306 s, with a real v3 tick walk.
  - The dust guard needs a 0.001+ WETH swap that moved the price before +300 s, and 0.1+ WETH in the pool.
  - The stop is checked only on swaps of 0.01+ WETH, at 0.5x with the fee in.
  - Pull = the first Burn of 50%+ of in-range liquidity.
  - Time stop at 4 h.
  - Every exit is sold at the END of the NEXT block.
  - GMGN fee is 1% each way, plus $0.05 gas each way.
- **Fee-in vs raw stop over the whole half B book (lab.py, n 149):**
  - $10: 2.26x fee-in vs 2.32x raw (+$164 vs +$171 a day).
  - $1k: 2.09x vs 2.09x (+$14,160 vs +$14,131 a day).
  - It hardly matters, so copy lab.py, the rule that was proven.
- **Refresh:** research-box /root/fwa1/vec.py, rebuilt nightly; main pulls the csv.

Version: v1, 7 Oct 2026, FW Analyst 1. Latest: http://159.223.88.168/hx-c9ois/fw/lab/mc5-vectors-readme.md
