The Scenario
You're an options trader. You have 20 tickers in an Excel workbook that you've been watching for a low-volatility squeeze setup. Your thesis: when Bollinger Bands contract into a narrow channel, a breakout is coming. You want to see upper band, lower band, midline, and bandwidth for each ticker — and you want to know which ones are in the tightest squeezes right now.
You pulled this data manually three weeks ago. The squeeze candidates from that pull have already moved. By the time you finish pulling the current data the same way, the new squeeze candidates will have moved too.
The bad version:
- Query the Bollinger Bands endpoint in Twelve Data for the first ticker, extract upper, lower, and midline from the JSON response, paste into columns B, C, D.
- Calculate bandwidth as (upper - lower) / midline in a formula in column E, manually copying the formula down 19 rows after pasting all the data.
- Sort by column E to identify the tightest squeezes, discover that two tickers used a different default period (10-period instead of 20-period) because of an API parameter you forgot to specify, and re-pull those two.
Volatility setups don't wait for manual data processes to finish.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent inside your Excel workbook. It reads the 20 tickers in column A and, through its built-in Twelve Data integration, fetches Bollinger Band data using consistent parameters and writes upper, lower, midline, and bandwidth into the specified columns.
Fetch Bollinger Bands from Twelve Data for each ticker in column A using 20-period daily data. Write upper band into column B, lower band into column C, SMA midline into column D, and calculate bandwidth as (upper - lower) / midline, writing into column E.
What You Get
- Columns B through D: upper, lower, and 20-day SMA for each ticker, all using the same 20-period parameter.
- Column E: bandwidth as a decimal ratio — smaller values signal tighter squeezes.
- Values reflect the most recent completed trading day.
- Tickers with insufficient history noted in column F rather than receiving a placeholder value that would skew rankings.
What If the Data Is Not Quite Ready
If you want to rank by bandwidth to surface the tightest squeezes first
Fetch 20-period Bollinger Bands from Twelve Data for each ticker in column A. Write upper, lower, and midline into columns B, C, D. Calculate bandwidth and write into column E. Sort the workbook rows by column E ascending so the tightest squeezes appear at the top.
If you want to confirm squeeze conditions using Keltner Channels alongside Bollinger Bands
Fetch Bollinger Bands and Keltner Channel values from Twelve Data for each ticker in column A. Write Bollinger upper, lower, midline into columns B, C, D. Write Keltner upper, lower, midline into columns E, F, G. In column H, write SQUEEZE if the Bollinger Bands are inside the Keltner Channel, otherwise NO SQUEEZE.
If you want a historical bandwidth series rather than just the current snapshot
Fetch 20-period Bollinger Bands from Twelve Data for each ticker in column A for the past 20 trading days. Build a matrix with dates as row labels and tickers as column headers, filling bandwidth values so you can see whether each ticker's bands are tightening, stable, or widening over the past month.
Kill-chain: fetch bands, identify squeezes, overlay RSI for pre-breakout momentum, and highlight candidates
Fetch 20-period Bollinger Bands from Twelve Data for each ticker in column A, calculate bandwidth and write to column B. Fetch 14-day RSI and write to column C. In column D, write SQUEEZE CANDIDATE if bandwidth is below 0.05 and RSI is between 40 and 60. Sort so SQUEEZE CANDIDATE rows appear first. Highlight them in yellow.
Try It
Get the 7-day free trial of SheetXAI and open your options watchlist workbook with tickers in column A, then ask it to populate Bollinger Band metrics and rank by squeeze tightness in one prompt. Also see adding RSI and MACD columns and the full Twelve Data overview.
