Methodology
S.I.R.O.S. (Systematic Institutional Research On Securities) is a data and analytics utility built on primary sources.
Every number on this site is computed once, in the data pipeline, and the pages only format and render it — they never calculate a financial metric themselves. This page states exactly how each figure is derived, the window and rounding behind it, and the sample size it rests on. It describes the arithmetic; it does not interpret the result, rate it, or suggest a position. Where a figure is a historical base rate, its sample size is stated wherever the figure appears.
Coverage
What each tool tracks, where it comes from, and the date of the most recent data behind it. Every page also carries its own as-of stamp in the footer.
- COT positioning — Speculative positioning in 40 futures markets, from the weekly CFTC Commitments of Traders report. Data as of 18 August 2026.
- Seasonality — Calendar-day return paths, monthly average returns, and positive-close probabilities for 40 markets, from daily price history. Data as of 27 August 2026.
- Interest rates — Policy rates for 5 central banks, from FRED and the BIS. Data as of 1 August 2026.
- Inflation — Headline year-over-year consumer-price inflation for 4 economies, from FRED and the BIS. Data as of 1 July 2026.
COT positioning metrics
Source: the weekly CFTC Commitments of Traders report — the Traders in Financial Futures (TFF) report, futures-only, for financial markets (indices, forex, bonds, and crypto — CME Bitcoin and Ether), and the Disaggregated report, futures-only, for physical commodities (metals, energy, grains, softs, livestock). The speculative read is the Leveraged Funds net position for financial markets and the Managed Money net position for physical commodities — long contracts minus short contracts — for each tracked market.
Report sources and the Legacy toggle. Financial markets use the TFF report (Leveraged Funds = speculative, Dealer/Intermediary = hedger, plus Asset Managers and Other Reportables); physical commodities use the Disaggregated report (Managed Money = speculative, Producer/Merchant = hedger, plus Swap Dealer and Other Reportables). The per-asset page carries a Legacy toggle behind the primary report: the CFTC Legacy futures-only report covers every market (Commercial, Non-Commercial, Nonreportable). The computed metrics below are always taken from the primary (TFF / Disaggregated) report, in both toggle states; the Legacy view carries positions only, no ladder metrics.
Open interest, Change, Change %. Open interest is the total number of outstanding contracts (all traders) in the weekly report. Change and Change % are its week-over-week absolute and percentage differences. These are computed in the export (the site never diffs).
Speculative net. The raw input for every derived COT metric is lev_net = lev_long − lev_short, the Leveraged Funds net position in contracts. 1-week change is its simple week-over-week difference; momentum extends the same idea to net − net(4 weeks ago) and net − net(13 weeks ago). Net positioning is signed and can cross zero, so momentum is a difference in contracts, not a percent change (a percentage through zero is meaningless).
COT Index (0–100). A min–max rescaling of the speculative net over its trailing window — the Larry Williams COT Index: 100 × (net − min) / (max − min), where min and max are taken over the last 156 weekly reports (≈ 3 years) and the result is clipped to 0–100. A reading near 0 sits at the low end of the trailing 3-year range, near 100 at the high end. It is a position within a range, not a probability or a target.
z-score. The same net standardized against its own trailing 156-week window: z = (net − mean) / standard deviation. It expresses how far current positioning sits from its 3-year average in standard deviations. A reading is flagged an extreme when |z| > 2 or the COT Index is at or beyond 95 / 5.
Percentile rank (0–100). A rank-based alternative to the z-score over the same 156-week window: the share of weeks in the window whose net was below the current week, times 100. Being rank-based, it is robust to outliers — one extreme week does not distort it the way it can stretch a min–max range or a standard deviation.
Open-interest normalization (% OI). The net expressed as a share of total open interest: 100 × net / open interest. Because open interest grows over the years, the same contract count means less in a larger market; % OI makes positioning comparable across time and across markets of different size.
Window caveat. Each rolling metric needs history to exist. The pipeline requires at least half the window populated (about 78 of the 156 weeks) before it emits a value, so the earliest weeks of a market's history carry no COT Index, z-score, or percentile. Early in a series these figures rest on fewer than 156 observations — the full 3-year sample is only reached once the market has that much history.
Extreme. A reading is flagged an extreme when |z| > 2 or the COT Index is at or beyond 95 / 5 — equivalently, beyond the trailing 3-year 5th / 95th percentiles. It marks where positioning sits in its own history; it is not a signal.
The per-asset dashboard. Each market's page restates the same data several ways. The latest report table lists every category's long, short, and net positions, the one-week change in net, and each leg's share of open interest. The trader-group split bar shows each group's gross positions (long + short) as a percentage of all displayed groups' gross, so the segments sum to 100%. Positions by category plots the net (long − short) for each group; net vs price overlays any one category's net against the price; the open interest chart tracks total contracts outstanding; and weekly change breaks the selected group's week-over-week move into its long, short, and net legs. The price candles are weekly OHLC. These follow the primary / Legacy toggle.
Seasonal statistics
Source: daily price history from Yahoo Finance (auto-adjusted). All seasonal statistics are averages over complete past calendar years; the current, incomplete year is never mixed into an average — it is only drawn as an overlay.
Calendar alignment. Years differ in length and trading days, so returns are mapped onto a fixed 365-slot calendar (a non-leap reference year; Feb 29 is dropped). Within each year the cumulative return is measured from that year's first session (defined as 0%) and carried forward across weekends and holidays, so every slot holds the last known value. Days before the year's first trade read 0%.
Average path. For a chosen window, the blue line is the mean of those per-year cumulative-return paths, slot by slot — the typical journey through the calendar. The amber overlay is the current year so far, filled only up to the latest observation and left blank beyond it; it is never extrapolated and never enters the average.
Monthly average return. Closes are resampled to month-end and (this month / last month − 1) × 100 gives each month-over-month return; the figure shown is the mean of that month's returns across the window's complete years, rounded to two decimals.
Positive-close probability. The share of the window's years in which that month closed higher than it opened, in percent. It is a descriptive base rate over the sample — not a “win rate.” No position, entry, exit, or outcome is implied, and it says nothing about magnitude or about the next occurrence.
Windows and sample size. The pipeline precomputes every trailing window from 1 to 25 complete calendar years, so choosing a window on a page is a lookup, not a fresh calculation. A market with a short price history simply has fewer complete years than the window requests, so each statistic is exported with the actual number of years behind it. That count is shown as the n years column in the monthly table and in the hero captions — read every seasonal figure against its stated n, especially at the shorter windows where a single unusual year moves the average appreciably.
Low-sample flag and presentation. Futures tickers carry varying history on the data source, so usable depth differs across markets. A market with fewer than 10 complete calendar years is flagged low-sample — shown with a caution, never hidden (honesty rule) — and its per-asset page states its exact depth. On the overview and the monthly bars, a positive average return reads blue and a negative one amber (never red/green). The overview ranks each asset class by the current month's 15-year average return and shows the 1/5/10/15/25-year averages side by side so short-, intermediate-, and long-run seasonality read together.
Interest rates
Source: FRED (Federal Reserve Bank of St. Louis) for the Fed and ECB, and the BIS central-bank policy-rate dataset for the rest. This tool does no arithmetic beyond reshaping published levels — it reads a policy-rate series, finds the most recent change, and formats it.
Fed & ECB (FRED). The Fed maps to the Federal Funds Effective Rate and the ECB to the Deposit Facility Rate, from FRED, requested at monthly frequency, end-of-period — so each point is the rate in force at that month's close. For the Fed, the FOMC target range (the lower and upper bounds the Committee sets) is shown beside the effective rate, which trades inside that band. Current is the latest monthly observation; previous is the level before the most recent change.
Other banks (BIS). The UK, Canada and Australia take their rate from the BIS central-bank policy-rate dataset (WS_CBPOL) — each the bank's official policy rate. FRED's OECD central-bank-rate series for these economies were discontinued, and its remaining fallbacks were 3-month interbank rates rather than the policy rate, so BIS is used instead. All series are monthly, end-of-period, normalized to the same monthly shape so they align in the history chart. The specific instrument is named beside each bank — the Bank Rate for the UK, the Overnight Rate Target for Canada, the Cash Rate Target for Australia.
Direction and the change threshold. The pipeline walks back from the latest month to the start of the current rate level and reads the level just before it. A month-to-month move smaller than 0.05 percentage points is treated as no change, because effective-rate series drift a basis point or two within a single policy setting; a real 25 bp policy move clears that threshold cleanly. Update cadence: monthly, after each bank's rate series is refreshed at its source.
Year-over-year CPI
Source: the published all-items consumer-price index for each economy — via FRED for the US and euro area, and the BIS long consumer-price dataset for the rest. This is the one metric a tool derives rather than reshapes — and it is derived in the pipeline, never in the page.
Data origins. The US uses the CPI for All Urban Consumers and the euro area the Harmonised Index of Consumer Prices, both from FRED. The UK and Canada take their all-items CPI index from the BIS long consumer-price dataset (WS_LONG_CPI, UNIT_MEASURE 628 = the index level, not BIS's ready-made year-on-year change): FRED's OECD CPI series for these economies were discontinued, so BIS is used instead. Every source is read as an index level and the year-over-year change is computed the same way for all of them.
Year-over-year inflation. For a monthly index level at month t: YoY = (level[t] / level[t−12] − 1) × 100, computed on contiguous monthly observations so that t−12 is exactly twelve months back. This is the standard headline-CPI inflation rate. It is rounded to one decimal place — the resolution at which headline CPI is quoted. Prior is the previous period's YoY rate.
Trend and release lag. Trend compares the latest period's YoY to the prior period's; a move smaller than 0.05 percentage points is treated as steady. A period's CPI is published a few weeks after it closes, so the latest available reading trails the calendar — the as-of stamp reflects the most recent period released, not today. Update cadence: monthly, after each source refreshes.
Sources & caveats
Primary sources only. COT positioning comes from the CFTC (the Traders in Financial Futures and Disaggregated reports, futures-only); seasonality from daily price history via Yahoo Finance; interest rates and inflation from FRED (US and euro area) and the BIS (the rest — policy rates from WS_CBPOL, consumer prices from WS_LONG_CPI). Nothing on this site is sourced from, or modelled on, any competitor.
What these figures are not. Everything here is descriptive. There are no scores, ratings, signals, or buy/sell framing anywhere, by design. A COT Index near 100 or a z-score beyond +2 describes where positioning sits within its own history; it is not a forecast and not advice. Historical base rates describe a sample of the past — they carry no claim about the next observation.
Determinism. The pipeline is deterministic and idempotent: rerunning it on the same source data reproduces the same JSON, and the site is a static build over that JSON. When a source revises a past value (FRED and the CFTC both revise), the next run picks the revision up and the figures update accordingly.
Common questions
What is the COT Index?
The COT Index is a min-max rescaling of a market's speculative net position over its trailing 156 weekly CFTC reports (about 3 years), computed as 100 x (net - min) / (max - min) and clipped to 0-100. A reading near 0 means speculative positioning sits at the low end of its own 3-year range; a reading near 100 means it sits at the high end. It is a position within a range, not a probability, a target, or a forecast.
What does a COT z-score of +2 mean?
The z-score standardizes a market's speculative net position against its own trailing 156-week mean and standard deviation: z = (net - mean) / standard deviation. A z-score of +2 means current net positioning sits two standard deviations above its 3-year average. S.I.R.O.S. flags a reading as a historical extreme when the absolute z-score exceeds 2, or when the COT Index is at or beyond 95 or 5. An extreme describes where positioning sits in its own history; it is not a signal and implies nothing about what happens next.
Which CFTC report does each market use?
Financial markets (equity indices, forex, bonds, and crypto — CME Bitcoin and Ether) use the CFTC's Traders in Financial Futures report, futures-only, where the speculative group is Leveraged Funds and the hedging group is Dealer/Intermediary. Physical commodities (metals, energy, grains, softs, livestock) use the Disaggregated report, futures-only, where the speculative group is Managed Money and the hedging group is Producer/Merchant. Every derived metric on the site is computed from that primary report. Each asset page also carries a Legacy toggle showing the CFTC Legacy report's Commercial, Non-Commercial, and Nonreportable positions, which are reported as positions only, without the derived metrics.
How are the seasonal averages and positive-close probabilities calculated?
A month's average return is the mean of that calendar month's month-over-month returns across the complete calendar years in the chosen window, computed from month-end closes. Its positive-close probability is the share of those same years in which the month closed higher than it opened. The current, incomplete year never enters an average; it is drawn only as an overlay. Every seasonal figure is published with the number of complete years actually behind it, because a market with a short price history has fewer years than the window requests, and a single unusual year moves a short-window average appreciably. A positive-close probability is a descriptive base rate over the sample, not a win rate: it implies no position, entry, or exit, and says nothing about magnitude or about the next occurrence.
Where do the interest-rate and inflation figures come from?
Policy rates for the Federal Reserve and the ECB come from FRED (Federal Reserve Bank of St. Louis); the Bank of England, Bank of Canada and Reserve Bank of Australia take their rate from the BIS central-bank policy-rate dataset (WS_CBPOL). Consumer price indexes come from FRED for the United States and the euro area, and from the BIS long consumer-price dataset (WS_LONG_CPI) for the rest. Year-over-year inflation is computed from the published all-items index level as (level[t] / level[t-12] - 1) x 100.
How often is the data updated?
The pipeline runs daily and rebuilds the site only when a source has published new data, so each page's as-of date reflects the underlying release rather than the last build. The CFTC publishes Commitments of Traders data weekly, on Friday, for the prior Tuesday. Policy rates and consumer price indexes are monthly, end-of-period, and are published weeks after the period they describe closes, so the latest available reading always trails the calendar. Sources revise past values; the next pipeline run picks up the revision and the figures update accordingly.
Does S.I.R.O.S. provide trading signals, ratings, or financial advice?
No. S.I.R.O.S. is a data utility: it describes what the numbers show and does not advise. There are no scores, star ratings, signals, or buy/sell framing anywhere on the site, by design. A COT Index near 100, a z-score beyond +2, or a high positive-close probability each describe where a figure sits within its own history or sample; none is a forecast, a recommendation, or a claim about the next observation. Nothing published here is financial advice.