SPB Git

spb/wp27_uqo

Public
13.9 KB · 244 lines latex
1\section{Full hyperparameters}2\label{app:hyperparameters}34Table~\ref{tab:hp_baseline} lists every parameter of \code{configs/baseline.yaml} together with the defaults of the configuration schema (\code{experiments/config.py}) that the file does not set explicitly. Tables~\ref{tab:hp_classical}--\ref{tab:hp_pilot} list the overrides of every cell of the four design files; a cell inherits everything else from the baseline. Table~\ref{tab:hp_models} summarises the model cards (\code{docs/model\_cards.md}).56\begin{small}7\begin{longtable}{@{}p{5.0cm} p{3.4cm} p{6.6cm}@{}}8\caption{Baseline configuration (\code{configs/baseline.yaml}; schema defaults in italics)}9\label{tab:hp_baseline}\\10\toprule11Parameter & Value & Meaning \\12\midrule13\endfirsthead14\toprule15Parameter & Value & Meaning \\16\midrule17\endhead18\bottomrule19\endfoot20\multicolumn{3}{@{}l}{\emph{Run}}\\21\code{name} & baseline & run label (design/cell in designs) \\22\code{seed} & 1 & master seed of all streams \\23\code{n\_ticks} & 600 & ticks per run \\24\code{warmup} & 100 & ticks excluded from outcomes; LLM decisions start at \code{warmup}/2 \\25\multicolumn{3}{@{}l}{\emph{assets}}\\26\code{n\_assets} & 1 & number of risky assets \\27\code{tick\_cents} & 1 & tick size in cents \\28\code{initial\_price\_cents} & 20000 & reference price $=\mu/r$ (200.00) \\29\code{price\_band\_pct} & 0.5 & limit prices farther than $\pm50\%$ from the midpoint are rejected \\30\code{max\_order\_qty} & 10000 & maximum lots per order at the exchange \\31\multicolumn{3}{@{}l}{\emph{fundamentals}}\\32\code{div\_interval} & 20 & ticks between dividends ($\Delta$) \\33\code{r\_period} & 0.0025 & discount rate per dividend period ($r$) \\34\code{mu} & [50.0] & mean dividend in cents, regime 0, per asset ($\mu$) \\35\code{mu\_shift} & 0.0 & regime-1 mean $=\mu(1+\text{mu\_shift})$; 0 disables regimes \\36\code{p\_switch} & 0.0 & per-period regime switch probability \\37\code{rho} & 0.98 & persistence of the deviation ($\rho$) \\38\code{sigma} & 2.0 & innovation standard deviation in cents ($\sigma$) \\39\code{jump\_prob} & 0.0 & per-period jump probability (dividend noise) \\40\code{jump\_sigma} & 0.0 & jump standard deviation in cents \\41\code{factor\_loading} & [0.0] & loading $b_k$ on the common factor \\42\code{x0} & 0.0 & initial revealed deviation \\43\multicolumn{3}{@{}l}{\emph{news}}\\44\code{rate} & 0.02 & per-tick probability of a public item per asset \\45\code{noise\_sd} & 1.0 & stated noise of credible items (cents) \\46\code{misleading\_share} & 0.0 & share of biased items \\47\code{misleading\_bias} & 10.0 & bias of a misleading item (cents, random sign) \\48\code{window} & 20 & ticks of news visible in the observation \\49\multicolumn{3}{@{}l}{\emph{exchange}}\\50\code{maker\_fee\_bps} & 0.0 & maker fee (negative = rebate) \\51\code{taker\_fee\_bps} & 2.0 & taker fee in basis points of notional \\52\code{min\_latency} & 0.05 & floor on per-agent latency (ticks) \\53\code{halt\_threshold} & null & circuit breaker off (treatment: 0.05) \\54\code{halt\_window} & 10 & ticks over which the move is measured \\55\code{halt\_duration} & 20 & halt length in ticks \\56\code{halt\_cancel\_resting} & true & cancel resting orders at a halt \\57\code{allow\_short} & false & short selling switch (inert: every account has \code{short\_allowed=false}) \\58\code{max\_short\_lots} & 0 & short limit when shorting is allowed \\59\code{margin\_check} & true & end-of-tick margin and bankruptcy check \\60\code{liquidation\_fraction} & 0.5 & share of each position sold on a margin call \\61\code{order\_ttl} & 50 & resting orders expire after this many ticks \\62\code{position\_limit} & \emph{null} & max $|$position$|$ in lots (treatment: 300) \\63\code{call\_auction\_interval} & \emph{null} & batch clearing every $k$ ticks (treatment: 5); collar 0.02 fixed in \code{ExchangeConfig} \\64\multicolumn{3}{@{}l}{\emph{population}}\\65\code{n\_traders} & 100 & trader slots ($N$) \\66\code{mix} & fund.\ 0.25, trend 0.06, meanrev 0.10, noise 0.50, MM 0.05, statarb 0.0, leveraged 0.04 & shares of slots by policy (calibrated 2026-10-27) \\67\code{activity} & fund.\ 0.20, trend 0.20, meanrev 0.20, noise 0.30, MM 0.5, statarb 0.2, leveraged 0.2 & per-tick activation probability \\68\code{policy\_kwargs} & fundamentalist \{aggressiveness: 20.0\}; noise \{p\_market: 0.6\}; market\_maker \{quote\_qty: 20\} & calibrated policy parameters (others at code defaults, Table~\ref{tab:policies}) \\69\code{llm\_share} & 0.0 & fraction of slots controlled by the LLM policy ($\varphi$) \\70\code{llm\_replace} & proportional & stratified replacement across types (or one policy name) \\71\code{llm\_keep\_market\_makers} & true & market makers are never replaced \\72\code{informed\_share} & 0.3 & share of fundamentalists receiving private signals \\73\code{precision} & 2.0 & signal precision $\pi$ of informed fundamentalists \\74\code{leverage\_cap} & 3.0 & gross exposure / equity cap of leveraged slots ($L$) \\75\code{maintenance\_margin} & 0.25 & margin-call threshold on equity / gross ($m$) \\76\code{endowment.cash\_cents} & 2000000 & base cash (20,000.00) \\77\code{endowment.shares} & 100 & base lots per asset \\78\code{endowment.wealth\_dispersion} & 0.3 & lognormal sd of the wealth multiplier \\79\code{latency.min}, \code{latency.max} & 0.05, 1.0 & uniform latency range (ticks) \\80\code{latency.llm\_latency} & null & matched-latency override for LLM slots \\81\multicolumn{3}{@{}l}{\emph{population.llm}}\\82\code{provider\_mix} & \{mock: 1.0\} & provider $\to$ share of LLM slots \\83\code{models} & mock: mock-v1; openai: gpt-5.4-nano; anthropic: claude-haiku-5-5 & model id per provider alias \\84\code{prompt\_set} & single & single (generalist) or diverse (8 personas) \\85\code{prompt\_version} & v1 & frozen prompt version \\86\code{memory} & 0 & past own decisions shown (treatment: 5) \\87\code{channel} & false & cohort communication channel \\88\code{cohort\_size} & 5 & cohort size and channel length \\89\code{decision\_interval} & 20 & ticks between LLM decisions \\90\code{stagger}, \code{stagger\_slots} & true, 4 & offsets $\{0,5,10,15\}$ \\91\code{informed\_share} & null & inherit the replaced slot's information (a number overrides) \\92\code{precision} & 2.0 & precision used when \code{informed\_share} is a number \\93\code{max\_order\_qty} & 50 & cap on LLM order size (lots) \\94\code{reasoning\_effort} & low & OpenAI \code{reasoning.effort} / Anthropic \code{effort} \\95\code{max\_output\_tokens} & 1200 & output cap per call (includes reasoning tokens) \\96\code{concurrency} & 8 & parallel requests per decision batch \\97\code{usd\_cap} & 5.0 & hard USD cap per run \\98\code{cache} & true & reuse identical (provider, model, prompt) decisions \\99\code{temperature} & \emph{null} & never sent to gpt-5 / o-series models \\100\code{timeout\_s}, \code{max\_retries} & \emph{60.0, 3} & client timeout and retries \\101\code{token\_cap}, \code{decision\_cap} & \emph{null, null} & optional total-token and per-agent decision caps \\102\code{frozen\_library} & \emph{null} & path of the recorded decision library (provider \code{library}) \\103\code{adaptive\_prompt} & \emph{false} & P\&L feedback line in the prompt \\104\code{price\_assumptions} & \emph{Table~\ref{tab:hp_models}} & USD per 1M tokens by model id \\105\multicolumn{3}{@{}l}{\emph{shocks}}\\106shock 1 & \{time: 300, kind: fundamental\_jump, size: 10.0\} & $+10$ cents on the latent deviation ($+2.2\%$ of $V$) \\107shock 2 & \{time: 450, kind: placebo\} & logged, no effect \\108\multicolumn{3}{@{}l}{\emph{output}}\\109\code{events} & false & write the full event log \\110\code{trades}, \code{llm\_log} & true, true & write trade and LLM-decision frames \\111\code{lookback} & 60 & ticks of midpoint history in the observation \\112\end{longtable}113\end{small}114115\begin{small}116\begin{longtable}{@{}p{4.3cm} p{10.7cm}@{}}117\caption{Cells of \code{configs/classical\_confirmatory.yaml} (seeds 101--130; design overrides: \code{provider\_mix} \{mock: 1.0\}, \code{usd\_cap} 0.0)}118\label{tab:hp_classical}\\119\toprule120Cell & Overrides (dotted paths relative to the baseline) \\121\midrule122\endfirsthead123\toprule124Cell & Overrides \\125\midrule126\endhead127\bottomrule128\endfoot129control & none \\130placebo\_shock & shocks: placebo at 300 and at 450 (no jump) \\131trend\_heavy & population.mix: trend 0.16, noise 0.40 (others as baseline) \\132leverage\_heavy & population.mix: leveraged 0.19, noise 0.35 \\133leverage\_heavy\_funding\_shock & population.mix as leverage\_heavy; shocks: fundamental\_jump $-10.0$ at 300, funding 0.5 at 320 \\134liquidity\_shock & shocks: fundamental\_jump 10.0 at 300, liquidity at 300, liquidity\_end at 360 \\135info\_low & population.precision 0.5 \\136info\_high & population.precision 8.0 \\137misleading\_news & news.misleading\_share 0.5 \\138breaker\_5 & exchange.halt\_threshold 0.05 \\139poslimit\_300 & exchange.position\_limit 300 \\140auction\_5 & exchange.call\_auction\_interval 5 \\141mock\_llm\_25\_indep & population.llm\_share 0.25 (mock provider) \\142mock\_llm\_50\_indep & population.llm\_share 0.50 (mock provider) \\143k2\_control & assets.n\_assets 2; fundamentals.mu [50, 50]; factor\_loading [0.7, 0.7]; population.mix: noise 0.45, statarb 0.05 \\144k2\_leverage & as k2\_control with leveraged 0.19, noise 0.30; shocks: fundamental\_jump $-10.0$ on asset 0 at 300, funding 0.5 at 320 \\145\end{longtable}146\end{small}147148\begin{small}149\begin{longtable}{@{}p{4.3cm} p{10.7cm}@{}}150\caption{Cells of \code{configs/confirmatory\_openai.yaml} (seeds 201--207; design overrides: \code{provider\_mix} \{openai: 1.0\}, \code{models} \{openai: gpt-5.4-nano, openai\_mini: gpt-5.4-mini, mock: mock-v1, anthropic: claude-haiku-5-5\}, \code{usd\_cap} 2.0, \code{concurrency} 8)}151\label{tab:hp_confirmatory}\\152\toprule153Cell & Overrides \\154\midrule155\endfirsthead156\toprule157Cell & Overrides \\158\midrule159\endhead160\bottomrule161\endfoot162dose\_000 / 005 / 010 / 025 / 050 / 100 & population.llm\_share 0.00 / 0.05 / 0.10 / 0.25 / 0.50 / 1.00 (single generalist prompt, gpt-5.4-nano) \\163div\_prompts\_025 & llm\_share 0.25; llm.prompt\_set diverse \\164div\_models\_025 & llm\_share 0.25; llm.prompt\_set diverse; llm.provider\_mix \{openai: 0.5, openai\_mini: 0.5\} \\165memory\_025 & llm\_share 0.25; llm.memory 5 \\166channel\_025 & llm\_share 0.25; llm.channel true \\167adaptive\_025 & llm\_share 0.25; llm.adaptive\_prompt true \\168leverage\_025 & llm\_share 0.25; population.mix: leveraged 0.19, noise 0.35 \\169breaker\_025 & llm\_share 0.25; exchange.halt\_threshold 0.05 \\170poslimit\_025 & llm\_share 0.25; exchange.position\_limit 300 \\171fair\_mini\_005 & llm\_share 0.05; llm.provider\_mix \{openai\_mini: 1.0\} (gpt-5.4-mini; equal-USD comparison with dose\_025) \\172fair\_latency\_025 & llm\_share 0.25; population.latency.llm\_latency 0.05 \\173\end{longtable}174\end{small}175176\begin{small}177\begin{longtable}{@{}p{4.3cm} p{10.7cm}@{}}178\caption{Cells of \code{configs/exploratory.yaml} (mock dry run, seeds 1--3; design overrides: \code{provider\_mix} \{mock: 1.0\}, \code{usd\_cap} 0.0)}179\label{tab:hp_exploratory}\\180\toprule181Cell & Overrides \\182\midrule183\endfirsthead184\toprule185Cell & Overrides \\186\midrule187\endhead188\bottomrule189\endfoot190share\_0 / 5 / 25 / 50 & population.llm\_share 0.0 / 0.05 / 0.25 / 0.50 \\191diverse\_25 & llm\_share 0.25; llm.prompt\_set diverse \\192memory\_25 & llm\_share 0.25; llm.memory 5 \\193channel\_25 & llm\_share 0.25; llm.channel true \\194leverage\_25 & llm\_share 0.25; population.mix: leveraged 0.19, noise 0.35 \\195breaker\_25 & llm\_share 0.25; exchange.halt\_threshold 0.05 \\196poslimit\_25 & llm\_share 0.25; exchange.position\_limit 300 \\197auction\_25 & llm\_share 0.25; exchange.call\_auction\_interval 5 \\198k2\_25 & llm\_share 0.25; assets.n\_assets 2; fundamentals.mu [50, 50]; factor\_loading [0.7, 0.7]; population.mix: noise 0.45, statarb 0.05 \\199\end{longtable}200\end{small}201202\begin{small}203\begin{longtable}{@{}p{4.3cm} p{10.7cm}@{}}204\caption{Cells of \code{configs/pilot\_openai.yaml} (seeds 1--3; design overrides: \code{provider\_mix} \{openai: 1.0\}, \code{models} \{openai: gpt-5.4-nano, mock: mock-v1, anthropic: claude-haiku-5-5\}, \code{usd\_cap} 1.5, \code{concurrency} 8)}205\label{tab:hp_pilot}\\206\toprule207Cell & Overrides \\208\midrule209\endfirsthead210\toprule211Cell & Overrides \\212\midrule213\endhead214\bottomrule215\endfoot216share\_5 / 25 / 50 & population.llm\_share 0.05 / 0.25 / 0.50 (gpt-5.4-nano, single prompt) \\217\end{longtable}218\end{small}219220\begin{table}[H]221\centering222\caption{Model cards summary (prices in USD per 1M tokens: input / cached input / output; source: provider pricing pages fetched 2026-10-27 for OpenAI, Anthropic's published table; identical to \code{LLMCfg.price\_assumptions})}223\label{tab:hp_models}224\footnotesize225\begin{tabular}{@{}p{2.7cm} p{2.6cm} p{2.3cm} p{1.6cm} p{5.6cm}@{}}226\toprule227Model id & Price & Reasoning effort & Output cap & Status / role \\228\midrule229gpt-5.4-nano & 0.20 / 0.02 / 1.25 & low & 1,200 & live; primary model (all dose, mechanism, safeguard and fairness cells; library source) \\230gpt-5.4-mini & 0.75 / 0.075 / 4.50 & low & 1,200 & live-capable; two-model mix and equal-USD cells \\231gpt-5-nano & 0.05 / 0.005 / 0.40 & low & 1,200 & priced; optional replication, not planned \\232gpt-5-mini & 0.25 / 0.025 / 2.00 & low & 1,200 & priced only \\233gpt-4.1-nano & 0.10 / 0.025 / 0.40 & n/a & 1,200 & priced only \\234gpt-4.1-mini & 0.40 / 0.10 / 1.60 & n/a & 1,200 & priced only \\235claude-haiku-5-5 & 0.10 / 0.01 / 0.50 & low (\code{effort}) & 1,200 & blocked (Anthropic key rejected, HTTP 401); mock dry run only \\236claude-sonnet-5-5 & 2.00 / 0.20 / 10.00 & low & 1,200 & blocked; mock dry run only \\237mock-v1 & 0 / 0 / 0 & n/a & n/a & mock (seeded value rule, 5\% invalid); not evidence about LLMs \\238library (knn-replay) & 0 & n/a & n/a & frozen nearest-neighbour replay of recorded decisions; non-adaptive; reported separately \\239\bottomrule240\end{tabular}241\end{table}242243\noindent The Anthropic adapter sends \code{max\_tokens} $=\max(\texttt{max\_output\_tokens},256)$ and \code{output\_config.effort}. Reasoning-token accounting exists only in the OpenAI adapter; the Anthropic adapter reports input, cached-input and output tokens. An unknown model id is priced at the most expensive known output price. Every manifest stores the price table in force when the run was made.244
Files · 74b1f4645e719f7595f741141ffd6a7560577c3f
Menu

Theme