<?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: Felixwang007</title>
    <description>The latest articles on DEV Community by Felixwang007 (@felixwang007).</description>
    <link>https://dev.to/felixwang007</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%2Fuser%2Fprofile_image%2F4050246%2F367055f4-756f-41a0-96f9-b2b5447699ae.png</url>
      <title>DEV Community: Felixwang007</title>
      <link>https://dev.to/felixwang007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/felixwang007"/>
    <language>en</language>
    <item>
      <title>7 Stocks Hit the 20% Limit Today in China — My Free AI Scanner Caught All of Them by 9:35 AM</title>
      <dc:creator>Felixwang007</dc:creator>
      <pubDate>Mon, 17 Aug 2026 04:09:32 +0000</pubDate>
      <link>https://dev.to/felixwang007/7-stocks-hit-the-20-limit-today-in-china-my-free-ai-scanner-caught-all-of-them-by-935-am-57do</link>
      <guid>https://dev.to/felixwang007/7-stocks-hit-the-20-limit-today-in-china-my-free-ai-scanner-caught-all-of-them-by-935-am-57do</guid>
      <description>&lt;p&gt;Every morning at 9:30 AM Beijing time, a script on my machine quietly wakes up, pulls live quotes for all 5,000+ A-share stocks, and runs a three-pillar scan: technicals, fundamentals, and market sentiment. It takes about 90 seconds. This morning it did something worth writing about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened today (Aug 17, 2026)
&lt;/h2&gt;

&lt;p&gt;The market opened strong and stayed strong:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Index&lt;/th&gt;
&lt;th&gt;Close&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shanghai Composite&lt;/td&gt;
&lt;td&gt;3,960&lt;/td&gt;
&lt;td&gt;+0.84%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shenzhen Component&lt;/td&gt;
&lt;td&gt;14,534&lt;/td&gt;
&lt;td&gt;+1.26%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChiNext (Growth)&lt;/td&gt;
&lt;td&gt;3,675&lt;/td&gt;
&lt;td&gt;+1.33%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSI 300&lt;/td&gt;
&lt;td&gt;4,701&lt;/td&gt;
&lt;td&gt;+0.76%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;But the interesting action was in the limit-up board. A-share rules allow a 20% daily move on ChiNext (300xxx) and STAR Market (688xxx) stocks. This morning, &lt;strong&gt;seven of the top ten gainers all closed at the 20% limit&lt;/strong&gt; — that's a rotation signal, not just a green tape day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scanner's output, 9:35 AM
&lt;/h2&gt;

&lt;p&gt;Top movers flagged by the scan (name, price, change, turnover):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;N 恒兴 (new listing):  32.20  +101.0%  turnover 78.6%
创达新材 (BJ):         60.88  +23.9%   turnover 12.6%
戴维医疗 (300314):     14.74  +20.0%   turnover 17.9%
天山生物 (300313):     10.73  +20.0%   turnover 11.6%
聚和材料 (688503):     95.68  +20.0%   turnover 10.4%
太辰光   (300570):    193.80  +20.0%   turnover 12.4%
苏州天脉 (301626):    307.08  +20.0%   turnover 7.7%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to read this tape (the part that's actually useful)
&lt;/h2&gt;

&lt;p&gt;Three things stand out, and they map directly to the three pillars of the system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Technicals — turnover is the tell.&lt;/strong&gt; A 20% limit-up with 10–18% turnover means the move is contested: real money is rotating in, but so is a lot of short-term supply. Contrast that with 中石科技's limit-up at only &lt;strong&gt;1.6% turnover&lt;/strong&gt; — that's a locked board, sellers simply didn't show up. Low-turnover limit-ups are structurally stronger than high-turnover ones. When you see a high-turnover limit-up, expect a follow-up test tomorrow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Sentiment — where the money is going.&lt;/strong&gt; A new listing doubling on its debut (N 恒兴, +101%, 78% turnover) plus a cluster of 20% boards across ChiNext and STAR tells you risk appetite is ON. In this regime, breakout strategies on 300xxx/688xxx names tend to work better than dividend/value plays. Regime detection is 80% of the game — indicator choice comes second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Fundamentals — the filter that keeps you out of traps.&lt;/strong&gt; The scanner cross-references each mover against earnings, ROE history, and PEG. 戴维医疗 and 天山生物 are classic sentiment names (medical devices / agriculture themes) — fine for a 1–2 day trade if you respect the stop, but their fundamental scores keep them off the swing list. The system's job is to separate "momentum with a floor" from "momentum with a cliff."&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-command workflow
&lt;/h2&gt;

&lt;p&gt;This isn't a black box — it's a free open-source skill for AI coding agents (works with Claude Code, Codex, etc.):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# fetch the whole market, score every ticker, output a ranked watchlist&lt;/span&gt;
agent-run a-share-stock-analysis scan &lt;span class="nt"&gt;--sort&lt;/span&gt; momentum
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the hood it's plain Python: Sina/Tencent free quote endpoints (no paid API key, no rate-limit drama), ~24 technical indicators (MACD, KDJ, RSI, Bollinger, volume-price divergence), and a weighted scoring model. You can read every line of the code and change the weights yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I open-sourced this
&lt;/h2&gt;

&lt;p&gt;I got tired of two things: (1) paid tools that hide their logic, and (2) advice posts with zero reproducible data. So the skill ships with the live scanner, the scoring rules, and a daily watchlist generator — you point it at today's market and it gives you today's numbers, not last month's screenshots.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Felixwang007/buda-a-share-stock-analyzer" rel="noopener noreferrer"&gt;github.com/Felixwang007/buda-a-share-stock-analyzer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Published skill (search "A-Share Stock Analysis Expert"): available on the 虾评 skill marketplace and Agensi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you trade A-shares or just want to see how a free agent skill does real market surveillance every morning, star the repo and run the scan tomorrow at 9:30. The tape will thank you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclaimer: Educational content, not investment advice. A-share trading involves risk; always do your own due diligence and respect position sizing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>stocks</category>
    </item>
    <item>
      <title>A-Shares Are Not Wall Street: 5 Technical Signals That Actually Work (Live Demo From Today's Market)</title>
      <dc:creator>Felixwang007</dc:creator>
      <pubDate>Thu, 13 Aug 2026 04:11:13 +0000</pubDate>
      <link>https://dev.to/felixwang007/a-shares-are-not-wall-street-5-technical-signals-that-actually-work-live-demo-from-todays-market-4o76</link>
      <guid>https://dev.to/felixwang007/a-shares-are-not-wall-street-5-technical-signals-that-actually-work-live-demo-from-todays-market-4o76</guid>
      <description>&lt;p&gt;If you've traded U.S. stocks and then tried to trade A-shares with the same playbook, you probably got burned. And it's not your fault — the market structure is fundamentally different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;T+1 settlement&lt;/strong&gt; — you can't day-trade out of a mistake. Buying the wrong break-in point locks you in until tomorrow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price limits&lt;/strong&gt; — 10% for the main board, 20% for ChiNext/STAR. A US-style "momentum chase" can leave you stuck in a 9.9% loss with zero liquidity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retail-dominated tape&lt;/strong&gt; — retail investors drive a huge share of volume. Sentiment swings are wider and faster than in any institutional market.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technical analysis &lt;em&gt;does&lt;/em&gt; work in A-shares — but the signals need adapting. Here are the 5 that have proven most useful in my own trading, demonstrated on &lt;strong&gt;real numbers from today's session (August 13, 2026, midday)&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today's Tape, Read Like a Book
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Index&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Half-day Turnover&lt;/th&gt;
&lt;th&gt;Turnover Rate&lt;/th&gt;
&lt;th&gt;Volume Ratio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shanghai Composite&lt;/td&gt;
&lt;td&gt;3,963.15&lt;/td&gt;
&lt;td&gt;+0.42%&lt;/td&gt;
&lt;td&gt;¥724.4B&lt;/td&gt;
&lt;td&gt;0.74%&lt;/td&gt;
&lt;td&gt;1.30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shenzhen Component&lt;/td&gt;
&lt;td&gt;14,519.97&lt;/td&gt;
&lt;td&gt;+0.73%&lt;/td&gt;
&lt;td&gt;¥865.1B&lt;/td&gt;
&lt;td&gt;1.91%&lt;/td&gt;
&lt;td&gt;1.37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChiNext (创业板)&lt;/td&gt;
&lt;td&gt;3,660.25&lt;/td&gt;
&lt;td&gt;+1.61%&lt;/td&gt;
&lt;td&gt;¥422.3B&lt;/td&gt;
&lt;td&gt;2.64%&lt;/td&gt;
&lt;td&gt;1.36&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three reads from this table alone:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Growth is leading.&lt;/strong&gt; ChiNext (+1.61%) is running more than 3x faster than the Shanghai index (+0.42%) — risk appetite is on, and capital is rotating into growth/tech names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume is expanding, not shrinking.&lt;/strong&gt; Volume ratios above 1.3 across all three indices mean today's move has fuel. A rally on shrinking volume is suspect; a rally with rising volume is real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turnover rate tells you where the crowd is.&lt;/strong&gt; ChiNext's 2.64% vs Shanghai's 0.74% — that's where the action is. When an index's turnover rate spikes above its 10-day average, expect a directional push (and more volatility).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Signal #1: Volume Is a Disagreement Meter, Not a Supply Meter
&lt;/h2&gt;

&lt;p&gt;Most beginners read "big volume = big buy". Wrong. Volume measures &lt;em&gt;disagreement&lt;/em&gt; — how many people are switching sides.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High volume + price stuck (滞涨)&lt;/strong&gt; = sellers are absorbing every buy. This is the classic distribution trap: the stock makes noise but goes nowhere on huge volume. Get out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low volume + slow drift down&lt;/strong&gt; = nobody cares, no panic. Not a buy signal yet — don't catch a falling knife.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low volume + price stabilizes at a long-term low&lt;/strong&gt; = sellers exhausted. This is where accumulation starts. Watch for the first volume-expansion day to confirm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rule of thumb: &lt;strong&gt;the move that matters is the one that happens on 2x your stock's average volume.&lt;/strong&gt; Everything else is noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #2: The 20-Day Line Is the Life Line (生命线)
&lt;/h2&gt;

&lt;p&gt;For A-share medium-term trading, the 20-day moving average is the most respected line on the chart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Price above the 20-day line + 20-day line sloping up = &lt;strong&gt;trend intact&lt;/strong&gt;. Pullbacks to the line are buying zones.&lt;/li&gt;
&lt;li&gt;Price breaks below the 20-day line on volume = &lt;strong&gt;trend broken&lt;/strong&gt;. Even if it "looks cheap", the correct move is to wait for it to reclaim the line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 60-day line separates bull and bear regime. Above it: dips are buyable. Below it: rallies are sellable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #3: MACD — Everything Happens Around the Zero Axis
&lt;/h2&gt;

&lt;p&gt;MACD crossovers are noisy, but &lt;strong&gt;zero-axis context&lt;/strong&gt; filters out most of the noise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Golden cross &lt;strong&gt;above&lt;/strong&gt; the zero axis = strong, continuation signal. Worth acting on.&lt;/li&gt;
&lt;li&gt;Golden cross &lt;strong&gt;below&lt;/strong&gt; the zero axis = weak, a rebound not a reversal. Take profit early.&lt;/li&gt;
&lt;li&gt;Death cross &lt;strong&gt;below&lt;/strong&gt; the zero axis = keep your cash.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In A-shares, the most profitable setup is: 20-day line sloping up + MACD golden cross above zero + volume expansion. All three together is rare — that's why it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #4: KDJ in the Extreme Zones (for T+1 Short Swings)
&lt;/h2&gt;

&lt;p&gt;KDJ's J value oscillates 0-100, and in A-shares the extremes matter more than anywhere else:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;J &amp;lt; 0&lt;/strong&gt; (oversold) — a bounce is statistically likely within 1-3 sessions. With T+1, you enter &lt;em&gt;during&lt;/em&gt; the oversold session, not after the bounce confirms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;J &amp;gt; 100&lt;/strong&gt; (overbought) — don't chase. The retail crowd is already all in; you're buying from the last buyer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;KDJ works best on 15-min/30-min charts for intraday timing of entries you exit the same day or next morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #5: Bollinger Squeeze Predicts the Breakout
&lt;/h2&gt;

&lt;p&gt;When Bollinger Bands pinch to their narrowest in weeks (the "squeeze"), volatility is about to expand. The direction is unknown — but the setup is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Squeeze + rising volume on the breakout day = trade it.&lt;/li&gt;
&lt;li&gt;Squeeze + breakout on &lt;em&gt;shrinking&lt;/em&gt; volume = fakeout, stand aside.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The #1 Killer: Chasing (追高)
&lt;/h2&gt;

&lt;p&gt;If I could delete one habit from A-share retail traders, it's chasing intraday spikes. I've done it; it's the most expensive lesson in this market. A stock up 8% at 10:30 a.m. is not a signal — it's an invitation to be tomorrow's exit liquidity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The discipline that saved me:&lt;/strong&gt; if you chase, you must exit at the first sign of stall (滞涨) the &lt;em&gt;next&lt;/em&gt; session. Never turn a chase into a "long-term investment". A loss you take on day 2 is tuition; a loss you hold for 3 months is a salary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not Financial Advice — Just an Edge
&lt;/h2&gt;

&lt;p&gt;These five signals won't make you rich overnight, but they will keep you on the right side of the tape more often than not. Pair them with a consistent risk rule (never risk more than 2% of capital on a single position) and you have a working system.&lt;/p&gt;

&lt;p&gt;If you want to see these signals computed automatically, I've open-sourced the tools I use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/Felixwang007" rel="noopener noreferrer"&gt;github.com/Felixwang007&lt;/a&gt; (repo: daily-stock-analysis — MACD/KDJ/RSI/BOLL/MA in pure Python, zero dependencies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xiaping Marketplace&lt;/strong&gt;: search &lt;strong&gt;"A-Share Stock Analysis Expert"&lt;/strong&gt; on xiaping.coze.com for a ready-to-use AI skill that runs the full three-pillar analysis (technical + fundamental + sentiment)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trade safe. 📈&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>stocks</category>
    </item>
    <item>
      <title>I Wrote 50+ Skills for AI Coding Agents — Here Are 5 Rules That Actually Matter</title>
      <dc:creator>Felixwang007</dc:creator>
      <pubDate>Mon, 10 Aug 2026 04:09:21 +0000</pubDate>
      <link>https://dev.to/felixwang007/i-wrote-50-skills-for-ai-coding-agents-here-are-5-rules-that-actually-matter-5h76</link>
      <guid>https://dev.to/felixwang007/i-wrote-50-skills-for-ai-coding-agents-here-are-5-rules-that-actually-matter-5h76</guid>
      <description>&lt;p&gt;I Wrote 50+ Skills for AI Coding Agents — Here Are 5 Rules That Actually Matter&lt;/p&gt;

&lt;p&gt;Over the past few months I've built 50+ skills (SKILL.md files) for AI coding agents: stock analysis pipelines, content generation systems, document conversion tools, even a GitHub Trending aggregator. Most of the "best practices" I read online turned out to be wrong in practice. These are the 5 rules that survived contact with reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 1: Keep skills short. 3 principles beat 13 frameworks
&lt;/h2&gt;

&lt;p&gt;My first skill was a 174KB monster — 13 writing frameworks, academic theory, 40 examples. The agent loaded it and produced generic, lifeless output every single time. The skill wasn't too complex to understand; it was too heavy to follow. When the LLM dumps 174KB into context, it pattern-matches the surface and ignores the substance.&lt;/p&gt;

&lt;p&gt;I rewrote it to 3 principles and 5 hard constraints. Output quality went up immediately. A skill should fit in your head — if you need a table of contents, it's a book, not a skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 2: Hard gates beat long instructions
&lt;/h2&gt;

&lt;p&gt;LLMs are terrible at following "make sure quality is high." They're great at following scripts. So instead of writing "the title must be compelling," I wrote:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Title score ≥ 6.5 or don't publish&lt;/li&gt;
&lt;li&gt;At least 2 images in the article, verified with &lt;code&gt;grep -c '!\['&lt;/code&gt; before publishing&lt;/li&gt;
&lt;li&gt;Fetch real market data first; if no fresh data, skip publishing entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Soft advice gets ignored. A gate script can't be ignored. Design skills around checkpoints that fail loudly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 3: Interface design beats examples
&lt;/h2&gt;

&lt;p&gt;The context-engineering shift is real: designing a clean tool parameter schema does more for agent performance than writing 10 examples of how to call it. When I spent 30 minutes restructuring an API's parameters instead of writing more documentation, the agent stopped making the same mistake. Examples teach; interfaces constrain. Constraints win.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 4: Skills should encode your judgment, not general knowledge
&lt;/h2&gt;

&lt;p&gt;General knowledge belongs in docs. A skill should encode &lt;em&gt;your opinion&lt;/em&gt; — the lessons you paid for with failures. My best skill isn't the one with the most citations; it's the one with the most "here's what broke and why" notes. When you copy generic knowledge into a skill, you're just moving bytes around. When you encode a hard-won lesson, you're compounding experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 5: Treat &lt;code&gt;status: ok&lt;/code&gt; as untrusted
&lt;/h2&gt;

&lt;p&gt;The most dangerous failure mode for an autonomous agent isn't crashing — it's silently succeeding in the wrong direction. My cron agent reported &lt;code&gt;last_status: ok&lt;/code&gt; for weeks while producing zero-value output. A health check that only looks at exit codes is theater.&lt;/p&gt;

&lt;p&gt;Now every pipeline has verification layers: state fingerprints before/after runs, receipts for every publish action, and reviewers that consume only the diff + trust boundaries — not the full author context. A critic that inherits the author's full context is just a formatter with opinions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack that grew out of these rules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A-Share Stock Analysis Expert&lt;/strong&gt; — a three-pillar system (technical: MACD/KDJ/RSI/volume-price; fundamental: ROE/PEG/Buffett ratios; sentiment: capital flows, hot money tracking). Built as an agent skill so any coding agent can run a full market scan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Trending Daily&lt;/strong&gt; — a zero-cost, zero-API aggregator that updates itself every 6 hours, so my agents always know what's hot before deciding what to learn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humanizer&lt;/strong&gt; — a text de-AI-ifier that removes the 24 most common LLM writing patterns. Because if you're going to publish agent-generated content, it better not read like agent-generated content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it runs on free APIs and my own GPU — no SaaS subscriptions, no API keys to buy.&lt;/p&gt;




&lt;p&gt;If you're building skills for AI agents, try these: &lt;a href="https://github.com/Felixwang007" rel="noopener noreferrer"&gt;https://github.com/Felixwang007&lt;/a&gt; — everything is open source. You can also grab the A-Share Stock Analysis Expert skill on the skill marketplaces (search "A-Share Stock Analysis" on xiaping.coze.com) if you want a working three-pillar scanner in 5 minutes.&lt;/p&gt;

&lt;p&gt;Questions or counter-examples? Drop them in the comments — I'm genuinely curious which of these rules break for you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>stocks</category>
    </item>
    <item>
      <title>I Built a Zero-Cost, Zero-API GitHub Trending Aggregator That Updates Itself Every 6 Hours</title>
      <dc:creator>Felixwang007</dc:creator>
      <pubDate>Mon, 03 Aug 2026 04:11:07 +0000</pubDate>
      <link>https://dev.to/felixwang007/i-built-a-zero-cost-zero-api-github-trending-aggregator-that-updates-itself-every-6-hours-31dj</link>
      <guid>https://dev.to/felixwang007/i-built-a-zero-cost-zero-api-github-trending-aggregator-that-updates-itself-every-6-hours-31dj</guid>
      <description>&lt;p&gt;Every morning, I used to open github.com/trending, scroll through 5 pages, and lose 20 minutes before writing a single line of code. The worst part: there is &lt;strong&gt;no official GitHub Trending API&lt;/strong&gt;, and every third-party wrapper either requires a token, rate-limits you after 10 requests, or charges money for what is essentially a public HTML page.&lt;/p&gt;

&lt;p&gt;So I built my own aggregator. It costs &lt;strong&gt;$0 per month&lt;/strong&gt;, requires &lt;strong&gt;zero API keys&lt;/strong&gt;, and updates itself every 6 hours. The whole thing is ~200 lines of Python + one GitHub Actions workflow. Here's how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core trick: parse HTML, not JSON
&lt;/h2&gt;

&lt;p&gt;GitHub renders Trending as server-side HTML, which means you can extract everything you need with a few regexes — no headless browser, no API token, no authentication.&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;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;

&lt;span class="n"&gt;URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://github.com/trending?since=daily&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&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="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Each trending repo is an &amp;lt;article&amp;gt; block
&lt;/span&gt;&lt;span class="n"&gt;articles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;article[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;/article&amp;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;html&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;repos&lt;/span&gt; &lt;span class="o"&gt;=&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;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;articles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;href=&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="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;a&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;p[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;/p&amp;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;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;stars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;aria-label=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;([\d,]+) stars today&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;repos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;desc&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;[^&amp;gt;]+&amp;gt;&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="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&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="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="k"&gt;else&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;today_stars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&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="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;stars&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;repos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;today_stars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&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;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repos&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire scraper. 25 lines. No BeautifulSoup, no Selenium, no Playwright — the standard library is enough because GitHub's Trending markup is remarkably stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The automation: GitHub Actions as a free cron server
&lt;/h2&gt;

&lt;p&gt;This is the part I love. Instead of renting a VPS or running a Raspberry Pi, I use GitHub Actions as a free, always-on cron scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Daily Trending Deploy&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*/6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;   &lt;span class="c1"&gt;# every 6 hours&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;        &lt;span class="c1"&gt;# manual trigger&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python scripts/fetch_trending.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;peaceiris/actions-gh-pages@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;github_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
          &lt;span class="na"&gt;publish_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./site&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few things I learned the hard way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use a dedicated deploy action.&lt;/strong&gt; &lt;code&gt;peaceiris/actions-gh-pages&lt;/code&gt; handles the branch switch and token permissions so you don't have to write git-push plumbing inside your workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output a JSON file alongside the HTML.&lt;/strong&gt; I generate both &lt;code&gt;index.html&lt;/code&gt; and &lt;code&gt;trending.json&lt;/code&gt; — the JSON endpoint means other tools (dashboards, bots, my own scripts) can consume the same data without re-scraping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule drift is real.&lt;/strong&gt; The &lt;code&gt;*/6&lt;/code&gt; cron is reliable but not instant; if freshness matters, add a &lt;code&gt;workflow_dispatch&lt;/code&gt; fallback and a manual "refresh now" button in the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the scraper resilient.&lt;/strong&gt; Wrap the fetch in try/except and keep the &lt;em&gt;last good snapshot&lt;/em&gt; if GitHub ever changes its markup. An aggregator that serves yesterday's data is still useful; a blank page is not.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why "no API" is a feature
&lt;/h2&gt;

&lt;p&gt;Most devs reach for an API first. But when the source is a public HTML page, parsing it directly has real advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No token to rotate, no rate limit to negotiate&lt;/strong&gt; — you are a normal browser request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No vendor lock-in&lt;/strong&gt; — if GitHub changes something, you fix one regex, not a dependency version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runs anywhere&lt;/strong&gt; — the script needs only Python 3, so it works on a laptop, a $5 VPS, or a GitHub Actions runner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where this pattern scales
&lt;/h2&gt;

&lt;p&gt;The "scrape → transform → publish to Pages on a schedule" pipeline is a template, not a one-off. I've reused it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📰 AI tool daily digests (RSS feeds)&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Stock/crypto price trend monitors&lt;/strong&gt; — same Actions cron, same Pages hosting, different source&lt;/li&gt;
&lt;li&gt;🎯 Hacker News top-story aggregation&lt;/li&gt;
&lt;li&gt;🛠️ DevOps toolchain watchlists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a developer who wants a personal "tech radar" page that updates itself, this is a 1-hour weekend project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The full, production-ready version (with a responsive mobile-friendly site, structured JSON output, and the complete Actions workflow) is open source:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Felixwang007/github-daily-trending" rel="noopener noreferrer"&gt;https://github.com/Felixwang007/github-daily-trending&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Live demo: &lt;a href="https://Felixwang007.github.io/github-daily-trending" rel="noopener noreferrer"&gt;https://Felixwang007.github.io/github-daily-trending&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's MIT licensed — fork it, rip out my content, and point it at whatever you want to track. If you build something cool on top of it, I'd genuinely love to hear about it in the comments or via a PR.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Also check out my other open-source project if you trade A-shares: &lt;a href="https://github.com/Felixwang007/buda-a-share-stock-analyzer" rel="noopener noreferrer"&gt;A-Share Stock Analysis Expert&lt;/a&gt; — a three-pillar stock screening system that combines technical, fundamental, and sentiment analysis into one tool.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>stocks</category>
    </item>
    <item>
      <title>I Built an AI That Analyzes Chinese A-Share Stocks Using a Three-Pillar System — Here's What It Caught Today</title>
      <dc:creator>Felixwang007</dc:creator>
      <pubDate>Thu, 30 Jul 2026 04:10:35 +0000</pubDate>
      <link>https://dev.to/felixwang007/i-built-an-ai-that-analyzes-chinese-a-share-stocks-using-a-three-pillar-system-heres-what-it-28cf</link>
      <guid>https://dev.to/felixwang007/i-built-an-ai-that-analyzes-chinese-a-share-stocks-using-a-three-pillar-system-heres-what-it-28cf</guid>
      <description>&lt;p&gt;Last week, I open-sourced an AI-powered stock analysis system for the Chinese A-share market. Today I want to show you what it actually does — with real data from the July 30 trading session.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Most A-share analysis tools fall into one camp: purely technical (MACD/KDJ/RSI overlays), purely fundamental (PEG/ROE screens), or purely sentiment-based (social media buzz). None of them talk to each other. Retail investors are left stitching three separate dashboards together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Three-Pillar Scoring
&lt;/h2&gt;

&lt;p&gt;The system (called &lt;strong&gt;A-Share Stock Analysis Expert&lt;/strong&gt;) runs three independent analysis pipelines on every stock in the watchlist:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Technical Analysis (10 pts)
&lt;/h3&gt;

&lt;p&gt;Python-native MACD, KDJ, RSI, Bollinger Bands, and moving average systems — all matching Tongdaxin (通达信) calculation standards. No external dependencies, no API keys needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Fundamental Analysis (10 pts)
&lt;/h3&gt;

&lt;p&gt;DuPont ROE decomposition, PEG valuation, and Buffett-style "three ratios" screening with industry-specific weighting.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Intelligence Analysis (10 pts)
&lt;/h3&gt;

&lt;p&gt;Majors capital flow tracking, Xueqiu sentiment, dragon-and-tiger list monitoring, institutional position changes, and policy timing.&lt;/p&gt;

&lt;p&gt;Total score: 30 points. Only stocks scoring 12+ trigger a buy signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Flagged Today (July 30, 2026)
&lt;/h2&gt;

&lt;p&gt;Today was a rough session — Shanghai Composite -1.15%, Shenzhen Component -3.79%. But the system spotted several interesting moves:&lt;/p&gt;

&lt;h3&gt;
  
  
  Limit Up Signal: 闰土股份 (002440) +10.00%
&lt;/h3&gt;

&lt;p&gt;Technical score: 4/10 — Bullish MACD, golden cross on KDJ, touching upper Bollinger. The system flagged the bullish alignment before the breakout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confirmed Uptrend: 龙佰集团 (002601) +0.36%
&lt;/h3&gt;

&lt;p&gt;Scored 5/10 technically — bullish MACD, bullish KDJ, neutral-bullish RSI. Not an explosive play, but steady accumulation in an otherwise red market.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limit Down Warning: 兴业科技 (002674) -10.00%
&lt;/h3&gt;

&lt;p&gt;The intelligence layer flagged "4 consecutive up days" (连涨4天) — a classic exhaustion signal. The system was already on watch for a reversal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern Recognition Samples
&lt;/h3&gt;

&lt;p&gt;From the training pipeline (36 samples collected across 5 patterns):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Breakout&lt;/td&gt;
&lt;td&gt;中国中免 +3.37%&lt;/td&gt;
&lt;td&gt;Bullish breakout with volume — buy on confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trend&lt;/td&gt;
&lt;td&gt;隆基绿能 +1.03%&lt;/td&gt;
&lt;td&gt;Healthy uptrend channel — hold and add on dips&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pullback&lt;/td&gt;
&lt;td&gt;北方华创 -1.20%&lt;/td&gt;
&lt;td&gt;Low-volume pullback — accumulation zone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Training Pipeline
&lt;/h2&gt;

&lt;p&gt;The system runs a daily cron job at 15:10 (market close +10min) to collect real-time quotes via the free Sina Finance API for 12 core A-share stocks. Each day's data is classified into one of 5 pattern types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;放量突破 (Breakout with Volume)&lt;/li&gt;
&lt;li&gt;缩量回调 (Low-Volume Pullback)&lt;/li&gt;
&lt;li&gt;高位放量下跌 (High-Level Volume Selloff)&lt;/li&gt;
&lt;li&gt;趋势追踪 (Trend Following)&lt;/li&gt;
&lt;li&gt;横盘震荡 (Sideways Consolidation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal: accumulate 200+ labeled samples for QLoRA fine-tuning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fine-tune a LLaMA model on the accumulated training data for better pattern recognition&lt;/li&gt;
&lt;li&gt;Integrate the iTick API for real-time data without scraping&lt;/li&gt;
&lt;li&gt;Add portfolio tracking with stop-loss alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;The complete source code and tools are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/Felixwang007" rel="noopener noreferrer"&gt;github.com/Felixwang007&lt;/a&gt; (repo: daily-stock-analysis)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xiaping Marketplace&lt;/strong&gt;: Search "A-Share Stock Analysis Expert" on xiaping.coze.com for the ready-to-use skill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you trade A-shares or just want to understand how AI agents can analyze financial markets, I hope this gives you a practical starting point. Pull requests and ideas welcome!&lt;/p&gt;




</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>stocks</category>
    </item>
    <item>
      <title>I Built a Free A-Share Stock Analysis Tool for AI Coding Agents (24 Indicators)</title>
      <dc:creator>Felixwang007</dc:creator>
      <pubDate>Mon, 27 Jul 2026 23:09:35 +0000</pubDate>
      <link>https://dev.to/felixwang007/i-built-a-free-a-share-stock-analysis-tool-for-ai-coding-agents-24-technical-indicators-3in7</link>
      <guid>https://dev.to/felixwang007/i-built-a-free-a-share-stock-analysis-tool-for-ai-coding-agents-24-technical-indicators-3in7</guid>
      <description>&lt;h2&gt;
  
  
  Test
&lt;/h2&gt;

&lt;p&gt;Updated content.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
