Case study · Backtest
🗓 Backtest period: 2020-01-01..2024-07-01
Spec ID: spec-bayesian-price-learning-liquid-us-stocks-1791975692 · Generated: 2026-10-14 11:25 UTC
Cluster: Bayesian Allocation · Sub Cluster: Price Learning Versus Fixed Belief
A long-only stock-and-cash portfolio updates its return beliefs from daily prices and adjusts stock holdings accordingly. A fixed-belief policy on the same eligible stocks serves as a paired research comparator; the reported trade blotter is the price-observer portfolio.
An investor uncertain about a stock's drift can use subsequent prices to refine that belief. The price observer (PO) changes its target holding as evidence accumulates, while the naive investor (NI) retains its entry-date belief. In the source model, learning has positive ex ante value but can have negative value under particular true drifts. This daily, clipped and cost-bearing implementation tests a related empirical policy, not the paper's frictionless identities.
[code omitted from public view] The specification calls for orders decided after a close to execute at the next session's actual adjusted open, skipping missing opens. The platform cost record instead labels the reported blotter as daily MOC; that execution discrepancy is unresolved.
| Param | Value | Notes |
|---|---|---|
| Universe | Ten highest-volume non-ADR STOCK records per calendar year | Annual screening-table refresh; same eligible names for PO and NI. |
| Backtest window | 2020-01-01..2024-07-01 | Daily bars; model horizon ends 2024-07-01 or the preceding executable session. |
| Prior and volatility | 252 and 126 preceding return sessions; 252 annualization sessions | Entry-date estimates; empirical prior variance v = sigma². |
| Cash rate | Latest DFF observation strictly before stock entry, divided by 100 | Frozen per stock through its horizon. |
| Risk aversion | gamma = 0.02 per USD 1 million | Illustrative paper value, not an empirical estimate. |
| Capital and exposure | $1,000,000 initial; $100,000 initial sleeve per stock; 10% position cap; 4.0 maximum leverage | Long-only dollar targets clipped to each sleeve; unused capital remains cash. |
| Rebalance and execution | Daily close decisions; next-session adjusted-open fills specified | The platform's charged-cost record instead says daily bars, MOC (market-on-close). |
| Commissions | $0.0040 per share, minimum $1.00 per order, capped at 1.00% of trade value | Charged per fill by the results module; all metrics are net of them |
| Slippage | 0 bps — not applied | Not an omission — MOC (market-on-close) fills at the auction print the backtest uses |
| Costs not modelled | short borrow fees / rebate, margin financing on leverage, market impact, exchange/regulatory/clearing pass-through fees, taxes | Excluded deliberately, not unknown |
| # | Concern | Status |
|---|---|---|
| 1 | Prior calibration uses only pre-entry returns. | ✓ Required by the rules; incumbent priors remain fixed. |
| 2 | PO filter uses completed closes, not future opens or scenario drifts. | ✓ Required by the rules; trade-level verification is not supplied. |
| 3 | DFF and annual universe membership are available by their decision dates. | ⚠ DFF must be strictly pre-entry; screening-table point-in-time availability is not evidenced here. |
| 4 | Decision observations and execution fills have the specified chronology. | ⚠ Rules specify next-open fills, but the platform records MOC execution; the reported blotter cannot establish next-open compliance. A completed close used for a same-day open would violate chronology. |
| 5 | Charged costs match the reported backtest. | ✓ commissions $0.0040/share (min $1.00/order); slippage 0 bps — not applied |
The reported PO blotter returned 152.81% over the stated backtest, with a 1.07 Sharpe ratio, 31.77% annualized volatility and a −57.39% maximum drawdown. These figures are net of the platform's charged commissions. Without matched NI results—and with the execution and cost-record discrepancy—they do not show whether price learning outperformed fixed belief.
Recomputed here from the run's stored daily returns, because every annualized figure in the table above is derived from the LENGTH of that array from its first active row (years = n / 252, counted from the first trade). Only total return and max drawdown do not depend on the row count, so when the recomputed and stored values differ by a common factor, those two are the numbers to trust.
| Check | From the run's own returns | Note |
|---|---|---|
| Daily-return rows | 1,131 | 1.00x the 1,134 trading days in 2020-01-01..2024-07-01 |
| Annualized from | 2020-01-03 | 1 leading flat row(s) before the first trade are excluded from Sharpe, volatility and CAGR (1,130 rows count) |
| Distinct dates | 1,131 | one row per date |
| Date span | 2020-01-02 .. 2024-07-01 | |
| Sum of daily returns | 152.81% | matches the reported total return |
| Sharpe from these rows | 1.07 | stored 1.07 |
| Volatility from these rows | 31.77% | stored 31.77% |
| Max drawdown from these rows | -57.39% | stored -57.39% |
| Lowest the book stood | -17.14% | low-water mark, in units of starting capital |
| CAGR from these rows | 22.98% | stored 22.98% |
| Metric | Value |
|---|---|
| Total Return | 152.81% |
| Sharpe | 1.07 |
| Sortino | 1.41 |
| Calmar | 0.40 |
| Max Drawdown | -57.39% |
| Volatility | 31.77% |
| Beta vs SPY | 1.22 |
| Annualized from | 2020-01-03 |
| Win Rate | 78.36% |
| Profit Factor | 3.93 |
| Total Trades | 10280 |
| Symbols | 10 (AAPL, AMD, AMZN, AVGO, GOOGL, META, MSFT, NFLX, NVDA, TSLA) |