Without the rule
Bid or ask anywhere from 1 to 200.
How much of a market’s performance comes from the rules rather than the traders?
These traders just guess a price. They don’t learn or plan ahead. Give them one rule, though, and the market works surprisingly well: don’t make a losing trade.
A small simulation inspired by Gode and Sunder’s 1993 paper. It uses synthetic values, so this is a recreation, not an exact replication.
What the score means: for a simple example, if a buyer values an item at 100 points and it costs the seller 60, trading it creates 40 points of gains. The price splits those 40 points between them. The percentage below is the gains captured so far, divided by the most these values and costs could produce.
Bid or ask anywhere from 1 to 200.
Bid ≤ your value. Ask ≥ your cost.
| Main setup | Without the rule | With the rule |
|---|---|---|
| Stop at 100 quote attempts | 79.3% | 79.9% |
| Long run, up to 100,000 attempts | 50.0% | 99.9% |
Mean gains captured over seeds 0–999 for each treatment. An attempt is a quote, not a completed trade. Long runs stop sooner if inventory runs out or no feasible no-loss trade remains; none reached the cap. All horizon checks (CSV)
The rule barely changes the score at 100 attempts. Later, unconstrained traders keep going into trades that destroy gains. So the long-run result is about this setup and its stopping rules, not every market or every stopping point.
That’s how much available value the trades captured. It is not an investment return, a price forecast, or a test of modern AI.
Means and empirical 5th–95th percentiles across seeds 0–999; the interval is not a confidence interval. All 8,000 runs are included. No runs hit the 100,000-quote cap.
Why is the unconstrained result identical across seeds? Every unconstrained run sold all 36 units. With finite inventory, the final total value minus total cost is fixed, whatever the prices or pairings. The path and who loses still vary.
Allocative efficiency measures total gains. Price behavior measures where trades happen. A market can capture many gains while its transaction prices remain variable. These traces show the selected seed; the shaded region is the competitive price interval implied by the synthetic schedules.
Error is the root-mean-square distance from the price interval, in fictional points. Early/late diagnostics split each run after half its trades. These are descriptive diagnostics, not a general claim of convergence. The asymmetric setup is our own robustness check, not a recreation of Cliff and Bruten’s experiment.
Submit one random quote for their next unit. Buy or sell when their quote crosses the standing offer. Use their highest-value or lowest-cost units first.
A buyer never bids more than its assigned value; a seller never asks less than its assigned cost. This prevents a loss for either party on an executed trade. It is a per-unit limit, not a cash balance.
Randomly choose an active trader, keep the best bid and ask, execute at the earlier quote when they cross, and clear the book after every trade. Strict improvements replace offers; ties leave the older offer in place.
That real markets are always efficient, that intelligence is irrelevant, or that random bots beat AI. Private values, unit ordering, ownership, finite inventory, and auction rules all matter.
This is an original illustrative recreation inspired by Gode and Sunder (1993), using synthetic values and costs. It is not an exact replication of the original five experiments. The paper’s aggregate plots do not provide the full numeric per-trader assignment used here.
Every independent run starts with 6 buyers and 6 sellers, each with 6 units. Each quote is an integer, inclusive of its bounds. Constrained quotes are sampled directly from the allowed range; no rejected proposals are invented. Agents are selected uniformly from those with inventory. Seeds are paired run IDs, not identical realized quote paths.
Stop when either side runs out, at 100,000 quote attempts, or, for the no-loss rule, when the highest remaining current buyer value is strictly below the lowest remaining current seller cost. Equal-value trades remain eligible. Endowments do not replenish. The original study used 30-second machine periods; this uses a reproducible event clock.
PRNG: xorshift32 with shifts 13, 17 and 5. Seed zero maps to 0x6d2b79f5. The main seed (42), four setups, seed cohort (0–999) and method were selected before results were generated. The replay advances by transaction number, with compressed time; it does not compare trading speed.
Realized gains = Σ(buyer value − seller cost) = total buyer profit + total seller profit. Maximum gains pair all values sorted high-to-low with costs sorted low-to-high, summing positive differences. Efficiency = realized / maximum gains. Transfer prices divide the gains between parties; they do not create additional total gains.
The ownership stress has exactly the same aggregate supply and demand as the main setup; only the ownership of units changes. The asymmetric schedule is a separately disclosed check. Neither is claimed to reproduce the historical 1997 critique.
Code and graphics in this demo are original. No historical code or animation assets were reused. Existing demonstrations predate this one.