RATIOPLOTTER.EU

Multi-Ticker Overlay Analysis

Normalize and compare up to 10 tickers on a single chart. All prices are rebased to 1.0 at the common start date.

Enter up to 10 tickers. Free Tier is limited to the specific baskets listed below.
Maximum range selected (Default).

Load Presets (Free Tier)

Magnificent 7 T-AAPL, T-MSFT, T-GOOGL, T-AMZN, T-NVDA, T-META, T-TSLA
Global Indices SPDR S&P 500 ETF Trust (T-SPY), Invesco QQQ Trust Series 1 (T-QQQ), SPDR Dow Jones Industrial Average ETF (T-DIA), iShares Russel 2000 ETF (T-IWM), iShares MSCI Emerging Markets ETF (T-EEM), Vanguard European Stock Index Fund ETF Shares (T-VGK), iShares MSCI Japan ETF (T-EWJ)
Commodities SPDR Gold Shares ETF (T-GLD), iShares Silver Trust (T-SLV), United States Oil Fund (T-USO), United States Natural Gas Fund (T-UNG), Invesco DB Agriculture Fund (T-DBA), WisdomTree Copper (T-ECSTF)
Global GDP Race IMF-NGDPD-USA, IMF-NGDPD-CHN, IMF-NGDPD-DEU, IMF-NGDPD-GBR, IMF-NGDPD-IND, IMF-NGDPD-VNM
Economy Sectors The Consumer Discretionary Select Sector SPDR Fund (T-XLY), The Consumer Staples Select Sector SPDR Fund (T-XLP), The Energy Select Sector SPDR Fund (T-XLE), The Financial Select Sector SPDR Fund (T-XLF), The Health Care Select Sector SPDR Fund (T-XLV), The Industrial Select Sector SPDR Fund (T-XLI), The Materials Select Sector SPDR Fund (T-XLB), The Technology Select Sector SPDR Fund (T-XLK), The Utilities Select Sector SPDR Fund (T-XLU)
Big Banks JPMorgan Chase & Company (T-JPM), Bank Of America Corp (T-BAC), Citigroup Inc (T-C), Wells Fargo & Company (T-WFC), Goldman Sachs Group Inc (T-GS), Morgan Stanley (T-MS)
Treasury/Yield iShares 20+ Year Treasury Bond ETF (T-TLT), iShares 7-10 Year Treasury Bond ETF (T-IEF), iShares 1-3 Year Treasury Bond ETF (T-SHY), iShares IBOXX $ Investment Grade Corporate Bond ETF (T-LQD), iShares IBOXX $ High Yield Corporate Bond ETF (T-HYG), SPDR(R) Bloomberg High Yield Bond ETF (T-JNK)
Overlay multiple GDP daily growth velocities Overlay multiple GDP daily growth velocities (1st derivate) calculated as a rolling regression slope on a 400 day sliding window and scaled by 1 (if you scale by 365 you annualize)

Premium Overlays

The Currency Debasement Race Visualizes how much less (or more) a unit of major fiat currencies can buy of the global commodity basket since 2022.

Trading Notes & Guide

Help & Notes

Normalization: This tool takes multiple assets with different prices (e.g., Apple at $200 and Ford at $12) and divides them by their absolute value at the start date. This makes them all start at 1, allowing you to their see their pure percentual growth performance comparison over time.

Common Start Date: The chart automatically finds the earliest date where all requested tickers have valid data (the intersection). Any data prior to this "Common Start" is trimmed to ensure a fair comparison.

Limit: The Free Tier is restricted to specific pre-defined baskets (Magnificent 7, Global Indices, Commodities). Custom baskets are available in the premium version.

Ticker Data Usage and Sourcing

Ticker Data Sources
Our data is provided from a variety of sources: The Federal Reserve (FED-* tickers), The World Bank (WB-* tickers), The International Monetary Fund (IMF-* tickers), Tiingo (T-* tickers covering: stocks, ETFs, etc), Ourselves (MATH-* tickers). The ticker data sources vary according to ticker prefix as you can see. Our ticker selector allows browsing each ticker and their description and placing them on a basket for use.
SEA() Ticker function
For ratio plotting, the SEA(Ticker) function can only be used in the denominator argument and only for plotting TickerA over SEA(TickerA) like this: T-CRUD/SEA(T-CRUD). The SEA() ticker function works by calculating the median yearly seasonality as a new dataset (see the seasonality page for details and examples of this calculation). This one year seasonality dataset is then unfolded exactly the same for many years and directly inputted as a synthetic ticker into this plotting page arguments. Example: Ratio plot of Crude Oil by its seasonality: T-CRUD/SEA(T-CRUD). To write custom SEA() function synthetic tickers simply input your ticker of choice between the parentheses such as SEA(T-CRUD).
RAT() Ticker function
The RAT() ticker function works by calculating the ratio between two tickers as a new dataset. This dataset is then directly inputted as an synthetic ticker into the plotting page arguments. To write custom RAT() tickers simply input your two tickers of choice between the parentheses, separating them with a comma. Such as RAT(T-AAPL, T-MSFT). This can only be once, synthetic tickers like RAT(RAT(T-AAPL, T-MSFT), SEA(T-qtec)) are invalid for the time being. Example, how is Google outpacing Microsoft in terms of CAGR curve: RAT(T-GOOGL,T-MSFT)/MATH-CAGR_PCT-2
LAG() Ticker function
The LAG() ticker function is used to create a lagged version of an asset. This lags a dataset with an amount of days equal to the lag value in the ticker. To write custom LAG() tickers simply input your ticker of choice and lag value between the parenthesis, seperated by a comma. Such as LAG(T-AAPL, 10). Lag values can only be inputted into the denominator as positive whole numbers between 1 and 7000 days. Using the ratio plotter with LAG(), a ticker can be analyzed in its auto correlation, or correlation to a nother ticker with a gap of X days (e.g.ratio plot of TICKERA by LAG(TICKERB, 30)).
MATH- Tickers
The MATH- tickers are custom mathematical tickers made by us (e.g. MATH-CAGR_PCT-2 for 2% exponential growth, MATH-CONST_VEC-1 for a constant value of 1 each day). To find the list of valid MATH tickers go to the Ticker Selector Page and search through the MATH category list. Important to mention is that when using the MATH tickers the last observed date for this MATH ticker will be far in te future.
CURVE_FROM_VECTOR()
The CURVE_FROM_VECTOR function allows transforming your own data vectors into plottable data. It is perhaps one of the most powerfull functions. As the name says, it creates a vector from user entered data points. This function is to be used when you cannot find the data you need in the ticker selector, or if your data is proprietary such as your own private company that you will plot against perhaps competitor's sales or a competitor's stock price. Learn using CURVE_FROM_VECTOR() here: price to x demo with CURVE_FROM_VECTOR() or on the details below. The price to x has an expression builder to require less typing from the user. Example usage: 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
Let's take T-GOOGL as an example. When the projection variable is left blank, the ratio plotter will use the default projection variable which is -AdjClose (close price adjusted for both dividends and splits). This means that when you input T-GOOGL into the ratio plotter it will actually plot the "Tiingo split and dividend adjusted close price" of GOOGL: T-GOOGL-AdjClose (T-GOOGL-AdjClose by T-MSFT-AdjClose). If you want to plot the split (but not dividend) adjusted close price of GOOGL you can input T-GOOGL-SplitAdjClose. All projection columns are provided by Tiingo, with exception of the -SplitAdjClose column which is calculated by our system. For a complete explanation for beginners see our article: Understanding column projections.
Plotting Dividends Reinvested at Your Portfolio Return Rate
You can do this with the function: SIMUL_TICKER_DIV_REINVEST(T-MSFT,0.25,1,'2022-08-01')
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)
Let's say we to know how fast China is growing its GDP per day (GDP daily velocity). For this we can use the formula: ROLLING_SLOPE(IMF-NGDPD-CHN, 400, 1). The ticker is the IMF Chinese yearly GDP growth in billions of dollars, with revisions on a daily basis and with future forecasts also. The second argument 400 is the size of the lookback window in days to calculate the rolling, smoothed, slope. For GDP it has to be more than 365 days otherwise the GDP reviews cause the slope to not be smooth enough due to yearly GDP reviews, publishing. For other data such as stock prices you can have windows of 20, 30 days for instance. The number 1 shown as third argument implies we want to leave the slope at the granularity 1 which is growth per 1 day, or whether we want to perhaps to use an argument of 365 which will annualize the slope to the yearly growth velocity by multipling it by 365 (numbers smaller than 0 such as 0.001 are also allowed here). The value of this slope function for the IMF-NGDPD-CHN ticker is in billions of dollars GDP growth on per 1 day basis (if the last argument is 1). That always matches the ticker unit of measurement which in our case is in billions of dollars. Up to 2026, the best growth rates of China were 8 billion dollars per day, a staggering amount which seems to be stagnating lately. We can check these 9 billion dollar daily growth rates in this example of the ROLLING_SLOPE function: China GDP Velocity
Z scaling, bringing data to the normal curve Z score scale, normalizing
You can do this with the function: Z_SCALE. Examples: Z_SCALE(T-MSFT), Z_SCALE(RAT(T-GLD,T-SLV)), Z_SCALE(ROLLING_SLOPE(T-COM,90,1))
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.