Experiment settings
Trade settings (N = 100)
Risk preferences
AI endpoint Plan II · LLM + utility forms
Required for Plan II. Every period boundary, each Utility agent calls the LLM for a direct trading action (BUY_NOW, SELL_NOW, BID_1, BID_3, ASK_1, ASK_3, HOLD). The structured prompt includes market rules, decision-making principles, role-specific guidance, and the explicit closed-form utility function $U(w; \rho_i) = w^{1-\rho_i}/(1 - \rho_i)$ with the agent's sampled $\rho_i$ substituted in. Fields are read fresh from the DOM on every run (no localStorage); if the key is empty the Start button will refuse to launch.
AI endpoint Plan III · LLM + risk label only
Required for Plan III. Every period boundary, each Utility agent calls the LLM for a direct trading action. The structured prompt supplies market rules, decision-making principles, and only a natural-language risk-preference label (risk-loving, risk-neutral, or risk-averse) — no closed-form utility function is provided. Fields are read fresh from the DOM on every run (no localStorage); if the key is empty the Start button will refuse to launch.
Advanced settings population scale · treatment labels
Paper constants Dufwenberg, Lindqvist & Moore (2005), §I. Design
- N = 100
- Subjects per session
- DLM 2005 §I pins the original design at six subjects — “At each session, six subjects participated in a sequence of four consecutive markets for an experimental asset.” This simulator scales the population to N = 100 for a thicker order book while preserving the four-round session structure.§I, p. 1733 · scaled in main.js · switch in Advanced settings
- rounds / session = 4
- Consecutive markets played by the same subjects
- “A session involved four consecutive markets. In the following, we shall talk in terms of four different rounds. Note the distinction between rounds and periods; a round (being a market) consists of ten periods.”§I, p. 1733 · slider in Advanced settings
- = 10
- Asset life, in periods (per round)
- “An asset's life span is ten periods.”§I, p. 1732
- dividend ∈ {0, 20}¢
- Per-period draw, equiprobable
- “In each period, it pays a dividend of 0 or 20 U.S. cents, with equal probability.”§I, p. 1732
- = 10¢
- Expected dividend per period
- “The expected dividend in each period is 10 cents (= ½ × 0 cents + ½ × 20 cents).”§I, footnote 5
- Fundamental value, by backward induction
- “With k periods remaining, the fundamental value is k × 10 cents.”§I, p. 1732
- endowment A 200¢, 6 shares
- One of two discrete starting bundles
- “Before a market opened, half of the traders started with 200 cents and six assets, while each of the other traders started with 600 cents and two assets.”§I, p. 1733
- endowment B 600¢, 2 shares
- The other discrete starting bundle
- Both bundles have an identical buy-and-hold value of 1,000¢ under the risk-neutral fundamental ; the two types differ only in inventory/cash mix, so the split is distributional, not value-creating.§I, p. 1733
- round-4 replacement R4-⅔ or R4-⅓
- Two-treatment design
- “In the fourth round, depending on treatment, two or four experienced subjects who had participated in the first three rounds were randomly selected, removed, and replaced by the same number of inexperienced subjects.” The paper labels these conditions by the fraction of experienced subjects remaining in round 4: R4-⅔ (four veterans + two fresh, shorthand T2) and R4-⅓ (two veterans + four fresh, shorthand T4); the R4-⅔ / R4-⅓ notation appears in the hypothesis row of Table 2.§I, p. 1733; Table 2, p. 1735
- sessions = 10
- Five per treatment (R4-⅔ and R4-⅓)
- The multi-session batch runner in the DLM panel reproduces DLM's 10-session design (scaled to N = 100) by sequencing 5 × T20 (R4-⅔) then 5 × T40 (R4-⅓) through the simulator in one click; each session uses a fresh engine seed and a fresh two-type endowment draw.§I, Table 1
- payoff Σ final cash + 500¢
- Session payoff per subject
- “Subjects were privately paid, in cash, the amount of their final cash holdings from each round. They were also paid a show-up fee of $5.” All four rounds count; shares held at the end of a round are worth nothing (the asset’s life span has ended).§I, p. 1735
Hidden Constants
- ticks / period = 18
- Agent decision rounds inside one period
- DLM 2005 runs a continuous 2-minute z-Tree double auction per period; this simulator discretizes that window into 18 decision rounds (≈ one agent turn every 6.7 real-time seconds) so the engine loop can step deterministically. 18 is dense enough to reproduce the bubble-crash pattern while keeping the replay buffer compact.engine.js — period-boundary trigger
- naive prior weight = 0.60
- Belief blend for naive Utility agents
- Weight on the agent's own prior when blending incoming peer messages: $V_i^{\text{post}} = 0.60 \cdot V_i^{\text{prior}} + 0.40 \cdot \bar{m}$, i.e. $w = 0.60$ in the Plan I formula (see Architecture Figure 3). Not specified by DLM 2005, which studies human subjects and has no belief-update model. Chosen so naive agents move noticeably toward peers without collapsing onto them.agents.js — UTILITY_DEFAULTS.naivePriorWeight
- skeptical prior weight = 0.90
- Belief blend for skeptical Utility agents
- Same convex combination as the naive weight but $w = 0.90$: $V_i^{\text{post}} = 0.90 \cdot V_i^{\text{prior}} + 0.10 \cdot \bar{m}$, so a skeptical agent hears messages but is barely moved by them. Not in DLM 2005; introduced so the strategy cube contains a "listen but don't trust" archetype.agents.js — UTILITY_DEFAULTS.skepticalPriorWeight
- adaptive weight cap = 0.50
- Max one-period belief shift toward peers
- Upper bound on the fraction of belief an adaptive agent can shift toward the trust-weighted message mean $\bar{m}$ in a single period: even with fully-trusted senders, $w \geq 0.50$ so $V_i^{\text{post}}$ is at most 50% $\bar{m}$ + 50% $V_i^{\text{prior}}$. Not in DLM 2005; guards against runaway over-update from a single high-trust period.agents.js — UTILITY_DEFAULTS.adaptiveWeightCap
- valuation noise = ±3%
- Per-tick uniform noise on the Utility-agent prior
- Before any bias or message update, each Utility agent draws $\text{prior}_t = \mathrm{FV}_t \cdot (1 + b_i + \varepsilon)$, $\varepsilon \sim \mathcal{U}[-n,\, n]$, $n = 0.03$ (see Architecture Figure 2). Not in DLM 2005; added so trade decisions do not degenerate to lockstep when every biased/unbiased agent starts each tick from the identical prior.agents.js — UTILITY_DEFAULTS.valuationNoise
- trust λ = 0.30
- EMA learning rate for the pairwise trust update
- Pairwise trust is updated as $\tau_{r \to s} \leftarrow (1 - \lambda)\,\tau_{r \to s} + \lambda \cdot \text{closeness}$, where closeness $= \max(0,\, 1 - |\hat{v}_s - \mathrm{VWAP}_t| / \mathrm{VWAP}_t)$. $\lambda = 0.30$ weights each new observation at 30%. Not in DLM 2005, which has no messaging layer; chosen for a balance between responsiveness and stability.engine.js — TrustTracker period close-out
- passive fill probability = 0.30
- $p_{\text{fill}}$ heuristic for scoring non-crossing quotes
- Expected-utility score for a passive quote is $\mathrm{EU}(\alpha) = p_{\text{fill}} \cdot U(w_1) + (1 - p_{\text{fill}}) \cdot U(w_0)$ with $p_{\text{fill}} = 0.30$ (see Architecture Figure 2). A full model would estimate $p_{\text{fill}}$ from order-book state; this is a deliberate constant placeholder and is not proposed by DLM 2005.agents.js — UtilityAgent scoring loop
- bias magnitude = 15%
- Persistent over/under-valuation of biased Utility agents
- Applied as $b_i = \delta_i \cdot \beta$ with $\beta = 0.15$; sign set by the per-slot bias direction $\delta_i \in \{-1, 0, +1\}$ (see Architecture Figure 2). Drives the biased U-agent slots in the default strategy cube (U2, U4, U5). Not in DLM 2005; chosen large enough to perturb the market without dominating the risk-preference split.agents.js — UTILITY_DEFAULTS.biasAmount
Agents Pre-run draft · editable before the simulation starts
Note
- Cash
- experimental-currency balance held by agent i at tick t, used to finance bids and grown by realized sales plus end-of-period dividend receipts. The pre-run editable value is the initial endowment ; in Dufwenberg, Lindqvist & Moore (2005) subjects were seeded with either 200¢ or 600¢, while this simulator draws each slot uniformly from [800, 1200] ¢.
- Shares
- holding of the finite-life asset at tick t (initial endowment ). Each held share pays a random dividend drawn from {0, 2} at the end of every trading period (DLM 2005), so the theoretical risk-neutral fundamental value at the start of period t is . DLM endowment classes held 6 or 2 shares; this simulator draws from {2, 3, 4}.
- Wealth
- mark-to-fundamental total wealth, defined as + · , or for Utility agents as + · (Lopez-Lira 2025). The Normalized Agent Utility plot is .
- P&L
- running change in total wealth relative to the initial endowment , reported in experimental cents. Positive values render in green, losses in red. Aggregated across all agents, P&L equals the cumulative dividends paid so the market is zero-sum up to the dividend stream, as in the Smith–Suchanek–Williams design replicated by DLM.
- Subj V
- the Utility agent's private subjective valuation per share — the posterior $V_i^{\text{post}}$ from the active plan (Architecture Figure 3), updated each tick from $\text{prior}_t = \mathrm{FV}_t \cdot (1 + b_i + \varepsilon)$ via the Plan I/II/III belief-revision protocol. Corresponds to the valuation field in Lopez-Lira's (2025) TradeDecisionSchema.
- Report
- the valuation the Utility agent broadcasts to peers in its messages. Under communication strategy $\sigma_m = D$ (deceptive), ≠ via the distortion multiplier $\phi_m$ (see Architecture Figure 3, Plan I card); the lie-gap magnitude drives the trust EMA update $\tau_{r \to s} \leftarrow (1 - \lambda)\,\tau + \lambda \cdot \text{closeness}$ and the mean-lie-magnitude statistic in the Experiment Metrics table.
- Last action
- the most recent decision taken by agent i at tick t, displayed as a coloured tag on the card. In Plan I the agent selects $\alpha^\star_{i,t} = \arg\max_\alpha \mathrm{EU}(\alpha)$ over $\alpha_{i,t} \in \{\text{hold},\, \text{buy@}A_t,\, \text{sell@}B_t,\, \text{bid},\, \text{ask}\}$ scored under the risk-typed utility functional (see Architecture Figure 2).
- Subtitle
- for classic agents, the strategy class (Fundamentalist, Trend follower, Random ZI, Experienced) together with set membership (, , , ). For Utility agents, the risk preference and the agent's sampled CRRA coefficient in the universal form : Risk-loving draws ∈ (−1, 0) (convex, upside-seeking), Risk-neutral pins = 0 (linear expected value), and Risk-averse draws ∈ (0, 1) (concave, downside-sensitive).
Trade & Dividend Feed
Transaction Price Trajectory versus Risk-Neutral Fundamental Value
Tick-level transaction prices (accent line, one dot per executed trade) plotted against the active asset's fundamental-value path (amber dashes). Alternating vertical bands delimit the trading periods of each round. Under the Dufwenberg, Lindqvist & Moore (2005) linear-declining asset a rational market should track the step line exactly; persistent excursions above it are the bubble and the crash toward = in the final period is the collapse. The other five assets (constant perpetuity, linear growth, cyclical, random walk, jump/crash) replace the staircase with their own FV path — the formula above updates accordingly.
Note — symbols appearing in the per-asset FV formulas
- fundamental value at the start of period t (value a rational, risk-neutral holder assigns to one share)
- fundamental value one period ahead — path-based assets (random walk, jump/crash) specify as a function of
- observed transaction price at tick t — drawn as individual trade dots on the chart
- ,
- period indices, 1 ≤ t, s ≤ ; s is the summation index over future periods
- terminal period of the round (default = 20 so that FV1 = 100 for every asset)
- remaining periods through terminal, = − t + 1 — used by the linear-declining asset
- ,
- expected dividend paid at the end of period t (or s) — the per-share cash flow under the asset's public rule
- mean dividend for the linear-declining asset, = = 5¢ (drawn uniformly from {0, 10¢})
- risk-free discount rate (default 0.05) used by the perpetuity and linear-growth assets
- ,
- intercept and slope in the linear-growth dividend schedule = + ·s (defaults = 2, = 0.3)
- i.i.d. Gaussian innovation driving the random-walk asset, ∼ with = 5
- binary jump magnitude for the jump/crash asset: +2 with probability 0.9 (calm) and −30 with probability 0.1 (crash)
- (·, ·)
- floor operator that clips the path-based assets above a positive minimum so FV never becomes non-positive
Order Book
Mispricing Magnitude and Price-to-Fundamental Ratio
Absolute departure of the observed price from the theoretical fundamental value, filled as a red area. In Lopez-Lira (2025) the same information is expressed as the price-to-fundamental ratio : values above one mark an overvaluation regime, values below one mark an undervaluation regime, and ≈ 1 is consistent with rational pricing. The Experiment Metrics panel reports the normalized-deviation and amplitude statistics derived from this series.
Note
- absolute mispricing at tick t
- price-to-fundamental ratio (Lopez-Lira 2025)
Trade Volume per Period
Sum of share quantities exchanged within each trading period. High and persistent bars indicate active speculation; the classic Smith–Suchanek–Williams bubble is typically associated with a volume peak in the inflation phase followed by a cliff as the asset approaches expiry.
Note
- total share volume traded in period t
- order quantity of a single executed trade
Transaction Density over Price × Period
Two-dimensional histogram of share quantity binned by transaction price (vertical axis) and trading period (horizontal axis). Warm cells concentrate the market's liquidity. Comparing the heat cloud against the downward-sloping fundamental staircase reveals whether the market is trading near rational value or persistently above it.
Note
- cumulative share volume in the (price, period) bin
Agent Action Timeline
One row per agent, one mark per decision. Column colour encodes the five-element action set $\alpha \in \{\text{hold},\,\text{buy@}A_t,\,\text{sell@}B_t,\,\text{bid},\,\text{ask}\}$ used inside $\mathrm{EU}(\alpha)$: the two book-crossing actions (buy@At, sell@Bt) render solid, and the two passive posts (bid, ask) render in the softer dashed variant. A small accent dot below the mark records whether the submitted order was filled on the same tick.
Note
- action taken by agent i at tick t
Subjective Valuation: True versus Reported
Solid lines trace each Utility agent's private belief over time. Filled dots mark broadcast messages carrying a reported valuation ; deceptive reports are ringed red and connected to the sender's true belief by a dotted segment — the vertical distance between ring and line is the lie gap. The amber step line is the fundamental value for reference.
Note
- agent i's private (true) subjective valuation at tick t
- valuation reported in a broadcast message
- lie gap for deceptive messages
Normalized Agent Utility over Time
Per-agent expected utility evaluated at the running wealth = + · , divided by the agent's own initial utility so every trajectory starts at 1.0. Lines above the dashed baseline indicate positive risk-adjusted PnL; lines below indicate loss. The risk preference attached to each agent (convex, linear, concave) determines how aggressively a given wealth change is penalised or rewarded.
Note
- universal CRRA utility with per-agent sampled uniformly in (−1, 0) loving · {0} neutral · (0, 1) averse
- mark-to-fundamental wealth at tick t
Asset Ownership over Time
Stacked area of each agent's inventory across ticks. Because the double auction conserves shares, the total height is always the aggregate endowment . Widening bands identify agents who are accumulating, shrinking bands identify distributors, and any dramatic redistribution in the last few periods is typically the experienced trader liquidating before the asset expires worthless.
Note
- shares held by agent i at tick t
- total shares outstanding (conserved across time)
Pairwise Trust Matrix
Heatmap of receiver-to-sender trust values in [0, 1]. The diagonal is masked. Each off-diagonal cell records how well sender s's recent valuation claims aligned with the period's volume-weighted average price, as seen by receiver r. Warm rows identify agents who tend to trust broadly; warm columns identify agents whose claims the population finds credible.
Note
- trust held by receiver r in sender s
- trust learning rate (exponential-moving-average weight)
- 1 − |claim − VWAP| / VWAP, clipped to [0, 1]
Per-Agent Profit & Loss over Time
One line per agent showing running P&L in experimental cents: the agent's mark-to-market wealth = + · minus its initial wealth . Lines above the dashed zero-baseline indicate gains; lines below indicate losses. Unlike Figure 7's risk-adjusted utility, this chart is in raw monetary units so the per-agent coefficient does not enter — every agent is graded on the same cash scale.
Note
- running profit and loss in cents at tick t
- mark-to-market wealth = cash + inventory · subjective valuation
- initial wealth at the start of the agent's first round
Per-Agent Subjective Valuation over Time
One line per agent showing the private subjective valuation the agent assigns to one share at tick t. Each line starts from the agent's prior, then drifts as the active plan's belief-update protocol blends in peer messages, regulator alerts, and (when complex dividends are on) the agent's own dividend sample. The amber dashed line is the risk-neutral fundamental , included as a reference saw-tooth so over- and under-pricing are immediate to read off.
Note
- subjective valuation of agent i at tick t
- risk-neutral fundamental value at tick t
Market-Quality Statistics (Current Session)
Quantitative summary in the notation of Dufwenberg, Lindqvist & Moore (2005) and Lopez-Lira (2025). Haessel R² measures fit of the per-period mean price to fundamental value; the two normalized deviations capture total and average mispricing per share outstanding; amplitude is the peak-to-trough excursion of the mean-price residual normalized by the initial fundamental; turnover is the total shares traded divided by shares outstanding. The lower group reports allocative efficiency, aggregate welfare, and the deception statistics unique to the Utility population.
10-Session Batch Results
Per-round market-quality metrics across the 10-session DLM batch (5 × first treatment + 5 × second treatment). Each row is labelled Rr_Ss (Round r of Session s). dev = mean absolute deviation |P − FV| in ¢; turn = shares traded / shares outstanding; vol = total shares exchanged; payoff = aggregate agent cash at round end.