From b2e6ef940a5c43787664479b33623a483f664d83 Mon Sep 17 00:00:00 2001 From: Manohar Date: Wed, 27 May 2026 19:16:30 +0530 Subject: [PATCH] fix: payoff chart zoomed to 1.5 SD range instead of 8% flat pad --- public/index.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/public/index.html b/public/index.html index 51e5d3a..c79b6dc 100644 --- a/public/index.html +++ b/public/index.html @@ -582,12 +582,16 @@ async function loadPayoff() { var mktKey = ul==='SENSEX'?'SENSEX': ul==='NIFTY'?'NIFTY50': ul==='BANKNIFTY'?'BANKNIFTY': null; var spot = mktKey ? (mktMap[mktKey]||0) : 0; - // Price range + // Price range: ±1.5 SD from spot (uses VIX if available, else 18% ann vol) + // This keeps the chart tight and readable — widens only as much as vol suggests + var vixForRange=(window._mktCache&&window._mktCache['INDIAVIX'])?window._mktCache['INDIAVIX'].price:0; + var sdRange = calcSD(spot||75000, typeof dte==='number'?dte:7, vixForRange); + var rangePad = sdRange.sd1 * 1.5; var strikes = opts.map(function(p){return p._parsed.strike;}); var minS = Math.min.apply(null,strikes), maxS = Math.max.apply(null,strikes); - var pad = Math.max((maxS-minS)*0.6, minS*0.08); - var lo = Math.floor((Math.min(minS, spot||minS)-pad)/100)*100; - var hi = Math.ceil((Math.max(maxS, spot||maxS)+pad)/100)*100; + // Ensure all strikes are visible even if outside 1.5SD + var lo = Math.floor((Math.min(minS, spot-rangePad))/100)*100; + var hi = Math.ceil((Math.max(maxS, spot+rangePad))/100)*100; var step = Math.max(Math.round((hi-lo)/100/100)*100, 50); var xs=[], ys=[];