DEV Community

shakti tiwari
shakti tiwari

Posted on • Originally published at optiontradingwithai.in

Option Chain Analysis AI से कैसे करें (Nifty/Bank Nifty)

Option Chain Analysis

सीधी बात: Option Chain वह Table है जिसमें हर Strike का Open Interest (OI), Price और Volatility होता है। AI से इसे Analysis करने का मतलब — इन संख्याओं से Features बनाना और एक Model से Direction का अनुमान लगाना। नीचे Python code है।

सिर्फ सीखने के लिए। निवेश सलाह नहीं।

Chain क्या है

Exchange हर Strike के लिए दो कीमतें देता है — Call (CE) और Put (PE)। हर row में: Strike, Bid, Ask, OI, Volume, IV।

PCR (Put-Call Ratio) निकालना

# Mac / Linux / Termux
python3 pcr.py
# Windows CMD
py pcr.py
Enter fullscreen mode Exit fullscreen mode
def calc_pcr(chain: dict) -> float:
    # chain = {"ce_oi": [...], "pe_oi": [...]}
    put_oi = sum(chain["pe_oi"])
    call_oi = sum(chain["ce_oi"])
    return put_oi / call_oi if call_oi else 0.0

# उदाहरण: Put OI 90000, Call OI 76000
print("PCR:", calc_pcr({"ce_oi":[76000], "pe_oi":[90000]}))  # ~1.18
Enter fullscreen mode Exit fullscreen mode

PCR > 1 = Puts ज़्यादा (नीचे का डर)। बहुत ऊँचा (>1.2) तो उल्टा (Bullish) signal भी।

Max Pain (अधिकतम नुकसान)

वह Strike जहाँ सबसे ज़्यादा Traders का नुकसान होता — अक्सर Expiry वहीं भटकती है।

def max_pain(chain):
    pains = {}
    for s in chain["strikes"]:
        loss = sum(max(s - k, 0)*o for k, o in zip(chain["strikes"], chain["ce_oi"])) \
             + sum(max(k - s, 0)*o for k, o in zip(chain["strikes"], chain["pe_oi"]))
        pains[s] = loss
    return min(pains, key=pains.get)
Enter fullscreen mode Exit fullscreen mode

पूरी AI Pipeline

def full_pipeline(chain, vix):
    feats = build_features(chain, pcr=calc_pcr(chain))
    feats["vix"] = vix
    feats["vix_regime"] = "high" if vix > 22 else "low"
    model = train_chain_model(feats[FEATURES], y)
    p = model.predict_proba(feats[FEATURES])[:, 1]
    return p
Enter fullscreen mode Exit fullscreen mode

NSE Data कैसे लाएँ

  • NSE site से रोज़ Chain CSV डाउनलोड करें।
  • ब्रोकर API (Zerodha Kite) से Live kite.quote()
  • Paper Trade के लिए CSV काफी है।

Multiple Expiries

अलग-अलग Expiry अलग व्यवहार करतीं — हर एक पर अलग Model या dte Feature जोड़ें ताकि Model जाने कौन सी Expiry।

पूरी Production Pipeline (Data Engine → Predictor → Filter)

कच्चे बाज़ार Data और Trade के बीच पाँच चरण होते हैं:

1. Data Engine     हर कुछ सेकंड में Chain + IV + PCR लाएँ
2. Feature Engine  build_features() → साफ, duplicate हटाएँ, label
3. Predictor       Model → हर Strike की Probability
4. Filter          Greeks + Regime + Prob-band rules → allow/block
5. Executor        paper या live entry, size तय
Enter fullscreen mode Exit fullscreen mode

Data Engine ब्रोकर Feed से जोड़ता है। Feature Engine गलत Data हटाता है। Predictor Probability देता है। Filter सख्त नियम लगाता है — यही वजह है कि Model जो Training में नहीं देखा वो Regime भी सिस्टम झेल लेती है। Executor अनुमत Signal को size वाला Order बनाता है।

Market Microstructure और Liquidity (Model के लिए क्यों ज़रूरी)

Signal तभी काम करता है जब उसे लिक्विडिटी मिले। तीन microstructure facts जो Model मानता है:

  1. Bid-ask Spread छोटे edges को खा जाता है। ATM Option में 0.3% spread हो तो Signal को break-even के लिए 0.3% से ज़्यादा clear करना पड़ता है। spread_pct feature सजावट नहीं — पहला Filter है।
  2. Open Interest build-up support/resistance बनाता है। OI किसी Strike पर जमा हो तो Expiry में वो Strike magnet बनती है। Model OI concentration को नज़रअंदाज़ करे तो pinning effect गलत price करता है।
  3. Volume confirm करता है, OI position बताता है। बढ़ता Volume + बढ़ता OI = नया पैसा (trend confirm)। बढ़ता Volume + घटता OI = squaring (exhaustion)।

Entry भरोसा करने से पहले: spread tight, OI slope signal direction के साथ, volume exhaustion pattern में न हो।

Volatility Regime Detection (असली Code)

Market stationary नहीं है। Calm IV में सीखा Model vol spike में बिगड़ता है। Vol Index से Regime पहचानें:

# Mac / Linux / Termux
python3 regime.py
# Windows CMD
py regime.py
Enter fullscreen mode Exit fullscreen mode
def regime_state(vix, vix_ma20):
    z = (vix - vix_ma20) / (vix_ma20 + 1e-9)
    if z > 2.0:
        return "CRASH", 0.5      # size आधा
    if z > 1.0:
        return "STRESS", 0.75    # size घटाएँ
    if z < -1.0:
        return "CALM", 1.0       # full size
    return "NORMAL", 1.0
Enter fullscreen mode Exit fullscreen mode

CRASH state size 50% कर देता है — यही rule 2020 जैसे gaps में naive bots को बचाता है। Model की Probability वही रहती है; बस Executor की Capital adapt करती है।

Execution और Broker Reality

Backtest मानता है fill मध्य (mid) पर मिलेगा। Live fill ask (buy) / bid (sell) पर, plus brokerage और STT। तीन सच्चाइयाँ:

  • Brokerage + Taxes: per-lot flat fee + exchange charges। सस्ते Option का round-trip 0.5-1% का पड़ता है — Backtest में fees_bps रखें, zero नहीं।
  • Slippage: तेज बाज़ार में quoted mid signal और fill के बीच घूमता है। Position size छोटी रखें ताकि slippage edge से कम रहे।
  • Margin: short Options के लिए margin block, long के लिए premium। position_size() function premium risk से size करता है।

कभी ऐसा Backtest profit न दिखाएँ जो fees के बाद live account न दे सके।

Realistic Weekly Routine

Consistency bursts से जीतती है। इस सिस्टम का काम का हफ़्ता:

  • सोमवार: पिछले हफ़्ते का Chain CSV लाएँ, अगर drift alert बजा तो retrain, regime state देखें।
  • मंगल–गुरु: market hours में paper loop चलाएँ, हर entry/exit लॉग करें (Model की Probability + Filter का फैसला)।
  • शुक्रवार: expiry week हो तो DTE limits कसें, realized vs predicted देखें।
  • वीकेंड: एक regulatory update पढ़ें, broker margin rules बदले तो check करें।

ये get-rich loop नहीं — measurement loop है। 8-12 हफ़्ते ईमानदार paper logs के बाद असली edge पता चलती है।

Worked Example — पूरा नंबरों के साथ

मान लें Nifty 50 Spot = 24800, ATM Strike = 24800, Expiry 8 दिन दूर (DTE=8)।

Input Value
Spot 24800
ATM Strike 24800
IV 16%
Delta 0.50
Gamma 0.002
Theta -12 रु/दिन
Vega 35
OI 90000
Volume 6000
PCR 0.95
India VIX 14.5

Step 1 — Features बनाएँ: build_features() चलाने पर moneyness = 0, iv_skew ATM पर 0, theta_per_delta = -12/0.50 = -24

Step 2 — Model Prediction: मान लें Model ने prob_up = 0.62 दिया।

Step 3 — Risk Layer: 0.58 <= 0.62 <= 0.80 ✅, DTE=8 > 1 ✅, Vega=35 > 8 ❌ → BLOCK (Volatility बहुत है)।

यही अंतर है सही और गलत के बीच। Model bullish है पर Risk Layer ने रोका — क्योंकि Vega=35 मतलब IV बहुत high, ऐसे में Theta जल्दी काटता।

Step 4 — अगर Vega=5 होता: तब Risk Layer allow करती, size = (50000 * 0.01)/24 ≈ 20 units। 20 units का premium risk = 20 × 89 ≈ 1780 रु — छोटा, manageable।

ज़्यादा FAQ

प्र६. Vega high होने पर क्या करें?
या तो wait करें जब तक IV शांत न हो, या size आधा करें।

प्र७. DTE कम होने पर क्यों रोकें?
Theta तेज़ हो जाता है — हर दिन value घटती है, edge मार जाती है।

प्र८. Paper Trade कितने दिन?
कम से कम 20-30 trading sessions, ताकि अलग-अलग Regime देखें।

प्र९. Model कब Retrain करें?
जब drift alert बजे (feature mean 2 std घूमे) या हर सोमवार।

प्र१०. Loss कैसे control करें?
हर trade का max loss = premium ही (long option) → position size से ही सीमित।

Practical Tips Retail Traders के लिए

  • शुरू में सिर्फ 1 Index (Nifty या Bank Nifty) पर focus करें।
  • एक बार में 2-3 Strikes से ज़्यादा मत लें।
  • Expiry week में DTE limit कसें (<= 3)।
  • अपना हर trade लॉग करें — बिना लॉग के सुधार नहीं।
  • कभी भी पूरा capital एक trade में मत लगाएँ।

Glossary (और Terms)

  • Strike Price: वो कीमत जिस पर Option चलेगा।
  • Premium: Option खरीदने की कीमत (हमारा max loss)।
  • Spot: अंतर्निहित का वर्तमान भाव।
  • IV Crush: Expiry के पास IV गिरना (value टूटना)।
  • Hedging: एक position से दूसरे का risk कवर करना।
  • Break-even: वो Spot जहाँ न तो profit न loss।
  • Leverage: छोटी रकम से बड़ी exposure (F&O में common, risky)। ## Strategy Variations (अलग-अलग सेटअप)

एक ही Pipeline से कई रणनीतियाँ चल सकती हैं बिना Model बदले:

  • Directional Long: prob_up > 0.62 → ATM Call लें, DTE 5-15।
  • Spread: prob_up बैंड में + IV high → Bull Call Spread (limit Vega)।
  • Contrarian: PCR > 1.2 + Skew negative → mean-reversion Put sell (sophisticated, margin चाहिए)।
  • Vol Play: IV crush से बचने के लिए Expiry week में Long शुरू न करें।

हर वेरिएशन अलग Risk Layer सेटिंग्स लेता है — Vega limit, DTE limit, size multiplier अलग।

Model Comparison (कौन सा लें)

Model Speed Accuracy Phone fit
Logistic Regression सबसे तेज़ कम बढ़िया
HistGradientBoosting तेज़ अच्छी बढ़िया
XGBoost GPU तेज़ सबसे अच्छी wheel चाहिए
LightGBM सबसे तेज़ अच्छी बढ़िया

Retail के लिए HistGradientBoosting या LightGBM शुरुआत के लिए सही हैं — तेज़, सटीक, कम झंझट।

Troubleshooting (जब कुछ टूटे)

  • Model हमेशा 0.5 दे रहा → Features में bug, या Label leak।
  • Backtest profit, Live loss → fees/slippage नहीं जोड़ा।
  • डाटा गायब → Feed gap, stale mid मत भेजें Model को।
  • Overfit → max_depth कम करें, Early Stop चालू करें।
  • Regime बदला → Retrain, drift alert सुनें।

ये सब कॉमन हैं — हर एक का fix ऊपर लिखा है। जल्दबाज़ी मत करो, लॉग देखो।

Common Mistakes

  1. सिर्फ OI देखना, IV भूलना।
  2. PCR को बिना Regime के पढ़ना।
  3. Max Pain को निश्चित Target मानना।

FAQ

प्र१. Chain क्या है?
हर Strike की Price और OI की Table।

प्र२. PCR क्या बताता?
Put और Call OI का अनुपात — भावना Signal।

प्र३. Max Pain क्यों देखें?
अक्सर Expiry उसी Strike के पास रुकती है।

प्र४. AI कहाँ मदद करता?
Features बनाकर Direction का अनुमान लगाने में।

प्र५. शुरुआत कैसे?
CSV लाएँ, ऊपर का Code चलाएँ, Paper Trade करें।

Glossary

  • Chain: सारी Strikes की Table।
  • CE: Call (खरीद)।
  • PE: Put (बेचना)।
  • OI: Open Interest।
  • IV: Implied Volatility।
  • Max Pain: नुकसान Strike।

Footer

Shakti Tiwari — Options Trader, XGBoost Expert।
Books: Option Trading with AI (B0H9ZNTBPK) · The AI Opportunity (B0HBBFKDQF)
Site: optiontradingwithai.in · मुफ़्त मदद: shaktitiwari715@gmail.com
Dev.to: @shaktitiwari · X: @shaktitiwari

Top comments (0)