Skip to the page

Why pt-v20

pt-v20 is the default model in tradefloor 0.8.7. A strategy or an agent tested on it meets crashes, recessions, rate shocks and its own trading costs at about the rates it would meet them in a real market. It passed all 40 checks registered for it before its grade, on seeds the tuning never ran, and all 19 statistics of the one-year table sit inside the ranges real markets show. The 40 checks are graded over 21-year histories and the 19 statistics over one year, and in the preset table at the end 15/15 means 15 of the 15 fixed-roster statistics a record measured sit in band. How it is measured has every row.

What it gets right

Crash rates inside the registered band

Over 90 simulated histories of 21 years, the index has 1.96 bear markets of 20% a decade against a real 1.12, 4.52 corrections of 10% against 3.65, and 9.6 sessions a decade down more than 5% against 6.2, all within the half-to-twice band the rows allow. Replaying 2008 and 2020 with the real VIX imposed, the maximum drawdown reads 45% and 37% against a real 57% and 34%.

How often and how long the VIX stays high

The VIX is above 30 on 5.9% of sessions against a real 8.2%, and a spell above 30 lasts 27 sessions on average against 22.

Rates and bonds that move prices

Driven through the real 2022 rate path, the market P/E moves -4.26% per 100 bp of the corporate yield, against the S&P 500's -5.2%. The simulated 10-year Treasury moves 4.96 bp a day against a real 5.41, and stocks and bonds co-move with the signs real markets show.

Earnings that fall in recessions

Around a contraction, aggregate earnings move -17.2% against -17% in Shiller's data, and after the packaged recession's low the index rises 55% within a year, against 69% after March 2009.

Costs that grow with size

The cost of an order grows with the square root of its size: the fitted exponent is 0.48, against the empirical 0.5.

Leak checks

A market that is easy to game makes a bad strategy look good and teaches a learning agent an edge real markets do not have, so some checks are strategies built to find leaks. Reading a headline 5 ticks late earns 15.8 bp, under the 20 bp limit. No price-only rule on the published suite of 20 markets beats buy-and-hold by more than 5 points, value and momentum screens stay inside bands set from real data, and timing the market on published economic data earns at most a point a year. pt-v19 fails both price-only checks.

Long-run return and volatility

The long-run index return is 6.4% a year against a target of 6.25%, with annual volatility of 19.1% against 18.1%.

What a simulated market adds

Fork a market at day 100, raise rates in one copy, and the difference between the copies is the effect of the rate rise on your strategy, with the luck held fixed. Run the same agent on 30 seeds and you have 30 versions of the same economy to test it on, each with crashes and recoveries of its own. A result says how a strategy behaves in this model. It does not forecast returns in a real market.

What changed from pt-v19

  • The tape follows the model price.
  • A company's own news moves its fair value for good.
  • Plain market shocks are permanent up to a volatility ceiling, so the index no longer reverts on the mispricing's half-life.
  • Fear marks fair value down while the VIX is above 40.
  • Agents trade in a book with depth and a queue.
  • The business cycle and GDP are published late, as the agencies publish them. Published at once, they would let an agent that went to cash on a contraction beat holding in every history.

On the same pooled histories pt-v19 fails 16 of the 40 rows. It still runs, and replays exactly, with model="pt-v19".

Limits

The model still falls short in places. The named gaps lists each measured shortfall with the uses it rules out, and tf.envelope.check() refuses a question that depends on one.

Every preset

A shipped preset never changes, so a result names the preset it ran on and replays on it in every later release. Select one with model="pt-v19" or similar. The numbering skips 17. The counts are each record's fixed-roster panel of shape statistics, at one and two years.

PresetStandingIn band, one yearIn band, two years
pt-v20Default from 0.8.515/1514/14
pt-v19Default from 0.8.0, replaced in 0.8.515/1514/14
pt-v18Default from 0.7.0, replaced in 0.8.014/1413/13
pt-v16Default from 0.6.0, replaced in 0.7.014/1413/13
pt-v15Never the default14/1413/13
pt-v14Default from 0.4.0, replaced in 0.6.014/1413/13
pt-v13Never the default14/1413/13
pt-v12Default from 0.3.0, replaced in 0.4.014/1412/13
pt-v11Never the default13/1411/13
pt-v10Default from 0.2.0, replaced in 0.3.013/1412/13
pt-v9Never the default13/1411/13
pt-v8Never the default13/1412/13
pt-v7Never the default13/1412/13
pt-v6Never the default12/149/13
pt-v5Never the default12/148/13
pt-v4Never the default11/148/13
pt-v3Default from 0.1.0, replaced in 0.2.012/147/13
pt-v2Never the default11/148/13
pt-v1Never the default9/147/13