daily-stock-analysis

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.

22 stars

Best use case

daily-stock-analysis is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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.

Teams using daily-stock-analysis should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/daily-stock-analysis/SKILL.md --create-dirs "https://raw.githubusercontent.com/Aradotso/trending-skills/main/skills/daily-stock-analysis/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/daily-stock-analysis/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How daily-stock-analysis Compares

Feature / Agentdaily-stock-analysisStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Daily Stock Analysis (股票智能分析系统)

> Skill by [ara.so](https://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

```bash
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:**
```bash
docker build -t stock-analysis .
docker run --env-file .env stock-analysis
```

**Docker Compose:**
```bash
docker-compose up -d
```

## Configuration

### `.env` File (Local)

```env
# 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)

```env
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)

```env
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

```env
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)

```bash
# 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:

```yaml
# 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:**
```bash
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)

```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

```python
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

```python
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

```python
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)

```python
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:
```bash
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:**
```bash
# 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:**
```env
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):**
```bash
pip install akshare --upgrade
# A-share data requires Chinese network or proxy
```

**YFinance US stock data issues:**
```bash
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](https://crontab.guru)
- Check workflow file exists: `.github/workflows/stock_analysis.yml`

**Web auth issues (admin password):**
```env
# If auth was disabled and re-enabled, current password required
# Reset via environment variable
WEB_ADMIN_PASSWORD=new_password
```

**Multi-worker deployment auth state:**
```bash
# Auth toggle only applies to current process
# Must restart all workers to sync state
docker-compose restart
```

## Report Types

```env
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:
```env
AIHUBMIX_KEY=$AIHUBMIX_KEY  # covers Gemini, GPT, Claude, DeepSeek
# No OPENAI_BASE_URL needed — auto-configured
```

Related Skills

uzi-skill-stock-analyzer

22
from Aradotso/trending-skills

AI-powered deep stock analysis engine for A-share/HK/US markets with 51 investor personas, 22 data dimensions, 180 quantitative rules, and 17 institutional methods

ntwarden-windows-analysis-toolkit

22
from Aradotso/trending-skills

NtWarden is a Windows Analysis and Research Toolkit providing GUI-based inspection of processes, kernel internals, services, network, ETW, and more via ImGui + DirectX 11 with optional kernel driver support.

```markdown

22
from Aradotso/trending-skills

---

zeroboot-vm-sandbox

22
from Aradotso/trending-skills

Sub-millisecond VM sandboxes for AI agents using copy-on-write KVM forking via Zeroboot

yourvpndead-vpn-detection

22
from Aradotso/trending-skills

Android app that detects VPN/proxy servers (VLESS/xray/sing-box) via local SOCKS5 vulnerability, exposing exit IPs and server configs without root

xata-postgres-platform

22
from Aradotso/trending-skills

Expert skill for Xata open-source cloud-native Postgres platform with copy-on-write branching, scale-to-zero, and Kubernetes deployment

x-mentor-skill-nuwa

22
from Aradotso/trending-skills

AI-powered X (Twitter) content strategy skill that distills methodologies from 6 top creators + open-source algorithm data into actionable writing, growth, and monetization guidance.

wx-favorites-report

22
from Aradotso/trending-skills

End-to-end pipeline to extract, decrypt, and visualize WeChat Mac favorites from encrypted SQLite DB into an interactive HTML report.

wterm-web-terminal

22
from Aradotso/trending-skills

Web terminal emulator with Zig/WASM core, DOM rendering, and React/vanilla JS bindings

worldmonitor-intelligence-dashboard

22
from Aradotso/trending-skills

Real-time global intelligence dashboard with AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking

witr-process-inspector

22
from Aradotso/trending-skills

CLI and TUI tool that explains why processes, services, and ports are running by tracing causality chains across supervisors, containers, and shells.

wildworld-dataset

22
from Aradotso/trending-skills

WildWorld large-scale action-conditioned world modeling dataset with 108M+ frames from a photorealistic ARPG game, featuring per-frame annotations, 450+ actions, and explicit state information for generative world modeling research.