Skip to main content

AI-powered A-share stock analysis system with multi-agent architecture

Project description

Ashare Analyzer

An intelligent A-share stock analysis system powered by LLMs with multi-agent architecture. Automatically analyzes your watchlist and delivers a "Decision Dashboard" to Discord, Telegram, or Email.

Python 3.13+ License: MIT Ruff

中文文档

Features

  • Multi-Agent Architecture: Specialized AI agents collaborate to provide comprehensive analysis

    • Technical Analysis Agent - Chart patterns, indicators, trend analysis
    • Fundamental Analysis Agent - Financial statements, valuation metrics
    • News Sentiment Agent - News aggregation and sentiment scoring
    • Chip Distribution Agent - Institutional/retail fund flow analysis
    • Risk Management Agent - Position sizing, risk assessment
    • Portfolio Manager Agent - Final decision synthesis
  • Multi-Source Data: Aggregates data from Akshare, Baostock, Tushare, eFinance, etc.

  • Flexible Notifications: Push results to Discord, Telegram, or Email

  • Multiple AI Providers: Supports 100+ LLM providers via LiteLLM (DeepSeek, OpenAI, Gemini, Claude, etc.)

  • Scheduled Execution: Run daily analysis automatically

Quick Start

Prerequisites

  • Python 3.13+

Installation

# Install with uv (recommended)
uv tool install ashare-analyzer

# Or run directly with uvx (no installation needed)
uvx ashare-analyzer

# Or install with pip
pip install ashare-analyzer

Configuration

Create a .env file in your working directory (or use environment variables):

# Copy example config (if you cloned the repo)
cp .env.example .env
# Stock watchlist (comma-separated)
STOCK_LIST=600519,300750,002594

# AI Model (LiteLLM format: provider/model-name)
LLM_MODEL=deepseek/deepseek-reasoner
LLM_API_KEY=your_api_key_here

See Configuration for all options.

Usage

# Run analysis
ashare-analyzer

# Debug mode (verbose logging)
ashare-analyzer --debug

# Analyze specific stocks
ashare-analyzer --stocks 600519,300750

# Override AI model settings via CLI
ashare-analyzer --model openai/gpt-5 --api-key your_key --base-url https://api.openai.com/v1

# Scheduled mode (runs daily at configured time)
ashare-analyzer --schedule

# Dry run (fetch data only, no AI analysis)
ashare-analyzer --dry-run

# Skip notifications
ashare-analyzer --no-notify

# Show help
ashare-analyzer --help

Configuration Details

AI Model Configuration

Supports 100+ providers via LiteLLM format:

Provider Model Example API Key Source
DeepSeek deepseek/deepseek-reasoner platform.deepseek.com
OpenAI openai/gpt-5.2 platform.openai.com
Gemini gemini/gemini-3.1-pro-preview aistudio.google.com
Claude anthropic/claude-sonnet-4-6 console.anthropic.com

Full provider list: LiteLLM Providers

Notification Channels

Configure one or more notification channels:

# Discord
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...

# Telegram
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id

# Email (SMTP)
EMAIL_SMTP_HOST=smtp.gmail.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=your_email@gmail.com
EMAIL_SMTP_PASSWORD=your_app_password
EMAIL_RECIPIENTS=recipient@example.com

Search Engines (for news)

# Tavily (recommended)
TAVILY_API_KEY=your_tavily_key

# SerpAPI (alternative)
SERPAPI_API_KEY=your_serpapi_key

News Filter Configuration

The news filter uses AI to filter out low-relevance and stale news results.

Environment Variable Description Default
NEWS_FILTER_ENABLED Enable/disable news filter true
NEWS_FILTER_MIN_RESULTS Minimum results after filtering 3
NEWS_FILTER_MODEL LLM model for filtering (optional, falls back to LLM_MODEL) -

Example:

NEWS_FILTER_ENABLED=true
NEWS_FILTER_MIN_RESULTS=3
NEWS_FILTER_MODEL=deepseek/deepseek-chat

Development

# Format code
ruff format

# Lint code
ruff check --fix

# Type check
ty check .

# Run tests
uv run pytest

# Run tests with coverage
uv run pytest --cov=ashare_analyzer

Docker

# Build image
docker build -t ashare-analyzer -f docker/Dockerfile .

# Run container
docker run -it --env-file .env ashare-analyzer

# Using docker-compose
cd docker && docker-compose up -d

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments


⭐ Star this repo if you find it helpful!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ashare_analyzer-0.1.0.tar.gz (135.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ashare_analyzer-0.1.0-py3-none-any.whl (177.6 kB view details)

Uploaded Python 3

File details

Details for the file ashare_analyzer-0.1.0.tar.gz.

File metadata

  • Download URL: ashare_analyzer-0.1.0.tar.gz
  • Upload date:
  • Size: 135.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ashare_analyzer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fc00009c5cc0da5712d3e5518847d184f726c6483ca5919eca08a630af422b8c
MD5 64ddbaf85190e6b0827a99da0cccf7cb
BLAKE2b-256 c3efd5e2ed1604542f44a395f4573b1a28a31d2a0e4729d1d07f1b41a5032462

See more details on using hashes here.

File details

Details for the file ashare_analyzer-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ashare_analyzer-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 177.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ashare_analyzer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7207131c38acf33a59fdf62ea220c0857aebd1cc2221028a66b5f6db3740552c
MD5 22ddf0270a7766ed690fa5079409f29e
BLAKE2b-256 5bbafb5d89f56a56649cbd85da45fb9902b57fb651e84717c1614d9866250c7a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page