STRC rate controller: 14 filed STRC rate decisions charted against price, with replay and stress tools
Strategy changes the dividend rate on its STRC shares each month to keep their price near $100; this project charts every change from the SEC filings and tests simple rules and stress cases against them.
All 14 decisions, with measured price, stated tier and SEC filing, are in docs/reset-history.md.
STRC is Strategy's Variable Rate Series A Perpetual Stretch Preferred Stock. It has no maturity, and management resets its dividend rate each month at its discretion. Strategy's stated objective is for STRC to trade at $99 to $100 (8-K exhibit 99.1, July 30, 2026). Its published guidance ties each reset to STRC's volume-weighted average price (VWAP) for the month:
- Below $95: raise the rate by 50 bp or more.
- $95 to $98.99: raise it by 25 bp (or more).
- $99 to $100.99: no change expected, though management may move 25 bp either way.
- $101 and above: cut it by 25 bp, or more if one-month term SOFR fell.
The guidance is a stated intention, not a contract term (8-K of February 5, 2026; before then the window was the five trading days before month-end). The certificate of designations does not cap increases. It limits each cut to 25 bp plus any decline in one-month SOFR and keeps the rate at or above that SOFR. The chart puts every filed rate next to the price the guidance watches.
All figures use the frozen snapshot: filings to October 21, 2026 and market bars to October 20, 2026.
- Reset history. Of 14 rate decisions, Strategy raised the rate 8 times, from 9.00% to 12.00%, and held it 6 times. The 3 holds since August 2026 came with the measured price below $99, where the stated tiers call for a 25 to 50 bp rise (
scripts/reset_figure.py, table above). - No rule predicts the next reset. The last 3 decisions are the holdout. Always holding scored 0 bp mean absolute error and the stated-tier rule 33.33 bp (
results/fit.json,results/evaluation.json). Three decisions prove little. The chronological evaluation has dated ledgers for ten policies and simple baselines. - Stress replay. The table below asks what rate STRC would need if BTC fell and stayed down.
BTC -40% answer. If BTC falls 40% from $84,048 to $50,429 and stays there, the log-spread model needs a 15.155% dividend rate for STRC to price at $100 (13.626% to 16.684% across assumed slope multipliers 0.5x to 1.5x). The modeled price falls from $99.20 to $79.18, and the stated tiers take 8 months to lift the rate from 12.00% until the price is back in the $99 band. At the required rate, dividends on $8.60bn notional cost $1,303m a year. These are assumed stresses, not forecasts.
| BTC move | Spread form | Required rate, 1x slope | Range, 0.5x to 1.5x slope | Price after shock | Months to $99 band | Annual dividend cost at required rate |
|---|---|---|---|---|---|---|
| -20% | log | 13.433% | 12.765% to 14.101% | $89.33 | 4 | $1,155m |
| -20% | distance | 13.592% | 12.845% to 14.340% | $88.28 | 4 | $1,169m |
| -40% | log | 15.155% | 13.626% to 16.684% | $79.18 | 8 | $1,303m |
| -40% | distance | 16.983% | 14.540% to 19.426% | $70.66 | 11 | $1,460m |
| -60% | log | 17.582% | 14.839% to 20.325% | $68.25 | 12 | $1,512m |
| -60% | distance | 32.088% | 22.092% to 42.083% | $37.40 | more than 24 | $2,759m |
Source: results/scenarios.json (btc_shock_sensitivity), stated-tier policy, 24-month horizon, SOFR 3.88% held flat, cutoff 2026-10-21. Generated by scripts/readme_table.py.
results/scenarios.json also has spread shocks and other response policies.
strc/history.py re-extracts each rate from its cached filing; rules.py separates contract limits from the stated tiers; features.py builds price and rate proxies; fit.py and evaluation.py score policies; credit.py and sim.py generate assumed spread and rate paths. All inputs come from a frozen, hash-verified local cache.
Terms such as stated-tier proxy, mNAV proxy, coverage price, spread form and the $101 ceiling are defined in docs/methodology.md.
Python 3.12+; tested with Python 3.14.7. Standard library only, no credentials. From this repository:
python3 scripts/snapshot.py
python3 scripts/verify_sources.py
python3 -m unittest discover -s tests -v
python3 scripts/run_all.py
python3 scripts/evaluate_policies.py --policy framework
python3 scripts/reset_figure.py --check
python3 scripts/result_figure.py --check
python3 scripts/readme_table.py --checkObserved: 45 tests passed. Generated CSV/JSON are local ignored files. python3 scripts/validate.py verifies sources, runs the tests and compares two demo runs; repeating the demo reproduces seven output hashes. Optional fetch helpers need SEC_USER_AGENT with a contact email for EDGAR and may change the sample.
To try your own stress without rewriting any files, pass --btc-shock (percent, -95 to 400) and/or --spread-shock (basis points, -500 to 2000):
python3 scripts/run_all.py --btc-shock -40 --spread-shock 200Assumed stress: BTC -40% ($84,048 to $50,429), spread +200 bp, stated-tier policy, 24 months.
Start: rate 12.00%, SOFR 3.88%, market data through 2026-10-20.
spread form slope x required rate price months to $99 annual cost
log 0.5 15.626% 76.80 8 1,344 $m
log 1 17.155% 69.95 11 1,475 $m
log 1.5 18.684% 64.23 14 1,606 $m
distance 0.5 16.540% 72.55 10 1,422 $m
distance 1 18.983% 63.22 15 1,632 $m
distance 1.5 21.426% 56.01 20 1,842 $m
Assumptions, not forecasts: fitted spread slopes, fixed notional, $101 price ceiling, discretionary resets.
strc/: parsing, bounds, fitting and simulation.scripts/: restore, integrity checks, figures, optional fetching and demo.snapshot/: compressed frozen-source parts and archive hash.provenance/: readable source URL/date/hash inventories.tests/: source, replay, figure, negative-input and stress checks.docs/: scope, sources, review and verification evidence.assets/: reproducible figures (resets.svg,holdout.svg).
- Public design system: Rahil Design 3.3.0, shared tokens and visual review rules.
- Scope and acceptance: local v1 contract.
- Reset history: all 14 decisions with price, stated tier and SEC filing.
- Chronological evaluation: dated ledgers, simple baselines, losing cases and a five-minute example.
- Methodology: fitting, lookahead limitations and stress assumptions.
- Sources: source coverage and verification.
- Validation: exact checks and reproducibility evidence.
- Correctness review: proven failures, fixes and remaining limits.
- Publication receipt: remote verification evidence.
- Related project: preferred-accrual-ledger: replays the dividend schedules, record-date entitlements and arrears that these rate resets feed into.
The snapshot contains 385 attributed response bodies, including SEC filings, Strategy KPI responses, NY Fed SOFR and Yahoo daily bars. Yahoo is secondary market data. See the source notes and provenance/. Dates of financial observations and UTC fetches are distinct.
- Independent research; no affiliation with Strategy. No investment recommendations or execution.
- Each reset is discretionary, not a price-to-rate formula. The November 2026 rate depends on the October 28, 2026 daily-dividend vote and is excluded. Update, October 28, 2026: Strategy's 8-K filed October 28 (accession 0001193125-26-435451, Item 8.01) reports that, based on preliminary voting results, the requisite vote was obtained to adopt the amended certificates of designations permitting daily dividends, subject to their filing and effectiveness (STRC from November 1, 2026; STRF, STRK and STRD from January 1, 2027). This repository's snapshot, outputs and defaults stay frozen at October 21 and are not recomputed.
- Measured price is a daily typical-price VWAP proxy; overnight SOFR stands in for licensed term SOFR; the mNAV proxy is scaled with hindsight. The policy comparison is retrospective, with models and split chosen after seeing the history.
- Stress results assume a fixed capital structure, perpetual pricing and the $101 ceiling. There is no default, liquidity or causal model.
- Optional fetch helpers are not a rolling update pipeline; the model loads the frozen snapshot.
- Cached third-party bodies are attributed research inputs, with no blanket redistribution license asserted. See source rights.
MIT. The license covers this project's code only. Third-party source documents and data keep their owners' rights.
Part of Rahil Bhavan's projects.