<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aion Analytics (India)</title>
    <description>The latest articles on DEV Community by Aion Analytics (India) (aion-analytics-india).</description>
    <link>https://dev.to/aion-analytics-india</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13899%2F5f8c007f-f8fa-46d9-8e1a-0f38209ae9da.png</url>
      <title>DEV Community: Aion Analytics (India)</title>
      <link>https://dev.to/aion-analytics-india</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aion-analytics-india"/>
    <language>en</language>
    <item>
      <title>Your logs are editable: the missing record in automated trading</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Tue, 08 Sep 2026 13:00:04 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/your-logs-are-editable-the-missing-record-in-automated-trading-1m69</link>
      <guid>https://dev.to/aion-analytics-india/your-logs-are-editable-the-missing-record-in-automated-trading-1m69</guid>
      <description>&lt;p&gt;When an automated trade goes wrong, ask a simple question: what did the system actually do?&lt;/p&gt;

&lt;p&gt;Most stacks cannot answer it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the record is usually missing
&lt;/h2&gt;

&lt;p&gt;Application logs are editable. That is not an accusation, it is just what a log file is — a writable file on a machine somebody controls.&lt;/p&gt;

&lt;p&gt;Screenshots prove nothing. They are trivially fabricated and carry no verifiable ordering.&lt;/p&gt;

&lt;p&gt;The broker's record shows the order that arrived. It does not show the chain that produced it: which signal fired, what state the system was in, what was evaluated and rejected, and whether the order that reached the exchange is the one the strategy intended.&lt;/p&gt;

&lt;p&gt;So when the outcome is disputed — a fill at an unexpected price, an order that should never have been sent, an alleged malfunction — reconstruction depends on records held by whoever has the strongest interest in their content.&lt;/p&gt;

&lt;p&gt;That is an unsatisfactory basis for a dispute. It is a worse basis for an audit, and a worse one still for a regulatory enquiry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The asymmetry
&lt;/h2&gt;

&lt;p&gt;This matters more for retail algorithmic traders than for institutions, and the reason is structural.&lt;/p&gt;

&lt;p&gt;An institution has compliance infrastructure, order management systems with immutable audit trails, and lawyers. A retail trader running an automated strategy through a broker API has a Python process and a log file.&lt;/p&gt;

&lt;p&gt;When something goes wrong, the institution can produce a record. The retail trader can produce a screenshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;AION Order Execution Agent records the chain of custody from the originating signal through to the executed order, and it does so &lt;strong&gt;on the trader's own device&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Device-resident is the entire point. A record held by the counterparty to a dispute is worth very little. A record held by you, produced as events occur rather than reconstructed afterwards, is worth a great deal.&lt;/p&gt;

&lt;p&gt;It stays under your control. It is not transmitted to us.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it deliberately does not do
&lt;/h2&gt;

&lt;p&gt;It makes no trading decision. It is not a strategy, not a signal source, not an execution algorithm.&lt;/p&gt;

&lt;p&gt;It does not prevent a bad trade. It records what happened so the question can be settled afterwards.&lt;/p&gt;

&lt;p&gt;It does not replace your broker's records. It sits alongside them and answers a different question — not &lt;em&gt;what order arrived&lt;/em&gt;, but &lt;em&gt;what produced it&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  On the method
&lt;/h2&gt;

&lt;p&gt;The capture method is the subject of a filed patent application and is deliberately not documented publicly.&lt;/p&gt;

&lt;p&gt;We are aware that saying so is unsatisfying in a technical post. The alternative is worse: publishing the method before the application is resolved converts our own work into prior art against it.&lt;/p&gt;

&lt;p&gt;So this describes what the component does and why it exists. It does not describe how the capture works, and it will not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wider point
&lt;/h2&gt;

&lt;p&gt;The problem is not unique to trading. Any system that acts autonomously on your behalf and can be disputed afterwards has the same gap: the actor holds the record, and the record is editable.&lt;/p&gt;

&lt;p&gt;Trading is where the gap is most expensive, because the disputes involve money and the counterparty is better resourced than you are. But the question generalises — &lt;em&gt;who holds the evidence about what the machine did, and can they edit it?&lt;/em&gt; — and most autonomous systems currently answer it badly.&lt;/p&gt;




&lt;p&gt;More at &lt;a href="https://dashboard.aiondashboard.site/models/order-execution-agent" rel="noopener noreferrer"&gt;dashboard.aiondashboard.site/models/order-execution-agent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Informational only. Not investment advice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>security</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Rate limiting a public demo without fingerprinting anyone</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 04 Sep 2026 13:00:06 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/rate-limiting-a-public-demo-without-fingerprinting-anyone-57ap</link>
      <guid>https://dev.to/aion-analytics-india/rate-limiting-a-public-demo-without-fingerprinting-anyone-57ap</guid>
      <description>&lt;p&gt;We put two models behind a public demo with no signup and no card. That creates an immediate problem: how do you stop one visitor from consuming the whole thing, without tracking anybody?&lt;/p&gt;

&lt;p&gt;The usual answer is device fingerprinting. We decided against it, and this is what we built instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The constraint
&lt;/h2&gt;

&lt;p&gt;A demo with no account has no identity to meter against. You need to tell callers apart well enough to enforce a limit, and that is genuinely in tension with not tracking people.&lt;/p&gt;

&lt;p&gt;Canvas and WebGL fingerprinting solve it decisively. They also build a persistent identifier for someone who never agreed to one, work across sites, and survive clearing storage. Under GDPR and ePrivacy that is a consent obligation, not a legitimate-interest freebie.&lt;/p&gt;

&lt;p&gt;We were not willing to make that trade for a demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we actually do
&lt;/h2&gt;

&lt;p&gt;Two components, combined and hashed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;caller_hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session_token&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cf-connecting-ip&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-forwarded-for&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
          &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;session_token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()[:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The session token is generated by the browser per visit, held &lt;strong&gt;in memory only&lt;/strong&gt;, and gone when the tab closes. It is not a device identifier and nothing reads anything from the device.&lt;/p&gt;

&lt;p&gt;The result is truncated to 32 characters and stored in Redis with a 24-hour TTL. The raw IP is never written to disk. What we keep is a one-way hash that expires by itself.&lt;/p&gt;

&lt;p&gt;Verified from a clean browser: zero cookies, zero &lt;code&gt;localStorage&lt;/code&gt;, zero &lt;code&gt;sessionStorage&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug this design creates
&lt;/h2&gt;

&lt;p&gt;Here is the part worth reading if you are building something similar.&lt;/p&gt;

&lt;p&gt;We set the Sentinel limit to one company lookup per visitor per day. The original code incremented the counter on request, which is the obvious implementation and is fine at twenty lookups per day.&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;one&lt;/strong&gt; lookup per day it is a disaster. Mistype a company name, get no result, and your entire daily allowance is gone. The demo is unusable and the visitor leaves thinking the product is broken.&lt;/p&gt;

&lt;p&gt;So the quota is reserved and then refunded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;reservation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reserve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# atomic INCR
&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;do_the_work&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reservation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                   &lt;span class="c1"&gt;# nothing produced, nothing charged
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;empty_response&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;reservation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt;
&lt;span class="n"&gt;reservation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A company name that matches nothing, a query under three characters, a headline the model cannot resolve, an inference service that is down — none of them cost the visitor anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reserve-then-refund rather than check-then-increment&lt;/strong&gt;, specifically because Redis &lt;code&gt;INCR&lt;/code&gt; is atomic. A read-then-write check would let two concurrent requests both pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ceilings, two messages
&lt;/h2&gt;

&lt;p&gt;Per visitor, and global across all visitors. They fail differently because they mean different things to whoever is reading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per visitor: &lt;em&gt;"Daily demo limit reached for this device. Come back tomorrow."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Global: &lt;em&gt;"Demo capacity reached for now. Try again shortly."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Telling someone to come back tomorrow when the real problem is that you are saturated for ten minutes is a small lie that costs you the visitor.&lt;/p&gt;

&lt;p&gt;The global ceiling resolves per request from a Redis key first, then an environment variable, then a default. Raising it during a traffic spike takes no restart and no deploy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli SET demo:config:daily_ceiling 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Was the trade worth it?
&lt;/h2&gt;

&lt;p&gt;Fingerprinting would give us stronger abuse control. Someone determined can clear their session token and get a fresh allowance, and the IP hash is the only thing standing in the way.&lt;/p&gt;

&lt;p&gt;We accept that. The demo is a static snapshot and a rate-limited inference call — the blast radius of abuse is small, and the cost of fingerprinting is paid by every honest visitor, permanently, so that we can inconvenience a few dishonest ones.&lt;/p&gt;

&lt;p&gt;The privacy page says plainly that we could stop abuse more effectively by fingerprinting and have chosen not to. If you are going to make that choice, say so where people can read it.&lt;/p&gt;




&lt;p&gt;Try it at &lt;a href="https://dashboard.aiondashboard.site/demo" rel="noopener noreferrer"&gt;dashboard.aiondashboard.site/demo&lt;/a&gt; — one company lookup and three event analyses per visitor per day, and only requests that return a result are counted.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>python</category>
      <category>api</category>
    </item>
    <item>
      <title>Two independent risk scores. We measured them and refused to blend them.</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 04 Sep 2026 02:24:21 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/two-independent-risk-scores-we-measured-them-and-refused-to-blend-them-1oko</link>
      <guid>https://dev.to/aion-analytics-india/two-independent-risk-scores-we-measured-them-and-refused-to-blend-them-1oko</guid>
      <description>&lt;p&gt;When two models disagree, most systems average them. We measured ours and found that averaging would have destroyed the only result worth having.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;AION Sentinel screens listed Indian companies for accounting risk. Two methods examine the same company independently and each produces a ranking.&lt;/p&gt;

&lt;p&gt;The obvious next step is to combine them. One number is easier to display, easier to sort, easier to explain. Every product instinct pushes toward a single score.&lt;/p&gt;

&lt;p&gt;Before doing that, we measured how the two actually relate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the measurement showed
&lt;/h2&gt;

&lt;p&gt;Across 2,715 companies on the same snapshot:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spearman rank correlation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-0.07&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Companies shared between their top fifties&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agreement at the 99th percentile&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A correlation of -0.07 is not weak agreement. It is &lt;em&gt;no relationship at all&lt;/em&gt;. The two methods are, statistically speaking, looking at different things and telling you different things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why averaging fails here
&lt;/h2&gt;

&lt;p&gt;Averaging assumes your inputs are noisy estimates of the same underlying quantity. Under that assumption the noise partly cancels and the average is better than either input.&lt;/p&gt;

&lt;p&gt;That assumption is doing all the work, and here it is false. When two measurements are independent, the average is not a better estimate of either one. It is a new number that is worse than both, because it discards the information that made each distinctive.&lt;/p&gt;

&lt;p&gt;The concrete case that settled it for us:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Moksh Ornaments&lt;/strong&gt; sat at the 59th percentile on the statistical model and the 99.7th on the rule engine. Sentinel flagged it on 8 June 2026. SEBI issued an adjudication order for market manipulation on 1 July 2026, twenty-three days later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Average those two percentiles and you get roughly p79. Buried in the middle of the distribution, indistinguishable from hundreds of unremarkable companies. &lt;strong&gt;The one case with external regulatory confirmation would have been the one the blend hid.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we did instead
&lt;/h2&gt;

&lt;p&gt;We inverted the design. Rather than treating disagreement as noise to be smoothed away, we treat &lt;em&gt;agreement&lt;/em&gt; as the signal.&lt;/p&gt;

&lt;p&gt;Because the two methods almost never concur, concurrence is informative when it happens. On the same snapshot only 11 of 2,715 companies were ranked in the top 10% by both methods independently. That rarity is exactly what makes it worth reading.&lt;/p&gt;

&lt;p&gt;Both component scores stay visible in the output. Nothing hides behind a composite, and a reader can always see which method fired and which did not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that generalises
&lt;/h2&gt;

&lt;p&gt;Three things transfer to any system combining multiple signals:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measure the correlation before you combine anything.&lt;/strong&gt; It takes minutes. We nearly shipped a blended score on the assumption that two risk measures must broadly agree. They did not, and no amount of design reasoning would have revealed that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A single number is a product decision, not a statistical one.&lt;/strong&gt; It is worth wanting for interface reasons. It is not automatically more accurate, and if your inputs are independent it is measurably less useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rare agreement between independent methods carries more information than strong agreement between correlated ones.&lt;/strong&gt; If two methods always agree, the second is nearly redundant. If they rarely agree, concurrence means something.&lt;/p&gt;

&lt;h2&gt;
  
  
  On calibration
&lt;/h2&gt;

&lt;p&gt;One thing we will not claim: that these tiers are probabilities.&lt;/p&gt;

&lt;p&gt;There is a single externally confirmed outcome in the record. One. That is nowhere near enough to calibrate against, so the output is an explicit rank composite and the payload says so in a field named &lt;code&gt;not_a_probability&lt;/code&gt;. A ranking within this universe on this date is a genuinely different object from a probability of anything, and conflating the two is how confident, wrong systems get built.&lt;/p&gt;

&lt;p&gt;Two confirmed outcomes is not a track record either, and we do not present it as one. It is a reason to look, not proof of anything.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sentinel is informational and educational only. Not investment advice, not an allegation of wrongdoing about any company, and not a SEBI-registered Research Analyst product. Statistical divergence from peer disclosure is a reason to read further and nothing more.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can try a company lookup at &lt;a href="https://dashboard.aiondashboard.site/demo" rel="noopener noreferrer"&gt;dashboard.aiondashboard.site/demo&lt;/a&gt; — no signup, no card.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>python</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>A market calendar where holidays are computed, not typed in</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 04 Sep 2026 02:22:27 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/a-market-calendar-where-holidays-are-computed-not-typed-in-1eia</link>
      <guid>https://dev.to/aion-analytics-india/a-market-calendar-where-holidays-are-computed-not-typed-in-1eia</guid>
      <description>&lt;p&gt;We build market calendars. The Indian one has been on PyPI for a while. The Lithuanian one is new, and it is built on a different principle: &lt;strong&gt;holidays are computed, not tabulated.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;aion-lithuanian-market-calendar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The problem with hardcoded holiday tables
&lt;/h2&gt;

&lt;p&gt;Most holiday libraries ship a dictionary of dates. Someone types them in for the next few years, and the package works until it silently does not.&lt;/p&gt;

&lt;p&gt;Two things go wrong.&lt;/p&gt;

&lt;p&gt;The table runs out. Ask for 2031 and you get a wrong answer or an exception, usually the former, usually discovered in production.&lt;/p&gt;

&lt;p&gt;And moveable feasts are typed by hand. Easter moves every year on a rule that is not obvious, and every holiday anchored to it moves with it. A hand-typed table is a hand-typed opportunity to be wrong in a year nobody has checked yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Computing instead
&lt;/h2&gt;

&lt;p&gt;Lithuania observes 16 public holidays. Most are fixed dates. The moveable ones derive from Easter, which is computed with the Anonymous Gregorian algorithm — sometimes called Meeus/Jones/Butcher.&lt;/p&gt;

&lt;p&gt;Lithuania is predominantly Roman Catholic and uses the &lt;strong&gt;Western&lt;/strong&gt; (Gregorian) computus, not the Orthodox one. The two diverge by weeks in most years. Getting this wrong is the kind of error that looks fine in the year you test it and fails later.&lt;/p&gt;

&lt;p&gt;Because the rule is computed, any year works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aion_lithuanian_market_calendar&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;holidays&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2031&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name_en&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name_lt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No table to exhaust. No year that quietly falls off the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bilingual by default
&lt;/h2&gt;

&lt;p&gt;Every holiday carries both an English and a Lithuanian name:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;English&lt;/th&gt;
&lt;th&gt;Lithuanian&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Independence Restoration Day&lt;/td&gt;
&lt;td&gt;Lietuvos nepriklausomybės atkūrimo diena&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;St John's Day&lt;/td&gt;
&lt;td&gt;Rasos ir Joninės&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statehood Day&lt;/td&gt;
&lt;td&gt;Valstybės diena&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A Lithuanian user should not have to read their own national holidays in English. That is not localisation as a feature, it is the minimum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline
&lt;/h2&gt;

&lt;p&gt;The package makes no network calls in normal use. No telemetry on bundled lookups, no phone-home, no API key. It computes locally and returns.&lt;/p&gt;

&lt;p&gt;That matters for anything running in CI, in an air-gapped environment, or at scale where an outbound request per date check is absurd.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we are still unsure about
&lt;/h2&gt;

&lt;p&gt;Three questions are open, and we would rather say so than imply a completeness we have not verified:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Completeness.&lt;/strong&gt; We believe the 16 are correct. We have not had them reviewed by someone who has lived a Lithuanian working year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Father's Day.&lt;/strong&gt; The rule we implement gives the first Sunday of June. We are confident about the rule and less confident that our source was authoritative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekend substitution.&lt;/strong&gt; When a public holiday falls on a Saturday or Sunday, does Lithuania grant a substitute weekday? Some countries do, some do not, and this &lt;strong&gt;materially changes business-day arithmetic&lt;/strong&gt;. We currently do not substitute.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are Lithuanian and any of these are obviously wrong to you, that is exactly the kind of correction we want. The repository is open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a market calendar company built this
&lt;/h2&gt;

&lt;p&gt;Trading systems ask one question constantly: &lt;em&gt;is the market open right now, and if not, when does it next open?&lt;/em&gt; Getting it wrong means orders into a closed session, settlement maths off by a day, and backtests that quietly include days that never traded.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://pypi.org/project/aion-indian-market-calendar/" rel="noopener noreferrer"&gt;aion-indian-market-calendar&lt;/a&gt; for NSE, BSE and MCX first because that is our home market. The Lithuanian calendar applies the same principle to a different jurisdiction: compute the rule, do not type the dates.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Package: &lt;a href="https://pypi.org/project/aion-lithuanian-market-calendar/" rel="noopener noreferrer"&gt;pypi.org/project/aion-lithuanian-market-calendar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/AION-Analytics-India/aion-lithuanian-market-calendar" rel="noopener noreferrer"&gt;github.com/AION-Analytics-India/aion-lithuanian-market-calendar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Project page: &lt;a href="https://dashboard.aiondashboard.site/open-source/lithuanian-market-calendar" rel="noopener noreferrer"&gt;dashboard.aiondashboard.site/open-source/lithuanian-market-calendar&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Corrections welcome, particularly from Lithuanian readers.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>aion-indian-market-intelligence: The India Contextual Intelligence Layer for Your LLMs and SaaS Products</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 17:38:33 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/aion-indian-market-intelligence-the-india-contextual-intelligence-layer-for-your-llms-and-saas-4eam</link>
      <guid>https://dev.to/aion-analytics-india/aion-indian-market-intelligence-the-india-contextual-intelligence-layer-for-your-llms-and-saas-4eam</guid>
      <description>&lt;p&gt;&lt;strong&gt;This is not another Indian market model.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It is the &lt;strong&gt;missing regional causal intelligence layer&lt;/strong&gt; you plug into your existing LLM, agent, or SaaS product.&lt;/p&gt;

&lt;p&gt;You bring the headlines (from any sources or circulars you already use).&lt;br&gt;&lt;br&gt;
It returns structured, time-lagged, signed sector impact + stakeholder context specifically calibrated for Indian markets.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Important Disclaimer&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This service provides structured market-interpretation infrastructure for informational purposes.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;It is not investment advice, not a trading signal, and not a recommendation.&lt;/strong&gt; All decisions and regulatory compliance (including SEBI) remain with you.&lt;/p&gt;


&lt;h2&gt;
  
  
  Core Value Proposition
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Signed &lt;code&gt;sector_vector&lt;/code&gt; (positive/negative exposure per sector)&lt;/li&gt;
&lt;li&gt;Time-lagged effects (e.g. Construction negative at lag 0, positive at lag 90 after a cyclone)&lt;/li&gt;
&lt;li&gt;Stakeholder views (banks, borrowers, government, exporters, etc.)&lt;/li&gt;
&lt;li&gt;VIX regime context&lt;/li&gt;
&lt;li&gt;High-confidence event typing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly the kind of structured, India-specific context that generic LLMs are weakest at providing.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Use It (for Developers &amp;amp; Vibe Coders)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Basic (your source → structured India context)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aion_indian_market_intelligence&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;analyze&lt;/span&gt;

&lt;span class="n"&gt;intel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RBI raises repo rate by 25 bps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sector_vector&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. LLM / RAG Augmentation
&lt;/h3&gt;

&lt;p&gt;Store the structured output next to your headlines in your vector store. When the LLM retrieves a document, also retrieve the sector impact data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;enriched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Headline: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Sector impact: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;intel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sector_vector&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Stakeholders: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;intel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;stakeholder_views&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="c1"&gt;# embed or store as metadata
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. SaaS / Sales &amp;amp; Lead Intelligence (high-leverage pattern)
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    Event[Macro / micro event] --&amp;gt; IMI[analyze → sector impact + severity]
    IMI --&amp;gt; YourCRM[Your customer / prospect list]
    YourCRM --&amp;gt; LLM[LLM gets real Indian regional causal context]
    LLM --&amp;gt; Action[Prioritized leads / risk flags / personalized messaging]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Real example: A policy change or weather event lands. Instead of generic “this is negative”, your system knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which specific sectors are affected&lt;/li&gt;
&lt;li&gt;The severity and direction&lt;/li&gt;
&lt;li&gt;The time-lagged second-order effects&lt;/li&gt;
&lt;li&gt;How this maps to your actual customers in those sectors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is extremely powerful for sales intelligence, account-based marketing, and risk products focused on India.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Batch from Your Existing Crawler
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aion_indian_market_intelligence&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;analyze&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;my_news_feed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;intel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headline&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;imi_sector_vector&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sector_vector&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;imi_top_positive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;top_positive_sectors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="c1"&gt;# store or act
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mermaid Diagrams
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Basic Integration&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    YourSources[Your news sources / circulars] --&amp;gt; Analyze[analyze()]
    Analyze --&amp;gt; AION[Hosted AION IMI]
    AION --&amp;gt; Structured[sector_vector + context]
    Structured --&amp;gt; YourLLM[Your LLM / Agent / Application]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;SaaS Sales / CRM Intelligence&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    ExternalEvent[Policy / Weather / Geopolitics / Commodity shock] 
        --&amp;gt; IMI[analyze → impact per sector]
    IMI --&amp;gt; YourData[Your CRM / lead list]
    YourData --&amp;gt; EnrichedLLM[LLM now understands India-specific impact on *your* accounts]
    EnrichedLLM --&amp;gt; Actionable[Prioritized actions]&lt;/code&gt;&lt;/pre&gt;



&lt;h2&gt;
  
  
  Sample Output (Realistic)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Severe cyclone makes coastal landfall..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"weather_disaster"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.84&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sector_vector"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Construction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"lag_0"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"lag_90"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.55&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Agriculture"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"lag_0"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-0.65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"lag_90"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-0.65&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stakeholder_views"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Positioning for Different Users
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vibe coders / AI agents&lt;/strong&gt;: Plug in via MCP (&lt;code&gt;uvx aion-indian-market-intelligence-mcp&lt;/code&gt;) and give your agent real Indian market context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS builders&lt;/strong&gt;: Add sector-impact awareness to any product that touches Indian companies or economy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal tools&lt;/strong&gt;: Enrich research, risk, or opportunity systems with calibrated causal vectors instead of raw sentiment.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://dashboard.aiondashboard.site/models/indian-market-intelligence" rel="noopener noreferrer"&gt;https://dashboard.aiondashboard.site/models/indian-market-intelligence&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PyPI&lt;/strong&gt;: &lt;code&gt;pip install aion-indian-market-intelligence&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt;: &lt;code&gt;uvx aion-indian-market-intelligence-mcp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is infrastructure. You decide what to do with the intelligence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>aion-indian-market-calendar: Accurate Multi-Session Indian Market Timing for Automated Systems</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:31:54 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/aion-indian-market-calendar-accurate-multi-session-indian-market-timing-for-automated-systems-4ocm</link>
      <guid>https://dev.to/aion-analytics-india/aion-indian-market-calendar-accurate-multi-session-indian-market-timing-for-automated-systems-4ocm</guid>
      <description>&lt;p&gt;Indian trading systems often need to decide automatically whether to start, pause, or stop based on which exchange segment is actually open.&lt;/p&gt;

&lt;p&gt;A single "is today a trading day?" check is not enough. NSE equity, CDS (currency), and MCX (commodities) have different hours. Some days are partial sessions (Muhurat trading, special closures). Hard-coding dates or relying on generic calendars leads to bots that either miss sessions or try to trade on holidays.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aion-indian-market-calendar&lt;/code&gt; solves exactly this problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;aion-indian-market-calendar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Basic Showcase
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aion_indian_market_calendar&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;IndiaMarketCalendar&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pytz&lt;/span&gt;

&lt;span class="n"&gt;cal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IndiaMarketCalendar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bundled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pytz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Asia/Kolkata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ist&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NSE equity open?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_market_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;          &lt;span class="c1"&gt;# 9:00–15:30
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDS open?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_market_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDS&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;                 &lt;span class="c1"&gt;# 9:00–17:00
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MCX open?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_market_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MCX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;                 &lt;span class="c1"&gt;# 9:00–23:30
&lt;/span&gt;
&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MCX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;seg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;→&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It correctly handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different close times (15:30 vs 17:00 vs 23:30)&lt;/li&gt;
&lt;li&gt;Muhurat trading (short evening session, usually on Diwali)&lt;/li&gt;
&lt;li&gt;Exchange-specific holidays&lt;/li&gt;
&lt;li&gt;Live refresh (optional) for last-minute circular changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison with Common Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool / Approach&lt;/th&gt;
&lt;th&gt;NSE Equity&lt;/th&gt;
&lt;th&gt;CDS (to 5pm)&lt;/th&gt;
&lt;th&gt;MCX Evening Session&lt;/th&gt;
&lt;th&gt;Muhurat Trading&lt;/th&gt;
&lt;th&gt;Partial Holidays&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;pandas_market_calendars (XNSE)&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Treated as holiday&lt;/td&gt;
&lt;td&gt;Poor&lt;/td&gt;
&lt;td&gt;Generic calendar, no India evening sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard-coded holiday list&lt;/td&gt;
&lt;td&gt;Fragile&lt;/td&gt;
&lt;td&gt;Fragile&lt;/td&gt;
&lt;td&gt;Fragile&lt;/td&gt;
&lt;td&gt;Easy to miss&lt;/td&gt;
&lt;td&gt;Very fragile&lt;/td&gt;
&lt;td&gt;Breaks every year or on circular changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom "if date in holidays"&lt;/td&gt;
&lt;td&gt;Error-prone&lt;/td&gt;
&lt;td&gt;Misses segments&lt;/td&gt;
&lt;td&gt;Completely wrong&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Common source of production incidents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;aion-indian-market-calendar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (special session)&lt;/td&gt;
&lt;td&gt;Yes (per segment)&lt;/td&gt;
&lt;td&gt;Segment-aware, bundled data + live refresh&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Generic calendars fail because Indian exchanges do not share one uniform schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Use Case: Auto-Start Systems on Partial Working Days
&lt;/h2&gt;

&lt;p&gt;Many developers run data pipelines, scanners, or execution engines that should only be active when a market segment is open.&lt;/p&gt;

&lt;p&gt;Instead of one cron job that always runs 9 AM–11:30 PM, you can poll at fixed intervals and decide per segment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Polling to Auto-Start/Stop for Different Sessions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pytz&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aion_indian_market_calendar&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;IndiaMarketCalendar&lt;/span&gt;

&lt;span class="n"&gt;cal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IndiaMarketCalendar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bundled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pytz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Asia/Kolkata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;should_run_for_segment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ist&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_market_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Simple polling loop (run this in a supervisor or systemd timer)
&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ist&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;equity_open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;should_run_for_segment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nf"&gt;should_run_for_segment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;cds_open&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;should_run_for_segment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDS&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mcx_morning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;should_run_for_segment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MCX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# first session
&lt;/span&gt;    &lt;span class="n"&gt;mcx_evening&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_market_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MCX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;equity_open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# start or keep alive equity data ingestion / scanners
&lt;/span&gt;        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — Equity session active (NSE/BSE)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# gracefully stop equity components
&lt;/span&gt;        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cds_open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — CDS session active&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;mcx_morning&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;mcx_evening&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — MCX session active (morning or evening)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# poll every minute; adjust as needed
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why This Matters on Partial Holidays
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Muhurat Trading Day&lt;/strong&gt;: Equity has a very short evening session (often 1 hour). Generic calendars mark the whole day as holiday. Your polling will correctly see the special session and can start the equity engine only for that window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exchange-specific closures&lt;/strong&gt;: One segment may be closed while another is open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCX second session&lt;/strong&gt;: Even on normal days, the evening session (roughly 5 PM – 11:30 PM) is separate. Systems that only watch "9 AM – 3:30 PM" will miss commodity opportunities or data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By checking &lt;code&gt;is_market_open("SEGMENT")&lt;/code&gt; or &lt;code&gt;get_session(...)&lt;/code&gt; you get the precise truth for that segment at that moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Useful Methods for Automation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trading_days&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NSE_EQUITY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# list of actual trading dates
&lt;/span&gt;&lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NSE_EQUITY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;# holidays for a segment
&lt;/span&gt;&lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;events_on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-11-08&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NSE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;# detects Muhurat etc.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also enable live refresh against the official AION endpoint so last-minute circular changes are picked up without rebuilding the package.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line for Developers
&lt;/h2&gt;

&lt;p&gt;If you are building anything that needs to run autonomously around Indian market hours — data collectors, risk engines, execution schedulers, scanners — you need segment-aware, session-aware calendar logic.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aion-indian-market-calendar&lt;/code&gt; gives you that in one small, MIT-licensed package with no external dependencies beyond pytz/tzdata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;aion-indian-market-calendar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full documentation and vs-pandas comparison:&lt;br&gt;&lt;br&gt;
&lt;a href="https://dashboard.aiondashboard.site/open-source/indian-market-calendar" rel="noopener noreferrer"&gt;https://dashboard.aiondashboard.site/open-source/indian-market-calendar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use it to poll, decide, and auto-start only when the right session is actually open — including the tricky partial and evening sessions that trip up most systems.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://dashboard.aiondashboard.site/open-source/indian-market-calendar" rel="noopener noreferrer"&gt;AION Analytics (India) dashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mirrored for discoverability. aion-indian-market-calendar is MIT licensed and available on PyPI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>india</category>
      <category>python</category>
      <category>nse</category>
      <category>mcx</category>
    </item>
    <item>
      <title>AION Research Notes — Complete Index</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:29:29 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/aion-research-notes-complete-index-1h39</link>
      <guid>https://dev.to/aion-analytics-india/aion-research-notes-complete-index-1h39</guid>
      <description>&lt;p&gt;&lt;strong&gt;AION Research Notes — Full Collection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mirrored from the AION Analytics (India) dashboard for wider reach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Originals &amp;amp; latest:&lt;/strong&gt; &lt;a href="https://dashboard.aiondashboard.site/research" rel="noopener noreferrer"&gt;https://dashboard.aiondashboard.site/research&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Notes (in reverse chrono on this org)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The 15-Minute Opening Window Rule&lt;/li&gt;
&lt;li&gt;The Dollar-Metals Dynamic&lt;/li&gt;
&lt;li&gt;The Great Indian Illusion, Part 2 (Gold)&lt;/li&gt;
&lt;li&gt;Gold-Silver Ratio as a Risk Regime Signal&lt;/li&gt;
&lt;li&gt;Your Trading Car&lt;/li&gt;
&lt;li&gt;Who Lost in the Crash&lt;/li&gt;
&lt;li&gt;The Great Indian Illusion (Part 1)&lt;/li&gt;
&lt;li&gt;Indian Market Intelligence: Macro Event to Sector Impact&lt;/li&gt;
&lt;li&gt;SEBI Governance Blind Spot&lt;/li&gt;
&lt;li&gt;Crash Cycles&lt;/li&gt;
&lt;li&gt;Options Greeks Through the Taylor Series&lt;/li&gt;
&lt;li&gt;Systemic Risk Model: Graph Theory&lt;/li&gt;
&lt;li&gt;The Bear Trap&lt;/li&gt;
&lt;li&gt;Euler Equation and Why Financial Markets Love It&lt;/li&gt;
&lt;li&gt;The Bull Trap&lt;/li&gt;
&lt;li&gt;Veritas: From Bachelier to Black-Scholes&lt;/li&gt;
&lt;li&gt;The High VIX Trap&lt;/li&gt;
&lt;li&gt;OpenAlgo symtoken: 31 Brokers...&lt;/li&gt;
&lt;li&gt;The FII-DII Headline Is Lagging...&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Papers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AION Indian Market Intelligence: Causal Incidence Modeling&lt;/li&gt;
&lt;li&gt;Asymmetric Multipolarity (SSRN)&lt;/li&gt;
&lt;li&gt;Bridging the Gap (SSRN)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All original posts include links back to the dashboard.&lt;/p&gt;

</description>
      <category>india</category>
      <category>research</category>
      <category>index</category>
      <category>aion</category>
    </item>
    <item>
      <title>Bridging the Gap: Blending Human Insights and Digital Tools to Master Emerging Markets (SSRN)</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:29:03 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/bridging-the-gap-blending-human-insights-and-digital-tools-to-master-emerging-markets-ssrn-1910</link>
      <guid>https://dev.to/aion-analytics-india/bridging-the-gap-blending-human-insights-and-digital-tools-to-master-emerging-markets-ssrn-1910</guid>
      <description>&lt;p&gt;Bridging the Gap: Blending Human Insights and Digital Tools to Master Emerging Markets.&lt;/p&gt;

&lt;p&gt;This paper explores the intersection of human judgment and digital/AI tools for better understanding and navigating emerging markets, with a focus on India.&lt;/p&gt;

&lt;p&gt;Key themes include combining traditional analysis with data-driven methods, the role of local context, and practical frameworks for market participants and researchers in complex environments.&lt;/p&gt;

&lt;p&gt;Full paper on SSRN: &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5140987" rel="noopener noreferrer"&gt;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5140987&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Emerging markets India Digital tools Human insights AI Research paper&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mirrored from AION Analytics (India) / SSRN.&lt;/strong&gt; &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5140987" rel="noopener noreferrer"&gt;Full paper&lt;/a&gt;&lt;/p&gt;

</description>
      <category>india</category>
      <category>emergingmarkets</category>
      <category>research</category>
      <category>ai</category>
    </item>
    <item>
      <title>The 15-Minute Opening Window Rule: Market Structure Before Entry</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:28:39 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/the-15-minute-opening-window-rule-market-structure-before-entry-5hkp</link>
      <guid>https://dev.to/aion-analytics-india/the-15-minute-opening-window-rule-market-structure-before-entry-5hkp</guid>
      <description>&lt;p&gt;The first 15 minutes of an NSE trading session are the noisiest. Order imbalances from overnight and pre-market carry settle. Institutional positioning adjusts. Retail participants react to opening gaps. Entering a trade before the opening range is defined is gambling on resolution, not reading structure. Wait for the opening high, low, and VWAP to establish — then act on the evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the opening 15 minutes are structurally different
&lt;/h2&gt;

&lt;p&gt;When the NSE opens at 9:15 AM, several forces arrive simultaneously:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-market auction orders that set the opening price for liquid stocks and indices&lt;/li&gt;
&lt;li&gt;Overnight position adjustments from institutional participants reacting to global markets, futures premiums, and news&lt;/li&gt;
&lt;li&gt;FII order execution that may be spread across the opening period&lt;/li&gt;
&lt;li&gt;Retail reaction to the opening gap (up or down) driven by pre-market commentary and sentiment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is high-volume, high-volatility price discovery that frequently overshoots in both directions. The opening candle is almost never the day's true direction. It is the market clearing its overnight imbalances.&lt;/p&gt;

&lt;h2&gt;
  
  
  The opening range: high, low, and VWAP
&lt;/h2&gt;

&lt;p&gt;By the end of the first 15 minutes — typically the 9:15-9:30 opening session — three reference levels are established:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opening High:&lt;/strong&gt; The highest price reached in the first 15 minutes. A break above this level with volume confirmation is a bullish structure signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opening Low:&lt;/strong&gt; The lowest price reached in the first 15 minutes. A break below this level with volume confirmation is a bearish structure signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VWAP (Volume-Weighted Average Price):&lt;/strong&gt; The average price weighted by volume transacted. Price above VWAP means buyers have been in control of the volume during the session. Price below means sellers have.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These three levels together form the structural map for the trading session. They are not forecasts — they are the raw evidence the market has provided about its own direction and conviction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The entry framework
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt; Let the first 15 minutes complete without placing any intraday directional trade. Mark the opening high, opening low, and VWAP on your chart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bullish breakout entry:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1) Price closes above the opening high on the 15-minute chart&lt;br&gt;
2) Volume on the breakout candle is above average (1.5× or higher is a stronger signal)&lt;br&gt;
3) Price is above VWAP&lt;br&gt;
4) Price retests the breakout level and holds (optional but stronger signal)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bearish breakdown entry:&lt;/strong&gt; symmetric.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do when price chops inside the opening range
&lt;/h2&gt;

&lt;p&gt;The opening range is frequently not broken for the first 30-60 minutes of trading. This is not a setup failure — it is the market telling you there is no clear structural conviction yet. The correct response is to wait, not to create a trade by picking a direction arbitrarily.&lt;/p&gt;

&lt;p&gt;Midpoint entries inside the opening range have poor risk/reward because both the high and low are nearby. The breakout or breakdown gives you a structural entry with a clear invalidation level (the breakout/breakdown level itself) and room to the next reference point (often the prior day's high/low or a daily VWAP level).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this approach works structurally
&lt;/h2&gt;

&lt;p&gt;Institutional order flow is not random. Large participants are executing into the opening liquidity to build or adjust positions. Their activity creates the opening range. When price breaks out of that range with volume, it is evidence that institutional order flow is directional in that session — not merely reactive.&lt;/p&gt;

&lt;p&gt;Retail participants who enter during the first candle are entering before that evidence exists. They are making a directional bet before the market has revealed its structure. The 15-minute rule is simply the practice of waiting for the evidence before acting on it.&lt;/p&gt;

&lt;p&gt;Opening range VWAP Volume confirmation NSE Execution discipline Intraday Market structure&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mirrored from AION Analytics (India) dashboard.&lt;/strong&gt; &lt;a href="https://dashboard.aiondashboard.site/research/notes/opening-window-rule" rel="noopener noreferrer"&gt;Read original&lt;/a&gt;&lt;/p&gt;

</description>
      <category>india</category>
      <category>trading</category>
      <category>structure</category>
      <category>nse</category>
    </item>
    <item>
      <title>The Dollar-Metals Dynamic: A Factual Framework</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:28:04 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/the-dollar-metals-dynamic-a-factual-framework-3g9n</link>
      <guid>https://dev.to/aion-analytics-india/the-dollar-metals-dynamic-a-factual-framework-3g9n</guid>
      <description>&lt;p&gt;The historical inverse relationship between the US Dollar Index and precious metals is one of the most studied correlations. In early 2026, that correlation reached -96% — a level observed only seven times since 1990. This note explains the mechanics, the conditions that produce extreme readings, and what historical patterns suggest follows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core relationship
&lt;/h2&gt;

&lt;p&gt;Gold is priced globally in US dollars. When the dollar weakens, the same ounce of gold costs more dollars. When the dollar strengthens, it costs fewer. This mechanical relationship is the floor of the inverse correlation.&lt;/p&gt;

&lt;p&gt;Beyond mechanical, when the dollar weakens because of US fiscal stress, monetary policy uncertainty, or geopolitical reserve diversification, the same conditions drive demand for gold as an alternative store of value.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2026 reading
&lt;/h2&gt;

&lt;p&gt;When DXY-gold correlation reaches -96%, ~96% of daily variance in gold prices is explained by the dollar. Historical analysis of prior occasions shows extreme reading followed within 3-6 months by correlation normalisation. During normalisation, silver tends to outperform gold by 15-25% on relative basis because of silver's industrial demand component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why India is specifically exposed
&lt;/h2&gt;

&lt;p&gt;India's exposure runs through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current account: second-largest gold importer. Rising gold price in USD + depreciating rupee widens CAD.&lt;/li&gt;
&lt;li&gt;Monetary policy: rising gold import costs reduce RBI room for rate cuts.&lt;/li&gt;
&lt;li&gt;Household savings: significant allocation to physical gold. Strong gold price encourages allocation away from formal banking.&lt;/li&gt;
&lt;li&gt;Silver industrial demand: growing solar manufacturing capacity uses silver.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The geopolitical dimension
&lt;/h2&gt;

&lt;p&gt;The 2026 extreme is occurring alongside reserve currency diversification by BRICS+ economies, US fiscal deficit expansion, and restructuring of global trade settlement. When reserve managers diversify into gold, they weaken the dollar and strengthen gold demand simultaneously. Structural reserve diversification shifts persist over years.&lt;/p&gt;

&lt;p&gt;Gold Silver DXY US Dollar Precious metals Macro correlation Geopolitics&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mirrored from AION Analytics (India) dashboard.&lt;/strong&gt; &lt;a href="https://dashboard.aiondashboard.site/research/notes/dollar-metals-dynamic" rel="noopener noreferrer"&gt;Read original&lt;/a&gt;&lt;/p&gt;

</description>
      <category>india</category>
      <category>gold</category>
      <category>dollar</category>
      <category>geopolitics</category>
    </item>
    <item>
      <title>The Great Indian Illusion, Part 2: When the Framework Made a Call</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:27:28 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/the-great-indian-illusion-part-2-when-the-framework-made-a-call-ema</link>
      <guid>https://dev.to/aion-analytics-india/the-great-indian-illusion-part-2-when-the-framework-made-a-call-ema</guid>
      <description>&lt;p&gt;Forty days after publishing the Great Indian Illusion framework, every structural crack we identified had worsened — and the Prime Minister publicly asked citizens not to buy gold. This note shows what the framework called, what happened, and why the gold signal is the canary in the coal mine for the rupee and domestic savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the framework said — and what happened
&lt;/h2&gt;

&lt;p&gt;The five structural cracks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Consumption without income growth&lt;/li&gt;
&lt;li&gt;Jobs that do not look like jobs&lt;/li&gt;
&lt;li&gt;Inflation that compounds faster than wages&lt;/li&gt;
&lt;li&gt;Rising household debt funding the appearance of demand&lt;/li&gt;
&lt;li&gt;Rupee depreciation passing through to imported inflation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Forty days later, data confirmed every crack. Urban consumption growth fell. Real salary growth fell. Food inflation elevated. Household savings compressed. Rupee depreciation continued.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the government discouraged gold purchases
&lt;/h2&gt;

&lt;p&gt;When a government's leadership publicly asks citizens not to buy gold, it is a macro signal. Gold demand puts upward pressure on the current account deficit through imports. India imports 800–900 tonnes per year. At elevated prices, the import bill is material.&lt;/p&gt;

&lt;p&gt;The appeal is a current account management intervention.&lt;/p&gt;

&lt;h2&gt;
  
  
  What gold purchasing actually signals
&lt;/h2&gt;

&lt;p&gt;Indian households increasing gold allocation are expressing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real deposit rates are negative or near-zero&lt;/li&gt;
&lt;li&gt;Trust in the rupee's long-term stability is declining&lt;/li&gt;
&lt;li&gt;Equity risk is elevated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are rational responses to the structural conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The framework's forward implication
&lt;/h2&gt;

&lt;p&gt;If the cracks persist, the gold demand signal will persist. The current account pressure will continue. The rupee will face structural depreciation. The gold signal is one of the clearest leading indicators of that divergence widening.&lt;/p&gt;

&lt;p&gt;Political economy Gold Macro risk India Rupee Household savings Fiscal policy&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mirrored from AION Analytics (India) dashboard.&lt;/strong&gt; &lt;a href="https://dashboard.aiondashboard.site/research/notes/great-indian-illusion-gold" rel="noopener noreferrer"&gt;Read original&lt;/a&gt;&lt;/p&gt;

</description>
      <category>india</category>
      <category>gold</category>
      <category>macro</category>
      <category>rupee</category>
    </item>
    <item>
      <title>Gold-Silver Ratio as a Risk Regime Signal</title>
      <dc:creator>AION ANALYTICS</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:27:05 +0000</pubDate>
      <link>https://dev.to/aion-analytics-india/gold-silver-ratio-as-a-risk-regime-signal-4egh</link>
      <guid>https://dev.to/aion-analytics-india/gold-silver-ratio-as-a-risk-regime-signal-4egh</guid>
      <description>&lt;p&gt;The gold-silver ratio as a risk regime signal. Not a trading rule. A structural indicator of when fear or liquidity stress is dominating precious metals pricing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mirrored from AION Analytics (India) dashboard.&lt;/strong&gt; &lt;a href="https://dashboard.aiondashboard.site/research/notes/gold-silver-ratio-hypothesis" rel="noopener noreferrer"&gt;Read original&lt;/a&gt;&lt;/p&gt;

</description>
      <category>india</category>
      <category>gold</category>
      <category>risk</category>
      <category>metals</category>
    </item>
  </channel>
</rss>
