Plot Seasonality for Ticker
Enter one financial asset ticker (e.g. T-USO-SplitAdjClose). You can copy tickers into a basket using the ticker selector.
Understanding Seasonality Models:
Find the best seasonality models ranked in: Seasonality insights page.
Read an article explaning how to interpret a seasonality model using the legend below: MSCI World Seasonality, Sep 2026.
Seasonality Chart Legend:
Colored lines (Normalized YTD for various years):
Thick gray line (Composite, the seasonality curve = median of colored lines):
Black dotted line: the current year to date
The Bottom Panel: flattened grey and black dotted lines.
The seasonality chart displays the full historical median trend, providing the most up-to-date visual of an asset's typical calendar behavior. However, to rigorously test if this pattern has true predictive power, the statistical engine performs a strict out-of-sample holdout test. The system slices off the most recent 380 days of price action and hides it from the algorithm. It then calculates an isolated seasonal trend using only the older historical data, creating a clean baseline to predict the hidden 380-day window.
The accuracy of this out-of-sample prediction is scored using three distinct R-squared metrics, each applying a progressively stricter lens to the data:
- Standard R² (Raw Comparison): This measures how closely the raw price action of the last 380 days matches the predicted seasonal curve. While useful, this score is frequently inflated by an asset's underlying secular baseline. If an index reliably compounds at 10% annually, the Standard R² might look artificially high simply because both the prediction and the actual holdout data drifted upward together, masking whether the specific seasonal peaks and troughs actually aligned.
- Detrended R² (Historical Growth Removed): To isolate the calendar signal, this metric strips the asset's historical median compound growth rate out of both the seasonal prediction and the 380-day holdout data before comparing them. It seamlessly factors out continuous exponential growth or decay. However, a mathematical trap occurs if the current 380-day period diverges wildly from history (e.g., a severe bear market during a historically bullish asset). Subtracting a positive historical growth trend from a current market crash will skew the holdout data further, artificially breaking the correlation.
- Pure Seasonal R² (Independently Flattened): To completely neutralize macroeconomic noise and solve the detrending trap, this final metric acts as a Shape Correlation R² (zero-slope). It independently levels both curves to a flat, horizontal axis before testing them. The engine removes the historical growth from the prediction, but uses an independent regression to extract and remove the actual realized trend from the 380-day holdout. By correlating only these leveled residuals, this Leveled R² (isolated seasonal signal) proves exactly how much variance is driven by the pure seasonal shape, entirely independent of whether the asset experienced a bull or bear year overall.
Trading Notes & Guide
Ticker Data Usage and Sourcing
Ticker Data Sources
RAT() Ticker function
LAG() Ticker function
MATH- Tickers
CURVE_FROM_VECTOR()
CURVE_FROM_VECTOR([198.27, 211.92, 245.12, 281.72, 318.27], '2026-06-30', 'last', '1y', 'linear', 'forward_fill')
The first argument is the time ordered list of data points, separated by commas. The second argument ('2026-06-30') is the one data anchor we need to plot these values over time.
The third argument ('last') tells the system to apply the anchor date to the last value, another value for this parameter is 'first'.
The '1y' tells the values fall on the exact same date on each year (or closest if leap year).
The '1y' could also be '1q' or '1m' for quarter or month. The same considerations made for year apply.
The 'linear' parameter tells the system how to interpolate the values for days in between the value data points given, another possible value here is 'forward_fill'.
The 'forward_fill' last parameter is about the extrapolation, its possible values are: 'none', 'forward_fill', 'linear'.
Default Ticker Column Projections & Adjustments
Plotting Dividends Reinvested at Your Portfolio Return Rate
This is a function available only for users with the advanced subscription. The first argument is the Ticker simulated, the second is your portfolio CAGR rate (in this case 0.25 = 25% yoy). We apply the daily equivalent rate though. The third argument is the initial investment in the currency of the stock ticker. The last argument is the start date. For a full example see our article on dividend reinvestment simulation or our article looking back at Warren Buffet's investment in Coca-Cola and the results of its juicy dividends.
Calculating slope, velocity, or derivating (these are all synonyms)
Z scaling, bringing data to the normal curve Z score scale, normalizing
This is a function available only for users with the advanced subscription. The single argument can be a Ticker or another vector function. For a full example see our macro quadrant plot.