Liquidity & Technicals
Figures converted from INR at historical FX rates — see data/company.json.fx_rates. Ratios, margins, and multiples are unitless and unchanged.
Liquidity & Technicals
IOC trades like a policy-administered utility, not a chart-readable refiner. Hurst sits on top of the random-walk line, multi-factor regression explains only 17% of daily variance with $21 B of stock-specific noise (idiosyncratic alpha −24.8% annualized), and the post-bonus-adjusted price has spent 12 years inside a $0.70–$2.00 band. The page is read through that lens: every pattern, every "stage", every breakout has to clear the bar that the data says technicals are mostly noise here.
Today: $1.52, 20.3% of the way from 52w low to high, Stage 4 with a fresh death cross from yesterday (29 Apr 2026), and a forward 90-day distribution that is essentially symmetric (P(touch +10%) = 55.5%, P(touch −10%) = 48.4%). The actionable read is wait, don't lead — invalidate above $1.71 (above 200d + base high), invalidate below $1.39 (52w low + double-bottom support).
1. Statistical character — does TA even apply to this stock?
Hurst exponent (R/S, 21yr)
Verdict: random walk — TA is largely noise; anchor on fundamentals + factor exposure
Autocorrelation profile (n=5,249 daily returns): lag-1 = +0.0445 significant (CI ±0.027); lag-5 = −0.003 not significant; lag-21 = −0.004 not significant; lag-63 = +0.012 not significant.
H = 0.53 sits one standard-error above 0.5; VR(5) marginally rejects random walk in the trending direction (p = 0.019); VR(21) does not reject; only the 1-day autocorrelation crosses the significance band. Synthesis: IOC is essentially a random walk with a thin layer of 1-day momentum — chart-based trading edges are weak and short-lived. Read every pattern below as suggestive, not load-bearing; the fundamental + factor view should dominate.
2. Multi-factor decomposition — what actually drives the price?
Primary driver
Single-factor R² (%)
Annualized alpha (%)
The single most important sentence on this page: 17% of IOC's daily variance is explained by NIFTY Energy alone, the multi-factor model adds essentially nothing beyond that, and the stock-specific residual is a −24.8% annualized alpha. Crude beta is statistically zero (R² = 0.02%) — the market does not price IOC like a refiner; it prices IOC like a sub-component of the index. Energy-index beta has whipped from 0.30 (post-Ukraine, when policy decoupled OMCs from upstream peers) back to ~1.05 in the last 18 months. Forecasting NIFTY Energy + INR + the policy gap to BPCL gets you most of the answer; chart pattern work captures the remaining noise.
3. Conditional return tables — base rate for today's regime
Current regime: Stage 4 (Declining) × 30d vol at 71.9th percentile of own history → bucket above_avg_p60_80. Sample size: 267 historical observations.
From this regime historically, the median 90-day forward return has been +1.3% with a 56.6% hit rate above zero; p10 = −17.2%, p90 = +21.9%. The base case for the next 90 days is mildly positive drift with very wide bands — almost a 50/50 coin flip with slight upward skew. Stage 4 + above-average vol historically recovers, it doesn't keep cratering — that's the contrarian read. But the bands are so wide that "wait for confirmation" is the only honest implementation.
4. Forward distribution — explicit price probabilities
The vol-conditional bootstrap implies a 30% chance the stock revisits $1.29 in the next 90 days, and a 28% chance it touches $1.82 to the upside. Expected 90d return = +0.95%, P(positive) = 52.3%. The cone is roughly symmetric — the bootstrap does not see directional edge. The most actionable single number: P(touch the 52w low at ~$1.39 in 90d) ≈ 60% (interpolating between the −5% and −10% touch probs); P(breaking $2.01 in 90d) ≈ 12% (extrapolating beyond +20% touch prob). Translation: another test of the lows is the modal scenario; a fresh 52w high is a tail event.
5. Position sizing — what an actual PM would do with this
Half-Kelly = −0.32 — historical risk-adjusted return is below the 6% risk-free assumption (annualized return = −6.2% on unadjusted-price series, see §7 caveat). Kelly says don't size by past performance. The AUM table below is risk-budgeted from realized daily vol, not from expected return.
Annualized return (lifetime, %)
Annualized vol (lifetime, %)
Half-Kelly fraction
VaR(95%, 1d) (%)
CVaR(95%, 1d) (%)
For a $53 M fund running 1% daily-σ risk per stock, the max IOC position is $19.4 M — 36.5% of the fund. Daily vol of 2.7% means a typical 1-σ move is $0.52 M against this position. CVaR(95%) of 5.6% means the average tail-day loss when it does break is $1.09 M — about 2× the 1-σ move. The 73% gross-position number at 2% risk is theoretical only — the practical constraint is concentration policy and ADV (see §17), not vol.
6. Cover — the setup at a glance
Spot ($)
▲ 2.86 1y return (%)
52w position (%)
Distance from 200d (30d-σ)
Weinstein stage
30d vol percentile (lifetime)
Stage 4 with a fresh death cross (50d crossed below 200d on 29 Apr 2026, T−1). Sitting at the 20th percentile of the 52w range, 30d vol elevated at the 72nd percentile, and 8.6% / ~0.7σ below the 200d. The cone says symmetric distribution, the regime base rate says mildly positive 90d drift — set up to react, not to lead. Liquidity is not the binding constraint at the AUM levels institutional money operates at (see §17 ADV caveat).
7. The story since IPO
The lifetime price series in this dataset is unadjusted for IOC's three 1:1 bonus issues (2009, 2016, 2018). The chart shows real, large notional drops in 2016 and 2018 that look like crashes — they were primarily ex-bonus mechanics, not value destruction. Treat the lifetime "max drawdown 91.7%" and "annualized return −6.0%" with that caveat. Post-2018 data (right-third of the chart) is the bonus-clean window where momentum/regime metrics are tradable.
Total return since 2005 (%, unadj.)
CAGR (%, unadj.)
Lifetime max DD (%, unadj.)
Sharpe (lifetime)
The regime detector counts 22 bull and 23 bear segments over 21 years — almost a coin flip on a 6-12 month horizon. The dominant cycle is "ramp into bonus issue, then drop, then sideways for 4-7 years inside a horizontal corridor". The 2024 push to $2.00 was the strongest bull leg (+65% Feb-25 → Feb-26) since the 2017 bonus-era top, and we are now 24% into giving it back.
8. Drawdown profile — what bad looks like for THIS stock
Current drawdown vs unadjusted ATH (%)
The −82% number is almost entirely a bonus-issue artifact, not a real value loss; the ATH of $13.26 (Dec-2007, FX 0.0167) is pre-three-bonuses. The investible question is "how far below the post-bonus highs are we", and the answer is the 24% drawdown from the Feb-26 peak of $2.00 — that's what the next table actually captures.
The detector found only 8 lifetime drawdowns ≥5%, with median depth of 15% and median recovery of 12 days — a function of the unadjusted series compressing many smaller moves between bonus issues. Realistic post-2018 drawdowns include: 2018 (−72% calendar-year max), 2020 COVID (−44%), 2022 Russia/oil (−51%), 2024-25 (−41% Feb-24 → Feb-25). That's the playbook pattern: roughly one ~40-50% drawdown every 2-3 years.
9. Volatility cone — calm or stressed?
Today's 30d vol = 34.6%, p72 of own history (lifetime p10/p50/p90 = 19% / 29% / 46%). Stress-elevated but well within the historical envelope; nothing like 2008 / 2018 / 2020 spikes. From regime §3, Stage 4 with vol in this bucket has historically produced +1.3% median 90d return — i.e., this is the regime where Stage 4 ends, not where Stage 4 begins.
10. Where we are now — multi-MA + setup card
The price action since Mar 2026 is a textbook Stage-4 entry: peak $2.00 (27-Feb), broke the 50d in early March, lost the 200d on 17-Mar, and the 50d crossed below 200d yesterday. RSI hasn't yet pinged oversold (42.3 vs the conventional <30 trigger), so there is room for further drift before mean-reversion buyers step in. MACD histogram has just turned positive — the first sign of bearish-momentum exhaustion.
11. Patterns the algorithm flagged
The full-history detector counted 220 patterns. Filtering for patterns with concrete structure and dates within the last 12 months:
No cup-and-handle. The cleanest near-term structure is the active double bottom at ~$1.44 — Aug-25 low $1.46 + Apr-26 low $1.43, 1.9% apart, with an intervening peak of $2.00. If $1.43 holds on the next test, the pattern projects a measured move of roughly ~$0.53 to the upside (≈ $1.97). If $1.39 (the 52w low and broader base) breaks, the pattern is invalidated and the next structural level is the COVID-era $1.21 anchor.
12. Earnings reaction footprint
Drift asymmetry is the tradable insight: median 1-month return after a positive next-day reaction is +1.24%; after a negative next-day reaction it's −3.58%. Translation — gap-down on earnings tends to keep going (about 3× the magnitude of gap-up follow-through). Q4/FY26 print is expected ~21-May-26 (per the Catalysts tab); given the stock is already drifting and FY26 PAT is consensus-down ~50%, an earnings-day gap down would carry meaningful weight in the 1m drift base rate.
13. Risk metrics — institutional benchmarks
Lifetime risk metrics are skewed by 2018 + 2016 unadjusted bonus drops. The factor-decomposition framing in §2 is more honest for forward sizing: 17% of variance from NIFTY Energy + 24.8% annualized negative alpha. Up/down capture and beta vs the INDA benchmark were not computed because the overlapping clean history was insufficient — that's a real data limitation, not an analytical view.
14. Year-by-year + holding-period grid
Best year: 2007 (+77%). Worst: 2018 (−65%, partly bonus-distorted). The 12-year batting average from 2014 onward is ~3 winning years for every 4 losing-or-flat years — IOC has never strung together 3 consecutive positive Sharpes. 2023 (Sharpe 2.4) was the cleanest year of the last decade and the only year with a single-digit max DD; it was followed by Sharpe 0.31 and 0.93 — i.e., good years don't compound here.
Buyers from 2017-2020 are still flat-to-down on a CAGR basis (zero-to-low single digits). Buyers from 2021-23 made meaningful money but are giving it back in 2026 (the YTD CAGR for a 2026 buyer is −39%, capturing the Feb-26 → Apr-26 leg). The honest read: IOC rewards entry timing more than holding period — a feature consistent with the Hurst random-walk verdict.
15. Seasonality
Best month: May (+0.19% avg daily, win rate 51.2%). Worst month: October (−0.30% avg daily, win rate 48.4%). Q1 of the calendar (Jan-Mar) is the weakest stretch for IOC — March is the worst single month outside of October. Useful as a tilt, not as a thesis: with Hurst ≈ 0.5 the seasonal effect is small relative to single-event noise (Q4 results, OPEC, LPG bailouts).
16. Volume profile + anchored VWAP — where the action sits
Point of control = $0.93 mid ($0.86–$1.01 bucket, 7.7% of all-time volume). That's the gravitational center — IOC has spent more time/volume there than at any other price. Today at $1.52, we're sitting just above HVN-3 ($1.32-$1.48, 5.9% of vol) which is now the next major support if the double bottom at $1.43 fails.
Anchored VWAPs split cleanly: bearish vs the long arc (since IPO and ATH, both bonus-distorted), bullish vs COVID and 5y, bearish vs 1y (spot is 7.9% below the 1y VWAP of $1.64). The 1y VWAP at $1.64 is the swing pivot for tactical traders — reclaim it and the 1y picture inverts.
17. Liquidity — execution capacity
The liquidity JSON reports ADV(20) of 1.64 M shares / ~$2.5 M which is materially below IOC's true NSE+BSE traded value (Maharatna PSU index constituent — combined-exchange volume normally runs in the tens of millions per day). The numbers below are computed honestly from the daily-volume series in prices_daily.json but probably reflect a single-exchange stream. Treat the absolute capacity numbers as a conservative lower bound — true institutional capacity is materially higher.
ADV(20) shares (lakh)
ADV(20) value ($ M)
ADV(60) shares (lakh)
ADV % of mcap
Annual turnover (%)
Median 60-day intraday range = 2.51% — slightly above the 2% friction threshold, consistent with Stage 4 + above-average vol. Real-world execution: a pension/SWF stake of 0.1% of mcap (~$21 M) is a couple-week build at the conservative ADV; at true NSE+BSE volume it's a single-day fill. The honest read for a $50M–$500M fund: liquidity is not the binding constraint here — the binding constraint is conviction in the random-walk + −24.8% alpha character of this name.
18. India microstructure
The data layer attempted NSE-direct retrieval (block deals, bulk deals, delivery, F&O) plus Screener for shareholding plus a multi-query news enrichment fallback (412 articles across 9 categories). NSE-direct was blocked from this run for block deals, bulk deals, delivery, and F&O OI/PCR (block_deals.count = 0, bulk_deals.count = 0, delivery.count = 0, summary.fno_in_segment = false). What we do have is Screener-direct shareholding, plus rich news provenance.
Delivery percentage — not available this run
delivery.count = 0 from NSE-direct; the news_enrichment.by_category.delivery_data results returned 33 articles but none with specific delivery-% numbers. Action: refer to NSE bhavcopy / Trendlyne directly for daily delivery-% trends.
Block & bulk deals — provenance only
NSE-direct returned zero rows in the trailing 12 months. The 55 block-deal + 47 bulk-deal news enrichment hits all point to aggregator landing pages (Trendlyne, MoneyControl) rather than dated specific deals — i.e., no headline-grabbing institutional crosses in the trailing 12m. The aggregator URL for verification: Trendlyne IOC bulk/block deals.
F&O — flagged as cash-only by this dataset
summary.fno_in_segment = false is inconsistent with reality (IOC is in the NSE F&O segment); this likely reflects the same NSE-direct block. 60 F&O-activity news hits were captured but none extracted into structured OI/PCR rows. Action: for live F&O positioning (PCR, max-pain, OI buildup), check NSE F&O-bhavcopy or Trendlyne directly.
Shareholding pattern (Mar 2026 — Screener-direct)
Promoter pledge is null in both Screener-direct and the news-enrichment promoter-activity feed — the standard "GoI pledges nothing" pattern for PSUs. Promoter (GoI direct) holding is unchanged at 51.50% over four-year history; combined with the 19.57% "Other Government" category the public float is just 28.9% of cap.
FII / DII flow — the cleanest signal in the section
FIIs added 245 bps in 12 months (7.39% Mar-25 → 9.84% Mar-26). DIIs reduced 87 bps. Public retail count fell from 31.9 lakh to 27.9 lakh investors — a −12.5% retail capitulation through the same 12-month window where the stock made and lost a fresh post-2018 high. Net institutional flow: foreign + institutional accumulation, retail distribution. The provenance landing page: Trendlyne IOC shareholding history.
Index events + corporate actions — the structural anchor
The standout index event in the file: IOC was dropped from NIFTY 50 in March 2022 (Apollo Hospitals replaced it). That's a permanent passive-flow drag — every quarterly NIFTY rebal since then has had no IOC bid. Corporate-action news flow surfaced multiple FY25/FY26 interim dividends consistent with the 4.92% trailing yield.
One-paragraph India read
Institutional ownership is constructive and contradictory to the technical setup: FIIs accumulated 245 bps over 12 months while retail capitulated 12.5%, and promoter (GoI) holding has been a steady 51.50% for four years with zero pledge. F&O and delivery direct data wasn't accessible this run — those are the gaps to fill from NSE/Trendlyne direct. The structural anchor that doesn't show up on any short-horizon chart is the 2022 NIFTY 50 demotion — it removed the passive-flow tailwind permanently, which is part of why the post-2022 base sits structurally lower than the 2014-2017 corridor.
Sources: Screener shareholding (direct), 412 news enrichment articles via SearXNG/Serper across 9 categories (block deals 55, bulk deals 47, F&O 60, promoter 53, FII/DII 41, index events 40, corp actions 43, delivery 33, analyst actions 40). NSE direct API: blocked from this run for block/bulk/delivery/F&O.
19. Stance + invalidation
Net score: −1. Three negatives (trend, vol regime, light data on volume), three neutrals (momentum, drawdown context, structure), one positive (FII flow). The technical surface points lower; the institutional flow points higher; the statistical character (Hurst, factor R²) says neither dominates.
Stance — Neutral / wait, 3-6 month horizon. The base case from regime + forward distribution is mildly positive 90d drift inside very wide bands — not actionable for a directional trade. The pattern setup (active double bottom at $1.43-$1.46) is the cleanest near-term technical, but it failed once already in March-April; reclaiming the 1y VWAP at $1.64 would change the read. This is a "react to $1.39 break or $1.71 reclaim" situation, not a "lead the next move" situation.
Invalidation levels:
- Bullish above $1.71 — clears the 200d ($1.658) + 50d ($1.648) + 1y VWAP ($1.643) + reclaims the bottom of the broken Oct-Feb base ($1.66). All four anchors stack within a $0.015 band; a daily close above $1.71 with volume is the cleanest tactical confirmation.
- Bearish below $1.39 — breaks the 52w low ($1.389), invalidates the active double bottom ($1.43 trough), and opens a tape-only path to the next HVN at $1.32 mid (5.9% of lifetime volume). Daily close below $1.39 forces the bear case.
Implementation: Liquidity is not the constraint. Action — wait. Build only on a confirmed bounce off $1.39-$1.43 with reclaim of $1.64; trim into $1.97-$2.00 if the bounce gets there. For a long-horizon investor the random-walk verdict in §1 + the −24.8% factor alpha in §2 should weigh more heavily than any chart signal — the buy thesis here, if there is one, is fundamental (post-FY26-trough OMC re-rating) not technical.