diff --git a/public/index.html b/public/index.html index 709f07b..597f145 100644 --- a/public/index.html +++ b/public/index.html @@ -330,7 +330,7 @@ async function loadMarket(){ const map=Object.fromEntries(data.map(q=>[q.key,q])); if(!window._mktCache)window._mktCache={};(data||[]).forEach(function(q){window._mktCache[q.key]=q;});grid.innerHTML=SLOTS.map(slot=>{ const q=map[slot.key]; - if(!q){var c=(window._mktCache||{})[slot.key];if(c){q=c;}else{return '
+slot.label+"
';}} + if(!q){var c=(window._mktCache||{})[slot.key];if(c){q=c;}else{return '
'+slot.label+'
';}} const up=q.changePct>=0,cl=up?'up':'dn',arrow=up?'\u25b2':'\u25bc'; const price=q.price>10000?q.price.toLocaleString('en-IN',{maximumFractionDigits:0}):q.price.toFixed(2); return '
'+slot.label+'
'+ @@ -341,7 +341,7 @@ async function loadMarket(){ } async function loadPositions(){ const {data}=await fetch('/api/positions').then(r=>r.json()); - const open=data.filter(p=>p.is_closed===0); + const open=data.filter(p=>p.is_closed===0 && +p.netqty!==0); const tbody=document.getElementById('pos-body'),tfoot=document.getElementById('pos-foot'); if(!open.length){tbody.innerHTML='No open positions';tfoot.style.display='none';return;} const sU=open.reduce((s,p)=>s+p.unrealised_pnl,0),sR=open.reduce((s,p)=>s+p.realised_pnl,0),sT=open.reduce((s,p)=>s+p.total_pnl,0); @@ -507,6 +507,8 @@ function detectStrategy(opts) { return opts.length+'-Leg Strategy'; } + +function calcSD(spot,dte,vix){var v=vix>1?vix/100:0.18;var dv=v/Math.sqrt(252);var move=spot*dv*Math.sqrt(Math.max(dte,1));return{sd1:move,sd2:move*2};} async function loadPayoff() { var canvas = document.getElementById('payoff-chart'); var emptyEl = document.getElementById('pf-empty'); @@ -583,7 +585,7 @@ async function loadPayoff() { var tc = dk?'#3D444D':'#C4B8B0'; if (payoffChartInst) payoffChartInst.destroy(); - canvas._beLines = bes; canvas._spotLine = spot; canvas._chartXs = xs; + var vixV=(window._mktCache&&window._mktCache['INDIAVIX'])?window._mktCache['INDIAVIX'].price:0;canvas._sdInfo=calcSD(spot,typeof dte==='number'?dte:7,vixV);canvas._beLines=bes;canvas._spotLine=spot;canvas._chartXs=xs; payoffChartInst = new Chart(canvas, { type: 'line', @@ -634,7 +636,8 @@ async function loadClosedPositions() { var staleEl = document.getElementById('closed-stale'); if (!tbody) return; - var data = res.data || []; + var tIST=new Date().toLocaleDateString('en-CA',{timeZone:'Asia/Kolkata'}); + var data=(res.data||[]).filter(function(p){return p.updated_at&&p.updated_at.slice(0,10)>=tIST;}); var totalBooked = res.totalBooked || 0; // Update collapsed header badge