SPB Git

spb/wp27_uqo

Public

paper: model/implementation/limitations/appendices; docs consistency fixes

Simon-Pierre Boucher committed (Oct 27, 2026) parent 74b1f46 Browse files

6 changed files +315 −272

modified docs/assumptions.md +1 −1
@@ -8,7 +8,7 @@ Version 1.0, 2026-10-27. Each row states the assumption *as implemented* in `src
8 8 |---|---|---|---|---|
9 9 | A1 | Discrete model time: 600 ticks, outcomes on t ≥ 100; no calendar mapping | Defines the horizon of every metric | Avoids false precision; 30 dividend periods suffice for ACF/VR estimates (≥ 500 returns) | `n_ticks` 1,000 on the control (free); report whether rankings of cells change |
10 10 | A2 | Dividend every 20 ticks: D = μ + x + J, x_t = 0.98 x_{t−1} + 2 ε_t (cents), μ = 50 c, r = 0.25 % per period; one asset by default | Fundamental process; V ≈ 200.00 and P/D ≈ 400 | Persistent, stationary cash-flow state with a closed-form PV (brief §Economy) | Sweep ρ ∈ {0.95, 0.98}, σ ∈ {1, 2, 4} on the control (free) |
11 −| A3 | **"Efficient price" = full-information PV** V_t = μ/r + x_t·ρ/(1 + r − ρ), risk-neutral, constant discount rate, no risk premium | Benchmark for `msd_log`, `mad_pct`, bubbles, absorption | The only unambiguous benchmark in a simulated economy; the latent state is never shown to agents | Also report deviations from the *public* PV (`public_value`) and from the end-of-run mean price |
11 +| A3 | **"Efficient price" = full-information PV** V_t = μ/r + x_n/(1 + r − ρ) with x_n the latent deviation of the upcoming dividend, risk-neutral, constant discount rate, no risk premium | Benchmark for `msd_log`, `mad_pct`, bubbles, absorption | The only unambiguous benchmark in a simulated economy; the latent state is never shown to agents | Also report deviations from the *public* PV (`public_value`) and from the end-of-run mean price |
12 12 | A4 | Public PV = Kalman/HMM posterior on announced dividends; in the baseline (no jumps, one regime) the dividend reveals x_t exactly, so V^pub ≡ V | Information structure | Simplest case for calibration; **but it makes private signals redundant and H1 unidentified** | Confirmatory base uses noisy dividends (`jump_prob` 1, `jump_sigma` ≈ 4 c → SD(V^pub/V − 1) ≈ 0.5 %); both variants reported |
13 13 | A5 | No look-ahead: private signals s = x_t + N(0, σ²/precision) are about the *current* state; news reports x_t with noise; nobody sees future draws | Rules out mechanical information advantages | Standard in noisy rational-expectations settings | Unit test on the signal function; prompt audit (`prompting.py` builds only from `Observation`) |
14 14 | A6 | Shock: latent jump in x at t = 300 revealed through dividends/news; placebo at t = 450. Baseline size 40 c (+8.4 % on V); confirmatory size 10 c (+2.1 %) | Event-study outcomes (`time_to_absorb`, `response_ratio`, local projections) | A sub-threshold (< 5 %) jump so that a lagged response is not counted as a bubble; placebo for falsification | Sizes 10/20/40 c on the control; `news_burst` variant |
modified docs/model_cards.md +1 −1
@@ -77,7 +77,7 @@ One card per model or provider used or planned. Prices are USD per 1M tokens (in
77 77 | Field | Value |
78 78 |---|---|
79 79 | Implementation | `llm/library.py`: 7 standardized features of the observation (mispricing vs public PV, momentum, signal, inventory and cash ratios, spread, open-order flag); returns the recorded decision of one of the 5 nearest neighbours (seeded draw), limit price rescaled to the current mid |
80 −| Source | Valid decisions recorded in the T1 gpt-5.4-nano runs (`results/library/nano_v1.npz`) |
80 +| Source | Valid decisions recorded in the T1 gpt-5.4-nano runs (`results/library/gpt-5.4-nano_single.npz`) |
81 81 | Price | 0 |
82 82 | Role | Scale arm at N = 1,000 and the "cached" side of the cached-vs-online comparison; runs are labelled provider `library` |
83 83 | Caveat | Not an adaptive agent; out-of-support at large N must be reported (distance diagnostics, `protocol.md` §5.4) |
modified docs/protocol.md +5 −5
@@ -13,14 +13,14 @@ Version 1.0, 2026-10-27. Operational companion to `identification.md`. Every num
13 13 ## 2. Commands
14 14
15 15 ```bash
16 −.venv/bin/python -m pytest tests # 23 tests (unit, property, integration) must pass
16 +.venv/bin/python -m pytest tests # 24 tests (unit, property, integration) must pass
17 17 .venv/bin/ma run configs/baseline.yaml --seed 1 --out results/runs/baseline/seed0001 # one classical run (~0.5 s)
18 18 .venv/bin/ma budget configs/<design>.yaml --tokens-in 760 --tokens-out 230 # calls and USD before any live design
19 19 .venv/bin/ma design configs/<design>.yaml --workers 8 --cache results/cache/<design>.sqlite
20 20 .venv/bin/ma design configs/<design>.yaml --cells share_25 --max-seeds 1 --cache ... # single cell / single seed
21 21 ```
22 22
23 −`ma design` runs mock cells in parallel processes (`--workers`) and any cell with a live provider sequentially with a shared cache (the worker count is ignored for API cells). Existing `outcomes.json` files are reused, so an interrupted design resumes without re-calling the API.
23 +`ma design` runs every cell in a process pool (`--workers`; the Makefile uses 3 for the pilot and 5 for the confirmatory design) with one shared SQLite decision cache (`results/cache/llm_cache.sqlite`). An existing run directory is reused only if its manifest `config_hash` equals the requested configuration's hash (otherwise it is deleted and re-run), so an interrupted design resumes without re-calling the API and a changed configuration can never pick up stale runs. Before relaunching after a code change, delete the design directory and make sure no pool worker is still alive (`pkill -f multiprocessing.spawn`).
24 24
25 25 ## 3. Phase 5a — mock dry-run (no cost)
26 26
@@ -68,7 +68,7 @@ Pilot pass criteria: validity ≥ 80 %, failures ≤ 10 %, cost per decision wit
68 68 | | poslimit_25 | `exchange.position_limit: 300` | 101–102 | 1,350 | 0.68 |
69 69 | T5 fairness | mini_25_equalusd | mini_25 with `llm.usd_cap` = mean nano spend of share_25 (TBD ≈ 0.34) → decisions stop at equal USD | 101–103 | ≤ 630 mini | ≤ 1.01 |
70 70 | T6 extensions | k2_25 | two assets, `factor_loading: [0.7, 0.7]`, `statarb: 0.05` | 101–102 | 1,350 | 0.68 |
71 −| | library_1000 | `population.n_traders: 1000`, `llm.frozen_library: results/library/nano_v1.npz`, provider `library` | 101–110 | 0 | 0 |
71 +| | library_1000 | `population.n_traders: 1000`, `llm.frozen_library: results/library/gpt-5.4-nano_single.npz`, provider `library` | 101–110 | 0 | 0 |
72 72 | | auction_25, interval_10 | call auction every 5 ticks; `decision_interval: 10` — **mock only** | 1–10 | 0 | 0 |
73 73 | **Confirmatory total** | | | | ≈ 66,000 | **≈ 33.3** |
74 74 | Pilot (§4) | | | | 6,480 | 3.24 |
@@ -83,11 +83,11 @@ Tiers run T1 → T6; spend is reconciled after each tier (`sum(llm_usd)` over `o
83 83
84 84 ### 5.4 Frozen-library replay (T6)
85 85
86 −Build the library from the T1 nano runs: `DecisionLibrary.from_runs([...T1 run dirs...]).save("results/library/nano_v1.npz")`. Replay at N = 1,000 with `activity` scaled by 100/N (as in `scripts/11_scale_benchmark.py`) so order flow per tick is constant. Report the nearest-neighbour distance distribution; if the median standardized distance at N = 1,000 exceeds the 90th percentile observed at N = 100, the arm is reported as out-of-support, not as evidence.
86 +Build the library from the T1 nano runs: `DecisionLibrary.from_runs([...T1 run dirs...]).save("results/library/gpt-5.4-nano_single.npz")`. Replay at N = 1,000 with `activity` scaled by 100/N (as in `scripts/11_scale_benchmark.py`) so order flow per tick is constant. Report the nearest-neighbour distance distribution; if the median standardized distance at N = 1,000 exceeds the 90th percentile observed at N = 100, the arm is reported as out-of-support, not as evidence.
87 87
88 88 ## 6. Replication checklist
89 89
90 −1. `git log -1` matches `freeze.json`; `pytest` passes (23 tests).
90 +1. `git log -1` matches `freeze.json`; `pytest` passes (24 tests).
91 91 2. `ma design` of each tier reproduces `outcomes.parquet` from the cache (`--cache` path, `llm_cached_hits` = 1.0, zero USD).
92 92 3. Every run directory has `manifest.json` with `config_hash`, `git_revision`, `prompt_version`, `price_assumptions`, `llm_usage`, `shocks`, `final_conservation_ok`.
93 93 4. Analysis scripts read only `outcomes.parquet`, `ticks.parquet`, `trades.parquet`, `llm_decisions.parquet`; tables and figures are regenerated by one command (`paper/Makefile`).
modified docs/research_log.md +1 −0
@@ -18,6 +18,7 @@ between the pre-analysis plan and the confirmatory runs, so that nothing is revi
18 18 | 11 | 21:12 | — | First git commit; pilot and confirmatory designs launched on the frozen revision | manifests now carry `git_revision` | **freeze** |
19 19 | 12 | — | 5 | Pilot (3 seeds × {5, 25, 50 %}, gpt-5.4-nano) runs concurrently with the confirmatory design on the same revision; pilot seeds (1–3) are never pooled with confirmatory seeds (201–207) | time budget | the pilot's role is reduced to cost/validity/variance reporting; the seed count (7) was fixed by the USD cap, not by the pilot variance |
20 20 | 13 | 22:05 | 6 | **Override bug**: `deep_update` merged leaf dictionaries, so `provider_mix: {openai: 1.0}` on the baseline `{mock: 1.0}` became a 50/50 mock/OpenAI mixture in every live cell (caught by a co-author reading run manifests). Leaf dicts now replace; regression test added; all live and classical designs discarded and relaunched on commit c1fdf6c | half of the "LLM" slots were the mock rule | **new freeze** (c1fdf6c); nothing from the discarded runs is used |
21 +| 14 | 22:40 | 6 | Orphaned pool workers from killed designs had kept writing runs after the directories were purged, and the resumable runner reused them (manifests with providers [mock, openai]); all workers killed, every run whose manifest hash differs from its cell's configuration deleted (3 pilot, 7 confirmatory), runner now resumes only on an identical `config_hash` (commit 74b1f46) | co-author audit of manifests | clean runs (6 pilot, 20 confirmatory) kept; discarded runs cost ≈ 12 USD of API calls that are reported in the cost accounting but never analysed |
21 22
22 23 Known deviations from `docs/identification.md` / `docs/protocol.md` (written before items 8–12):
23 24 - Noisy dividends (`jump_prob = 1`) were proposed to make V^pub ≠ V; item 8 achieves this through the timing of information instead (no jumps in the baseline).
modified paper/sections/theory.tex +2 −2
@@ -424,10 +424,10 @@ $L$, $\ell$ & position limit (per-agent order/position cap; \texttt{allow\_short
424 424 $\theta$, $h$ & \texttt{exchange.halt\_threshold}, \texttt{halt\_window}, \texttt{halt\_duration} (circuit breaker) \\
425 425 $z$, $\sigma_z^2$ & noise-trader slots (\texttt{mix[noise]}, activity) \\
426 426 $N$ & \texttt{population.n\_traders} ($100$, $1{,}000$, $10{,}000$) \\
427 −$\tau$ & $R^2$ of the latent value $V_t$ on the mid price (post-warmup) or $1-\operatorname{Var}(V_t-P_t)/\operatorname{Var}(V_t)$ \\
427 +$\tau$ & not estimated directly; its simulator counterparts are the mean squared log pricing error \texttt{msd\_log} $=\overline{(\log P_t-\log V_t)^2}$ and the mean absolute deviation \texttt{mad\_pct}, both decreasing in informativeness \\
428 428 $\operatorname{Var}(P-v)$ & mean squared pricing error $(P_t-V_t)^2$ \\
429 429 $\bar\rho$, $\bar S$ & average pairwise correlation of signed order flow across agents; share of agent pairs with same-signed orders within a decision interval \\
430 −$\Delta P^\ast$, $T_\epsilon$ & crash depth after a shock event (\texttt{shocks}); time-to-absorb = ticks until $|P_t-V^{\mathrm{pub}}_t|$ re-enters a tolerance band \\
430 +$\Delta P^\ast$, $T_\epsilon$ & crash depth after a shock event (\texttt{shocks}); time-to-absorb = ticks until $|P_t/V_t-1|$ stays below 1\,\% for five consecutive ticks after the latent shock (\texttt{time\_to\_absorb}) \\
431 431 \hline
432 432 \end{tabular}
433 433 \end{table}
modified results/calibration/scale_benchmark.json +305 −263
@@ -2,372 +2,414 @@
2 2 {
3 3 "name": "scale_100",
4 4 "seed": 1,
5 − "config_hash": "72ec6dde7c77c2e9",
5 + "config_hash": "13328f5e6f32990c",
6 6 "n_traders": 100,
7 7 "llm_share": 0.0,
8 8 "llm_share_traders": 0.0,
9 9 "llm_share_orders": 0.0,
10 10 "llm_share_volume": 0.0,
11 11 "n_llm_decisions": 0,
12 − "n_trades": 10295,
13 − "wall_s": 0.5701620420441031,
14 − "msd_log": 0.00019286955904584808,
15 − "mad_pct": 0.7310450811973923,
16 − "bias_pct": -0.15575191205753852,
17 − "vr5": 1.0718532448575135,
18 − "vr10": 1.2475793867974083,
19 − "vol_bp": 32.35812080767805,
20 − "kurtosis": 10.234149771580848,
21 − "acf_absr_1_10": 2.725430443480742,
22 − "acf_r_1": 0.040723476211249214,
23 − "spread_bp": 28.878447094188143,
24 − "eff_spread_bp": 41.4787058741681,
25 − "depth5": 132.712,
26 − "lambda_bp_100": 20.621638192405012,
27 − "resiliency": 0.6471442312753932,
28 − "n_bubbles": 1,
29 − "bubble_amp": 0.080067123441383,
30 − "bubble_dur": 13.0,
31 − "max_dd": 0.05210182210339487,
12 + "n_trades": 9483,
13 + "wall_s": 0.561950541974511,
14 + "msd_log": 4.266113421084894e-05,
15 + "mad_pct": 0.4452912373334502,
16 + "bias_pct": -0.16250645419823648,
17 + "vr5": 1.2808238242517882,
18 + "vr10": 1.6956799240598435,
19 + "vol_bp": 13.060749029694724,
20 + "kurtosis": 35.01507543486031,
21 + "acf_absr_1_10": 3.1656403290576316,
22 + "acf_r_1": 0.00014962429838089104,
23 + "spread_bp": 18.99330779045911,
24 + "eff_spread_bp": 24.641460001660576,
25 + "depth5": 140.702,
26 + "lambda_bp_100": 12.598283607509806,
27 + "resiliency": 0.6094844467069042,
28 + "n_bubbles": 0,
29 + "bubble_amp": 0.0,
30 + "bubble_dur": 0.0,
31 + "max_dd": 0.028555868633532988,
32 32 "n_crashes": 0,
33 − "volume": 57653.0,
33 + "volume": 49533.0,
34 34 "n_halts": 0,
35 35 "share_ticks_halted": 0.0,
36 − "time_to_absorb": 24.0,
37 − "response_ratio": 1.0602789303452547,
38 − "pnl_fundamentalist": 17.656477071443046,
39 − "pnl_leveraged": 8.519706421361073,
40 − "pnl_market_maker": 9.050950394737617,
41 − "pnl_meanrev": 4.209786017783919,
42 − "pnl_noise": 7.296227416578166,
43 − "pnl_trend": 8.888541562040968,
44 − "gini_final": 0.27427592144984314,
36 + "time_to_absorb": 15.0,
37 + "response_ratio": 2.2490023898583673,
38 + "pnl_fundamentalist": 11.082209219493947,
39 + "pnl_leveraged": 1.4418651763278723,
40 + "pnl_market_maker": 5.710438916819656,
41 + "pnl_meanrev": 2.9877031781727115,
42 + "pnl_noise": 4.649299724803906,
43 + "pnl_trend": 2.136350462390413,
44 + "gini_final": 0.27703259343488695,
45 45 "gini_initial": 0.2804114796674862,
46 46 "n_bankrupt": 0,
47 − "cancel_ratio": 0.15356339084771192,
48 − "reject_ratio": 0.010352588147036759,
49 − "fill_ratio": 1.54463615903976,
50 − "turnover": 5.643414799728445,
51 − "mm_pnl": 9.050950394737619,
52 − "mm_inventory_abs": 447.8,
53 − "n_orders": 13330
47 + "cancel_ratio": 0.18065779169929522,
48 + "reject_ratio": 0.00822239624119029,
49 + "fill_ratio": 1.4851996867658575,
50 + "turnover": 4.935081466395112,
51 + "mm_pnl": 5.710438916819655,
52 + "mm_inventory_abs": 450.4,
53 + "flow_corr_fundamentalist": 0.6081052996058153,
54 + "flow_corr_leveraged": 0.8056656086005239,
55 + "flow_corr_market_maker": 0.40285902309116894,
56 + "flow_corr_meanrev": 0.5240214666938758,
57 + "flow_corr_noise": 0.0021860282452096148,
58 + "flow_corr_trend": 0.5675547519775062,
59 + "n_orders": 12770
54 60 },
55 61 {
56 62 "name": "scale_100",
57 63 "seed": 2,
58 − "config_hash": "f50aac64012c79cc",
64 + "config_hash": "2220c87cfabc484c",
59 65 "n_traders": 100,
60 66 "llm_share": 0.0,
61 67 "llm_share_traders": 0.0,
62 68 "llm_share_orders": 0.0,
63 69 "llm_share_volume": 0.0,
64 70 "n_llm_decisions": 0,
65 − "n_trades": 10527,
66 − "wall_s": 0.5802934590028599,
67 − "msd_log": 0.0002888292585473304,
68 − "mad_pct": 0.9452873073912066,
69 − "bias_pct": -0.29914538754731906,
70 − "vr5": 1.5658770854218884,
71 − "vr10": 2.2323861312360114,
72 − "vol_bp": 19.93022805615968,
73 − "kurtosis": 14.340120252000448,
74 − "acf_absr_1_10": 2.5967756236642745,
75 − "acf_r_1": 0.20815586356877122,
76 − "spread_bp": 24.364181008850423,
77 − "eff_spread_bp": 34.16487033612486,
78 − "depth5": 146.782,
79 − "lambda_bp_100": 12.733686146838773,
80 − "resiliency": 0.7132913644500204,
81 − "n_bubbles": 1,
82 − "bubble_amp": 0.07461228907838036,
83 − "bubble_dur": 22.0,
84 − "max_dd": 0.04207449700924415,
71 + "n_trades": 10135,
72 + "wall_s": 0.5950057920417748,
73 + "msd_log": 0.00011269807156550713,
74 + "mad_pct": 0.6999329907345704,
75 + "bias_pct": -0.1834133029306038,
76 + "vr5": 1.1206839869796097,
77 + "vr10": 1.2032701908196335,
78 + "vol_bp": 21.182447653590852,
79 + "kurtosis": 63.393307694350604,
80 + "acf_absr_1_10": 2.1232276887652786,
81 + "acf_r_1": -0.12168840912844274,
82 + "spread_bp": 24.508671511490352,
83 + "eff_spread_bp": 32.80287511527904,
84 + "depth5": 144.488,
85 + "lambda_bp_100": 10.368067778921336,
86 + "resiliency": 0.8008422153703116,
87 + "n_bubbles": 0,
88 + "bubble_amp": 0.0,
89 + "bubble_dur": 0.0,
90 + "max_dd": 0.0463212015900597,
85 91 "n_crashes": 0,
86 − "volume": 61390.0,
92 + "volume": 57065.0,
87 93 "n_halts": 0,
88 94 "share_ticks_halted": 0.0,
89 − "time_to_absorb": 39.0,
90 − "response_ratio": 0.31568646155126934,
91 − "pnl_fundamentalist": 12.858237774095874,
92 − "pnl_leveraged": 8.307969157398325,
93 − "pnl_market_maker": 7.757582637283514,
94 − "pnl_meanrev": 4.448602248693099,
95 − "pnl_noise": 6.090876220549884,
96 − "pnl_trend": 6.275541672164394,
97 − "gini_final": 0.3192748996527118,
95 + "time_to_absorb": 42.0,
96 + "response_ratio": 0.07229322625373641,
97 + "pnl_fundamentalist": 9.728163515969941,
98 + "pnl_leveraged": -0.5134044434277812,
99 + "pnl_market_maker": 5.311276871706401,
100 + "pnl_meanrev": 3.8280035905591077,
101 + "pnl_noise": 4.225801084530292,
102 + "pnl_trend": -2.012191826388961,
103 + "gini_final": 0.31913008923115943,
98 104 "gini_initial": 0.3167311413076369,
99 105 "n_bankrupt": 0,
100 − "cancel_ratio": 0.17202363793600461,
101 − "reject_ratio": 0.011746901124243299,
102 − "fill_ratio": 1.5172960507350821,
103 − "turnover": 5.789452166802944,
104 − "mm_pnl": 7.757582637283514,
105 − "mm_inventory_abs": 537.6,
106 − "n_orders": 13876
106 + "cancel_ratio": 0.17056931248597293,
107 + "reject_ratio": 0.011520909702999925,
108 + "fill_ratio": 1.5164210368818734,
109 + "turnover": 5.409157808667212,
110 + "mm_pnl": 5.311276871706401,
111 + "mm_inventory_abs": 561.8,
112 + "flow_corr_fundamentalist": 0.6169346471443932,
113 + "flow_corr_leveraged": 0.8242786988340965,
114 + "flow_corr_market_maker": 0.333751587227477,
115 + "flow_corr_meanrev": 0.71243506190734,
116 + "flow_corr_noise": 0.03476489760506395,
117 + "flow_corr_trend": 0.8565784759401733,
118 + "n_orders": 13367
107 119 },
108 120 {
109 121 "name": "scale_100",
110 122 "seed": 3,
111 − "config_hash": "3d20d4f33dca1657",
123 + "config_hash": "1652fd3ac20740c7",
112 124 "n_traders": 100,
113 125 "llm_share": 0.0,
114 126 "llm_share_traders": 0.0,
115 127 "llm_share_orders": 0.0,
116 128 "llm_share_volume": 0.0,
117 129 "n_llm_decisions": 0,
118 − "n_trades": 10741,
119 − "wall_s": 0.581291499955114,
120 − "msd_log": 0.0001581647166691645,
121 − "mad_pct": 0.7940933085313311,
122 − "bias_pct": -0.1457811073728486,
123 − "vr5": 1.4253673844532706,
124 − "vr10": 2.1997897604423264,
125 − "vol_bp": 18.747558012139187,
126 − "kurtosis": 6.081260113112632,
127 − "acf_absr_1_10": 2.4869862608002076,
128 − "acf_r_1": 0.08038707277238923,
129 − "spread_bp": 23.159298170155786,
130 − "eff_spread_bp": 32.62440165728167,
131 − "depth5": 145.45,
132 − "lambda_bp_100": 9.286127919988914,
133 − "resiliency": 0.7155986676930891,
130 + "n_trades": 10966,
131 + "wall_s": 0.5947290000040084,
132 + "msd_log": 7.309845091058393e-05,
133 + "mad_pct": 0.7194719580752089,
134 + "bias_pct": -0.006526704437844799,
135 + "vr5": 1.0296803187890688,
136 + "vr10": 1.4045586222425246,
137 + "vol_bp": 22.217350658987264,
138 + "kurtosis": 17.603931390316244,
139 + "acf_absr_1_10": 2.234583046044834,
140 + "acf_r_1": 0.014418398132741888,
141 + "spread_bp": 24.752507678158395,
142 + "eff_spread_bp": 37.87658823419071,
143 + "depth5": 139.906,
144 + "lambda_bp_100": 13.897996957061956,
145 + "resiliency": 0.532945437189439,
134 146 "n_bubbles": 0,
135 147 "bubble_amp": 0.0,
136 148 "bubble_dur": 0.0,
137 − "max_dd": 0.030664395229982988,
149 + "max_dd": 0.028639909995842205,
138 150 "n_crashes": 0,
139 − "volume": 62973.0,
151 + "volume": 65743.0,
140 152 "n_halts": 0,
141 153 "share_ticks_halted": 0.0,
142 − "time_to_absorb": 26.0,
143 − "response_ratio": 0.5264625844839756,
144 − "pnl_fundamentalist": 13.05203477140921,
145 − "pnl_leveraged": 7.137665260941994,
146 − "pnl_market_maker": 9.437974794622459,
147 − "pnl_meanrev": 8.854861916786305,
148 − "pnl_noise": 8.383088043861747,
149 − "pnl_trend": 6.794934289244118,
150 − "gini_final": 0.28354147912478633,
154 + "time_to_absorb": 10.0,
155 + "response_ratio": 1.6271649201682974,
156 + "pnl_fundamentalist": 11.076389214723797,
157 + "pnl_leveraged": -0.4910219812423844,
158 + "pnl_market_maker": 6.7245953688727145,
159 + "pnl_meanrev": 6.267829548921491,
160 + "pnl_noise": 5.628234679518568,
161 + "pnl_trend": -1.7485030516832847,
162 + "gini_final": 0.2858138745681142,
151 163 "gini_initial": 0.2820805035864161,
152 164 "n_bankrupt": 0,
153 − "cancel_ratio": 0.15596595007935363,
154 − "reject_ratio": 0.009955273409320444,
155 − "fill_ratio": 1.5497042273842159,
156 − "turnover": 5.99405210689453,
157 − "mm_pnl": 9.437974794622459,
158 − "mm_inventory_abs": 508.8,
159 − "n_orders": 13862
165 + "cancel_ratio": 0.15531763026409706,
166 + "reject_ratio": 0.009778729478943612,
167 + "fill_ratio": 1.5654532476802283,
168 + "turnover": 6.273016670855323,
169 + "mm_pnl": 6.7245953688727145,
170 + "mm_inventory_abs": 471.4,
171 + "flow_corr_fundamentalist": 0.6119780392329717,
172 + "flow_corr_leveraged": 0.7727630449923826,
173 + "flow_corr_market_maker": 0.7384719894286295,
174 + "flow_corr_meanrev": 0.6194062558718657,
175 + "flow_corr_noise": 0.06085899518277767,
176 + "flow_corr_trend": 0.6689081805252811,
177 + "n_orders": 14010
160 178 },
161 179 {
162 180 "name": "scale_1000",
163 181 "seed": 1,
164 − "config_hash": "ee14f7c7fdd0c799",
182 + "config_hash": "274ecfd52b3464b5",
165 183 "n_traders": 1000,
166 184 "llm_share": 0.0,
167 185 "llm_share_traders": 0.0,
168 186 "llm_share_orders": 0.0,
169 187 "llm_share_volume": 0.0,
170 188 "n_llm_decisions": 0,
171 − "n_trades": 11682,
172 − "wall_s": 2.670115082990378,
173 − "msd_log": 0.00018062420246409605,
174 − "mad_pct": 0.8500964158284774,
175 − "bias_pct": -0.18426548373374133,
176 − "vr5": 2.025387100878808,
177 − "vr10": 3.2959357937833555,
178 − "vol_bp": 13.822478939583142,
179 − "kurtosis": 8.487363422007448,
180 − "acf_absr_1_10": 3.676658722746514,
181 − "acf_r_1": 0.287550868207432,
182 − "spread_bp": 13.824129777426267,
183 − "eff_spread_bp": 20.735460509724028,
184 − "depth5": 221.702,
185 − "lambda_bp_100": 4.820764798328324,
186 − "resiliency": 0.7153936557542477,
187 − "n_bubbles": 1,
188 − "bubble_amp": 0.07026257865057628,
189 − "bubble_dur": 11.0,
190 − "max_dd": 0.06061815440556961,
189 + "n_trades": 11506,
190 + "wall_s": 2.6422452499973588,
191 + "msd_log": 4.459799490563131e-05,
192 + "mad_pct": 0.5614471743278486,
193 + "bias_pct": -0.15511334576246724,
194 + "vr5": 1.1392675588226546,
195 + "vr10": 1.6692572723703871,
196 + "vol_bp": 8.726812744253099,
197 + "kurtosis": 8.700730924357568,
198 + "acf_absr_1_10": 1.9389812585059079,
199 + "acf_r_1": -0.010783036772180954,
200 + "spread_bp": 13.29861474159063,
201 + "eff_spread_bp": 18.843467334285577,
202 + "depth5": 205.852,
203 + "lambda_bp_100": 4.340416339061836,
204 + "resiliency": 0.7325175655995373,
205 + "n_bubbles": 0,
206 + "bubble_amp": 0.0,
207 + "bubble_dur": 0.0,
208 + "max_dd": 0.03116660312619135,
191 209 "n_crashes": 0,
192 − "volume": 71448.0,
210 + "volume": 67420.0,
193 211 "n_halts": 0,
194 212 "share_ticks_halted": 0.0,
195 − "time_to_absorb": 24.0,
196 − "response_ratio": 0.6796255487489661,
197 − "pnl_fundamentalist": 12.22118924232089,
198 − "pnl_leveraged": 8.85051472713129,
199 − "pnl_market_maker": 8.39873997810738,
200 − "pnl_meanrev": 4.758693065304863,
201 − "pnl_noise": 7.802552958684208,
202 − "pnl_trend": 8.986276033348616,
203 − "gini_final": 0.2858965594076205,
213 + "time_to_absorb": 0.0,
214 + "response_ratio": 0.404975000785493,
215 + "pnl_fundamentalist": 6.729056031841567,
216 + "pnl_leveraged": 5.637427313317174,
217 + "pnl_market_maker": 5.313848759240008,
218 + "pnl_meanrev": 4.035185583879716,
219 + "pnl_noise": 4.970844080033762,
220 + "pnl_trend": 5.916862240206084,
221 + "gini_final": 0.2854617843595489,
204 222 "gini_initial": 0.2855288797803193,
205 223 "n_bankrupt": 0,
206 − "cancel_ratio": 0.0687326986699075,
207 − "reject_ratio": 0.006886773344136115,
208 − "fill_ratio": 1.5774762001215312,
209 − "turnover": 0.6852169116725306,
210 − "mm_pnl": 8.398739978107383,
211 − "mm_inventory_abs": 493.8,
212 − "n_orders": 14811
224 + "cancel_ratio": 0.06602917568227822,
225 + "reject_ratio": 0.003280519299225239,
226 + "fill_ratio": 1.6061980875270467,
227 + "turnover": 0.6522142457190135,
228 + "mm_pnl": 5.313848759240008,
229 + "mm_inventory_abs": 493.4,
230 + "flow_corr_fundamentalist": 0.1812877758345397,
231 + "flow_corr_leveraged": 0.24358914780429702,
232 + "flow_corr_market_maker": 0.16855157430290751,
233 + "flow_corr_meanrev": 0.20193002732113746,
234 + "flow_corr_noise": 0.007352094582687515,
235 + "flow_corr_trend": 0.21713676628286416,
236 + "n_orders": 14327
213 237 },
214 238 {
215 239 "name": "scale_1000",
216 240 "seed": 2,
217 − "config_hash": "b16091b8bb39498f",
241 + "config_hash": "39b2c173ae4664a2",
218 242 "n_traders": 1000,
219 243 "llm_share": 0.0,
220 244 "llm_share_traders": 0.0,
221 245 "llm_share_orders": 0.0,
222 246 "llm_share_volume": 0.0,
223 247 "n_llm_decisions": 0,
224 − "n_trades": 11629,
225 − "wall_s": 2.6595235830172896,
226 − "msd_log": 0.00041330390214059054,
227 − "mad_pct": 1.1917097910197463,
228 − "bias_pct": -0.15970070791396937,
229 − "vr5": 1.644328760768095,
230 − "vr10": 2.756869312033638,
231 − "vol_bp": 12.118437319273784,
232 − "kurtosis": 14.604102013472062,
233 − "acf_absr_1_10": 2.6836877474394876,
234 − "acf_r_1": 0.02149103385973521,
235 − "spread_bp": 12.264625299683127,
236 − "eff_spread_bp": 19.045456466147648,
237 − "depth5": 243.088,
238 − "lambda_bp_100": 5.2096578366086845,
239 − "resiliency": 0.5268311406120124,
240 − "n_bubbles": 1,
241 − "bubble_amp": 0.07560512002649855,
242 − "bubble_dur": 33.0,
243 − "max_dd": 0.026409804187581987,
248 + "n_trades": 11341,
249 + "wall_s": 2.593718208023347,
250 + "msd_log": 9.380893708595955e-05,
251 + "mad_pct": 0.7030094050861265,
252 + "bias_pct": -0.04239496346757861,
253 + "vr5": 1.4143997446399388,
254 + "vr10": 2.04652744673238,
255 + "vol_bp": 10.246104277739805,
256 + "kurtosis": 7.874784440120156,
257 + "acf_absr_1_10": 2.2459292375683555,
258 + "acf_r_1": 0.12341838139966418,
259 + "spread_bp": 14.86376488201993,
260 + "eff_spread_bp": 20.79134773830736,
261 + "depth5": 248.952,
262 + "lambda_bp_100": 5.1373327775436906,
263 + "resiliency": 0.809942287932077,
264 + "n_bubbles": 0,
265 + "bubble_amp": 0.0,
266 + "bubble_dur": 0.0,
267 + "max_dd": 0.030708092485549177,
244 268 "n_crashes": 0,
245 − "volume": 72963.0,
269 + "volume": 70170.0,
246 270 "n_halts": 0,
247 271 "share_ticks_halted": 0.0,
248 − "time_to_absorb": 55.0,
249 − "response_ratio": 0.23023340213135676,
250 − "pnl_fundamentalist": 9.410087991005573,
251 − "pnl_leveraged": 8.06978747113479,
252 − "pnl_market_maker": 8.58296964348504,
253 − "pnl_meanrev": 7.3927831227808385,
254 − "pnl_noise": 8.868638893094134,
255 − "pnl_trend": 9.12795706441179,
256 − "gini_final": 0.2822291008133873,
272 + "time_to_absorb": 40.0,
273 + "response_ratio": 0.07301615851627377,
274 + "pnl_fundamentalist": 5.242388952904068,
275 + "pnl_leveraged": 4.122740890775753,
276 + "pnl_market_maker": 4.750528108764787,
277 + "pnl_meanrev": 4.3948817690041855,
278 + "pnl_noise": 4.8087790856789905,
279 + "pnl_trend": 4.207353638127365,
280 + "gini_final": 0.28185452077762535,
257 281 "gini_initial": 0.2821557785325072,
258 282 "n_bankrupt": 0,
259 − "cancel_ratio": 0.07004048582995952,
260 − "reject_ratio": 0.011201079622132253,
261 − "fill_ratio": 1.569365721997301,
262 − "turnover": 0.6991975582965093,
263 − "mm_pnl": 8.58296964348504,
264 − "mm_inventory_abs": 483.22,
265 − "n_orders": 14820
283 + "cancel_ratio": 0.06047103755569701,
284 + "reject_ratio": 0.005799561496569771,
285 + "fill_ratio": 1.6042152910389702,
286 + "turnover": 0.6682737860658555,
287 + "mm_pnl": 4.750528108764787,
288 + "mm_inventory_abs": 485.56,
289 + "flow_corr_fundamentalist": 0.18370073935220338,
290 + "flow_corr_leveraged": 0.19047089945265988,
291 + "flow_corr_market_maker": 0.1967491510134189,
292 + "flow_corr_meanrev": 0.2217762315213713,
293 + "flow_corr_noise": 0.0088854995259112,
294 + "flow_corr_trend": 0.2426905842417079,
295 + "n_orders": 14139
266 296 },
267 297 {
268 298 "name": "scale_1000",
269 299 "seed": 3,
270 − "config_hash": "bb000b72ba320264",
300 + "config_hash": "fd07f4872e9678a6",
271 301 "n_traders": 1000,
272 302 "llm_share": 0.0,
273 303 "llm_share_traders": 0.0,
274 304 "llm_share_orders": 0.0,
275 305 "llm_share_volume": 0.0,
276 306 "n_llm_decisions": 0,
277 − "n_trades": 12209,
278 − "wall_s": 2.7417157079908065,
279 − "msd_log": 0.00021092782536451138,
280 − "mad_pct": 0.9236328359261194,
281 − "bias_pct": -0.17586691384915412,
282 − "vr5": 1.611910893920555,
283 − "vr10": 2.6070797852167216,
284 − "vol_bp": 13.820990551125412,
285 − "kurtosis": 4.406283908221623,
286 − "acf_absr_1_10": 1.749659430254234,
287 − "acf_r_1": 0.14228872111193444,
288 − "spread_bp": 16.402115035292773,
289 − "eff_spread_bp": 24.921946560889914,
290 − "depth5": 178.83,
291 − "lambda_bp_100": 6.947876984339655,
292 − "resiliency": 0.5644120216956088,
293 − "n_bubbles": 1,
294 − "bubble_amp": 0.06792151254244383,
295 − "bubble_dur": 11.0,
296 − "max_dd": 0.03714749884823354,
307 + "n_trades": 11025,
308 + "wall_s": 2.5898144589737058,
309 + "msd_log": 4.3915838389987096e-05,
310 + "mad_pct": 0.5188634604617772,
311 + "bias_pct": -0.046929456624928534,
312 + "vr5": 1.3221448319933091,
313 + "vr10": 1.7858937955551464,
314 + "vol_bp": 10.451851715820833,
315 + "kurtosis": 23.617737355507195,
316 + "acf_absr_1_10": 3.3090798799738983,
317 + "acf_r_1": -0.02597027489657522,
318 + "spread_bp": 13.389367953115482,
319 + "eff_spread_bp": 19.168776766750792,
320 + "depth5": 209.732,
321 + "lambda_bp_100": 5.675299684983716,
322 + "resiliency": 0.8243452955880805,
323 + "n_bubbles": 0,
324 + "bubble_amp": 0.0,
325 + "bubble_dur": 0.0,
326 + "max_dd": 0.03415154749199578,
297 327 "n_crashes": 0,
298 − "volume": 77495.0,
328 + "volume": 64307.0,
299 329 "n_halts": 0,
300 330 "share_ticks_halted": 0.0,
301 − "time_to_absorb": 38.0,
302 − "response_ratio": 0.38870487487733535,
303 − "pnl_fundamentalist": 11.763531925432737,
304 − "pnl_leveraged": 12.30986340715177,
305 − "pnl_market_maker": 9.441394250152205,
306 − "pnl_meanrev": 7.062613962399257,
307 − "pnl_noise": 8.798699442629827,
308 − "pnl_trend": 11.794205881549368,
309 − "gini_final": 0.2887824703843839,
331 + "time_to_absorb": 2.0,
332 + "response_ratio": 0.9422059728212616,
333 + "pnl_fundamentalist": 8.163368835474088,
334 + "pnl_leveraged": 7.482149977000345,
335 + "pnl_market_maker": 6.467759551962172,
336 + "pnl_meanrev": 3.909678059648282,
337 + "pnl_noise": 6.052221963341724,
338 + "pnl_trend": 7.145788314430566,
339 + "gini_final": 0.2883606405817487,
310 340 "gini_initial": 0.28816811800295694,
311 341 "n_bankrupt": 0,
312 − "cancel_ratio": 0.06202264946010008,
313 − "reject_ratio": 0.011324730050039505,
314 − "fill_ratio": 1.607716618382934,
315 − "turnover": 0.7320112276259568,
316 − "mm_pnl": 9.441394250152207,
317 − "mm_inventory_abs": 505.64,
318 − "n_orders": 15188
342 + "cancel_ratio": 0.06500290191526407,
343 + "reject_ratio": 0.003990133488102147,
344 + "fill_ratio": 1.599680789320952,
345 + "turnover": 0.6165365938981018,
346 + "mm_pnl": 6.467759551962171,
347 + "mm_inventory_abs": 500.08,
348 + "flow_corr_fundamentalist": 0.21833213263619425,
349 + "flow_corr_leveraged": 0.27583220335170927,
350 + "flow_corr_market_maker": 0.1479981781996154,
351 + "flow_corr_meanrev": 0.19060490917691542,
352 + "flow_corr_noise": 0.008272326182851597,
353 + "flow_corr_trend": 0.312039965563122,
354 + "n_orders": 13784
319 355 },
320 356 {
321 357 "name": "scale_10000",
322 358 "seed": 1,
323 − "config_hash": "b20b7ea1893420e2",
359 + "config_hash": "cf1e0784983bcede",
324 360 "n_traders": 10000,
325 361 "llm_share": 0.0,
326 362 "llm_share_traders": 0.0,
327 363 "llm_share_orders": 0.0,
328 364 "llm_share_volume": 0.0,
329 365 "n_llm_decisions": 0,
330 − "n_trades": 11885,
331 − "wall_s": 23.677518000011332,
332 − "msd_log": 0.0003067595731653351,
333 − "mad_pct": 1.2324887935614917,
334 − "bias_pct": -0.005074964908155267,
335 − "vr5": 1.5681375271456242,
336 − "vr10": 2.5294578246021526,
337 − "vol_bp": 10.572758594723124,
338 − "kurtosis": 4.752405591681221,
339 − "acf_absr_1_10": 3.335881681903191,
340 − "acf_r_1": 0.09791372200435924,
341 − "spread_bp": 10.897921046050657,
342 − "eff_spread_bp": 18.2037877380357,
343 − "depth5": 455.138,
344 − "lambda_bp_100": 2.6356634482239287,
345 − "resiliency": 0.379668239121855,
346 − "n_bubbles": 1,
347 − "bubble_amp": 0.06949448067157304,
348 − "bubble_dur": 16.0,
349 − "max_dd": 0.04199416623989671,
366 + "n_trades": 11123,
367 + "wall_s": 23.737372540985234,
368 + "msd_log": 7.441850757126039e-05,
369 + "mad_pct": 0.749043336362881,
370 + "bias_pct": 0.10881212943287366,
371 + "vr5": 1.1739064526952574,
372 + "vr10": 1.6744417894256225,
373 + "vol_bp": 5.5793268470698685,
374 + "kurtosis": 20.562572058837862,
375 + "acf_absr_1_10": 3.5598949849067014,
376 + "acf_r_1": -0.1448973966918179,
377 + "spread_bp": 9.536466029426055,
378 + "eff_spread_bp": 11.7466253784327,
379 + "depth5": 397.06,
380 + "lambda_bp_100": 1.8309625750286647,
381 + "resiliency": 1.3502975380705582,
382 + "n_bubbles": 0,
383 + "bubble_amp": 0.0,
384 + "bubble_dur": 0.0,
385 + "max_dd": 0.01687673064069517,
350 386 "n_crashes": 0,
351 − "volume": 84806.0,
387 + "volume": 66327.0,
352 388 "n_halts": 0,
353 389 "share_ticks_halted": 0.0,
354 − "time_to_absorb": 48.0,
355 − "response_ratio": 0.3440702894130496,
356 − "pnl_fundamentalist": 9.880501047388295,
357 − "pnl_leveraged": 9.530656101327683,
358 − "pnl_market_maker": 9.1641097345847,
359 − "pnl_meanrev": 8.715541449604128,
360 − "pnl_noise": 9.212122901393542,
361 − "pnl_trend": 9.50732656220052,
362 − "gini_final": 0.28254323570340967,
390 + "time_to_absorb": 9.0,
391 + "response_ratio": 0.7125705166492834,
392 + "pnl_fundamentalist": 5.955015700660537,
393 + "pnl_leveraged": 5.907099944853895,
394 + "pnl_market_maker": 5.6798835853738945,
395 + "pnl_meanrev": 5.470757526892383,
396 + "pnl_noise": 5.705169840108752,
397 + "pnl_trend": 5.863998450226706,
398 + "gini_final": 0.282549473263338,
363 399 "gini_initial": 0.282654480272589,
364 400 "n_bankrupt": 0,
365 − "cancel_ratio": 0.01489140330342047,
366 − "reject_ratio": 0.020548835999479775,
367 − "fill_ratio": 1.5457146573026401,
368 − "turnover": 0.08007531890809352,
369 − "mm_pnl": 9.1641097345847,
370 − "mm_inventory_abs": 480.866,
371 − "n_orders": 15378
401 + "cancel_ratio": 0.014714898835070508,
402 + "reject_ratio": 0.005177464404932216,
403 + "fill_ratio": 1.5154983309489747,
404 + "turnover": 0.06402693262156016,
405 + "mm_pnl": 5.6798835853738945,
406 + "mm_inventory_abs": 487.6,
407 + "flow_corr_fundamentalist": 0.05825003390169506,
408 + "flow_corr_leveraged": 0.18770916233743581,
409 + "flow_corr_market_maker": 0.036910171635462584,
410 + "flow_corr_meanrev": 0.06386890242525427,
411 + "flow_corr_noise": 0.0017863715797973461,
412 + "flow_corr_trend": 0.17703015821496784,
413 + "n_orders": 14679
372 414 }
373 415 ]
\ No newline at end of file
374 416
Menu

Theme