On the 13 weekly expiry Tuesdays in my minute data, the Nifty's high came in the first 30 minutes on 8 days (62%), against 15 of the 51 other sessions (29%). The low came at or after 1:45 PM on 9 of 13 expiry days (69%), against 18 of 51 (35%).
That is the follow-up I promised at the end of my post on when the Nifty makes its high and low. There I counted all sessions together and said I hadn't split them by expiry. This post does the split. Everything below is a count of days.
The question and the data
The question. Do the times of the Nifty's daily high and low look different on weekly expiry days from the rest of the week?
The data. One-minute bars for the Nifty 50 index, 9:15 AM to 3:29 PM IST, from my own market log. The window is 3 July to 1 October 2026, 64 sessions. That is close to the earlier post's window but not the same: 2 July no longer has minute bars in my log, so I dropped it and added 1 October to keep 64 days.
Expiry days. Since September 2025, Nifty weekly options expire on Tuesdays, and the monthly contract expires on the last Tuesday of the month. The background is in my post on expiry days. Every Tuesday in the window was an expiry day, which gives:
| Group | Sessions |
|---|---|
| Expiry Tuesdays | 13 (3 of them monthly: 28 July, 25 August, 29 September) |
| Other days | 51 |
| Total | 64 |
For the 63 days from July to September, the highest and lowest minute bar matched the index's daily high and low exactly, so a missing minute isn't hiding an extreme.
How I counted
The method is the same as the earlier post. For each session I took the highest and lowest prices among the minute bars, and the time of the first bar that touched each. If the same level was touched twice, the earlier time counts. Each time goes into a 30-minute bucket starting at 9:15, so the first bucket is 9:15 to 9:44 and the last one, 3:15 to 3:29, is only 15 minutes long.
A day appears once in the high column and once in the low column.
When the high came
| 30-minute bucket | Expiry days (13) | Other days (51) |
|---|---|---|
| 9:15 to 9:44 | 8 | 15 |
| 9:45 to 10:14 | 0 | 4 |
| 10:15 to 10:44 | 0 | 3 |
| 10:45 to 11:14 | 1 | 3 |
| 11:15 to 11:44 | 1 | 2 |
| 11:45 to 12:14 | 2 | 0 |
| 12:15 to 12:44 | 0 | 3 |
| 12:45 to 1:14 | 0 | 4 |
| 1:15 to 1:44 | 0 | 2 |
| 1:45 to 2:14 | 0 | 6 |
| 2:15 to 2:44 | 0 | 2 |
| 2:45 to 3:14 | 1 | 4 |
| 3:15 to 3:29 | 0 | 3 |
On expiry days the highs were heavily front-loaded. 8 of 13 came in the opening half hour, and on 5 of those the high was the very first minute, 9:15. Every expiry high but one came before 12:15. The exception was the monthly expiry on 25 August, when the high came at 3:12 PM.
On other days the highs were spread much more evenly. The opening half hour was still the busiest bucket, with 15 of 51, but 15 highs (29%) also came at or after 1:45 PM, against 1 of 13 on expiry days.
When the low came
| 30-minute bucket | Expiry days (13) | Other days (51) |
|---|---|---|
| 9:15 to 9:44 | 1 | 17 |
| 9:45 to 10:14 | 0 | 3 |
| 10:15 to 10:44 | 1 | 4 |
| 10:45 to 11:14 | 0 | 1 |
| 11:15 to 11:44 | 0 | 1 |
| 11:45 to 12:14 | 1 | 2 |
| 12:15 to 12:44 | 0 | 1 |
| 12:45 to 1:14 | 1 | 3 |
| 1:15 to 1:44 | 0 | 1 |
| 1:45 to 2:14 | 3 | 2 |
| 2:15 to 2:44 | 1 | 6 |
| 2:45 to 3:14 | 3 | 8 |
| 3:15 to 3:29 | 2 | 2 |
This is the mirror image. On other days, the opening half hour held the most lows, 17 of 51 (33%). On expiry days it held one, on the monthly expiry of 29 September.
Expiry lows came late: 9 of 13 at or after 1:45 PM, and 6 of 13 (46%) at or after 2:15 PM. For other days those figures were 18 of 51 (35%) and 16 of 51 (31%).
The summary table
| Share of days | Expiry (13) | Other (51) |
|---|---|---|
| High in the first 30 minutes | 8 (62%) | 15 (29%) |
| Low in the first 30 minutes | 1 (8%) | 17 (33%) |
| High or low in the first 30 minutes | 9 (69%) | 30 (59%) |
| High or low in the last 30 minutes | 4 (31%) | 11 (22%) |
| High or low in the first or last 30 minutes | 12 (92%) | 35 (69%) |
| High came before the low | 11 (85%) | 27 (53%) |
| Median high-to-low range | 151.30 pts | 140.85 pts |
Splitting the day at 12:30 PM, 10 of the 13 expiry days had the high in the morning and the low in the afternoon. One, 25 August, was the other way round, and two had both extremes before 12:30. None had both in the afternoon.
Three observations stand out:
- The order of the day was very consistent on expiry Tuesdays. On 11 of 13 the high came before the low. On other days it was close to a coin toss, 27 of 51.
- Almost every expiry day set an extreme at one end of the session. 12 of 13 had the high or the low in the first or last half hour. The one exception was 1 September, with the high at 11:30 and the low at 2:28 PM.
- The range wasn't clearly bigger. The medians, 151.30 and 140.85 points, are close. The widest expiry day was 15 September at 432.95 points; the narrowest was 28 July at 86.30.
Why I don't read much into it yet
The pattern is striking on paper, but there are four reasons to hold it loosely.
- Thirteen days. One or two days moving bucket would shift the percentages by 8 to 15 points. I haven't put a confidence interval on any figure here, and on a sample this size it would be wide.
- The market was falling. Over this stretch the Nifty drifted to lower closes; its 1 October close of 22,421.95 was the lowest of the window. On a falling day the high tends to come early and the low late, whatever the weekday. A run of down Tuesdays would produce exactly this table. I haven't checked how many of the 13 expiry days closed lower than they opened, so I can't separate the two.
- Expiry and Tuesday are the same thing here. Every Tuesday in the window was an expiry day, so this can't tell an expiry effect from a Tuesday effect.
- All thirteen expiry days were in the earlier post too. This isn't new evidence for the all-days figures; it is the same sessions cut a different way.
A common explanation is that traders close or adjust large option positions in the final hours of expiry, and the hedging around that moves the index. That may be true, but I haven't measured it. I haven't looked at option open interest, so this post doesn't test it.
How it compares with the all-days picture
The earlier post found that 63% of 64 sessions had the high or low in the first half hour, against about 37% for a simulated random walk. The split shows that this opening effect wasn't driven by expiry days alone: other days still had 59% in the opening half hour. What changed on expiry days was which extreme sat there. On other days, the open was nearly as likely to be the low (17 days) as the high (15). On expiry days it was almost always the high.
If you want the size of a normal day rather than its timing, my post on the Nifty's daily range and India VIX covers that, and the gap-fill post looks at what happens to the opening gap.
What I take from it
For me, this is a prompt to keep expiry Tuesdays separate whenever I look at intraday timing. Pooling them with other days blurs two different shapes: a front-loaded high and a late low on expiry, and a more even spread on other days. It's also a reminder that 13 days in a falling market can produce a neat table that disappears in a different quarter.
I'll repeat the count when I have another quarter of data, and add one more split: expiry days that closed above their open against those that closed below. That should show how much of this is expiry and how much is direction.
Sources
- One-minute Nifty 50 index bars for 64 sessions, 3 July to 1 October 2026, from my own market log. All counts, percentages and ranges are my calculations from them.
- Expiry calendar: Kotak Neo: SEBI reshuffles expiry days, NSE to Tuesday and BSE to Thursday from September 2025
- All-days comparison and random-walk baseline: When does the Nifty make its high and low of the day?
This post describes an analysis of the sessions I analysed, for information only. It is not investment advice or a recommendation to trade. Past patterns say nothing certain about the future. I am not registered with SEBI as an investment adviser or research analyst.