
{"id":242242,"date":"2026-10-21T15:04:49","date_gmt":"2026-10-21T15:04:49","guid":{"rendered":"https:\/\/mycryptomania.com\/?p=242242"},"modified":"2026-10-21T15:04:49","modified_gmt":"2026-10-21T15:04:49","slug":"a-stock-fell-20-i-used-claude-to-investigate-why","status":"publish","type":"post","link":"https:\/\/mycryptomania.com\/?p=242242","title":{"rendered":"A Stock Fell 20%. I Used Claude to Investigate Why"},"content":{"rendered":"<p><em>A real case of Claude stock analysis: Rambus fell 21% after earnings. I pulled prices, news and EPS data from EODHD to separate facts from explanations.<\/em><\/p>\n<p>When a stock drops 20% in one day, the internet gives you an answer within the\u00a0hour.<\/p>\n<p>The problem is that it gives you five of them. And they don\u2019t\u00a0agree.<\/p>\n<p>On April 28, 2026, Rambus (RMBS) closed at $111.27. One session earlier it was at $141.31. Two sessions earlier, it was sitting at an all-time high of\u00a0$158.40.<\/p>\n<p>By the afternoon, the explanations were everywhere: earnings miss, analyst downgrade, AI bubble, OpenAI, memory shortage, \u201csell the\u00a0news.\u201d<\/p>\n<p>So I ran an experiment. Instead of picking the story I liked best, I used Claude stock analysis on top of raw market data to answer one question:<\/p>\n<p><strong>What do we actually know, and what are we just guessing?<\/strong><\/p>\n<p>If you\u2019re:<\/p>\n<p>building AI agents for investment research,writing a newsletter that explains market\u00a0moves,or just holding a stock that fell off a\u00a0cliff,<\/p>\n<p>this is the workflow worth stealing.<\/p>\n<h3>Why \u201cWhy Is This Stock Down Today?\u201d Is the Wrong First\u00a0Question<\/h3>\n<p>Most people start with the news. That\u2019s backwards.<\/p>\n<p>News is written <em>after<\/em> the price moves. Journalists see a red candle, call a few sources, look for a catalyst and publish. The headline is a hypothesis dressed up as a\u00a0fact.<\/p>\n<p>Here\u2019s what happened when I pulled the RMBS news feed from EODHD for April 20 to May\u00a05:<\/p>\n<p>Look at the\u00a0shape.<\/p>\n<p>One article a day before the drop. Seven on earnings day. Eighteen on the crash day. Six the day\u00a0after.<\/p>\n<p>The news didn\u2019t cause the move. The move caused the\u00a0news.<\/p>\n<p>And notice the numbers above the bars. EODHD\u2019s normalized sentiment score for RMBS stayed positive the entire time, including <strong>+0.81 on the day the stock lost a fifth of its value<\/strong>. Most of the articles described a company with solid results, growing product revenue and strong cash generation.<\/p>\n<p>Sentiment said \u201cfine.\u201d Price said \u201cget\u00a0out.\u201d<\/p>\n<p>That gap is where the real investigation starts.<\/p>\n<h3>The Reframe: Separate Facts From Explanations<\/h3>\n<p>An investigation into a price drop needs three\u00a0buckets:<\/p>\n<p><strong>Facts.<\/strong> Things the data proves. Prices, dates, reported numbers, documented events.<strong>Plausible explanations.<\/strong> Hypotheses consistent with the facts. Each one should come with what would confirm or refute\u00a0it.<strong>Noise.<\/strong> Claims that don\u2019t explain the move, or that contradict the\u00a0data.<\/p>\n<p>Humans are bad at keeping these apart. We read a convincing headline and promote it straight to bucket\u00a0one.<\/p>\n<p>Claude is good at this, <em>if you give it the raw data and force the structure<\/em>. Without data, an LLM will happily write you a confident story. With data, it becomes a very fast, very patient analyst that checks every claim against the\u00a0numbers.<\/p>\n<p>The model is not the\u00a0edge.<\/p>\n<p>The data layer\u00a0is.<\/p>\n<h3>AI Stock Analysis Needs a Data Layer\u00a0First<\/h3>\n<p>For this investigation I connected Claude to EODHD through its MCP server, so it could pull data directly during the conversation. Four datasets did all the\u00a0work:<\/p>\n<p><strong>End-of-day prices<\/strong> for RMBS and a sector benchmark (SMH, the VanEck Semiconductor ETF)<strong>Earnings calendar<\/strong> with actual EPS, consensus estimates and surprise\u00a0%<strong>Financial news API<\/strong> with full article text tagged by\u00a0ticker<strong>Sentiment API<\/strong> with a daily normalized score and article\u00a0count<\/p>\n<p>That\u2019s it. No terminal, no scraping, no 15 browser\u00a0tabs.<\/p>\n<p><strong>Want to run the same investigation on your own watchlist?<\/strong><br \/>EODHD gives you prices, fundamentals, earnings, news and sentiment from one API (and an MCP server for Claude).<br \/><strong>\u2192 <\/strong><a href=\"https:\/\/eodhd.com\/?via=kmg&amp;ref1=Meneses&amp;utm_source=medium&amp;utm_medium=post&amp;utm_campaign=claude-stock-analysis-why-stock-fell&amp;utm_content=Meneses\"><strong>Try EODHD\u00a0APIs<\/strong><\/a><\/p>\n<h3>Step 1: Measure the Move Against the\u00a0Sector<\/h3>\n<p>A 20% drop means nothing on its own. If the whole sector fell 18%, Rambus didn\u2019t have a problem. The market\u00a0did.<\/p>\n<p>So the first thing I asked Claude to do was index RMBS against\u00a0SMH.<\/p>\n<p>This chart changed the whole\u00a0story.<\/p>\n<p>From March 27 to April 24, Rambus went up <strong>76.5%<\/strong>. The semiconductor ETF went up <strong>35.3%<\/strong>. From the March 30 low, RMBS had almost doubled (+98.7%) in four\u00a0weeks.<\/p>\n<p>The fall only makes sense next to the\u00a0rise.<\/p>\n<p>Then I zoomed in on daily\u00a0returns:<\/p>\n<p>Two things jump\u00a0out:<\/p>\n<p><strong>Friday, April 24:<\/strong> RMBS +14.4% in a single day, ahead of earnings. The sector was up\u00a05.1%.<strong>Monday, April 27:<\/strong> RMBS fell <strong>10.8% during regular trading<\/strong>. The earnings report came out <em>after<\/em> the close. The sector was flat (-0.04%).<\/p>\n<p>That second point is the one most headlines skipped. A big chunk of the drop happened before anyone saw the\u00a0numbers.<\/p>\n<p>Peak to trough over two sessions: <strong>-29.8%<\/strong>. Against the sector, Rambus underperformed by 10.8 points on Monday and 18.3 points on\u00a0Tuesday.<\/p>\n<h3>Step 2: Check What the Earnings Actually\u00a0Said<\/h3>\n<p>Here\u2019s what Rambus reported for Q1 2026 (after the close on April\u00a027):<\/p>\n<p>Management said results were \u201cin line with guidance.\u201d Q2 guidance implied roughly 11% sequential product revenue\u00a0growth.<\/p>\n<p>That doesn\u2019t read like a disaster.<\/p>\n<p>So I asked Claude to compare the numbers against consensus. And this is where it got interesting.<\/p>\n<p><strong>The sources didn\u2019t agree on what \u201cconsensus\u201d was.<\/strong><\/p>\n<p>EODHD\u2019s earnings calendar: estimate <strong>$0.64<\/strong>, actual $0.63. A miss of 1 cent\u00a0(-1.6%).One widely syndicated analysis: estimate <strong>$0.62<\/strong>. A\u00a0beat.A Zacks headline the same evening: \u201cQ1 Earnings and Revenues Beat Estimates.\u201d<\/p>\n<p>Same quarter. Same company. Miss or beat depending on who you\u00a0read.<\/p>\n<p>Claude flagged a second conflict on valuation: one article said RMBS was trading at roughly <strong>48x<\/strong> this year\u2019s earnings estimates, another said <strong>63x forward earnings<\/strong>. Different estimate sets, different denominators.<\/p>\n<p>And a third one, in a pre-earnings preview: it claimed Rambus\u2019s product revenue guidance of $84M to $90M implied a \u201c46 to 50 percent decline\u201d from $166.7M a year earlier. But $166.7M was <strong>total<\/strong> revenue, not product revenue. Product revenue actually grew 15%. Claude caught the apples-to-oranges comparison in seconds because it had the reported figures right next to the\u00a0claim.<\/p>\n<p>This is the most useful thing an AI does in stock analysis. Not predicting. <strong>Cross-checking.<\/strong><\/p>\n<p>The 1-cent difference can\u2019t explain a 21% drop. Whatever happened, it wasn\u2019t the EPS\u00a0number.<\/p>\n<h3>Step 3: Let Claude Sort the\u00a0Evidence<\/h3>\n<p>With prices, earnings, news and sentiment loaded, I gave Claude one instruction: classify everything into facts, plausible explanations and noise. Here\u2019s a condensed version of the\u00a0output.<\/p>\n<h3>Facts (the data proves\u00a0it)<\/h3>\n<p>RMBS rose 76.5% in four weeks into earnings, more than twice the semiconductor ETF.It fell 10.8% on April 27 <strong>before<\/strong> the report, with the sector\u00a0flat.It fell another 21.3% on April 28, while SMH fell 3.0% and the Nasdaq 100 fell\u00a01.0%.Q1 EPS was within one cent of every consensus figure published.Baird downgraded RMBS from Outperform to Neutral on April 28, with a $120 price target. Their reasoning: growing DRAM shortages could slow RDIMM unit growth into 2027, and Rambus is \u201ca unit-driven top-line\u201d without the benefit of higher\u00a0pricing.Late on April 27, a Wall Street Journal report said OpenAI had missed internal user and revenue goals. On April 28 the PHLX Semiconductor Index fell more than 3% intraday, after an 18-day winning\u00a0streak.<\/p>\n<h3>Plausible explanations (ranked)<\/h3>\n<p><strong>1. Positioning: buy the rumor, sell the news.<\/strong><br \/>The stock priced in perfection. A +14% day right before earnings means buyers were paying for a blowout, not a solid quarter. \u201cIn line\u201d was a disappointment relative to price.<br \/><em>Would confirm:<\/em> other high-momentum chip names falling hard on the same day without bad results.<br \/><em>Would refute:<\/em> RMBS falling while its peers\u00a0rallied.<\/p>\n<p><strong>2. A forward-looking supply risk, made visible by the Baird note.<\/strong><br \/>Management itself said back-end supply tightness would persist into 2027 and that the MRDIMM ramp depends on Intel and AMD platform timing. The downgrade gave the market a clean narrative for something already in the call.<br \/><em>Would confirm:<\/em> weakness in later quarters tied to units, not demand.<br \/><em>Would refute:<\/em> product revenue accelerating in Q2 and\u00a0Q3.<\/p>\n<p><strong>3. Sector de-risking after the OpenAI report.<\/strong><br \/>Yahoo Finance\u2019s markets desk noted the selloff hit \u201cthe names that had already run the hardest\u201d: Rambus, Arm, FormFactor, Navitas, Wolfspeed.<br \/><em>Would confirm:<\/em> the same high-beta group underperforming together.<br \/><em>Would refute:<\/em> RMBS being the only one\u00a0down.<\/p>\n<h3>Noise<\/h3>\n<p><strong>The EPS \u201cmiss.\u201d<\/strong> One cent, and contested by other\u00a0sources.<strong>The new CFO appointment<\/strong> on April 29. It came after the\u00a0drop.<strong>\u201cCanary in the coal mine for AI\u201d takes.<\/strong> Possibly right in the long run, but not testable with this\u00a0data.<\/p>\n<p>Notice what Claude didn\u2019t do: pick a single cause. A 21% drop is almost never one thing. It\u2019s a crowded trade, a reason to sell and a sector mood all arriving at the same\u00a0time.<\/p>\n<h3>Why Do Stocks Fall After Good Earnings?<\/h3>\n<p>Because the price already\u00a0knew.<\/p>\n<p>Earnings move stocks relative to <em>expectations<\/em>, and expectations live in the price, not in the consensus EPS. When a stock rallies 76% in four weeks, the real bar isn\u2019t $0.64. It\u2019s whatever number justifies the\u00a0rally.<\/p>\n<p>The best evidence for this came three months\u00a0later.<\/p>\n<p>On July 27, 2026, Rambus reported Q2 EPS of <strong>$0.64 against a $0.58 estimate<\/strong>. A clean <strong>10.3%\u00a0beat<\/strong>.<\/p>\n<p>The stock fell <strong>9.0%<\/strong> the next day and closed at $82.81 two sessions\u00a0later.<\/p>\n<p>A tiny miss crashed it. A real beat didn\u2019t save\u00a0it.<\/p>\n<p>If you only read EPS surprises, this makes no sense. If you read price, positioning and guidance together, it\u00a0does.<\/p>\n<h3>How to Reproduce This Claude Stock Analysis With\u00a0Python<\/h3>\n<p>I ran the investigation interactively, with Claude connected to EODHD\u2019s MCP server. Here\u2019s the reproducible version as a script, using EODHD\u2019s REST API and the Anthropic SDK.<\/p>\n<p>pip install requests pandas anthropicimport os, json<br \/>import requests<br \/>import pandas as pd<br \/>import anthropicEODHD_KEY = os.getenv(&#8220;EODHD_API_KEY&#8221;)<br \/>BASE = &#8220;https:\/\/eodhd.com\/api&#8221;<br \/>TICKER, BENCH = &#8220;RMBS.US&#8221;, &#8220;SMH.US&#8221;<br \/>START, END = &#8220;2026-04-17&#8221;, &#8220;2026-05-01&#8243;def get(path, **params):<br \/>    params.update({&#8220;api_token&#8221;: EODHD_KEY, &#8220;fmt&#8221;: &#8220;json&#8221;})<br \/>    r = requests.get(f&#8221;{BASE}\/{path}&#8221;, params=params, timeout=30)<br \/>    r.raise_for_status()<br \/>    return r.json()# 1. Prices: stock vs sector<br \/>stock = pd.DataFrame(get(f&#8221;eod\/{TICKER}&#8221;, **{&#8220;from&#8221;: START, &#8220;to&#8221;: END})).set_index(&#8220;date&#8221;)<br \/>bench = pd.DataFrame(get(f&#8221;eod\/{BENCH}&#8221;, **{&#8220;from&#8221;: START, &#8220;to&#8221;: END})).set_index(&#8220;date&#8221;)<br \/>rets = pd.DataFrame({<br \/>    &#8220;stock&#8221;: stock[&#8220;close&#8221;].pct_change() * 100,<br \/>    &#8220;sector&#8221;: bench[&#8220;close&#8221;].pct_change() * 100,<br \/>}).dropna().round(2)<br \/>rets[&#8220;excess&#8221;] = rets[&#8220;stock&#8221;] &#8211; rets[&#8220;sector&#8221;]# 2. Earnings, 3. news, 4. sentiment<br \/>earnings = get(&#8220;calendar\/earnings&#8221;, symbols=TICKER, **{&#8220;from&#8221;: &#8220;2025-01-01&#8221;, &#8220;to&#8221;: END})<br \/>news = get(&#8220;news&#8221;, s=TICKER, limit=50, **{&#8220;from&#8221;: START, &#8220;to&#8221;: END})<br \/>sentiment = get(&#8220;sentiments&#8221;, s=TICKER, **{&#8220;from&#8221;: START, &#8220;to&#8221;: END})print(rets)<\/p>\n<p>Output:<\/p>\n<p>stock  sector  excess<br \/>date<br \/>2026-04-24  14.37    5.10    9.27<br \/>2026-04-27 -10.79   -0.04  -10.75<br \/>2026-04-28 -21.26   -2.97  -18.29<br \/>2026-04-29   0.80    1.70   -0.90<br \/>2026-04-30   2.63    1.43    1.20<br \/>2026-05-01  -2.76    0.61   -3.37<\/p>\n<p>That table alone kills half the headlines. Now hand the evidence to Claude, with a prompt that forces the structure:<\/p>\n<p>evidence = {<br \/>    &#8220;daily_returns_vs_sector&#8221;: rets.to_dict(orient=&#8221;index&#8221;),<br \/>    &#8220;earnings_history&#8221;: earnings[&#8220;earnings&#8221;][-4:],<br \/>    &#8220;sentiment&#8221;: sentiment.get(TICKER, []),<br \/>    &#8220;news&#8221;: [{&#8220;date&#8221;: n[&#8220;date&#8221;][:16], &#8220;title&#8221;: n[&#8220;title&#8221;], &#8220;excerpt&#8221;: n[&#8220;content&#8221;][:600]}<br \/>             for n in news],<br \/>}PROMPT = &#8220;&#8221;&#8221;You are an equity research assistant. Explain this price move using ONLY the evidence.<br \/>Return three sections:<br \/>1. FACTS: what the data proves. Cite the field you used.<br \/>2. PLAUSIBLE EXPLANATIONS: ranked hypotheses. For each, say what would confirm or refute it.<br \/>3. NOISE: claims that don&#8217;t explain the move or contradict the data.<br \/>Flag any number that appears with different values in different sources.<br \/>Do not give investment advice.&#8221;&#8221;&#8221;client = anthropic.Anthropic()<br \/>msg = client.messages.create(<br \/>    model=&#8221;claude-sonnet-4-5&#8243;,  # use the latest Claude model on your account<br \/>    max_tokens=2500,<br \/>    messages=[{&#8220;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: PROMPT + &#8220;nnEVIDENCE:n&#8221; + json.dumps(evidence, default=str)}],<br \/>)<br \/>print(msg.content[0].text)<\/p>\n<p>From here you can\u00a0build:<\/p>\n<p>a daily \u201cbiggest movers explained\u201d report for your watchlist,an alert that fires when a stock underperforms its sector by more than 10\u00a0points,a research agent that writes the first draft of your post-earnings notes.<\/p>\n<h3>Key Takeaways<\/h3>\n<p><strong>Start with price, not news.<\/strong> Index the stock against its sector before reading a single headline.<strong>Check the timeline.<\/strong> 10.8% of Rambus\u2019s drop happened before the earnings report was\u00a0public.<strong>Use Claude as a cross-checker, not an oracle.<\/strong> Its biggest value here was catching conflicting numbers across sources, not predicting anything.<\/p>\n<h3>Final Thoughts<\/h3>\n<p>Rambus didn\u2019t fall 21% because it missed by a\u00a0penny.<\/p>\n<p>It fell because the price had run far ahead of the story, and the story stopped getting\u00a0better.<\/p>\n<p>The internet will always give you an explanation within an hour. A good Claude stock analysis workflow gives you something better: the evidence to know which explanations deserve your\u00a0trust.<\/p>\n<h3>FAQs<\/h3>\n<p>\u2753 <strong>Can Claude analyze stocks?<\/strong><br \/>\u2705 Yes, but only as well as the data you give it. Connected to a market data source like EODHD (via API or MCP server), Claude can pull prices, earnings, news and sentiment, then cross-check claims against the numbers. Without data, it can only repeat general knowledge.<\/p>\n<p>\u2753 <strong>Why is a stock down today when the news looks positive?<\/strong><br \/>\u2705 Price reacts to expectations, not to whether news is good in absolute terms. If a stock rallied hard before the news, \u201cgood\u201d may already be priced in. Compare the move against its sector and check what happened in the days\u00a0before.<\/p>\n<p>\u2753 <strong>Why do stocks fall after good earnings?<\/strong><br \/>\u2705 Usually because of positioning and guidance. A strong run before the report raises the real bar above published consensus. Rambus beat Q2 2026 EPS estimates by 10% and still fell 9% the next\u00a0day.<\/p>\n<p>\u2753 <strong>What does \u201cbuy the rumor, sell the news\u201d mean?<\/strong><br \/>\u2705 Traders buy ahead of an expected positive event and sell once it happens, locking in gains. It explains why a stock can drop on results that meet or beat expectations.<\/p>\n<p>\u2753 <strong>Is AI stock analysis reliable?<\/strong><br \/>\u2705 It\u2019s reliable for organizing evidence, spotting contradictions and summarizing large volumes of news. It\u2019s not reliable for predicting prices. Treat it as a fast research assistant, and always verify the facts it\u00a0cites.<\/p>\n<p><strong>Investigate the next big mover yourself<\/strong><br \/>Prices, earnings calendar, financial news and sentiment in one API, plus an MCP server that plugs straight into Claude.<br \/><strong>\u2192 <\/strong><a href=\"https:\/\/eodhd.com\/?via=kmg&amp;ref1=Meneses&amp;utm_source=medium&amp;utm_medium=post&amp;utm_campaign=claude-stock-analysis-why-stock-fell&amp;utm_content=Meneses\"><strong>Get started with\u00a0EODHD<\/strong><\/a><strong>Need content like this for your API or fintech product?<\/strong><br \/>I write data-driven technical articles that explain products through real use cases, not marketing fluff.<br \/><strong>\u2192 <\/strong><a href=\"https:\/\/kevinmeneses.com\/en\"><strong>Work with\u00a0me<\/strong><\/a><\/p>\n<p><em>Looking for technical content for your company? I can help\u200a\u2014\u200a<\/em><a href=\"https:\/\/www.linkedin.com\/in\/kevin-meneses-gonzalez\/\"><em>LinkedIn<\/em><\/a><em> \u00b7 <\/em><a href=\"mailto:kevinmenesesgonzalez@gmail.com\"><em>kevinmenesesgonzalez@gmail.com<\/em><\/a><\/p>\n<p><a href=\"https:\/\/medium.com\/coinmonks\/a-stock-fell-20-i-used-claude-to-investigate-why-b5665e27244c\">A Stock Fell 20%. I Used Claude to Investigate Why<\/a> was originally published in <a href=\"https:\/\/medium.com\/coinmonks\">Coinmonks<\/a> on Medium, where people are continuing the conversation by highlighting and responding to this story.<\/p>","protected":false},"excerpt":{"rendered":"<p>A real case of Claude stock analysis: Rambus fell 21% after earnings. I pulled prices, news and EPS data from EODHD to separate facts from explanations. When a stock drops 20% in one day, the internet gives you an answer within the\u00a0hour. The problem is that it gives you five of them. And they don\u2019t\u00a0agree. [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":242243,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-242242","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-interesting"],"_links":{"self":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts\/242242"}],"collection":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=242242"}],"version-history":[{"count":0,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts\/242242\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/media\/242243"}],"wp:attachment":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=242242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=242242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=242242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}