daily-stock-analysis
reason-machines/trending-skills
LLM-powered stock analysis for A-shares, HK, and US markets with AI dashboards and multi-channel alerts via GitHub Actions.
What is daily-stock-analysis?
Automated daily stock analysis system that fetches quotes, news, and fundamentals across Chinese, Hong Kong, and US markets, then generates AI-driven buy/sell recommendations with precise price targets. Runs on GitHub Actions (zero server cost) and pushes results to WeChat, Telegram, Discord, Email, and other channels on a schedule.
- Generates AI decision dashboards with one-line conclusions, buy/sell/stop-loss prices, and action checklists per stock
- Supports A-shares (CN), HK stocks, US stocks, and major indices (SPX, DJI, IXIC)
- Fetches real-time quotes and news from AkShare, Tushare, YFinance, and web search APIs
- Integrates multiple LLM backends (Gemini, OpenAI, Claude, DeepSeek, Qwen) via LiteLLM
- Pushes notifications to WeChat Work, Feishu, Telegram, Discord, DingTalk, Email, and PushPlus
- Includes web UI for portfolio management, analysis history, backtesting, and multi-turn strategy Q&A with 11 built-in strategies
How to install daily-stock-analysis
npx skills add https://github.com/reason-machines/trending-skills --skill daily-stock-analysis- At least one LLM API key (Gemini, OpenAI, Claude, DeepSeek, Qwen, or AIHubMix)
- A list of stock codes to monitor (e.g., 600519,AAPL,00700.HK)
- At least one notification channel configured (Telegram, Feishu, WeChat, Discord, Email, or DingTalk)
- GitHub account (for GitHub Actions method) or local Python 3.8+ environment (for local/Docker method)
How to use daily-stock-analysis
- 1.Fork the repository from https://github.com/ZhuLinsen/daily_stock_analysis
- 2.Add your LLM API key(s) and stock list as GitHub Secrets (Settings → Secrets and variables → Actions)
- 3.Configure at least one notification channel (Telegram, Feishu, WeChat, Discord, or Email) as a GitHub Secret
- 4.Customize the cron schedule in .github/workflows/stock_analysis.yml or trigger manually via Actions tab
- 5.(Optional) Run the web dashboard locally with `python web_app.py` to view portfolio, history, and backtest results
Use cases
- Set up daily automated stock analysis on a schedule via GitHub Actions with zero infrastructure cost
- Monitor a custom watchlist of mixed A-share, HK, and US stocks with AI-generated buy/sell signals
- Route different stock groups to different email recipients for team-based portfolio management
- Backtest AI analysis accuracy over past 30 days to validate prediction quality
- Ask the built-in agent multi-turn questions about specific stocks using technical strategies like MA crossover or Elliott Wave
- Individual investors and traders monitoring multiple markets
- Investment teams managing shared watchlists across different members
- Developers building stock analysis automation into existing workflows
- Anyone seeking zero-cost daily analysis via GitHub Actions without running a server
daily-stock-analysis FAQ
No. The GitHub Actions method runs entirely on GitHub's free infrastructure with no server cost. Alternatively, you can run it locally or in Docker.
A-shares (Chinese mainland), Hong Kong stocks, US stocks, and major indices like SPX, DJI, and IXIC.
Yes. Google's Gemini API offers a free tier via Google AI Studio, and several other providers have free or trial options.
Use stock grouping in .env: define STOCK_GROUP_1, STOCK_GROUP_2, etc., and route each group to different email addresses via EMAIL_GROUP_1, EMAIL_GROUP_2.
Yes. Use the `/api/backtest` endpoint or web dashboard to evaluate direction accuracy, take-profit hit rate, and stop-loss hit rate over the past 30 days.
Full instructions (SKILL.md)
Source of truth, from reason-machines/trending-skills.
name: daily-stock-analysis description: LLM-powered A/H/US stock intelligent analysis system with multi-source data, real-time news, AI decision dashboards, and multi-channel push notifications via GitHub Actions. triggers:
- analyze stocks with AI
- set up daily stock analysis
- configure stock push notifications
- add stocks to watch list
- set up LLM stock analyzer
- deploy stock analysis GitHub Actions
- configure WeChat Telegram stock alerts
- backtest stock analysis accuracy
Daily Stock Analysis (股票智能分析系统)
Skill by ara.so — Daily 2026 Skills collection.
LLM-powered stock analysis system for A-share, Hong Kong, and US markets. Automatically fetches quotes, news, and fundamentals, generates AI decision dashboards with buy/sell targets, and pushes results to WeChat/Feishu/Telegram/Discord/Email on a schedule via GitHub Actions — zero server cost.
What It Does
- AI Decision Dashboard: One-line conclusion + precise buy/sell/stop-loss prices + checklist per stock
- Multi-market: A-shares (CN), HK stocks, US stocks + indices (SPX, DJI, IXIC)
- Data sources: AkShare, Tushare, YFinance for quotes; Tavily/SerpAPI/Brave for news
- LLM backends: Gemini, OpenAI, Claude, DeepSeek, Qwen via LiteLLM (unified)
- Push channels: WeChat Work, Feishu, Telegram, Discord, DingTalk, Email, PushPlus
- Automation: GitHub Actions cron schedule, no server needed
- Web UI: Portfolio management, history, backtesting, Agent Q&A
- Agent: Multi-turn strategy Q&A with 11 built-in strategies (MA crossover, Elliott Wave, etc.)
Installation
Method 1: GitHub Actions (Recommended, Zero Cost)
Step 1: Fork the repository
https://github.com/ZhuLinsen/daily_stock_analysis
Step 2: Configure Secrets (Settings → Secrets and variables → Actions)
Required — at least one LLM key:
GEMINI_API_KEY # Google AI Studio (free tier available)
OPENAI_API_KEY # OpenAI or compatible (DeepSeek, Qwen, etc.)
OPENAI_BASE_URL # e.g. https://api.deepseek.com/v1
OPENAI_MODEL # e.g. deepseek-chat, gpt-4o
AIHUBMIX_KEY # AIHubMix (recommended, covers Gemini+GPT+Claude+DeepSeek)
ANTHROPIC_API_KEY # Claude
Required — stock list:
STOCKS # e.g. 600519,300750,AAPL,TSLA,00700.HK
Required — at least one notification channel:
TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID
FEISHU_WEBHOOK_URL
WECHAT_WEBHOOK_URL
EMAIL_SENDER / EMAIL_PASSWORD / EMAIL_RECEIVERS
DISCORD_WEBHOOK_URL
Step 3: Trigger manually or wait for cron
Go to Actions → stock_analysis → Run workflow
Method 2: Local / Docker
git clone https://github.com/ZhuLinsen/daily_stock_analysis
cd daily_stock_analysis
cp .env.example .env
# Edit .env with your keys
pip install -r requirements.txt
python main.py
Docker:
docker build -t stock-analysis .
docker run --env-file .env stock-analysis
Docker Compose:
docker-compose up -d
Configuration
.env File (Local)
# LLM - pick one or more
GEMINI_API_KEY=your_gemini_key
OPENAI_API_KEY=your_openai_key
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat
AIHUBMIX_KEY=your_aihubmix_key
# Stock list (comma-separated)
STOCKS=600519,300750,AAPL,TSLA,00700.HK
# Notification
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
# Optional settings
REPORT_TYPE=full # simple | full | brief
ANALYSIS_DELAY=10 # seconds between stocks (avoid rate limiting)
MAX_WORKERS=3 # concurrent analysis threads
SINGLE_STOCK_NOTIFY=false # push each stock immediately when done
NEWS_MAX_AGE_DAYS=3 # ignore news older than N days
Multi-Channel LLM (Advanced)
LLM_CHANNELS=gemini,deepseek,claude
LLM_GEMINI_PROTOCOL=google
LLM_GEMINI_API_KEY=your_key
LLM_GEMINI_MODELS=gemini-2.0-flash,gemini-1.5-pro
LLM_GEMINI_ENABLED=true
LLM_DEEPSEEK_PROTOCOL=openai
LLM_DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
LLM_DEEPSEEK_API_KEY=your_key
LLM_DEEPSEEK_MODELS=deepseek-chat
LLM_DEEPSEEK_ENABLED=true
Stock Grouping (Send Different Stocks to Different Emails)
STOCK_GROUP_1=600519,300750,000858
EMAIL_GROUP_1=investor1@example.com
STOCK_GROUP_2=AAPL,TSLA,NVDA
EMAIL_GROUP_2=investor2@example.com
Market Review Mode
MARKET_REVIEW=cn # cn | us | both
# cn = A-share three-phase review strategy
# us = US Regime Strategy (risk-on/neutral/risk-off)
# both = both markets
Key Commands (CLI)
# Run full analysis immediately
python main.py
# Analyze specific stocks only
STOCKS=600519,AAPL python main.py
# Run web dashboard
python web_app.py
# Access at http://localhost:5000
# Run with Docker (env file)
docker run --env-file .env stock-analysis python main.py
# Run schedule mode (waits for cron, then runs)
SCHEDULE_RUN_IMMEDIATELY=true python main.py
GitHub Actions Workflow
The workflow file .github/workflows/stock_analysis.yml runs on schedule:
# Default schedule - customize in the workflow file
on:
schedule:
- cron: '30 1 * * 1-5' # 9:30 AM CST (UTC+8) weekdays
workflow_dispatch: # manual trigger
To change schedule: Edit .github/workflows/stock_analysis.yml cron expression.
To add secrets via GitHub CLI:
gh secret set GEMINI_API_KEY --body "$GEMINI_API_KEY"
gh secret set STOCKS --body "600519,300750,AAPL,TSLA"
gh secret set TELEGRAM_BOT_TOKEN --body "$TG_TOKEN"
gh secret set TELEGRAM_CHAT_ID --body "$TG_CHAT_ID"
Code Examples
Programmatic Analysis (Python)
# Run analysis for specific stocks programmatically
import asyncio
from analyzer import StockAnalyzer
async def analyze():
analyzer = StockAnalyzer()
# Analyze a single A-share stock
result = await analyzer.analyze_stock("600519") # Moutai
print(result['conclusion'])
print(result['buy_price'])
print(result['stop_loss'])
print(result['target_price'])
asyncio.run(analyze())
Custom Notification Integration
from notifier import NotificationManager
notifier = NotificationManager()
# Send to Telegram
await notifier.send_telegram(
token=os.environ['TELEGRAM_BOT_TOKEN'],
chat_id=os.environ['TELEGRAM_CHAT_ID'],
message="📈 Analysis complete\n600519: BUY at 1680, SL: 1620, TP: 1800"
)
# Send to Feishu webhook
await notifier.send_feishu(
webhook_url=os.environ['FEISHU_WEBHOOK_URL'],
content=analysis_report
)
Using the Agent API
import requests
# Ask the stock agent a strategy question
response = requests.post('http://localhost:5000/api/agent/chat', json={
"message": "600519现在适合买入吗?用均线金叉策略分析",
"stock_code": "600519",
"strategy": "ma_crossover" # ma_crossover, elliott_wave, chan_theory, etc.
})
print(response.json()['reply'])
Backtest Analysis Accuracy
import requests
# Trigger backtest for a stock
response = requests.post('http://localhost:5000/api/backtest', json={
"stock_code": "600519",
"days": 30 # evaluate last 30 days of AI predictions
})
result = response.json()
print(f"Direction accuracy: {result['direction_accuracy']}%")
print(f"Take-profit hit rate: {result['tp_hit_rate']}%")
print(f"Stop-loss hit rate: {result['sl_hit_rate']}%")
Import Stocks from Image (Vision LLM)
import requests
# Upload screenshot of stock list for AI extraction
with open('watchlist_screenshot.png', 'rb') as f:
response = requests.post(
'http://localhost:5000/api/stocks/import/image',
files={'image': f}
)
stocks = response.json()['extracted_stocks']
# Returns: [{"code": "600519", "name": "贵州茅台", "confidence": 0.98}, ...]
Web Dashboard Features
Start the web app:
python web_app.py
| Route | Feature |
|---|---|
/ | Today's analysis dashboard |
/portfolio | Holdings management, P&L tracking |
/history | Past analysis reports (bulk delete supported) |
/backtest | AI prediction accuracy backtest |
/agent | Multi-turn strategy Q&A |
/settings | LLM channels, notification config |
/import | Import stocks from image/CSV/clipboard |
Supported Stock Formats
# A-shares (6-digit code)
600519 # 贵州茅台
300750 # 宁德时代
000858 # 五粮液
# HK stocks (5-digit + .HK)
00700.HK # 腾讯控股
09988.HK # 阿里巴巴
# US stocks (ticker)
AAPL
TSLA
NVDA
# US indices
SPX # S&P 500
DJI # Dow Jones
IXIC # NASDAQ
Built-in Trading Rules
| Rule | Config |
|---|---|
| No chasing highs | DEVIATION_THRESHOLD=5 (%, auto-relaxed for strong trend) |
| Trend trading | MA5 > MA10 > MA20 bullish alignment required |
| Precise targets | Buy price, stop-loss, take-profit per stock |
| News freshness | NEWS_MAX_AGE_DAYS=3 (skip stale news) |
| Checklist | Each condition marked: ✅ Satisfied / ⚠️ Caution / ❌ Not Met |
Troubleshooting
Analysis runs but no push received:
# Check notification config
python -c "from notifier import test_all_channels; test_all_channels()"
# Verify secrets are set (GitHub Actions)
gh secret list
LLM API errors / rate limiting:
ANALYSIS_DELAY=15 # increase delay between stocks
MAX_WORKERS=1 # reduce concurrency
LITELLM_FALLBACK_MODELS=gemini-1.5-flash,deepseek-chat # add fallbacks
AkShare data fetch fails (A-shares):
pip install akshare --upgrade
# A-share data requires Chinese network or proxy
YFinance US stock data issues:
pip install yfinance --upgrade
# US stocks use YFinance exclusively for consistency
GitHub Actions not triggering:
- Check Actions are enabled:
Settings → Actions → General → Allow all actions - Verify cron syntax at crontab.guru
- Check workflow file exists:
.github/workflows/stock_analysis.yml
Web auth issues (admin password):
# If auth was disabled and re-enabled, current password required
# Reset via environment variable
WEB_ADMIN_PASSWORD=new_password
Multi-worker deployment auth state:
# Auth toggle only applies to current process
# Must restart all workers to sync state
docker-compose restart
Report Types
REPORT_TYPE=simple # Concise: conclusion + key prices only
REPORT_TYPE=full # Complete: all technical + fundamental + news analysis
REPORT_TYPE=brief # 3-5 sentence summary
Full report includes:
- 一句话核心结论 (one-line core conclusion)
- 技术面分析 (technical: MA alignment, chip distribution)
- 基本面 (valuation, growth, earnings, institutional holdings)
- 舆情情报 (news sentiment, social media — US stocks)
- 精确买卖点位 (precise entry/exit levels)
- 操作检查清单 (action checklist)
- 板块涨跌榜 (sector performance boards)
LLM Priority Order
Gemini → Anthropic → OpenAI/AIHubMix/Compatible
AIHubMix is recommended for single-key access to all major models without VPN:
AIHUBMIX_KEY=$AIHUBMIX_KEY # covers Gemini, GPT, Claude, DeepSeek
# No OPENAI_BASE_URL needed — auto-configured
Related skills
More from reason-machines/trending-skills and the wider catalog.

deepseek-ocr
Vision-language model for OCR, document-to-markdown conversion, and figure parsing with context optical compression.

edict-multi-agent-orchestration
Tang Dynasty-inspired multi-agent orchestration with mandatory quality gates and real-time kanban dashboard.

everything-claude-code-harness
Production-ready performance harness for AI coding agents — skills, commands, hooks, and security scanning.

freecodecamp-curriculum
Contribute to freeCodeCamp's open-source curriculum platform and coding challenge system.

git-city-3d-github-visualization
Transform GitHub profiles into interactive 3D pixel art buildings in a collaborative city visualization.

gsd-2-agent-framework
Autonomous spec-driven agent framework for long-running coding tasks with context isolation and cost tracking