ZhuLinsen/daily_stock_analysis: an AI stock dashboard that runs on GitHub Actions
LLM 驱动的多市场股票智能分析系统:多源行情、实时新闻、决策看板与自动推送,支持零成本定时运行。 LLM-powered multi-market stock analysis system with multi-source market data, real-time news, decision dashboard, automated notifications, and cost-free scheduled runs.
At a glance
- What is it?
- A Python system that aggregates quotes and news for A-shares, Hong Kong, US, Japanese, Korean and Taiwanese listings, then pushes an LLM-written decision dashboard to chat apps. It installs by forking a repository and setting secrets, and its free data sources come with no stability guarantee.
- Who is it for?
- Adopt it if you already keep a watchlist of A-share, Hong Kong or US tickers and want a daily LLM-written summary delivered to WeCom, Feishu, Telegram, Discord, Slack or email without running a server. Skip it if you need intraday signals, execution, or a system whose data you can audit line by line: the default AkShare, Baostock and YFinance sources are explicitly described as unstable, and the LLM output is narrative, not a backtested strategy.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What daily_stock_analysis actually produces
The output is not a screen or an alert feed. It is a daily markdown report the README calls a decision dashboard (决策仪表盘), assembled per stock and then pushed to a chat channel. The README shows a sample: a header with the date and counts of buy, hold and sell verdicts, one line per ticker with a score and a directional label, then a per-stock block containing sentiment, earnings commentary, risk alerts, positive catalysts and a latest-news line.
That shape tells you who the project is for. It suits someone tracking a handful of names across several markets who wants a written morning brief, not a trader watching a tape. The watchlist is a single comma-separated secret, and the README example mixes markets in one string: 600519, hk00700, AAPL, 7203.T, 005930.KS, 2330.TW. Coverage spans A-shares, Hong Kong, US, Japan, Korea, Taiwan and ETFs, with per-market data-source limits documented separately in docs/market-support.md.
The scoring is produced by a language model over aggregated inputs. Nothing in the README claims the score is validated against returns, so treat the number as a summary of the gathered evidence, not a measured edge.
Data flow: providers, fallbacks and the LLM layer
Three layers feed one report. Quotes and fundamentals come from a priority-ordered provider chain. The README states AkShare, Baostock and YFinance are bundled and run with zero configuration, while requirements.txt lists the order explicitly: efinance at priority 0, akshare at 1, tushare and pytdx at 2, baostock at 3, yfinance at 4, longbridge at 5, plus tickflow. When a higher-priority source fails or lacks a field, the next one is tried.
News and sentiment are a second, separate chain, and the README is blunt that this affects quality: news sources materially influence sentiment, announcements, events and catalysts, so at least one search service is recommended. Options include Anspire, SerpAPI, Tavily, Bocha, Brave, MiniMax and a self-hosted SearXNG instance. Social sentiment from a Stock Sentiment API covering Reddit, X and Polymarket is listed as US-only and optional.
The third layer is the model. Supported backends include Anspire, AIHubMix, Gemini, OpenAI-compatible endpoints, DeepSeek, Qwen, Claude and local Ollama. One design detail worth noting: a single Anspire key can serve both the LLM gateway and the news search, which reduces the number of credentials you manage. The .env.example shows the gateway and model are overridable through ANSPIRE_LLM_BASE_URL and ANSPIRE_LLM_MODEL, with the file itself warning that availability should be checked against the provider console. That is an honest caveat and you should take it seriously.
Installing it and running a first analysis
The recommended path is GitHub Actions: fork the repository, add repository secrets under Settings, Secrets and variables, Actions, then enable workflows from the Actions tab and trigger the 每日股票分析 workflow manually once. The README claims five minutes and no server. The only mandatory secret is the watchlist; you also need at least one model key and at least one notification target.
For a local run, the README gives this sequence. It clones the repository, installs requirements, copies the environment template and starts the analysis entry point:
git clone https://github.com/ZhuLinsen/daily_stock_analysis.git && cd daily_stock_analysis
pip install -r requirements.txt
cp .env.example .env && vim .env
python main.pyThe minimum edit in .env is the watchlist line. The template ships with three A-share codes and the same comma-separated format the Actions secret uses:
STOCK_LIST=600519,300750,002594Before spending model tokens, run the dry-run flag the README documents. It exercises the pipeline without pushing a report, which is the fastest way to confirm your data sources respond:
python main.py --dry-runOther documented flags let you override the watchlist for a single run, generate a market review, or start the scheduler and the FastAPI service. The README lists --debug, --stocks, --market-review, --schedule and --serve-only. The default Actions schedule fires at 18:00 Beijing time on weekdays, and the README states non-trading days, including A-share, Hong Kong and US holidays, are skipped by default.
Where the free configuration breaks down
The README's own note is the main limitation: the bundled free sources are subject to upstream rate limits, interface changes and network fluctuation, and stability is not guaranteed. A daily job that depends on a scraped endpoint will eventually return partial data, and a partial dataset still produces a confident-looking report.
Token-based providers are the documented remedy. TUSHARE_TOKEN is listed as improving historical quote stability for A-shares, and Longbridge OAuth credentials are listed as filling in volume ratio, turnover and PE fields for Hong Kong and US names. TickFlow is described as covering A-share daily K-lines, real-time quotes, stock lists and market review enhancement, with an automatic fallback when permissions are insufficient. If you are unwilling to add any of these, accept that some fields will be blank or stale.
Two further boundaries. The social sentiment source covers US equities only, so Reddit and X signals never appear for A-shares. And the LLM layer inherits whatever the model does with incomplete inputs: a missing news source does not make the report shorter, it makes the narrative thinner while the format stays identical. There is no documented confidence indicator attached to individual claims. The .env.example also warns that pointing TUSHARE_HTTP_URL at a non-official mirror routes your token and every request through a third party.
How it compares with a plain AkShare script
The closest alternative is not another AI product. It is the script many engineers already have: a few dozen lines that call AkShare or yfinance for a watchlist, compute moving averages and email a table. That approach is fully inspectable, deterministic, and costs nothing beyond the data source. It also gives you exactly the indicators you coded, no more.
The difference in approach is the aggregation and the writing. daily_stock_analysis pulls quotes, K-lines, technical indicators, news, announcements, fundamentals and auxiliary report data, then asks a model to reconcile them into prose with risk and catalyst sections. You trade determinism for breadth and readability. A hand-written script cannot tell you that a stock has a concentrated ownership structure and a recent large net outflow in one paragraph, because nobody wrote that rule. The flip side is that you cannot unit-test the paragraph either.
The project does ship strategies/ and an evals/ directory, and the README mentions a backtesting view in the workbench, so there is more structure than a prompt wrapper. But the README does not document how the backtest relates to the LLM verdicts, and you should not assume it validates them.
Deployment modes, licence and what upgrades cost
Beyond Actions, the README lists Docker, local scheduled tasks and a FastAPI service, with a separate desktop packaging document. The repository carries docker/ and .github/ directories, and requirements.txt contains a platform-specific pin worth reading: longbridge==0.2.74 applies on Linux with Python below 3.12 because Longbridge 4.x wheels need manylinux_2_39 while the Docker image uses bookworm with glibc 2.36. The README also notes futu-api 10.8 is IPv4-only and that connecting to a host OpenD from inside a container should not use 127.0.0.1. These are the kinds of constraints that decide whether a container build succeeds on your host.
Maintenance is active in the literal sense: the last push was on 2026-08-23, and releases v3.29.0, v3.30.0 and v3.31.0 landed on 2026-08-02, 2026-08-09 and 2026-08-23. The cadence is roughly weekly, which means a fork drifts. If you fork for Actions, plan to pull upstream periodically or you will miss data-source fixes that matter precisely because upstream endpoints change.
The licence is MIT, stated in the README badge and the LICENSE file. MIT is permissive, but the practical constraints sit outside the licence: each market data provider, search API and model vendor has its own terms, and the repository includes a THIRD_PARTY_NOTICES.md file. Whether your use of a given provider's data is permitted is a question for that provider, not for this project's licence.
Editorial conclusion
Adopt it if you already keep a watchlist of A-share, Hong Kong or US tickers and want a daily LLM-written summary delivered to WeCom, Feishu, Telegram, Discord, Slack or email without running a server. Skip it if you need intraday signals, execution, or a system whose data you can audit line by line: the default AkShare, Baostock and YFinance sources are explicitly described as unstable, and the LLM output is narrative, not a backtested strategy. Before trusting a single report, set STOCK_LIST, run python main.py --dry-run once, and read the data-source section of docs/full-guide.md to see which provider actually served each field.
Frequently asked questions
Can ChatGPT analyze stocks the way daily_stock_analysis does?
A chat model can discuss a stock if you paste in the data, but it has no market feed and no scheduler. daily_stock_analysis supplies the aggregation layer, the watchlist configuration and the push delivery, so the model only writes the report. The README lists OpenAI-compatible endpoints among the supported backends.
What is the 3-5-7 rule in stock trading?
This trading rule is not mentioned anywhere in the project's README, configuration template or repository files, so the project neither implements nor explains it. The built-in strategy list covers moving averages, Chan theory, Elliott waves, trend, momentum, events, growth and expectations instead.
What are some good stocks to buy today?
The project does not recommend stocks. It analyzes the watchlist you configure through the STOCK_LIST secret and labels each name buy, hold or sell with a score, as shown in the README's decision dashboard sample. The verdict comes from a model reading aggregated quotes and news, and the README makes no claim that it is validated.
What is the best site to analyze stocks?
The project's files do not rank external sites, so no comparison can be made here. daily_stock_analysis is not a site: it is a self-hosted or GitHub Actions system that builds its own report from configured data and search providers. The README treats provider quality as the variable that matters most, since news sources drive the sentiment and catalyst sections.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/zhulinsen-daily-stock-analysis)
Community notes