Experiment settings
Trade settings (total 10)
Risk preferences
AI endpoint ChatGPT · Wang 2026
When the paradigm is set to Wang 2026 and an API key is present, each Utility
agent calls ChatGPT once at the start of the run to anchor its private
subjective valuation. Provider list and endpoint match the lying project's
GPT provider (PROVIDERS.gpt in lying/js/ai-agent.js).
Fields are read fresh from the DOM on every run (no localStorage) and no
call is made if the key field is empty — the simulation falls back to the
deterministic Lopez-Lira belief model.
Experience preferences
Paper constants Dufwenberg, Lindqvist & Moore (2005), §I. Design
- = 10
- Asset life, in periods
- “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
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
- N(F) Fundamentalist = 2
- Pinned rational-anchor background
- Two Fundamentalist agents are seeded into every run as the rational mean-reversion anchor. They buy when the ask is more than 2% below FV, sell when the bid is more than 2% above FV, and otherwise post passive quotes near FV. Not proposed by DLM 2005, which only studies human subjects, but borrowed from the Smith–Suchanek–Williams (1988) lineage that DLM replicates so the market always has an FV-aware counterparty.main.js — App.FIXED_BACKGROUND.F
- N(T) Trend follower = 1
- Pinned momentum / positive-feedback trader
- A single Trend follower carries momentum into every run, detecting slope from the last 6 prints and bidding above (or asking below) the last trade accordingly. Not in DLM 2005; drawn from the De Long–Shleifer–Summers–Waldmann (1990) positive-feedback literature that explains why SSW-style bubbles inflate. Provides the bubble-inflation channel without dominating the population.main.js — App.FIXED_BACKGROUND.T
- N(R) Random (ZI) = 1
- Pinned zero-intelligence liquidity floor
- A single Gode–Sunder (1993) zero-intelligence trader is seeded into every run to provide a thin but persistent liquidity floor: each tick it flips a coin and posts a uniform bid in [0.7·FV, 1.1·FV] or a uniform ask in [0.9·FV, 1.3·FV]. Not in DLM 2005; pinned at one slot so that books never go fully empty even when E and U agents abstain.main.js — App.FIXED_BACKGROUND.R
- naive prior weight = 0.60
- Belief blend for naive Utility agents
- Weight on the agent's own prior when blending incoming peer messages: posterior = 0.60 × prior + 0.40 × mean(messages). 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 90% prior + 10% peer average, 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 in a single period: even with fully-trusted senders the new belief is at most 50% messages + 50% 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 prior = FV × (1 + bias + U(−0.03, +0.03)). 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 trust[r→s] ← (1 − α) × old + α × closeness, where closeness = 1 − |claim − vwap|/vwap for the period. α = 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
- pFill heuristic for scoring non-crossing quotes
- Expected-utility score for a passive quote is EU = pFill × U(filled) + (1 − pFill) × U(not filled) with pFill pinned at 0.30. A full model would estimate pFill 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 prior = FV × (1 + biasAmount) with sign set by the per-slot bias mode (high/low). 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, updated each tick from its prior, persistent bias, per-tick noise, and trust-weighted peer messages. Corresponds to the valuation field in Lopez-Lira's (2025) TradeDecisionSchema.
- Report
- the valuation the Utility agent broadcasts to peers in its messages. Under a deceptive strategy ≠ ; the lie-gap magnitude drives the Trust Matrix EMA update and the mean-lie-magnitude statistic in the Experiment Metrics table.
- Last action
- the most recent decision taken by agent i at tick t, one of {bid, ask, hold}, displayed as a coloured tag on the card. For Utility agents this is the argmax over candidate orders scored under the agent's expected-utility functional (Lopez-Lira 2025).
- 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
Experimental Market-Quality Statistics
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.
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]