nse-options
$
npx mdskill add taracodlabs/aiden/nse-optionsAnalyzes NSE options chain for Nifty and BankNifty with OI, PCR, max pain, and IV
- Tracks open interest buildup and put-call ratios for options trading decisions
- Uses NSE's public JSON API to fetch real-time options chain data
- Calculates max pain levels and identifies peak open interest strike prices
- Returns structured data with strike prices, implied volatility, and OI changes
SKILL.md
.github/skills/nse-optionsView on GitHub ↗
---
name: nse-options
description: "NSE options chain: OI buildup, PCR, max pain, IV (Nifty/BankNifty)"
category: india
version: 1.0.0
tags: nse, options, derivatives, oi, pcr, maxpain, nifty, banknifty, iv, chain
license: Apache-2.0
---
# NSE Options
Analyze NSE options chain for Nifty and BankNifty — open interest buildup, put-call ratio, max pain level, and implied volatility — using NSE's public JSON API.
## When to Use
- User asks for Nifty or BankNifty options chain
- User wants to know the PCR (put-call ratio) for an index
- User asks for max pain or peak OI strikes
- User wants to see OI change at specific strike prices
- User asks about ITM/OTM options or IV skew
## How to Use
### Fetch options chain for Nifty
```powershell
$headers = @{ "User-Agent" = "Mozilla/5.0"; "Referer" = "https://www.nseindia.com" }
Invoke-WebRequest -Uri "https://www.nseindia.com" -SessionVariable nse -Headers $headers | Out-Null
$chain = Invoke-RestMethod -Uri "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY" `
-Headers $headers -WebSession $nse
$chain.records.data | Select-Object strikePrice,
@{N='CE_OI';E={$_.CE.openInterest}}, @{N='CE_IV';E={$_.CE.impliedVolatility}},
@{N='PE_OI';E={$_.PE.openInterest}}, @{N='PE_IV';E={$_.PE.impliedVolatility}} |
Where-Object { $_.CE_OI -or $_.PE_OI } |
Sort-Object strikePrice
```
### Calculate PCR (Put-Call Ratio)
```powershell
$headers = @{ "User-Agent" = "Mozilla/5.0"; "Referer" = "https://www.nseindia.com" }
Invoke-WebRequest -Uri "https://www.nseindia.com" -SessionVariable nse -Headers $headers | Out-Null
$chain = Invoke-RestMethod -Uri "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY" `
-Headers $headers -WebSession $nse
$totalCE_OI = ($chain.records.data | ForEach-Object { $_.CE.openInterest } | Measure-Object -Sum).Sum
$totalPE_OI = ($chain.records.data | ForEach-Object { $_.PE.openInterest } | Measure-Object -Sum).Sum
$pcr = [math]::Round($totalPE_OI / $totalCE_OI, 2)
Write-Host "Nifty PCR: $pcr (CE OI: $totalCE_OI | PE OI: $totalPE_OI)"
```
### Find max pain strike
```powershell
$headers = @{ "User-Agent" = "Mozilla/5.0"; "Referer" = "https://www.nseindia.com" }
Invoke-WebRequest -Uri "https://www.nseindia.com" -SessionVariable nse -Headers $headers | Out-Null
$chain = Invoke-RestMethod -Uri "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY" `
-Headers $headers -WebSession $nse
$strikes = $chain.records.data | Select-Object strikePrice,
@{N='CE_OI';E={$_.CE.openInterest}},
@{N='PE_OI';E={$_.PE.openInterest}} |
Where-Object { $_.strikePrice }
# Max pain = strike where total dollar loss for option holders is maximum
$maxPainStrike = $strikes | ForEach-Object {
$s = $_.strikePrice
$pain = ($strikes | ForEach-Object {
$ceVal = [math]::Max(0, $s - $_.strikePrice) * $_.CE_OI
$peVal = [math]::Max(0, $_.strikePrice - $s) * $_.PE_OI
$ceVal + $peVal
} | Measure-Object -Sum).Sum
[PSCustomObject]@{ Strike = $s; TotalPain = $pain }
} | Sort-Object TotalPain | Select-Object -First 1
Write-Host "Max Pain Strike: $($maxPainStrike.Strike)"
```
### Top CE OI strikes (resistance levels)
```powershell
$chain.records.data |
Where-Object { $_.CE.openInterest -gt 0 } |
Sort-Object { $_.CE.openInterest } -Descending |
Select-Object -First 5 strikePrice, @{N='CE_OI';E={$_.CE.openInterest}}, @{N='CE_OI_Change';E={$_.CE.changeinOpenInterest}}
```
### Top PE OI strikes (support levels)
```powershell
$chain.records.data |
Where-Object { $_.PE.openInterest -gt 0 } |
Sort-Object { $_.PE.openInterest } -Descending |
Select-Object -First 5 strikePrice, @{N='PE_OI';E={$_.PE.openInterest}}, @{N='PE_OI_Change';E={$_.PE.changeinOpenInterest}}
```
## Examples
**"What is the current Nifty PCR?"**
→ Fetch chain, sum all CE and PE OI, divide PE by CE — PCR > 1.2 is bullish, < 0.8 is bearish.
**"Where is max pain for this week's expiry?"**
→ Run the max pain calculation across all strikes and return the strike with minimum total option holder loss.
**"Show me the top 5 CE and PE OI strikes for BankNifty"**
→ Change URL to `symbol=BANKNIFTY` and sort by OI descending.
## Cautions
- Options chain data is updated every few minutes during market hours — not tick-level real-time
- PCR and max pain are sentiment indicators, not trading signals — use alongside price action
- Always initialize the NSE session cookie before API calls or you will get 401/403 errors
- Near expiry, IV can spike significantly — raw IV numbers are comparable only within the same expiry