Experiment settings
Trade settings (N = 6)
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_L$, $U_N$, $U_A$). 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.
Paper constants Dufwenberg, Lindqvist & Moore (2005), §I. Design
- N = 6
- Subjects per session
- “At each session, six subjects participated in a sequence of four consecutive markets for an experimental asset.”§I, p. 1733
- 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
- = 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 by sequencing 5 × T2 (R4-⅔) then 5 × T4 (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 its functional: Risk-loving (convex, upside-seeking), Risk-neutral (linear expected value), and Risk-averse (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 deterministic step function (amber dashes). Alternating vertical bands delimit the ten trading periods. In the Dufwenberg, Lindqvist & Moore (2005) design 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.
Note
- observed transaction price at tick t
- theoretical fundamental value at the start of period t
- expected per-period dividend (drawn uniformly from {0, 2})
- terminal period of the finite-life asset
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 action type and a small accent dot below the mark records whether the submitted order was filled on the same tick. Contiguous green runs identify accumulators; contiguous red runs identify distributors; holds are the market's waiting population.
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
- risk-typed utility: , ,
- 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]
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.