Most traders look at a straddle premium that someone else built. A platform draws the line, and the trader accepts it. That works until the line does something odd at 11:40 and you cannot tell whether the market did it or the code did.
Building the series yourself fixes that. It takes an afternoon, needs no special software, and teaches you more about how weekly options price than any amount of reading. This article walks through the whole job: what data you need, how to pick the strike, why "fixed ATM" and "rolling ATM" give different lines, how to patch missing minutes, and how to stop one bad tick from wrecking a day.
The examples use NIFTY and SENSEX weekly expiry, because that is where the data is dense and the question is most useful. The steps are described in plain language. You can follow them in a spreadsheet or in a short Python script, and I note where each tool is easier.
What You Are Actually Building
An ATM straddle premium series is one number per minute: the price of the call plus the price of the put at the at-the-money strike, for a given expiry. If the call is 62 and the put is 58, the straddle is 120. Plotted across the day, those numbers form a line. That line tells you how much the market is charging for a move of the index, and how that charge changes as the session unfolds.
The definition sounds simple, but three decisions hide inside it. Which strike counts as "at the money" at a given minute? Do you keep that strike for the day or let it change? And what do you do when the data has holes? Each choice changes the shape of the line, sometimes a lot. Two people with the same raw data can build two different charts and both think they are right.
Why bother when charts already exist
Three reasons. First, you control the definition, so you know what the line means. Second, you can test your own ideas, such as a different entry time or a different strike rule, without waiting for a vendor to add a feature. Third, you learn the failure modes of option data, which are the same ones that will bite your live orders later.
The Data You Need
Before the raw inputs, one question: what should the finished product look like, and how is it read? A guide to reading an ATM straddle chart shows what a clean series looks like and what the rises, falls and flat stretches mean, which gives you a target to build towards. This article covers the build side.
You need three columns of raw input, at one-minute resolution, for each trading day.
The first is the underlying spot (or the index level) at each minute. The second is the call price at each strike you might use. The third is the put price at the same strikes. Ideally you want last traded price for each minute, plus bid and ask if you can get them, because the mid of bid and ask is steadier than the last trade.
You also need the expiry date for each option, so you can pick the nearest weekly contract, and the strike step. NIFTY strikes are generally spaced 50 points apart near the money, and SENSEX strikes 100 points apart. Check the current contract specifications on the exchange website, because these can change. The NSE website publishes the contract details for NIFTY.
Input Why it matters What goes wrong
Spot at each minute Decides which strike is ATM Stale spot makes the ATM strike wrong
Call and put price per strike Gives the straddle value Gaps and one-sided quotes
Bid and ask, if available Lets you use mid price Wide spreads late in the day
Expiry date Picks the right contract Mixing weekly and monthly expiry
Strike step Rounds spot to a strike Wrong step gives a strike that does not exist
Store each day in its own file or sheet tab. Do not mix days, and do not mix expiries. The most common reason for a strange chart is two contracts quietly sharing one column.
Choosing the Strike: The ATM Rule and Fixed vs Rolling
Step one: find the ATM strike
The ATM strike is the strike closest to spot. The pseudo-steps are short.
Take the spot at the minute you want.
Divide by the strike step (50 for NIFTY).
Round to the nearest whole number.
Multiply back by the strike step.
If NIFTY spot is 24,533, divide by 50 to get 490.66, round to 491, and multiply by 50 to get 24,550. The ATM strike is 24,550. In a spreadsheet this is one formula using the rounding function. In Python it is one line.
The trap is the halfway case. If spot is exactly between two strikes, rounding rules differ between tools, and your strike may flip on a tiny move. That matters in the rolling version below. Pick one rule, such as round half up, and use it every time so your series stays consistent.
Which spot should you use?
Use the spot at the same minute as your option prices. If your option data is the close of each one-minute bar, use the spot close for that bar. A common mistake is pairing the option close at 09:20 with the spot at 09:19, which pushes the ATM strike off by a notch on fast days. Align timestamps first, and check them against a few minutes you remember.
For expiry-day work, many traders use the futures price or a synthetic forward instead of spot, because the forward is what the options actually track. The difference is small for weekly contracts near expiry, but it is worth knowing. If you do use the forward, say so in your notes, because your ATM strike may differ from a spot-based chart by one step.
Step two: fixed ATM or rolling ATM
This is the decision that changes the chart the most, and it deserves its own section.
Fixed ATM. You pick the ATM strike once, at your entry time, and track that call and put for the rest of the day. The strike does not change even if spot moves 200 points away from it. This matches what a seller actually holds: a short straddle at one strike. It answers the question, "What happened to the position I entered?"
Rolling ATM. At each minute you recompute the ATM strike and read the straddle at whatever strike is ATM then. The line always shows the price of a fresh at-the-money straddle. It answers a different question: "What is the market charging for a straddle right now?"
The two lines agree at the start and drift apart as spot moves. A fixed-strike straddle gains value on the winning side as spot moves away, and loses premium on the other. A rolling straddle jumps when the strike changes, because you are now reading a different pair of options.
A desk study by EliteAlgo, covering 163 NIFTY and SENSEX weekly expiry sessions between January 2025 and July 2026, built a fixed-strike series. The strike was set at the 09:20 ATM level, and the premium was tracked as a share of the 09:16 entry premium, averaged across all sessions. The mean line did not fall in a smooth slope to zero. It dropped from 100% to about 88.6% by 11:16, then moved sideways between roughly 88% and 93% for the whole afternoon.
That shape surprises people who expect a straight theta slide. The reason is the fixed strike. Time decay lowers the premium, but spot keeps walking away from the strike, and the options re-price upward as that happens. The two forces net out. A rolling series would show a different, more continuous decline, because it keeps resetting to the new ATM. Neither is wrong, but you must know which one you built before you draw a conclusion from it.
Adding the Legs, Filling Gaps and Cleaning Ticks
Step three: add the call and the put
With the strike fixed for the minute, the straddle is call price plus put price. This sounds trivial. Four small rules keep it honest.
Use mid price when you have bid and ask, and use last traded price only when you do not. Last trade can be minutes old on a quiet strike, and a stale last price on one leg and a fresh one on the other gives a straddle that never existed.
Make sure both legs are for the same expiry and the same strike. A spreadsheet lookup that matches only on strike will happily pull a monthly contract into a weekly series.
Skip the minute if one leg is missing, rather than filling it with zero. A zero for the put turns a 120 straddle into a 62 straddle for one minute, and that single bad number can distort a day's statistics.
Record the strike next to each value. When you later find a spike, the strike column tells you immediately whether it was a real move or a strike change.
Step four: handle missing minutes
Real option data has holes. A strike that is not trading in a given minute produces no bar. Late in the day, far from the money or on a quiet session, gaps are common. You need a policy, and the policy must be written down before you look at the results, so that you do not pick the one that flatters your idea.
There are three honest options.
Forward-fill with a limit. Carry the last known price forward for a short time, say up to two or three minutes. Beyond that, leave the cell empty. This respects the fact that a price which has not changed is still the price, but stops a stale value from living for an hour.
Interpolate between neighbours. If a single minute is missing between two good ones, use the average of the two. This is reasonable for single gaps and risky for longer ones, because it smooths away movement that really happened.
Leave it empty and let the chart break. A gap in the line is information. It tells you the data was thin. For most analysis you can still compute daily statistics with the empty cells ignored.
The policy I suggest is simple: forward-fill up to three minutes, never interpolate, and flag every filled cell with a second column. Then, when you compute any statistic, report how many cells were filled. If more than a small share of a day's cells were filled, treat that day with caution or drop it.
The opening minutes are noisy because the book is thin and spreads are wide. A 09:15 price can be far from a 09:16 price for reasons that have nothing to do with value. Many traders therefore anchor their series at 09:16 or later, and some avoid 09:15 entries altogether. The last minutes before the close have a similar problem: prices of deep-in-the-money legs can freeze and the near-ATM options can move in large steps. Decide in advance which window you trust, and cut the series to that window.
Step five: clean bad ticks
A bad tick is a price that is not real. It might be a mis-keyed trade, a late-reported trade, or a vendor glitch. In an option series, one bad tick on a ₹60 option can easily look like a 30% move. If you build statistics on top of it, such as the maximum premium of the day or the peak profit of a short straddle, a single bad tick changes the answer.
Here are the checks that catch most of them.
The put-call parity check. For a given strike, call minus put should be roughly equal to the forward minus the strike, give or take a few points. If, at the same minute, the implied relationship is far off, one leg is probably wrong. You do not need to be exact. You are looking for obvious breaks, such as a 30-point mismatch on a strike where the usual mismatch is 2.
The one-minute jump check. Compare each minute with the previous one. If the straddle changes by more than a chosen threshold, flag it. A sensible threshold is a multiple of the typical one-minute change for that day. For example, flag any move larger than six times the median absolute one-minute change. Real fast markets will trip this too, so do not delete flagged points automatically. Look at them.
The reversal check. A genuine move usually does not reverse completely in the next minute. If the value jumps up and returns to its old level one minute later, and spot barely moved, it is likely a bad print. A real spike in premium generally comes with a visible move in spot or a visible change in the other leg.
The bound check. A call cannot be worth more than spot, and an option cannot be worth less than its intrinsic value on expiry day, apart from tiny rounding. Violations signal a data fault. On expiry day, as time runs out, an ATM straddle should converge towards the distance between spot and the strike, plus a small amount of time value.
What to do with a flagged point.
Do not silently delete. Write the flagged timestamps to a separate list with the reason. Replace the value with an empty cell, or with the neighbour average if it is a single minute and the reversal check says it was a bad print. Keep the raw file untouched. Six months later, when you wonder why a day looks odd, the log tells you what you did.
Putting It Together: Spreadsheet and Python
A spreadsheet version
You can do all of this in a spreadsheet for a handful of days. Here is a plain outline.
One tab per day. Columns: time, spot, strike, call, put, straddle, flag.
Strike column: round spot at the entry time to the strike step, then copy that one value down every row for a fixed-ATM series. For a rolling series, use the rounding formula in each row.
Call and put columns: look up the price for that strike and time from your raw data tab, using both the strike and the timestamp as keys.
Straddle column: call plus put, but only if both cells are numbers.
Flag column: a simple condition comparing each straddle with the one above it, using your jump threshold.
A summary tab: for each day, entry premium, premium at selected times, the day's high and low, and the share of cells that were filled.
The spreadsheet approach is slow once you pass a few dozen days, and lookup formulas over large raw data can make the file heavy. It is a good way to learn, and a good way to check a Python script on a single day.
A short Python version
For a year of data, a script is faster and less error-prone. Describe it as a small pipeline.
Load the raw one-minute data into a table with timestamp, expiry, strike, option type, bid, ask, last.
Pick the weekly expiry for each date, normally the nearest expiry on or after that day.
Compute the mid price where bid and ask are both present, otherwise fall back to last traded.
For each day, read spot at the entry minute, round to the strike step, and keep that strike (fixed) or recompute each minute (rolling).
Reshape so each minute has a call and a put value, add them, and forward-fill up to your gap limit with a flag.
Run the jump, reversal and bound checks. Write flagged rows to a log.
Save one tidy file per day and a summary table across days.
Keep the script short and keep each step visible. If a step hides logic inside a clever one-liner, you will not remember what it did next quarter.
Checking That Your Series Is Right
Before you trust the output, test it. Three tests are worth running every time.
Pick two or three days you remember well, such as a big gap day or a quiet expiry, and see whether the shape matches your memory. A gap-down open should show as a jump in the fixed-strike straddle at the start, and a quiet pinned day should show a steady decline.
Compare your entry premium with the premium shown in your trading terminal for the same strike at the same minute. Small differences are fine. Large ones mean a timestamp or strike error.
On expiry days, check the end of the series. A fixed-strike straddle at the close should be close to the absolute distance between the closing level and the strike. If your series ends far from that, something is wrong in the last hour.
EliteAlgo's desk study also looked at where expiry closes relative to the max-pain strike. Across 163 sessions, the median distance was 34.4 points, or 0.083% of spot, which is a handy check number when you test your late-day values: a series that implies a close hundreds of points from any sensible strike on a quiet day is probably corrupted.
Reading the Line Once You Have It
A line you built is worth only what you can read from it. What follows is the minimum you need to start.
Entry premium as a share of spot
Divide the entry premium by spot to compare days. In the desk study, the 09:20 ATM straddle averaged 0.38% of spot when India VIX was under 12 and 0.83% of spot when VIX was above 20. The premium roughly doubled across the five VIX bands, rising in order in every band: 0.38%, 0.47%, 0.58%, 0.64% and 0.83% as VIX moved up. If your own series does not show that kind of ordering when you group by VIX, check your data before you check the market.
Path, not just endpoints
The most useful thing about a minute-level series is that it shows the path. A short straddle that ends the day in profit may have been far more profitable at midday. In the same study of short ATM straddles entered at 09:20, 86 of 159 usable days gave back more than 30% of their peak profit, and 48 of the 159 closed at a loss after having been in profit at some point. Those figures are descriptive, taken from one entry rule and one period. They are not a forecast. They do show why you want the full series, not just the open and close.
Common Mistakes When Building the Series
Most problems come from a short list. Mixing expiries is the most frequent. Next is time misalignment between spot and options. Third is using last price on thin strikes. Fourth is rolling the strike without recording which strike was used. Fifth is deleting outliers by hand without a log. Sixth is cutting the series at different times on different days, so averages do not line up.
A less obvious one is survivorship in your own data. If you build the series only for days when data was clean, you may drop exactly the fast days that matter most, because fast days produce gaps and bad ticks. Count how many days you dropped and why. If the dropped days cluster on high-volatility sessions, your averages will look calmer than reality.
The last is overfitting your cleaning rules. If you tune the jump threshold until your favourite strategy looks good, you have taught the data what you want to see. Set the thresholds from the data's own noise level, write them down, and leave them alone.
Frequently Asked Questions
What is an ATM straddle premium?
It is the combined price of the at-the-money call and put for the same strike and expiry. It shows roughly how much the market expects the index to move by expiry, and it is the premium a short-straddle seller collects.
Where can I get one-minute option-chain data for NIFTY and SENSEX?
Your broker's historical data feed, an exchange data product or a paid data vendor are the usual routes. Check the terms and the cost, and test a sample day before buying a long history. Make sure it includes expired contracts, because many free feeds drop them.
Should I use a fixed strike or a rolling ATM strike?
Use fixed if you want to see how a position you entered behaves through the day. Use rolling if you want to compare volatility levels across minutes or days. Many traders build both and label them clearly.
How do I handle missing minutes in option data?
Forward-fill a few minutes at most, flag every filled cell, and mark longer gaps as bad data. Do not fill with zero, and do not interpolate over long gaps. Report the share of filled cells for each day.
Can I build this in Google Sheets without coding?
Yes, for a small number of days. Use one tab per day and lookup formulas keyed on both strike and time. It becomes slow with many days, so move to a script when you pass a few weeks of data.
Conclusion
An ATM straddle premium series is simple to define and easy to get subtly wrong. The strike rule, the fixed or rolling choice, the gap policy and the bad-tick checks each shape the line you see. If you write down these choices before you look at results, keep the raw data untouched and log every fix, your series will be one you can trust.
Build it for a handful of days first. Compare it with what you remember and with your terminal. Then scale up. The result is a tool you understand end to end, which is worth more than any ready-made chart you cannot inspect.
Risk note: trading index options, and selling them in particular, carries a real risk of loss, including loss greater than your initial margin. EliteAlgo is analytical software and not an investment adviser. Nothing in this article is investment advice, a recommendation or a trade call, and figures marked illustrative are examples only.


