Skip to content
Docs
Get started
Quickstart
Install and make a first call
Authentication
API keys and how to send them
Python client
pip install xfinlink
MCP server
Connect Claude and other agents
Vibe coding
Build with an AI assistant
Data
Prices
Daily price history
Fundamentals
Statements and filings
Metrics
Ratios and derived values
Index membership
S&P 500, Nasdaq-100 and Dow
Insider transactions
Form 4 filings
Institutional holdings
13F positions
Reference
Resolve
Map tickers and identifiers
Search
Find companies and securities
Field reference
Every field, defined
Data coverage
Where each dataset starts and ends
Plans and limits
What each plan includes
Resources
Learn
Blog
Research notes built on real data
Recipes
Worked examples for common tasks
Changelog
What's new in the API
Build
GitHub examples
Sample notebooks and scripts
llms.txt
Docs for language models
Data freshness
When each dataset was last updated
Company
About
Who we are
Licensing
What each plan lets you do
Privacy
How we handle data
Tools
Index lookups
Historical S&P 500 constituents
Members on any date
Historical Nasdaq-100 constituents
Members on any date
Historical Dow Jones constituents
Members on any date
In the API
Index membership
Members on any date, in your own code
Index events
Additions and removals by date
Contact
Pricing
Sign in
Get started
Dashboard
Sign out
Get started
Dashboard
Back
Docs
Resources
Tools
Contact
Pricing
Sign in
Sign out
Start now
Dashboard
Financial data analysis in Python.
Code examples, market analysis, and data quality deep-dives.
All posts
328 posts · Page 1 of 17
S&P 500 Additions: Does Joining Raise a Stock’s Beta?
S&P 500 additions 1995-2023: R-squared with SPY rose 0.035 net of incumbents (t 5.17). Beta rose 0.089, but only 0.032 outside 1998-2001, not significant.
Index & Universe
November 15, 2026
Survivorship Bias in Machine Learning Stock Prediction
Survivorship bias in machine learning stock prediction: trained on today’s S&P 500 list, a model shows a 7.6-point annual spread; on past rosters, 0.0 points.
Index & Universe
November 14, 2026
Dow Jones Additions and Deletions: Which Side Did Better?
Dow Jones additions and deletions since 1999: removed stocks did better in 6 of 10 changes over one year; over five years additions led, 61.2% to 24.3%.
Index & Universe
November 13, 2026
Portfolio Optimization: Survivorship Bias by Weighting Rule
Portfolio optimization survivorship bias, S&P 500 2000-2024: a survivor list adds 6.44 points a year to max Sharpe, 5.20 to equal weight, not a significant gap.
Index & Universe
November 12, 2026
S&P 500 Spin-Offs: How Did They Do After Joining?
S&P 500 spin-offs added 1993-2021 led SPY by a median 3.6 points over 36 months, not a significant lead. The 25 still in the index at end-2024 show 16.6.
Index & Universe
November 11, 2026
Pairs Trading Backtest: Survivorship Bias in the S&P 500
Pairs trading backtest, point-in-time S&P 500 rosters 2000-2024: -0.01% per six months. The end-2024 list shows +0.59%; the survivorship gap is not significant.
Index & Universe
November 10, 2026
How Many S&P 500 Companies Are on Nasdaq? 1975-2024
How many S&P 500 companies are on Nasdaq? 153 of 503 index lines at end-2024, 30.4%, up from 10.0% in 1999; the end-2024 list projected back shows 27.4%.
Index & Universe
November 9, 2026
Do Stocks Recover After a 50% Drop? Survivorship Bias Test
Do stocks recover after a 50% drop? Of 785 S&P 500 halvings in 1995-2019, 38.6% regained the peak in five years; survivorship bias on today’s list shows 60.8%.
Index & Universe
November 8, 2026
Stocks Removed From the S&P 500: The Slide Before Exit
Stocks removed from the S&P 500 but still trading trailed SPY by a median 57.6 points over their last 24 months as members, 1995-2024; 91% lagged.
Index & Universe
November 7, 2026
January Effect Backtest: Survivorship Bias in the S&P 500
January effect survivorship bias test: S&P 500 prior-year losers beat winners by 2.22 points in January 2000-2024 (t 1.46); survivor lists inflate losers.
Index & Universe
November 6, 2026
How Many S&P 500 Stocks Beat the Index Since 2000?
How many S&P 500 stocks beat the index? Of 500 members in January 2000, 55.6% beat SPY through 2024 and 24.8% lost money; a survivor list shows 71.6%.
Index & Universe
November 5, 2026
Look-Ahead Bias in Split-Adjusted Prices, Tested in Python
Look-ahead bias from split-adjusted prices: buying the cheapest S&P 500 fifth on adj_close returned 16.82% a year in 2000-2024, against 10.24% on traded prices.
Index & Universe
November 4, 2026
New vs Veteran S&P 500 Members: Returns by Tenure
S&P 500 members in their first year in the index returned 4.95% a year from 2000 to 2024, against 10.75% for members of 10+ years. Today’s list flips the order.
Index & Universe
November 3, 2026
How to Backtest a Stock Strategy in Python: 7 Steps
How to backtest a stock strategy in Python, in seven steps with real code. One momentum rule earns 8.51% a year done properly, 21.10% on today’s S&P 500 list.
Guides
November 2, 2026
Market Breadth: Survivorship Bias in the 200-Day Indicator
Market breadth survivorship bias: today’s S&P 500 list overstates the share of members above their 200-day average by 4.4 points on average, 15.5 at most.
Index & Universe
November 1, 2026
Stop-Loss Backtest: Survivorship Bias Inflates the Cost
Stop-loss backtest survivorship bias: a 30% trailing stop cost S&P 500 holders 6.09 points a year on point-in-time rosters and 9.64 on today’s list.
Index & Universe
October 31, 2026
Portfolio Diversification: Survivorship Bias Hides Losses
Portfolio diversification and survivorship bias: 3.79% of random 5-stock S&P 500 portfolios lost money over ten years on dated rosters, 0.18% on today’s.
Index & Universe
October 30, 2026
Dividend Strategy Backtest: Survivorship Bias Flips Ranking
Survivorship bias in a dividend strategy backtest: on point-in-time S&P 500 rosters top-yield stocks beat non-payers by 3.31 points a year; on today’s, -6.74.
Index & Universe
October 29, 2026
Short-Term Reversal: Survivorship Bias Creates a Fake Edge
Short-term reversal on point-in-time S&P 500 rosters: last month’s losers beat winners by 0.19 points a year, 2000-2024. Today’s roster shows 5.71.
Index & Universe
October 25, 2026
Low-Volatility Anomaly: Survivorship Bias Reverses It
Low-volatility anomaly on point-in-time S&P 500 rosters: calm stocks beat volatile ones by 3.39 points a year, 2000-2024. Today’s roster flips it to -11.85.
Index & Universe
October 24, 2026
Look-Ahead Bias in Yearly S&P 500 Constituent Lists
Look-ahead bias from a yearly S&P 500 list: applying each December roster to the whole year lifted a 2000-2024 backtest 1.40 points a year, in all 25 years.
Index & Universe
October 23, 2026
Survivorship Bias: Cap-Weighted vs Equal-Weight Backtests
Survivorship bias in an S&P 500 backtest, 2000-2024: today’s roster adds 6.99 points a year under equal weight but only 1.63 points when cap-weighted.
Index & Universe
October 22, 2026
Survivorship Bias Hides 8.6 Points of S&P 500 Drawdown
Survivorship bias understates risk: an equal-weight S&P 500 backtest on today’s roster draws down 47.2% in 2007-09, against 55.8% on point-in-time rosters.
Index & Universe
October 20, 2026
Momentum Strategy Backtest: Survivorship Bias in the S&P 500
Momentum strategy backtest on the S&P 500, 2000-2024: today’s roster lifts the top momentum decile from 8.11% to 21.23% a year and the loser decile more.
Index & Universe
October 19, 2026
Removed From the S&P 500: How Many Companies Come Back?
Removed from the S&P 500 and back again: 33 of 850 removals since 1990 were later reversed, after a median 5.9 years out; 7 returned under a new ticker.
Index & Universe
October 18, 2026
How Long After an IPO Can a Company Join the S&P 500?
How long after an IPO can a company join the S&P 500? Since 2020 no company that floated on its own joined within two years; Moderna took 2.6 years.
Index & Universe
October 17, 2026
How Often Does the S&P 500 Change? Stale Rosters Measured
How often does the S&P 500 change? Enough that a roster refreshed once a year held 20.9 wrong names on an average weekday from 1990 to 2025; monthly, 1.7.
Index & Universe
October 16, 2026
Survivorship Bias Examples in Investing: 7 Real Cases
Survivorship bias examples in investing: closed funds, hedge fund databases and the S&P 500, where 312 of the 500 members on 3 January 2000 are gone today.
Guides
October 15, 2026
S&P 500 Members: 43 of 499 Launch-Day Listings Never Left
S&P 500 members: 1,972 listings have been in the index since 1925. Of the 499 on the 4 March 1957 launch-day roster, 43 never left; 15 now use a new ticker.
Index & Universe
October 11, 2026
S&P 500 Additions: How Big Are New Members at Entry?
How big are companies added to the S&P 500? The median addition was worth $36.0bn on day one in 2024-25, twelve times 1990-94, and back near the index middle.
Index & Universe
October 10, 2026
Largest S&P 500 Companies by Year: Top 10 Since 1980
The largest S&P 500 companies by year since 1980: in this ranking 48 reached a January top 10 and 13 have left the index; a decade on, 4.4 of 10 stay on top.
Index & Universe
October 9, 2026
S&P 500 Additions and Deletions: Full History by Date
S&P 500 additions and deletions history: a dated log of every change since 1928, plus the roster on any past date, so a backtest only trades that day's members.
Guides
October 8, 2026
Which Part of a 13F Is Worth Copying? Top Holdings Against New Buys in Python
Fifteen selective 13F filers over 46 quarters: the ten largest positions compounded at 12.75% a year, positions 11-50 at 12.21%, newly opened positions at 10.18%, SPY at 14.04%.
Signals & Factors
September 17, 2026
How Much of a Ticker History Belongs to Another Company? Entity Resolution in Python
Twenty current S&P 500 members sit on a symbol an earlier company gave up. Splicing the two price histories fabricates a session above 20% in 18 of them and lifts GM annualised volatility from 34.4% to 826.6%.
Prices & Volatility
September 17, 2026
Which Corporate Line Item Turns First? Lead-Lag Analysis of S&P 500 Fundamentals in Python
Across 102 S&P 500 companies with unbroken quarterly records since 2010, no reported line item leads revenue: inventory growth peaks two quarters after it and capital spending one.
Macro & Sectors
September 17, 2026
Financial Data API Licensing: What You Can Redistribute
Financial data API licensing decides what you may show your users. What Alpha Vantage, Twelve Data, Massive, Tiingo and xfinlink permit, September 2026.
Guides
September 17, 2026
How to Pick a Benchmark for a Backtest
How to pick a benchmark for a backtest: match the universe, the weighting, the return basis, and date the membership. One index, three builds, 4.5 points apart.
Guides
September 16, 2026
Are the Market’s Best Days Always Rebounds? Drawdown-State Analysis Across Sectors in Python
SPY and the nine sector SPDRs since 1999: 194 of 200 best sessions arrived while the fund was already more than 10% below its peak, against a 50.1% base rate.
Prices & Volatility
September 16, 2026
How Much of EPS Growth Comes From Share Buybacks? EPS Growth Decomposition in Python
Across 171 large caps from 2014 to 2024, 26.0% of all earnings-per-share growth came from a shrinking share count rather than from profit.
Fundamentals
September 16, 2026
S&P 500 Membership Length: A Kaplan-Meier Survival Analysis
Kaplan-Meier puts the median S&P 500 membership at 13.5 years against 9.6 from ended memberships alone, and exit risk stays flat near 5% a year after year two.
Index & Universe
September 16, 2026
How to Build a Stock Database in Python
A stock database in Python is two tables keyed on a permanent company id, plus a refresh policy that re-fetches an overlapping window instead of appending.
Guides
September 15, 2026
Does Last Quarter’s Best Sector Stay on Top? Sector Rank Persistence in Python
Nine sector ETFs ranked every quarter from 1999 to 2024: return rank correlates -0.007 with the next quarter, while volatility rank holds at +0.77.
Macro & Sectors
September 15, 2026
S&P 500 Margin Expansion: How Much Is Index Turnover?
The S&P 500 net margin rose from 8.91% to 12.04% since 2014, but roster change rather than company performance supplied 0.86 of the 3.14 point gain.
Fundamentals
September 15, 2026
Trading Days vs Calendar Days: Why 252 Is Only an Average
US equity years held 248 to 254 trading days from 1996 to 2025 and hit exactly 252 in only 17 of the 30. How to count sessions instead of assuming.
Guides
September 14, 2026
How Much S&P 500 Profit Skips the Income Statement? Other Comprehensive Income in Python
In 2022 the S&P 500 booked $221bn of comprehensive income losses, 17.9% of reported profit, that never passed through the income statement.
Fundamentals
September 14, 2026
How Many Calendar Anomalies Survive Multiple Testing? Bootstrap Reality Check in Python
The best of 60 month-by-weekday rules on SPY since 1996 pays 0.252% a day at t = 2.28, yet half of all bootstrap searches run on noise beat it.
Signals & Factors
September 14, 2026
Look-Ahead Bias: When Do Quarterly Financials Become Public?
2,781 S&P 500 quarterly filings: the median Form 10-Q reaches the public record 31 days after quarter end, 3.2% by day 20 and 98.4% by day 40.
Fundamentals
September 13, 2026
Does a Bollinger Band Squeeze Predict a Big Move? Band Width Analysis in Python
Band width deciles across 463 S&P 500 names, 2015-2024: a squeeze is followed by the calmest month of the ten, 22.1% volatility against 26.4%.
Prices & Volatility
September 13, 2026
Do Sector Correlations Spike When the Market Falls? Conditional Beta Analysis in Python
On the worst 10% of market days since 1999, sector correlation with the S&P 500 falls from 0.775 to 0.687 while Energy beta climbs from 0.99 to 1.42.
Macro & Sectors
September 13, 2026
Python Stock Data Libraries: What Each Gives You
Python stock data libraries differ most in what a call hands back, who follows the pagination, and how many tickers fit in one call. Compared side by side.
Guides
September 13, 2026
Does the Balance Sheet Change Which Stocks Look Cheap? P/E Against EV/EBIT in Python
Ranking 212 S&P 500 companies on P/E and on EV/EBIT agrees at 0.87, yet the most indebted fifth drops 18 rank places and utilities lose 35.5 places.
Fundamentals
September 12, 2026
Can 2x Leveraged Sector ETFs Beat Their Sector? Volatility Drag Analysis in Python
Nine 2x leveraged sector ETFs over fifteen years: the daily reset costs the sector's variance each year, yet seven of the nine still beat the sector.
Prices & Volatility
September 12, 2026
Why Is Quarterly Cash Flow Year-to-Date in SEC Filings?
Quarterly cash flow is year-to-date in SEC filings because 10-Q rules make interim cash flow statements cumulative. How to recover standalone quarters.
Guides
September 12, 2026
Are Earnings Harder to Forecast Than Revenue? Quarterly Time-Series Models in Python
Across 441 S&P 500 firms, carrying last year's quarter forward misses revenue by 10.1% and net income by 39.5%; Foster's model cuts the revenue error 38%.
Fundamentals
September 12, 2026
Does Revenue Breadth Predict the Stock Market? A Quarterly Diffusion Index in Python
A revenue diffusion index across 63,364 S&P 500 company-quarters correlates +0.48 with last quarter's market return and -0.003 with next quarter's.
Macro & Sectors
September 11, 2026
How Much Leverage Maximises Long-Run Growth? Kelly Sizing in Python
On 4,844 days to September 2026 the growth-optimal leverage on a broad market fund was 2.70x, worth 17.33% a year and a 93.3% peak-to-trough loss.
Portfolio & Risk
September 11, 2026
How to Run an Event Study in Python
How to run an event study in Python: dated events, a clean estimation window, a benchmark and a market model, measured on 41 S&P 500 index additions.
Guides
September 11, 2026
Is a High-Margin Screen Just a Sector Bet? Sector-Neutral Profitability Ranking in Python
Sector explains 10-16% of the S&P 500 profitability spread, yet 62% of the top decile by gross margin is health care and tech against 31% of the sample.
Fundamentals
September 11, 2026
Does Proximity to the 52-Week High Beat Momentum? Conditional Quintile Sorts in Python
Ranking the S&P 500 on nearness to the 52-week high lost 4.26% a year with momentum held fixed, across 126 monthly conditional quintile sorts.
Signals & Factors
September 10, 2026
Does Negative Book Equity Signal Distress? S&P 500 Balance Sheet Screening in Python
29 S&P 500 companies with a current annual balance sheet report negative book equity. All 29 are profitable, 28 cash-generative: a payout artefact.
Fundamentals
September 10, 2026
How Late Does a Bear Market Signal Arrive? Turning-Point Detection in Python
27 declines of 20% or more in six index funds: the median bear-market label arrived 88 trading days after the peak with 65% of the fall already done.
Prices & Volatility
September 10, 2026
How Much Historical Stock Data Do You Need?
How much historical stock data do you need? Five years to check a signal, twenty for a real drawdown. What short windows hide and how deep each source goes.
Guides
September 10, 2026
Does Mean Reversion Survive Trading Costs? Moving-Average Deviations in Python
A 1.5 sigma stretch below the 50-day average paid 78 bp over five sessions; 54.5 of that was the market bouncing, and a 20 bp round trip left 3.8 bp.
Signals & Factors
September 9, 2026
Survivorship Bias: How Much It Adds to an S&P 500 Backtest
Rebuilt from the S&P 500 roster of each January, an equal-weight backtest compounds at 9.97% a year over 2005-2024; today's roster hands it 15.42%.
Index & Universe
September 9, 2026
Does High Profitability Persist? Five-Year Transition Analysis in Python
Eleven S&P 500 cohorts, 4,547 company-years: 62.1% of the most profitable fifth is still there after five years, against 35.7% of the fastest growers.
Fundamentals
September 9, 2026
Log Returns vs Simple Returns: Which to Use
Log returns vs simple returns: use simple returns to combine holdings on one date, log returns to combine dates. Worked Python examples on ten years of data.
Guides
September 9, 2026
Does Mean-Variance Optimisation Beat Equal Weighting? Out-of-Sample Test in Python
Nineteen annual rebalances of point-in-time S&P 500 rosters: minimum variance delivered a 0.799 out-of-sample Sharpe, equal weight 0.624, maximum Sharpe 0.760.
Portfolio & Risk
September 8, 2026
Which Sectors Actually Drive "Sell in May"? Sector Seasonality Analysis in Python
Across 914 S&P 500 companies and 24 years, every sector earns more from November to April, but the gap runs from 12.91 points in Energy to 5.10 in Utilities.
Prices & Volatility
September 8, 2026
Does Free Cash Flow Coverage Predict Dividend Cuts Better Than the Payout Ratio? Point-in-Time Screening in Python
Across 382 S&P 500 dividend payers, a stretched payout ratio and thin free cash flow coverage each flagged a 28% cut rate; failing both flagged 42.9%.
Fundamentals
September 8, 2026
Bulk Stock Data Download vs API: Which to Use
Bulk stock data download vs API: files win for tick-level work across the whole market, an API wins when the job is a defined slice of history.
Guides
September 8, 2026
Does a Stock's Beta Depend on the Benchmark? Cap-Weighted vs Equal-Weighted Markets in Python
Across 466 S&P 500 companies and three years of weekly returns, the average beta is 0.783 against the cap-weighted market and 0.989 against equal weight.
Prices & Volatility
September 7, 2026
How Long Does a Volatility Spike Take to Fade? Half-Life Estimation in Python
An AR(1) puts the half-life of S&P 500 volatility at 3.4 days on weekly blocks and 34 on two-month blocks; after real spikes 14% survives six months.
Prices & Volatility
September 7, 2026
How Much Does a DCF Depend on Its Assumptions? Sensitivity Analysis in Python
A DCF's fair value spans 2.26x across a plausible assumption grid. 53.0% of the S&P 500 sits inside its own band, where the model cannot call the price wrong.
Fundamentals
September 7, 2026
How to Get a List of All US Stock Tickers
How to get a list of all US stock tickers: free exchange and SEC files cover what trades today; delisted names need a registry that keeps entity history.
Guides
September 7, 2026
Do High-Idiosyncratic-Volatility Stocks Underperform? Residual Volatility Sorts in Python
High idiosyncratic volatility earned 0.30% a month more, not less, across 119 point-in-time S&P 500 sorts, and the ranking overlaps a plain vol sort 86.6%.
Signals & Factors
September 6, 2026
Does Company Size Slow Revenue Growth? Gibrat's Law Test in Python
A tenfold rise in revenue costs 1.4 to 2.7 points of annual growth across two point-in-time S&P 500 rosters, but size explains under 2% of the variance.
Fundamentals
September 6, 2026
How to Get Stock Data Into Excel With Python
To get stock data into Excel with Python, pull it in a script, write a CSV, and refresh the workbook from that file. Fundamentals included, on a schedule.
Guides
September 6, 2026
Does a Large Goodwill Balance Predict a Writedown? Impairment Risk Screening in Python
Goodwill above 1% of assets lifts the three-year writedown rate from 1.1% to 16.7% across S&P 500 members. A Python screen built on SEC filings.
Fundamentals
September 5, 2026
Is Residual Momentum Better Than Raw Momentum? Market-Adjusted Decile Sorts in Python
Stripping market beta out of a 12-1 momentum score lifted the S&P 500 long-short spread from -0.94% to 4.24% a year across 102 monthly decile sorts.
Signals & Factors
September 5, 2026
Financial Data API Rate Limits: How Much Do You Need?
Financial data API rate limits are counted in different units by every provider. Size your job first: universe x endpoints x refresh rate, then match the plan.
Guides
September 5, 2026
Does Index-Fund Ownership Make a Stock Move With the Market? 13F Ownership and Beta in Python
484 S&P 500 companies: heavier BlackRock, Vanguard and State Street ownership goes with lower beta, 0.93 against 0.73, not higher. The crowding story fails.
Portfolio & Risk
September 4, 2026
What Is Look-Ahead Bias in Backtesting?
Look-ahead bias is a backtest trading on data that was not public yet. Lag every statement figure to its filing deadline and pick the universe by date.
Guides
September 4, 2026
How Much Drawdown Does Month-End Data Hide? Sampling Frequency and Maximum Drawdown in Python
101 S&P 500 names, 2020-2024: month-end prices show a median worst drawdown of -37.9% against -47.2% on daily prices, hiding 8.3 points of depth.
Portfolio & Risk
September 4, 2026
Do Companies Pay the Tax They Report? Cash vs Book Tax Rates in Python
248 S&P 500 companies over 2014-2023: reported and cash tax rates match in aggregate at 21.3% vs 22.0%, but the median utility booked 21.1% and paid 3.5%.
Fundamentals
September 4, 2026
Does a High Dividend Payout Ratio Slow Earnings Growth? S&P 500 Cross-Section in Python
609 S&P 500 companies, two five-year windows: payout ratio shows no negative link to earnings growth. Rank correlation +0.11, and zero without the 100%+ payers.
Fundamentals
September 3, 2026
Web Scraping vs a Financial Data API: What Breaks
Web scraping vs a financial data API: scraping fits small, current jobs and breaks on point-in-time history, ticker changes, rate limits and terms.
Guides
September 3, 2026
Did Earnings or the Multiple Drive the Last Decade of Returns? Return Decomposition in Python
Across 279 S&P 500 companies over fiscal 2014-2024, the median stock returned 10.6% a year and only 0.56 points of that came from a higher multiple.
Fundamentals
September 2, 2026
What Does a Trailing Stop Cost? Stop-Loss Backtest in Python
A 20% trailing stop on 89 S&P 500 names over 2015-2024 cost a median 114.3 points of total return and beat buy-and-hold on just 19.1% of them.
Signals & Factors
September 2, 2026
Why Do Stock Prices Differ Between Data Sources?
Why do stock prices differ between data sources? Usually one column is split-adjusted and the other as-traded, or the ticker belonged to two companies.
Guides
September 2, 2026
Does an Inventory Build Predict a Margin Squeeze? Cross-Sectional Test in Python
Across 2,949 S&P 500 company-years, those whose inventory outgrew revenue lost 0.86 points more gross margin the next year than those whose inventory lagged.
Fundamentals
September 2, 2026
How Much Revenue Does a Dollar of Acquisitions Buy? Growth Decomposition in Python
Across 562 S&P 500 companies and $3.74tn of acquisition spending over 2014-2024, a dollar spent sits alongside 79 cents of extra annual revenue.
Fundamentals
September 1, 2026
Do Companies Buy Back Stock at Good Prices? Dollar-Weighted Analysis in Python
Across $6.34 trillion of S&P 500 repurchases in fiscal 2015-2024, the median company paid 5.4% more than spending the same amount every year would have.
Data Quality
September 1, 2026
What Data You Need for Comparable Company Analysis
Comparable company analysis needs a drawn peer set, aligned fiscal periods and pre-computed multiples. How to build a comps table in Python that holds up.
Guides
September 1, 2026
How Much Does a Stock Fall on Its Ex-Dividend Date? Event Study in Python
Across 7,690 S&P 500 ex-dividend events, the market-adjusted price drop is 0.90 of the dividend at the median and 0.933 where dividends are largest.
Fundamentals
August 31, 2026
How Seasonal Is Quarterly Revenue? Fiscal Quarter Share Analysis in Python
Intuit books 44.6% of its year in one quarter, Colgate splits it 24.8/24.8/25.2/25.3; across 28 S&P 500 names 78 of 105 post-peak quarters are false declines.
Fundamentals
August 31, 2026
Do Reported Financials Follow Benford's Law? First-Digit Analysis in Python
38,970 leading digits from S&P 500 annual filings: monetary lines fit Benford at MAD 0.0035, diluted EPS at 0.0147, and the gap is magnitude span.
Data Quality
August 31, 2026
What Is Book Value? Why Price-to-Book Stopped Working
Book value is assets minus liabilities. Capitalising R&D takes Merck's price-to-book from 5.43 to 2.41 and Amgen's from 23.81 to 6.63; Exxon barely moves.
Guides
August 31, 2026
How Far Apart Do S&P 500 Stocks Move? Cross-Sectional Return Dispersion in Python
Across 20 years of point-in-time S&P 500 rosters, index volatility explains 5% of member dispersion: 2008 ran 41% vol on 25% dispersion, 2009 27% on 56%.
Index & Universe
August 30, 2026
Fama-French Factor Data: Download or Build Your Own?
Fama-French factor data: download the Ken French library when the factors are an input, and build your own when the universe or the schedule is not published.
Guides
August 30, 2026
How Much Does the Rebalance Date Change a Backtest? 21 Rebalance Days in Python
Running one S&P 500 momentum backtest at 21 different rebalance days spreads the result from -2.72% to -8.47% a year, 5.74 points of pure calendar.
Signals & Factors
August 30, 2026
Does Trading Volume Predict Tomorrow's Volatility? Out-of-Sample Test in Python
460 S&P 500 names, 778,518 name-days: the busiest fifth of sessions is followed by a 1.36x move, but volume lifts out-of-sample R-squared only 0.56 points.
Macro & Sectors
August 30, 2026
Do Company Insiders Predict Their Own Stock's Returns? Form 4 Cross-Section in Python
Across 22,396 S&P 500 company-quarters, names where insiders only bought had already trailed the index by 15.51%, then landed within 1.32% of it.
Signals & Factors
August 29, 2026
How Many Independent Bets Are There in the S&P 500? Principal Component Analysis in Python
Eigenvalues of S&P 500 daily returns, 2015-2025: roughly 490 stocks delivered 13.6 effective bets in 2020 and 88.2 in 2017. Only 6 to 11 factors clear noise.
Portfolio & Risk
August 29, 2026
Can a Company's Revenue Be Forecast From Its Own History? Out-of-Sample Test in Python
Five revenue forecasting rules scored out of sample on 4,764 S&P 500 company-years. Assuming zero growth misses by 7.31%; the best rule reaches 5.98%.
Macro & Sectors
August 29, 2026
What Is EBITDA and Why Do Sources Disagree?
What is EBITDA and why do sources disagree? EBITDA has no GAAP definition, so each source picks its own add-backs. Uber 2025 spans $6.3bn to $8.7bn.
Guides
August 29, 2026
Does the Turn-of-the-Month Effect Still Work? Calendar Anomaly Test in Python
The turn-of-month window returned +0.031% a day against +0.052% for all other days across 696 S&P 500 companies, 2015-2025. p=0.70, and the sign is backwards.
Prices & Volatility
August 28, 2026
Is the S&P 500 Getting More Capital Intensive? Capex Analysis in Python
S&P 500 capex hit 7.44% of revenue in fiscal 2025, the most since 2014, while the median member fell to a 14-year low of 3.46%. Ten companies take 45% of index capex.
Macro & Sectors
August 28, 2026
Do High-Accrual Companies Underperform? Accruals Screening in Python
Sloan's accruals anomaly on 4,751 S&P 500 company-years, 2015-2024: low-accrual names returned 12.84% vs 10.93%, but p=0.447 and the sort does not grade.
Signals & Factors
August 28, 2026
What Does a Financial Data API Cost?
What does a financial data API cost? Paid tiers start near $29/month across four vendors as of August 2026, but batch size and history depth set the real bill.
Guides
August 28, 2026
Do Price Gaps Get Filled? Gap-Fill Rates Against a Random Walk in Python
26,863 S&P 500 opening gaps, 2016-2025: 64.0% of gaps up and 66.3% of gaps down refill within 20 sessions, and a random walk of the same volatility fills 66.3% and 67.3%.
Prices & Volatility
August 27, 2026
What Expected Returns Does the S&P 500 Imply? Reverse Optimization in Python
Reverse optimization on nine point-in-time S&P 500 rosters: the implied return vector is beta times the risk premium to 1e-16, and it ranks risk, not return.
Portfolio & Risk
August 27, 2026
Which Sectors Are Really Cyclical? Revenue Betas vs Stock Betas in Python
S&P 500 sector revenue betas span 0.27 to 7.15 while sector ETF stock betas span only 0.54 to 1.27, so the market compresses cyclicality into a band around 1.
Macro & Sectors
August 27, 2026
How to Build a Stock Dataset for Machine Learning
Build a stock dataset for machine learning on filing_date, not period_end: in 100 S&P 500 names the median quarter reached the SEC 32 days after it closed.
Guides
August 27, 2026
Comparing Companies With Different Fiscal Year Ends
A quarter of the S&P 500 closes its books outside December. Align on period_end rather than the fiscal year label to compare like with like in Python.
Guides
August 26, 2026
How Much Has Corporate Debt Actually Repriced? Effective Interest Rates in Python
The median S&P 500 non-financial paid 3.46% on its debt in FY2021 and 4.30% in FY2025, just 0.28 points above 2019, because fixed coupons reprice slowly.
Macro & Sectors
August 26, 2026
Does Deferred Revenue Predict Next Quarter's Sales? Leading Indicator Test in Python
Deferred revenue growth ranks +0.61 against next quarter's revenue across 50 S&P 500 companies, but this quarter's revenue growth ranks +0.76 and beats it.
Signals & Factors
August 26, 2026
How Much Debt Is Hidden in Operating Leases? Lease-Adjusted Leverage in Python
Across 308 S&P 500 companies, adding operating lease obligations to debt/EBITDA moves the median by 0.15 turns, but 26 owe more in leases than borrowings.
Fundamentals
August 26, 2026
How Much Do Profits Move When Sales Move? Operating Leverage Regression in Python
Across 166 large US non-financials, FY2015-FY2025, 72 of 85 identified operating leverage slopes exceed 1.0, median 1.65, Corning highest at 8.77.
Macro & Sectors
August 25, 2026
How Concentrated Is the S&P 500? Index Weight Analysis in Python
The 25 largest S&P 500 members hold 52.7% of its market value, and the Herfindahl index puts the effective member count at 43, not 500. Measured in Python.
Index & Universe
August 25, 2026
How Long Is Cash Tied Up in a Business? Cash Conversion Cycle Analysis in Python
Cash conversion cycle for 38 large US companies: Apple runs -72 days, Eli Lilly +291. Retailers get financed by suppliers while pharma ties up months of cash.
Fundamentals
August 25, 2026
Broker API vs Data API for Historical Stock Data
Broker API vs data API for historical stock data: brokers meter and pace data around order flow, so trade on theirs and pull backtest history from a data API.
Guides
August 25, 2026
Where to Get Free Cash Flow Data for Stocks in Python
How to get free cash flow data for stocks in Python: a direct free_cash_flow field with xfinlink, or compute it from yfinance, Alpha Vantage, or SEC EDGAR.
Guides
August 24, 2026
Are Stock Returns Skewed? Return Skewness in Python
Over 2016-2026 the S&P 500 (SPY) is more downside-skewed than 13 of its 16 largest members; diversification cuts volatility and concentrates crash risk.
Prices & Volatility
August 24, 2026
Do High-Margin Companies Trade at Higher Multiples? EV/Sales in Python
Across 35 large caps, operating margin explains about a third of the spread in EV/Sales multiples (r-squared 0.32); the residual is where growth is priced.
Fundamentals
August 24, 2026
How Much Profit Becomes Cash? Free Cash Flow Conversion in Python
Across 16 large non-financial companies, cash conversion runs from 133% down to Oracle at -139%; the AI capex build-out, not profitability, drives the gap.
Fundamentals
August 24, 2026
Which Sectors Lead Out of a Market Bottom? Sector Recovery Analysis in Python
Across six S&P 500 bottoms since 1999, consumer staples and health care beat the index in zero recoveries; technology led in all six, by 18.4 points.
Macro & Sectors
August 22, 2026
Are Buybacks Funded by Cash Flow or by Debt? S&P 500 Payout Analysis in Python
S&P 500 payout never exceeded free cash flow in aggregate, yet 36% of companies outspent theirs in 2024 and 65.5% of those raised debt.
Fundamentals
August 22, 2026
What to Look for in Fundamentals Data
What to look for in fundamentals data: line items standardised across filers, stated units, bank and REIT fields, segments, and entity resolution.
Guides
August 22, 2026
Does Cash on the Balance Sheet Cushion a Crash? Quintile Sorts in Python
Cash-rich S&P 500 companies fell 5.82pp further than cash-poor ones across three market declines, and the gap disappears once sector is held fixed.
Fundamentals
August 22, 2026
Do Corporate Insiders Time the Market? S&P 500 Insider Buying Breadth in Python
188 months of Form 4 filings: when almost no S&P 500 insider was buying, SPY averaged 11.3% over the next year against 15.0% for all months.
Macro & Sectors
August 21, 2026
Does Unstable Volatility Warn of Deeper Drawdowns? Vol-of-Vol Sorts in Python
Vol-of-vol across 59,608 S&P 500 stock-months: the wobbliest fifth fell 13.73% next quarter, the steadiest 13.57%, and the gap flips once vol is held fixed.
Prices & Volatility
August 21, 2026
Does Fast Asset Growth Predict Weak Stock Returns? Decile Sorts in Python
Ten years of point-in-time S&P 500 rosters: asset-growth quintiles show no slope, but the 185 company-years with 50%+ growth returned 1.03% against 11.61%.
Fundamentals
August 21, 2026
How to Replace yfinance in a Python Script
Replacing yfinance in Python: close becomes the raw traded price, adj_close is split-adjusted, return_daily is total return. Full call map and two checks.
Guides
August 21, 2026
Nasdaq-100 Changes: Does the Index Effect Still Exist?
164 Nasdaq-100 membership changes, 2014 to 2026: additions show no abnormal return at all, while removals rebound a median 3.78% against QQQ by day 20.
Index & Universe
August 20, 2026
Does the Piotroski F-Score Still Work? Quality Screening in Python
The Piotroski F-Score across 2,825 S&P 500 company-years: high scorers win on hit rate, not on return size, and the spread inverts in recovery years.
Fundamentals
August 20, 2026
How Many S&P 500 Stocks Beat the Index? Return Breadth Analysis in Python
Only 19% of June 2018 S&P 500 members beat the index over the next eight years. Point-in-time breadth and return skewness measured in Python.
Index & Universe
August 20, 2026
Why Beta Differs Between Data Sources
Beta is not one number: window, return frequency, benchmark and adjustment each change it. Worked examples in Python and how to compute beta yourself.
Guides
August 20, 2026
Where to Get Historical Dividend Data for Stocks
Historical dividend data lives in ex-date records, not filings. Where to get it, why two sources report different yields, and how to pull it in Python.
Guides
August 19, 2026
Does a High Dividend Yield Predict a Dividend Cut? Yield-Trap Screening in Python
The top yield quintile cut its dividend within two years 17.0% of the time against 3.1% for the bottom, yet quintiles one through four are flat. The payout ratio only adds information at the top.
Fundamentals
August 18, 2026
Do Old Ticker Symbols Still Point to the Same Company? S&P 500 Ticker Recycling in Python
Replay the S&P 500 roster of 2005 as a plain ticker list in 2026 and 55.7% of symbols return the right company. 6.6% return a different one, with no sign anything is wrong.
Index & Universe
August 18, 2026
What Growth Is Priced Into the S&P 500? Reverse DCF in Python
The cheapest S&P 500 quintile is priced for free cash flow shrinking 3.7% a year, yet those companies grew it 7.2% a year for a decade. One point of discount rate moves implied growth by 2.12 points.
Fundamentals
August 18, 2026
Ticker vs CIK vs FIGI: Which Company ID to Use
Ticker vs CIK vs FIGI: the CIK names the SEC filer, the FIGI names a traded instrument, and a ticker names whoever is listed under it today. Which to store.
Guides
August 18, 2026
Does Illiquidity Still Pay? Amihud Measure in the S&P 500 in Python
The least liquid S&P 500 quintile returned 28.7% a year against 18.1% for the most liquid, but t=1.52. Volatility, unlike return, rises at every step.
Prices & Volatility
August 17, 2026
Where to Get R&D Spending Data for Public Companies
R&D spending is free from SEC EDGAR under the ResearchAndDevelopmentExpense tag. Comparing it across fiscal year-ends and companies is the real work, in Python.
Guides
August 17, 2026
Does R&D Spending Predict Revenue Growth? Cross-Sectional Test in Python
S&P 500 companies spending 19.8% of revenue on R&D grew revenue 15.1% a year over the next three years, against 4.8% for the lightest spenders.
Fundamentals
August 17, 2026
What Actually Drives Return on Equity? DuPont Decomposition in Python
DuPont decomposition of 443 S&P 500 companies, fiscal 2024: margin explains 38.2% of the spread in return on equity, turnover 32.5%, leverage 29.3%.
Fundamentals
August 17, 2026
What Data Do You Need to Measure Portfolio Risk?
Measuring portfolio risk needs total-return series, enough history to cover a crisis, and aligned dates. Volatility, drawdown and correlation in Python, Aug 2026.
Guides
August 16, 2026
Does a 60/40 Portfolio Actually Cut Drawdowns? Stocks and Bonds in Python
From 2008-2025, a monthly-rebalanced 60/40 cut the worst drawdown from 51.9% to 34.2% against all-equity, but in 2022 stocks fell 18.2% and bonds 13.0% together.
Portfolio & Risk
August 16, 2026
Do Steady Margins Mean Calmer Stocks? Cross-Sectional Analysis in Python
Across 43 large caps, 2015-2025, the steadiest-margin third averaged 24.5% stock volatility against 29.9% for the most variable, a Spearman rho of 0.42 (p=0.006).
Fundamentals
August 16, 2026
Do Sectors Diversify When It Matters? Conditional Correlation in Python
Across the 10 SPDR sectors, 2016-2025, average pairwise correlation runs 0.40 in calm markets and 0.73 in stress, cutting effective independent sectors from 5.70 to 2.71.
Prices & Volatility
August 16, 2026
How to Get Historical Market Cap Data in Python
How to get historical market cap data in Python: pull a daily series where price and share count are stored per date, so splits and buybacks stay correct.
Guides
August 13, 2026
S&P 500 Members: How Many Survive 20 Years in the Index?
Only 238 of the 481 S&P 500 companies tracked from 2005 are still in the index in 2025. Point-in-time index turnover and survivorship analysis in Python.
Index & Universe
August 13, 2026
Do S&P 500 Additions Bring New Institutional Owners?
Across 107 S&P 500 additions, holder counts jump 9.5% in the inclusion quarter while BlackRock, Vanguard and State Street add only 0.48pp of shares.
Index & Universe
August 12, 2026
Is Volatility Seasonal? Calendar Month Analysis of Realized Volatility in Python
Across 11 funds and 21 years, calendar month explains 1.16% of monthly volatility against 42.27% for the previous month, and the ranking flips by half.
Prices & Volatility
August 12, 2026
Does Fast Revenue Growth Force Companies to Borrow? Cash Funding Analysis in Python
Across 341 S&P 500 companies from 2019 to 2024, the fastest-growing fifth kept 10.4% of revenue after capex and dividends; the slowest kept just 4.8%.
Fundamentals
August 12, 2026
How Far Back Does SEC EDGAR Data Go?
How far back does SEC EDGAR data go? Filings start in 1993, full-text search in 2001 and XBRL data in 2009. Where to get financial statements before that.
Guides
August 12, 2026
Are One-Time Charges Really One-Time? Charge Frequency Analysis in Python
321 of 382 S&P 500 companies booked a 'one-time' restructuring or impairment charge between 2015 and 2023, and the median did so in four of nine years.
Fundamentals
August 11, 2026
Does Buying the Dip Work? Short-Term Reversal by Volatility Regime in Python
Across eight ETFs since 2006, the day after a down day beats the day after an up day by 21bp when volatility is high, and by 1bp when it is low.
Signals & Factors
August 11, 2026
Alpha Vantage vs Massive vs xfinlink for Fundamentals
Alpha Vantage vs Massive vs xfinlink for fundamentals: all three normalise SEC filings, but statement history, tickers per call and licence terms differ.
Guides
August 11, 2026
How Long Does a Stock Take to Recover From a 50% Fall? Drawdown Analysis in Python
913 falls of 50% or more across 30 years of S&P 500 members: 5.3% recovered inside a year, 46.6% inside five years, and 45.0% never got back.
Prices & Volatility
August 10, 2026
Do Companies That Shrink Their Share Count Outperform? Net Buyback Yield in Python
Do buybacks that actually shrink the share count pay? Across seven point-in-time S&P 500 rosters the shrinkers beat the index by two points a year.
Fundamentals
August 10, 2026
How Much Does the Dow's Price Weighting Distort It? Index Weighting Analysis in Python
How much does the Dow’s price weighting distort it? 55.2% of index weight would have to move to match cap weighting, and five-year returns differ by 45.8pp.
Index & Universe
August 10, 2026
How to Get SEC Form 4 Insider Trading Data in Python
SEC Form 4 insider trading data in Python: filings are due two business days after a trade. Decode the codes so grants are not read as sales.
Guides
August 10, 2026
Can Anything Predict Next Month's Stock Returns? Out-of-Sample R-Squared Testing in Python
216 live monthly forecasts of SPY, 2008-2026: every unrestricted predictor loses to the running historical average, and only volatility clears zero.
Macro & Sectors
August 9, 2026
How Much of a Stock's Return Comes From Its Sector? Variance Decomposition in Python
Across 62,045 point-in-time S&P 500 company-months, sector explains 13.1% of monthly return variance and the company itself 57.3%.
Macro & Sectors
August 9, 2026
Altman Z-Score: Where To Get It in Python
Where to get an Altman Z-Score: read it as one field in Python, or build the five ratios from SEC filings plus a market cap no filing reports live.
Guides
August 9, 2026
Do Value Screens Agree on Which Stocks Are Cheap? Multiple Overlap Analysis in Python
Five valuation multiples ranked on one day across the S&P 500: only 9 of 236 names are cheapest-quintile on all five, and price to book agrees with nothing.
Fundamentals
August 9, 2026
Annual vs Quarterly Financial Data: Which to Use
Annual vs quarterly financial data: use annual for ratios and long-horizon studies, quarterly when timing matters. Fiscal years and TTM explained.
Guides
August 8, 2026
Do High Returns on Capital Persist? ROIC Fade Analysis in Python
Do high returns on capital persist? S&P 500 quintiles 2015-2024: the top fell 24.5% to 15.6%, the bottom rose 1.9% to 7.1%, and 42.5% stayed on top.
Fundamentals
August 8, 2026
Does Past Beta Predict Future Beta? Beta Stability Testing in Python
Do past betas predict future betas? Across 555 two-year pairs of S&P 500 names the correlation is 0.502, and shrinking beta toward 1 cuts forecast error.
Prices & Volatility
August 8, 2026
Do Defensive Sectors Actually Defend? Up and Down Capture in Python
Sector up and down capture, 1999-2026: utilities took 34.8% of the average down month but only 55.7% of the average up month. The two move together at 0.978.
Macro & Sectors
August 8, 2026
How to Choose a Financial Data API
How to choose a financial data API: check licensing, point-in-time history and ticker identity before coverage and price. Free tiers compared, August 2026.
Guides
August 7, 2026
Do Small Caps Actually Beat Large Caps? Size Premium Test in Python
Small caps 2000-2024: the S&P 600 returned 9.55% a year, the Russell 2000 just 7.85%, and large caps 7.86%. The earnings screen explains the gap.
Prices & Volatility
August 7, 2026
What If You Miss the Market's Best Days? Extreme-Day Analysis in Python
Miss SPY's 10 best days since 1996 and 10.01% a year becomes 7.04%. Miss the 10 worst and it becomes 13.37%. Miss both and it barely moves, because they cluster.
Portfolio & Risk
August 7, 2026
Does Rebalancing Add Return? Fixed-Weight vs Drift Portfolios in Python
Rebalancing tested on five asset classes, 2005-2024: the annual rule beat a drifting portfolio by 1.56 points a year in the first decade and lost 0.67 in the second.
Portfolio & Risk
August 7, 2026
Which S&P 500 Companies Are Closest to Default? Merton Distance-to-Default in Python
Merton distance to default on 340 S&P 500 names: Charter at 74% leverage and Super Micro at 11% both sit inside 2.3, and leverage alone misses it.
Fundamentals
August 6, 2026
S&P 500 Deletions: What Happens to Removed Stocks?
Of 92 one-for-one S&P 500 swaps since 2015, 64 removed companies stopped trading; the 20 clean survivor pairs lagged their replacements by 24.6% in a year.
Index & Universe
August 6, 2026
Does the Golden Cross Work? 50/200 Moving Average Crossover Backtest in Python
Eight ETFs, 2005-2024: the 50/200 crossover cost 1.88 points of return a year and cut the average worst drawdown from 54.9% to 34.0%, all of it before 2010.
Prices & Volatility
August 6, 2026
Financial Data for Academic Finance Research
Financial data for academic finance research: EDGAR, the French library and FRED are free and research-grade, but none gives a point-in-time company panel.
Guides
August 6, 2026
Does Skipping the Most Recent Month Improve Momentum? S&P 500 Decile Sorts in Python
S&P 500 momentum deciles, 2006-2026: the 12-1 spread lost 3.57% a year, the version keeping the last month 3.02%, and the skipped month itself trends.
Signals & Factors
August 5, 2026
Does Cointegration Survive Out of Sample? Pairs Trading Validation in Python
49 of 1,048 same-industry S&P 500 pairs passed the cointegration test on 2020-2023; chance predicts 52.4, and 1 passed again on 2023-2026.
Signals & Factors
August 5, 2026
Which Dividends Are Not Covered by Cash? Free-Cash-Flow Coverage Screening in Python
43 of 253 S&P 500 dividend payers do not cover the dividend from free cash flow, and 18 of them still show a payout ratio under 60%. Eleven are utilities.
Fundamentals
August 5, 2026
GICS vs SIC vs NAICS: Which Industry Classification to Use
GICS vs SIC vs NAICS: GICS groups companies as investors compare them, SIC is the code on the EDGAR filing header, NAICS is the federal statistics standard.
Guides
August 5, 2026
How Many Stocks Does It Take to Diversify? Random Portfolio Simulation in Python
Across 435 S&P 500 members, the average 30-stock portfolio ran 17.22% volatility against a 16.39% floor, but one draw in ten fell 25.99% at worst.
Portfolio & Risk
August 4, 2026
How Many Days of Data Does a Volatility Estimate Need? Range-Based Estimators in Python
Across eight liquid ETFs and 912 split-sample tests, seven days of open-high-low-close bars measure volatility as precisely as 21 days of closing prices.
Prices & Volatility
August 4, 2026
How Much of S&P 500 Cash Flow Is Stock Compensation? Cross-Sectional Analysis in Python
Share-based compensation is a median 4.8% of S&P 500 operating cash flow but 24.3% at the 90th percentile; most of the decade’s rise is index composition, not company behaviour.
Fundamentals
August 4, 2026
What Is a 13F Filing? Institutional Holdings Explained
What is a 13F filing? A quarterly SEC report of long US-listed positions from managers over $100m, due 45 days after quarter end. What it shows and hides.
Guides
August 4, 2026
Does Revenue Growth Explain Profit Growth? Cross-Sectional Decomposition in Python
Across 296 S&P 500 companies, revenue growth explains just 21% of the spread in five-year profit growth; margin change accounts for 80% of the variance.
Fundamentals
August 3, 2026
How Much of the Nasdaq 100 Is Already in the S&P 500? Index Overlap Analysis in Python
84 of the 100 Nasdaq 100 members were also S&P 500 members at the end of 2024, and those shared names carried 94.64% of Nasdaq 100 market value.
Index & Universe
August 3, 2026
How Often Does a 99% Value-at-Risk Limit Actually Break? VaR Backtesting in Python
Gaussian 99% VaR broke on 1.96% of days across eight funds and historical simulation on 1.36%, yet seven of eight still failed the independence test.
Portfolio & Risk
August 3, 2026
Real-Time vs End-of-Day Market Data: Which Do You Need?
Real-time vs end-of-day market data: real-time is priced for execution, end-of-day for research. What each tier costs in August 2026, and which one fits.
Guides
August 3, 2026
How Concentrated Are S&P 500 Earnings? Point-in-Time Index Analysis in Python
The 10 largest S&P 500 earners took 23.4% of index profit in fiscal 2010 and 35.9% in 2025, while their share of revenue moved only from 21.8% to 25.4%.
Index & Universe
August 2, 2026
Does Volatility Scale With the Square Root of Time? Variance Ratio Test in Python
Variance ratio tests on six ETFs, 2006-2025: all 30 ratios sit below 1 and SPY reads 0.740 at 20 days, yet nothing rejects the random walk past 10 days.
Macro & Sectors
August 2, 2026
Does Goodwill Distort the Price-to-Book Screen? Goodwill-Adjusted Valuation in Python
67 of 310 non-financial S&P 500 names carry more goodwill than total book equity, 9 inside the cheapest price-to-book quintile; 137 of 243 shift quintile.
Fundamentals
August 2, 2026
How Are Shares Outstanding Reported (and Why They Disagree)
Shares outstanding is reported four ways in one filing: period-end, issued, basic and diluted averages. Why they disagree, and which one market cap needs.
Guides
August 2, 2026
Do Low-Volatility Stocks Deliver Better Risk-Adjusted Returns? S&P 500 Quintile Sorts in Python
S&P 500 volatility quintiles, 2016-2026: the calmest fifth returned 10.24% a year at 12.83% volatility and Sharpe 0.83, the wildest 13.21% at 24.23% and 0.64.
Prices & Volatility
August 1, 2026
Does Trend Following Beat Buy and Hold? Time-Series Momentum in Python
Time-series momentum across 11 asset classes, 2008-2026: no trailing-return signal beats a t-stat of 1.13, yet Sharpe rises from 0.47 to 0.66 on risk cuts.
Signals & Factors
August 1, 2026
Has the Stock-Bond Correlation Flipped? 60/40 Portfolio Risk in Python
Stock-bond correlation in Python: the S&P 500 versus long Treasury correlation broke from -0.42 to +0.06 in August 2020, adding 2.77 points to 60/40 risk.
Prices & Volatility
August 1, 2026
What API to Use for a Stock Screener
What API to use for a stock screener: one that returns many companies per request over a universe you can pin to a date, since a screen is one date, many names.
Guides
August 1, 2026
Which Assets Hedge Inflation Shocks? Macro Factor Betas in Python
Macro factor betas in Python: the S&P 500's inflation beta fell from 2.42 before 2020 to 0.27 after 2021, while energy kept 2.09 and long bonds fell to -1.91.
Macro & Sectors
July 31, 2026
Does Covariance Shrinkage Beat the Sample Covariance? Minimum-Variance Portfolios in Python
Covariance shrinkage in minimum-variance portfolios, Dow 30 2021-2025: a 60-day sample matrix returned 17.01% out-of-sample volatility, shrinkage 12.87%.
Portfolio & Risk
July 31, 2026
Do Faster Inventory Turns Mean Thinner Margins? Gross Margin Return on Inventory in Python
Gross margin return on inventory across 206 S&P 500 members: doubling inventory turnover costs 30% of gross margin, not 50%, so fast turners keep more.
Fundamentals
July 31, 2026
SEC EDGAR API vs Fundamentals API: Which to Use
SEC EDGAR API vs a fundamentals API: EDGAR is free and returns raw XBRL one company at a time; a fundamentals API returns a normalised panel.
Guides
July 31, 2026
Does Fast Earnings Growth Persist? Rank Correlation Analysis in Python
Does fast earnings growth persist? Across 557 S&P 500 members, 2004-2019, the earnings growth rank correlation between windows is -0.03; revenue holds at +0.22.
Fundamentals
July 30, 2026
Split Adjustment Explained: Adjusted Close vs Close
Split adjustment explained: adjusted close restates older prices onto the current share basis, while close is the price that actually traded on the tape.
Guides
July 30, 2026
Which Trading Day of the Month Pays Best? Turn-of-the-Month Analysis in Python
Turn-of-the-month analysis in Python: the classic four-day window has faded to nothing, but the first trading day alone paid SPY 25.86 bps against 3.42 bps on every other day from 1996 to 2024.
Prices & Volatility
July 29, 2026
Can You Use Yahoo Finance Data Commercially?
Can you use Yahoo Finance data commercially? Yahoo's terms bar commercial reuse. What each major stock data licence permits, and what commercial access costs.
Guides
July 29, 2026
How Many Independent Bets Does a Nine-Sector Portfolio Give You? Eigenvalue Analysis in Python
Eigenvalue entropy of the rolling sector correlation matrix, 1999-2026: nine Select Sector SPDR funds behave like 3.5 independent bets on a median day and 1.80 at the 2012 low.
Portfolio & Risk
July 29, 2026
Which Volatility Forecast Wins One Month Ahead? HAR vs EWMA in Python
HAR volatility forecasting in Python: across 750 out-of-sample months on six liquid names, a three-horizon regression cuts squared forecast error 22.8% against carrying last month's volatility forward.
Prices & Volatility
July 29, 2026
How Concentrated Are Institutional Equity Portfolios? Form 13F Concentration Analysis in Python
Form 13F concentration analysis in Python: index trackers' top-ten weight doubled from 16.5% to 29.7% since 2011, and stock pickers concentrated harder.
Portfolio & Risk
July 28, 2026
Do Stocks Earn Their Returns Overnight or Intraday? Return Decomposition in Python
Overnight vs intraday return decomposition in Python: across 33 US large caps a dollar held only overnight grew to $2.69 against $1.72 held only intraday.
Prices & Volatility
July 28, 2026
When Do Corporate Insiders Actually Trade? Form 4 Timing Analysis in Python
When do corporate insiders actually trade? 74,511 S&P 500 Form 4 open-market trades show selling running 2.1x faster in the month after results.
Signals & Factors
July 28, 2026
Data Requirements for Backtesting a Trading Strategy
Data requirements for backtesting: split-adjusted prices, dividend-inclusive returns, a point-in-time universe and identifiers that survive ticker reuse.
Guides
July 28, 2026
What Is Survivorship Bias in Backtesting?
Survivorship bias in backtesting is testing on the companies that survived. 142 of the 495 S&P 500 members of July 2016 are gone; here is how to fix it.
Guides
July 27, 2026
Do High Dividend Yields Come From Bigger Payouts or Falling Prices? Yield Decomposition in Python
Dividend yield decomposition in Python: across 185 S&P 500 payers, 77% of the cross-sectional variation in five-year yield changes comes from price, not payout.
Fundamentals
July 27, 2026
Do Stocks Fall Harder Than They Rise? Downside Beta vs Upside Beta in Python
Downside beta vs upside beta in Python: across 35 large caps the gap between them does not persist out of sample, while market beta ranks hold at +0.89.
Prices & Volatility
July 27, 2026
Does Volatility Targeting Improve Sharpe Ratios? Seven-Asset Backtest in Python
Volatility targeting in Python: across seven asset classes median max drawdown falls from 59% to 47%, but the Sharpe ratio improves on only four of seven.
Prices & Volatility
July 27, 2026
Free Stock Market Data APIs: What You Actually Get
Free stock market data APIs each cap something: Alpha Vantage allows 25 requests a day, Twelve Data 800, xfinlink 100 over a rolling one-year window.
Guides
July 27, 2026
How to Give an LLM Financial Data With an MCP Server
How to give an LLM financial data with an MCP server: paste a hosted server URL into Claude, ChatGPT or Cursor and the model queries a real market data API.
Guides
July 26, 2026
Look-Ahead Bias: Does PEAD Survive Real Filing Dates?
Post-earnings announcement drift in Python: measured from the real SEC filing date the top-minus-bottom spread halves to 1.45% and loses significance.
Signals & Factors
July 26, 2026
Do Insider Buying Clusters Predict Returns? Signal Testing in Python
Testing whether multiple S&P 500 insiders buying in the same month beats a single buyer: 2,699 company-months, 2015-2025, and the cluster does slightly worse.
Signals & Factors
July 26, 2026
S&P 500 Additions: Does the Index Effect Still Exist?
Does the S&P 500 index effect still exist? An event study of 162 additions since 2016 finds no abnormal return at the rebalance close, only a pre-date run-up.
Index & Universe
July 26, 2026
Are Companies Leaving the S&P 500 Faster Than They Used To?
Ten-year survival of S&P 500 entrants has held near 60% since 1980 on three independent estimators, so the collapsing-tenure statistic is censoring bias.
Index & Universe
July 26, 2026
Does Gross Profitability Predict Stock Returns? Quintile Factor Test in Python
Eleven annual quintile sorts on gross profit over assets in a point-in-time S&P 500 universe find no forward return premium: Q5 minus Q1 is -5.3pp, p 0.30.
Fundamentals
July 26, 2026
What Growth Rate Is the Market Pricing In? Reverse DCF in Python
Reverse DCF in Python solving for the free cash flow growth rate implied by the market price of 10 large caps, tested across three discount rates against realised growth.
Fundamentals
July 17, 2026
Does a Strong Balance Sheet Cushion Drawdowns? Leverage and Downside Risk in Python
Quintile and sector-neutral tests of net debt to EBITDA against maximum drawdown across three selloffs, using point-in-time S&P 500 membership to measure whether low leverage cushions declines.
Fundamentals
July 17, 2026
Does Ticker Recycling Corrupt a Mean-Reversion Backtest?
Entity-resolved versus symbol-keyed z-scores on the recycled ticker AA, measuring the phantom mean-reversion signals a 2016 symbol handover injects into a backtest.
Data Quality
July 17, 2026
Survivorship Bias in a Growth Screen's Backtested Edge
Point-in-time versus contaminated S&P 500 universes running one identical revenue-growth screen from 2021 to 2026, measuring the survivorship premium in basis points per year.
Index & Universe
July 17, 2026
Why Do Leveraged ETFs Decay? Measuring Volatility Drag in Python
Decomposition of leveraged ETF decay across six 2x and 3x funds over three years, testing realised volatility drag against the (L squared minus L)/2 theoretical law.
Prices & Volatility
July 17, 2026
Are Consumer Staples Margins Shrinking Under Inflation? Gross Margin Trend Analysis in Python
Comparing gross and operating margins for 10 consumer staples stocks between a 2019-2021 pre-inflation baseline and the latest four quarters to measure pricing power under sustained inflation.
Fundamentals
July 10, 2026
Do Weak Jobs Reports Predict Market Drawdowns? NFP Surprise Event Study in Python
Event study measuring SPY forward returns after historically weak Non-Farm Payroll reports, comparing post-miss returns to unconditional averages with t-test significance.
Macro & Sectors
July 10, 2026
Is the Rotation From Tech to Industrials Backed by Earnings? Relative EPS Growth Analysis in Python
Cross-sectional analysis of median revenue growth vs YTD price returns for technology, industrials, and financials to test whether the mid-2026 sector rotation is supported by earnings fundamentals.
Macro & Sectors
July 10, 2026
Is the Semiconductor Rally Broadening Beyond NVIDIA? Return Dispersion Analysis in Python
Cross-sectional return dispersion and breadth analysis across 10 semiconductor stocks to measure whether the 2026 chip rally is broadening or rotating leadership.
Macro & Sectors
July 10, 2026
Which Stocks Benefit Most When Oil Prices Fall? Oil Beta Screening in Python
Regression-based oil beta screen across airlines, logistics, retail, and hotel stocks to identify which equities benefit most from falling oil prices.
Signals & Factors
July 10, 2026
Do Bond Returns Predict Stock Returns? Granger Causality Test in Python
Granger causality test on monthly Treasury and equity ETF returns to determine whether lagged bond returns predict stock market performance.
Macro & Sectors
June 28, 2026
Which Stocks Actually Drive Portfolio Returns? Shapley Value Attribution in Python
Use cooperative game theory Shapley values to attribute an 8-stock portfolio return to individual stocks, revealing how correlation amplifies or diminishes each holding's true contribution.
Portfolio & Risk
June 28, 2026
Does "Sell in May" Still Work? Calendar Anomaly Backtest in Python
Testing the Halloween indicator across SPY and 7 sector ETFs with 10 years of daily returns and paired t-tests for statistical significance.
Prices & Volatility
June 28, 2026
How to Build Complete Price History Through Ticker Changes? Entity Resolution in Python
Use entity resolution to map tickers like META, GM, and DELL to the correct legal entities across renames, bankruptcies, and privatizations.
Index & Universe
June 28, 2026
Are KO and PEP Cointegrated? Pairs Trading Signal Construction in Python
Engle-Granger cointegration test on three classic same-sector pairs with z-score signal construction for pairs trading.
Macro & Sectors
June 28, 2026
Which Commodities Have the Strongest Momentum? Rotation Backtest in Python
Backtest a top-two monthly momentum rotation across commodity ETFs against an equal-weight basket and DBC.
Signals & Factors
June 18, 2026
Which Commodity ETFs Have the Worst Tail Risk? Expected Shortfall in Python
Rank commodity ETFs by five-year expected shortfall, volatility, maximum drawdown, and worst-day loss.
Prices & Volatility
June 18, 2026
Are Gold Miners Leveraged Gold Bets? Rolling Beta Analysis in Python
Estimate full-sample and rolling beta for gold miners versus GLD.
Prices & Volatility
June 18, 2026
Does the Base-Metals-to-Gold Ratio Lead Cyclical Stocks? Signal Test in Python
Test whether the DBB/GLD base-metals-to-gold ratio predicts forward returns for cyclicals and SPY.
Macro & Sectors
June 18, 2026
Can Risk Parity Tame Commodity Volatility? Portfolio Optimization in Python
Backtest inverse-volatility commodity risk parity against equal-weight and DBC benchmarks.
Portfolio & Risk
June 18, 2026
Are Power Stocks Becoming an AI Infrastructure Trade? Momentum Screening in Python
Screen power, grid, and electrification stocks by one-year momentum, revenue growth, valuation, and drawdown.
Macro & Sectors
June 17, 2026
Which AI Chip Stocks Have Margin Momentum? Profitability Trend Analysis in Python
Compare AI-exposed semiconductor stocks by annual revenue growth, gross-margin change, operating margin, and free-cash-flow margin.
Fundamentals
June 17, 2026
Which AI Stocks Are Cheapest Relative to Growth? Growth-Adjusted Valuation in Python
Rank AI platform, software, and semiconductor stocks by P/E per revenue-growth point and free-cash-flow yield.
Fundamentals
June 17, 2026
Does AI Stock Leadership Persist? Momentum Backtest in Python
Backtest a monthly top-three AI momentum strategy against an equal-weight AI basket.
Signals & Factors
June 17, 2026
Which AI Stocks Have the Cleanest Balance Sheets? Net Cash Screening in Python
Compare AI-linked companies by net cash, debt-to-assets, free-cash-flow margin, and interest coverage.
Fundamentals
June 17, 2026
Can Risk Parity Reduce Mega-Cap Drawdowns? Portfolio Optimization in Python
Test whether inverse-volatility weighting reduces mega-cap portfolio volatility and drawdown versus equal weight.
Portfolio & Risk
June 15, 2026
Which Growth Stocks Are Self-Funding? Cash-Flow Quality Screening in Python
Rank growth stocks by revenue growth, free-cash-flow margin, cash-to-debt, and valuation.
Fundamentals
June 15, 2026
Which Sectors Struggle When the Dollar Rallies? Sector Rotation Analysis in Python
Measure next-week sector returns after dollar rally and weak-dollar weeks.
Macro & Sectors
June 15, 2026
Do Cheap Stocks Hold Up When Bonds Sell Off? Valuation Rotation in Python
Compare high and low earnings-yield stock baskets during long-bond selloffs.
Fundamentals
June 15, 2026
Does the Nasdaq 100 Have Better Growth Quality Than the Dow? Index Constituent Analysis in Python
Compare Nasdaq 100 and Dow constituents by growth, cash-flow quality, and valuation.
Index & Universe
June 15, 2026
Do Healthcare Cash-Flow Margins Predict Returns? Signal Evaluation in Python
Test whether improving healthcare free-cash-flow margins were followed by stronger six-month stock returns.
Signals & Factors
June 12, 2026
Which Dividend Stocks Survive a Cash-Flow Stress Test? Dividend Screening in Python
Rank dividend stocks by yield, payout ratio, leverage, and free-cash-flow margin instead of yield alone.
Fundamentals
June 12, 2026
Does Heavy Insider Selling Predict Weak Returns? Insider Flow Test in Python
Aggregate open-market insider buys and sells by month and compare forward returns after heavy-selling clusters.
Signals & Factors
June 12, 2026
Which Retailers Have Positive Operating Leverage? Margin Screening in Python
Compare revenue growth, operating margin change, and free-cash-flow margin across large retailers.
Macro & Sectors
June 12, 2026
Is MSTR a Leveraged Bitcoin Proxy? Rolling Beta Analysis in Python
Measure MSTR beta, correlation, volatility, and drawdown against IBIT and other Bitcoin-linked equities.
Portfolio & Risk
June 5, 2026
Is Micron's Memory Cycle Recovering? Inventory and Margin Forecasting in Python
Use revenue growth, gross margin, inventory, and free cash flow to test the quality of Micron's semiconductor-cycle rebound.
Macro & Sectors
June 5, 2026
Which Sectors Work When Bonds Rally? Rate-Sensitive Rotation in Python
Rank sector ETFs by their average return during top-quintile Treasury bond rally windows.
Prices & Volatility
June 5, 2026
Do One-Month Price Extremes Reverse? Signal Evaluation in Python
Test whether bottom-decile and top-decile one-month returns lead to mean reversion or momentum continuation.
Signals & Factors
June 5, 2026
Do Low-Volatility S&P 500 Stocks Reduce Drawdowns? Factor Test in Python
Use point-in-time S&P 500 membership to compare low-volatility and high-volatility baskets over the last year.
Signals & Factors
June 5, 2026
Is AI Capex Paying Back Fast Enough? Revenue Hurdle Forecasting in Python
Stress-test AI infrastructure capex by comparing the revenue required to pay back spending against actual revenue growth.
Macro & Sectors
June 1, 2026
Could Shorter AI Asset Lives Hit Earnings? Depreciation Stress Test in Python
Estimate how sensitive AI infrastructure earnings are to shorter depreciation assumptions and faster asset write-downs.
Fundamentals
June 1, 2026
How Much AI Capex Risk Can a Portfolio Remove? Constrained Optimization in Python
Use constrained optimization to reduce AI capex exposure while preserving selected mega-cap technology exposure.
Portfolio & Risk
June 1, 2026
Is the AI Capex Trade Crowded? Rolling Volatility and Sector Rotation in Python
Measure whether AI infrastructure stocks are behaving like a crowded trade and identify sector baskets with lower correlation.
Prices & Volatility
June 1, 2026
Did the AI Boom Come From Existing S&P 500 Members? Point-in-Time Momentum Test in Python
Use point-in-time S&P 500 constituents to test whether AI momentum was investable from the start of 2023 without survivorship bias.
Index & Universe
June 1, 2026
Is AI Revenue Circular? Customer-Vendor Capex Loop Analysis in Python
Test whether AI infrastructure capex and supplier revenue show a reinforcing customer-vendor loop across major buyers and suppliers.
Data Quality
May 31, 2026
Is the AI Trade Connected to Private Credit? Rolling Correlation Network in Python
Measure whether AI stocks and private-credit asset managers trade as one risk cluster using correlations, rolling linkage, and beta.
Data Quality
May 31, 2026
Is Apollo More Balance-Sheet Sensitive Than Peers? Leverage Screen in Python
Compare Apollo's balance-sheet intensity with asset-manager peers using assets-to-equity and cash-flow productivity.
Fundamentals
May 31, 2026
Are AI Earnings Supported by Cash Flow? Accrual and Capex Screen in Python
Screen AI-linked companies for cash conversion, free cash flow margin, capex burden, accrual ratio, and stock-based compensation.
Fundamentals
May 31, 2026
Can Defensive Stocks Hedge AI Drawdowns? Basket Regime Test in Python
Test whether defensive stocks hedge AI drawdowns using bottom-decile monthly AI basket returns versus defensive blue chips and SPY.
Prices & Volatility
May 31, 2026
How Fast Does the Market Price In Fed Decisions? FOMC Event Study in Python
Pre-FOMC drift: +0.40% in the 5 days before announcement. Announcement day itself: -0.11%. Post-drift: +0.28%.
Prices & Volatility
May 20, 2026
How Much Are Options Sellers Overpaid? The Variance Risk Premium in Python
VIX exceeds realized vol 84% of days. Mean VRP = +3.6%. Options sellers are systematically overpaid — this is the vol risk premium.
Prices & Volatility
May 20, 2026
Does the Oil-to-Gold Ratio Signal Recessions? XLE/GLD Backtest in Python
When XLE/GLD ratio rises fastest (Q5), forward 6-month SPY return = -0.1%. When it falls (Q1), SPY returns +13.5%. Contrarian signal.
Data Quality
May 20, 2026
Does a Long Energy / Short Bonds Portfolio Capture Inflation Surprises? Factor Construction in Python
Long XLE / short TLT returns +26% annualized during hot CPI months, -23% during cool months. Factor Sharpe: 0.33.
Data Quality
May 19, 2026
Can a Hidden Markov Model Detect Oil Market Regimes? HMM Analysis in Python
A 2-state HMM on XLE returns identifies single-day crisis spikes (280% annualized vol) vs a persistent calm regime (25% vol).
Prices & Volatility
May 19, 2026
Do Grain Prices Predict Food Inflation? Granger Causality Test in Python
Grain prices Granger-cause food CPI at lag 6 (p=0.021). Food CPI does not Granger-cause grains. Unidirectional supply-chain transmission.
Prices & Volatility
May 19, 2026
Does the Corporate Credit Spread Predict Stock Market Crashes? BAA-AAA Spread Analysis in Python
When BAA-AAA spread is widest (Q5), forward 3-month SPY drawdown averages -9.8% vs -6.3% for tight spreads.
Data Quality
May 19, 2026
Do Oil Stocks Hedge Inflation? Rolling Beta Analysis in Python
XOM inflation beta is positive but significant only 14% of the time. The oil-as-inflation-hedge claim does not survive statistical testing.
Data Quality
May 19, 2026
Which Stocks Are Most Rate-Sensitive? Equity Duration via Bond Beta in Python
PG and JNJ move with bonds (long duration, rate-sensitive). XOM moves against bonds (short duration). TLT-beta analysis.
Data Quality
May 17, 2026
Which Companies Have the Highest Accrual Ratios? Earnings Quality Screening in Python
NVDA accrual ratio +0.084 (lowest quality). META at -0.151 (highest quality). The gap between earnings and cash flow.
Fundamentals
May 17, 2026
Is Alpha Persistent or Decaying? Rolling Sharpe Ratio Analysis in Python
NVDA Sharpe above 1.0 for 57% of the last 3 years. XOM only 30%. Rolling windows reveal alpha persistence.
Prices & Volatility
May 17, 2026
Are Markets Trending or Mean-Reverting? Hurst Exponent Analysis in Python
Hurst exponent measures long-range dependence. H > 0.5 = trending. H < 0.5 = mean-reverting. H = 0.5 = random walk.
Prices & Volatility
May 17, 2026
Is Consumer Discretionary vs Staples a Leading Indicator? XLY/XLP Ratio Analysis in Python
When XLY/XLP is extreme, forward SPY returns are weak. The discretionary-to-staples ratio as a macro signal.
Data Quality
May 17, 2026
Does Heavy Capex Predict Future Stock Returns? Capital Expenditure Analysis in Python
META capex intensity hit 34.7% — $70B in one year, up 87%. AMZN at $132B. Who is investing the most?
Fundamentals
May 16, 2026
How to Estimate Cost of Equity Using CAPM in Python
TSLA cost of equity: 16.5%. JNJ: 4.6%. A 12-point spread that directly impacts DCF valuations.
Data Quality
May 16, 2026
Is Volatility Predictable? Testing for Volatility Clustering in Python
SPY volatility clusters (LB=129, p=0.0000). NVDA does not (p=0.80). Ljung-Box test on squared returns.
Prices & Volatility
May 16, 2026
Which Industrials Are Overleveraged? Net Debt to EBITDA Screening in Python
Boeing: 8.2x net debt/EBITDA. XOM: 0.4x. The credit analyst’s leverage metric.
Fundamentals
May 16, 2026
GM Before and After Bankruptcy: Why Entity Resolution Matters for Financial Data
Old GM (entity 4) filed for bankruptcy in 2009. New GM (entity 5) IPO’d in 2010. Same ticker, different company.
Data Quality
May 16, 2026
What Is Adjusted Beta? Merrill Lynch Beta Shrinkage in Python
TSLA shrinks from 2.04 to 1.69. XOM flips from -0.25 to +0.17. The Merrill Lynch formula pulls noisy betas toward 1.0.
Data Quality
May 15, 2026
How Good Is a Stock Pick? Information Ratio and Tracking Error in Python
NVDA IR of +1.32 (strong alpha). JNJ +1.11 on only 48% hit rate. MSFT -1.53 (consistent underperformance vs SPY).
Data Quality
May 15, 2026
Do Stock Returns Follow a Normal Distribution? Testing for Fat Tails in Python
All 7 stocks reject normality (Jarque-Bera). TSLA kurtosis 11.83 vs normal 3.0. NVDA sees 5.9x more 3-sigma events than expected.
Prices & Volatility
May 15, 2026
Which Large Caps Have the Highest Free Cash Flow Yield? FCF Screening in Python
AAPL FCF yield 3.8% on $102B free cash flow. AMZN 2.1% despite $54B FCF. Screen 10 mega-caps by cash generation efficiency.
Fundamentals
May 15, 2026
Which Sectors Won Over 5 Years? Sector Rotation Analysis in Python
Technology +187% over 5 years. Energy went from worst to first. Sector rotation analysis with annualized returns and max drawdowns.
Data Quality
May 15, 2026
How to Forecast Stock Volatility with GARCH Models in Python
XOM and JPM in HIGH volatility regime (persistence=0.999). AAPL and NVDA shocks fade faster. GARCH(1,1) forecasting.
Prices & Volatility
May 14, 2026
Are Stock Prices Mean-Reverting? Augmented Dickey-Fuller Test in Python
Tested 6 stocks: ALL prices have unit roots (random walks). ALL returns are stationary. The math behind mean reversion.
Prices & Volatility
May 14, 2026
How to Calculate CAPM Alpha and Beta with Regression in Python
JNJ: +39.4% alpha with beta of 0.06. NVDA: +22.3% alpha on 1.75x leverage. META: -33.7% alpha. Full CAPM regression.
Data Quality
May 14, 2026
How to Compare Sector Sharpe Ratios and Sortino Ratios in Python
Tech Sharpe: 2.48 (exceptional). Financials: -0.29 (T-bill beat it). Sortino reveals upside vs downside vol split.
Data Quality
May 14, 2026
DELL: Why Stitching Historical Price Data Together Is Wrong
Dell Inc (1988-2013) and Dell Technologies (2018-present) share the ticker 'DELL' but are different companies. Entity resolution prevents fake data.
Data Quality
May 14, 2026
How to Analyze Drawdown and Recovery for Bank Stocks in Python
Citigroup: -14.8% drawdown, recovered in 28 days, +67% 1Y. Wells Fargo: -23.7% and still underwater.
Prices & Volatility
May 13, 2026
How to Screen SaaS Stocks by Revenue Growth and Cash Flow in Python
6 SaaS stocks all growing 20%+. Only DDOG is GAAP profitable. ZS has the highest OCF margin at 36%.
Fundamentals
May 13, 2026
How to Screen REITs by Dividend Yield and Valuation in Python
VICI yields 6.2% at 10.9x PE. AMT at 22.8x P/B reflects tower REIT goodwill. WELL 156x PE is misleading — use FFO.
Fundamentals
May 13, 2026
How Correlated Are the Magnificent 7? Intra-Group Correlation in Python
AAPL and MSFT: 0.128 correlation — barely move together. AMZN and META at 0.443 are the most redundant pair.
Data Quality
May 13, 2026
AAPL vs XOM: Do Individual Stocks Have Seasonal Patterns?
AAPL's best month: July (+6.7%, 100% win rate). XOM's best: January (+8.1%). Opposite seasonal patterns.
Prices & Volatility
May 13, 2026
How to Rank Large-Cap Stocks by Momentum in Python
Rank 15 large caps by 3-month momentum. UNH leads at +39.4%, HD trails at -18.3%. 57.7% spread.
Prices & Volatility
May 12, 2026
How to Build a Multi-Endpoint Financial Dashboard in Python
Chain index, prices, fundamentals, and metrics into one dashboard. AAPL +47.4% 1Y, CRM -35.6%. Survivorship-bias-free.
Data Quality
May 12, 2026
How to Compare Volatility Across Energy Stocks in Python
All 6 energy stocks positive over 1Y. MPC +67% return but 42% rolling vol. CVX is the defensive play at 22% vol.
Prices & Volatility
May 12, 2026
How to Screen Healthcare Stocks by Valuation in Python
MRK cheapest at 15x PE with 35% ROE. LLY at 42x PE is the GLP-1 growth premium. PFE yields 6.7% but ROE is only 9%.
Fundamentals
May 12, 2026
How to Build a Sector Correlation Matrix for Portfolio Diversification in Python
Energy has near-zero correlation with every other sector. Tech and Consumer Staples are negatively correlated (-0.15).
Data Quality
May 12, 2026
How to Find Oversold and Overbought Stocks Using Z-Scores in Python
Screen 10 large caps for mean reversion signals. JNJ oversold at z=-1.93, GOOGL overbought at z=+3.28.
Prices & Volatility
May 12, 2026
How to Measure Earnings Quality: Cash Flow vs Net Income in Python
CRM generates 2x more cash than it reports in net income. NVDA is the only mega-cap below 1.0. OCF/NI earnings quality screen.
Fundamentals
May 12, 2026
How to Build a Multi-Factor Stock Screen in Python (Value + Momentum + Quality)
Combine earnings yield, 6-month momentum, and ROE into a composite score. XOM tops the ranking, ABBV finishes last.
Data Quality
May 12, 2026
How to Build a Simple DCF Model for Any Stock in Python
A naive DCF says every mega-cap tech stock is overvalued. AMZN at -95%. Why DCF assumptions matter more than the model.
Data Quality
May 12, 2026
How to Screen Tech Stocks by Revenue Growth in Python
Rank 10 tech stocks by YoY revenue growth. NVDA leads at +65.5%. META flagged as growth trap: revenue up but earnings down.
Fundamentals
May 9, 2026
How to Screen Stocks by Balance Sheet Health in Python
Screen 10 major stocks for liquidity and leverage. Apple has the worst balance sheet of the mega-caps — by design.
Fundamentals
May 9, 2026
Is "Sell in May" Real? SPY Monthly Seasonality Over 10 Years
"Sell in May" is wrong — May was positive 91% of the time. November is the real best month. July has a 100% win rate.
Prices & Volatility
May 9, 2026
How to Compare Sector Performance YTD Using Python
Track all 11 GICS sectors via SPDR ETFs. 31.9% spread between Energy (+24.6%) and Health Care (-7.3%) YTD.
Data Quality
May 9, 2026
How to Screen Dividend Stocks by Yield and Quality in Python
Screen 15 dividend payers by yield, P/E, and ROE. Only 7 of 15 pass the quality filter. VZ tops at 5.8%.
Fundamentals
May 9, 2026
How to Calculate Max Drawdown and Recovery Time for Any Stock in Python
Calculate max drawdown and recovery time for growth vs defensive stocks. Growth drew down 1.7x more but sometimes recovered faster.
Prices & Volatility
May 9, 2026
How to Compare Profitability Across Mega-Cap Tech Stocks in Python
Rank AAPL, MSFT, GOOGL, META, AMZN, NVDA by margins, ROE, ROIC, and margin efficiency. NVDA dominates.
Fundamentals
May 9, 2026
Why Ticker Symbols Are Unreliable: The Recycling Problem Every Quant Should Know
FB was used by 4 companies, GM maps to 2 entities across bankruptcy. Why ticker-based backtests silently break.
Data Quality
May 9, 2026
How to Calculate and Compare Stock Volatility in Python
Calculate annualized volatility, 30-day rolling volatility, and max drawdown for any stock using daily returns and xfinlink.
Prices & Volatility
May 8, 2026
How to Screen Blue-Chip Stocks by P/E Ratio in Python
Screen 30 S&P 500 blue chips by P/E ratio, P/B ratio, and earnings yield using the xfinlink metrics endpoint.
Fundamentals
May 8, 2026
How to Track Companies Through Ticker Changes, Bankruptcies, and Renames in Python
Handle ticker recycling correctly with entity resolution. See how FB, GM, DELL, and META map to different companies over time.
Data Quality
May 8, 2026
S&P 500 Turnover: How Much the Index Has Changed Since 2010
Quantify S&P 500 turnover using point-in-time historical constituent data. 43.9% of the 2010 index is gone.
Index & Universe
May 8, 2026
How to Calculate Stock Beta and Correlation in Python
Calculate beta, correlation matrix, and annualized volatility for any stock vs SPY using 3 years of daily returns.
Data Quality
May 8, 2026
No posts match “
”.
Clear search