[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92994":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":21,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":14,"starSnapshotCount":14,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},92994,"ai-market-pulse","SilentFleetKK\u002Fai-market-pulse","SilentFleetKK","Turn any watchlist into a daily AI market research report — a quant research cockpit or a zero-code daily report tool.",null,"Python",161,33,65,0,1,59,50.99,"MIT License",false,"main",true,[23,24,25,26,27,28,29,30,31],"ai","akshare","github-pages","investment-research","llm","portfolio","quant","stock-analysis","yfinance","2026-07-22 04:02:07","\u003Cdiv align=\"center\">\n\n# AI Market Pulse\n\n**An AI + quant trading research cockpit for watchlist screening, portfolio risk, automated reports, and static publishing.**\n\n[中文](README.zh-CN.md) · English\n\n[![CI](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCI-GitHub%20Actions-0f766e)](.github\u002Fworkflows\u002Fci.yml)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-b45309.svg)](LICENSE)\n[![Python 3.10+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.10%2B-4f46e5.svg)](pyproject.toml)\n\n\u003C\u002Fdiv>\n\n---\n\n## Why It Feels Different\n\nAI Market Pulse is not just a scheduled stock script. It turns daily market data into a quant-oriented research product: technical factors, rule-based signals, benchmark-relative strength, portfolio attribution, risk findings, Markdown\u002FHTML\u002FJSON reports, a web dashboard, a static research site, and optional OpenAI-compatible summaries.\n\nThe project is designed for quant trading research workflows such as watchlist screening, signal review, portfolio risk checks, and pre-trade decision support. It does not connect to brokers, place orders, or promise returns.\n\nIt is an original implementation inspired by the demand for daily AI stock analysis tools. It is not a fork or copy of another repository.\n\n![AI Market Pulse site preview](docs\u002Fassets\u002Fsite-preview.png)\n\n| Dashboard | Daily report |\n|---|---|\n| ![Dashboard preview](docs\u002Fassets\u002Fdashboard-preview.png) | ![Report preview](docs\u002Fassets\u002Freport-preview.png) |\n\n## One Research Loop\n\n1. **Input holdings** — type any supported symbol, add portfolio positions manually, or transcribe a brokerage screenshot with an OpenAI-compatible model.\n2. **Run quant research** — calculate technical factors, rules-first scores, benchmark-relative strength, portfolio attribution, themes, and freshness checks.\n3. **Review the evidence** — inspect the daily signal overview, risk board, contribution board, history lens, and report-grounded AI answers.\n4. **Monitor and publish** — detect meaningful score\u002Frisk changes, push alerts, and publish the bilingual static site through GitHub Pages.\n\nThe interface is a real operating surface, not a mock dashboard: every score, matrix bar, freshness flag, and portfolio value is derived from generated report or JSONL history data.\n\n## See It In 60 Seconds\n\nRun the complete offline demo. It uses deterministic sample data, so no market API, news API, or LLM key is required.\n\n```bash\npip install -e \".[dev]\"\nmarket-pulse demo --output demo\n```\n\nThen open:\n\n- `demo\u002Fsite\u002Findex.html`\n- `demo\u002Freports\u002Fdashboard.html`\n- `demo\u002Freports\u002Fmarket-pulse-20260708-0930.html`\n\n## Product Surfaces\n\n| Surface | What it shows | Output |\n|---|---|---|\n| Research console | Holdings input, screenshot import, theme research setup, report Q&A, alert checks | `http:\u002F\u002F127.0.0.1:8766` |\n| Daily report | Signal overview, benchmark comparison, focus board, theme research, asset cards, news | `reports\u002Fmarket-pulse-*.html` |\n| Web dashboard | Portfolio net value, risk\u002Frelative-strength\u002Ffreshness matrix, score changes, contribution board | `reports\u002Fdashboard.html` |\n| Static site | Dashboard link, latest report, archive, and navigation | `site\u002Findex.html` |\n| JSONL history | Persistent local snapshots for trend rendering | `data\u002Fhistory.jsonl` |\n\n## Highlights\n\n- Unified dark quant-research UI with persistent light mode and EN \u002F 中文 controls.\n- Four-stage visual workflow: holdings input, theme research, report Q&A, and change alerts.\n- Real-data signal overview and research matrix instead of decorative dashboard metrics.\n- Watchlist-driven analysis for stocks, ETFs, crypto, and Yahoo Finance compatible symbols.\n- Local visual console with arbitrary symbol input, editable AI screenshot import, report Q&A, dashboard refresh, and static-site links.\n- One-command custom ticker analysis with `market-pulse run --symbols`.\n- Quant research workflow for screening, signal review, benchmark comparison, portfolio attribution, and risk control.\n- Technical snapshot: moving averages, RSI, MACD, Bollinger position, ATR, drawdown, volume ratio, 5\u002F20\u002F60-day returns.\n- Rules-first signal score from 0 to 100 with readable reasons and risk labels.\n- Portfolio mode with quantity, cost basis, allocation, day P\u002FL, and unrealized P\u002FL.\n- Tag-driven theme research with grouped scores, returns, relative strength, allocation, contribution, and risk pressure.\n- Focus Board for attention items, risk findings, contribution ranking, and daily checklist.\n- Interactive dashboard exploration: symbol search, risk filter, relative-strength filter, history window, and symbol drilldown.\n- Benchmark context for SPY, QQQ, CSI 300, Hang Seng Index, and configurable market baselines.\n- Relative strength per symbol: 20\u002F60-day performance versus its assigned benchmark.\n- Data freshness checks: latest trading day, source, row count, and stale\u002Fmissing data warnings.\n- Provider registry with ordered fallback: yfinance by default, optional AkShare, Baostock, Tushare, and runtime extensions.\n- Optional OpenAI-compatible asset\u002Fportfolio summaries, screenshot transcription, and report-grounded Q&A with local cache.\n- Threshold alerts for score changes, risk upgrades, large daily moves, relative-strength deterioration, and stale data.\n- Push notifications through Telegram, Slack, Discord, Feishu, WeCom, generic webhooks, or email.\n- GitHub Actions and GitHub Pages workflows for zero-server daily publishing.\n\n## Quick Start\n\n```bash\ngit clone \u003Cyour-repo-url>\ncd ai-market-pulse\npython -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npip install -e \".[dev]\"\nmarket-pulse serve\n```\n\nOpen `http:\u002F\u002F127.0.0.1:8766`. Enter symbols directly, add editable position rows, or upload a brokerage screenshot before clicking **Run Analysis**. Quantity, cost, and theme tags can all be confirmed in the browser. The console saves the portfolio to `data\u002Fconsole-watchlist.yaml`.\n\nPrefer terminal usage?\n\n```bash\nmarket-pulse run --symbols \"AAPL,MSFT,NVDA,TSLA,600519\" --output reports --no-notify\n```\n\nOpen the generated HTML file in `reports\u002F`. Replace the symbols with any Yahoo Finance compatible ticker, crypto pair, HK ticker, or mainland A-share code. Plain 6-digit A-share codes are normalized automatically, for example `600519` becomes `600519.SS`.\n\nTo build the full dashboard and static site for your own watchlist:\n\n```bash\nmarket-pulse run --symbols \"AAPL,MSFT,NVDA,TSLA,600519\" --output reports --history data\u002Fhistory.jsonl --no-notify\nmarket-pulse dashboard --history data\u002Fhistory.jsonl --output reports\u002Fdashboard.html\nmarket-pulse site --reports reports --output site --title \"My Market Pulse\"\n```\n\nTo save a reusable watchlist file:\n\n```bash\nmarket-pulse init --symbols \"AAPL,MSFT,NVDA,TSLA,600519\" --path watchlist.yaml\nmarket-pulse run --config watchlist.yaml --output reports --history data\u002Fhistory.jsonl --no-notify\n```\n\n## Starter Templates\n\nPrefer a prebuilt starting point? Use a template instead of `--symbols`.\n\n```bash\nmarket-pulse init --list-templates\nmarket-pulse init --template us-tech --path watchlist.yaml\nmarket-pulse init --template cn-stock --path watchlist.yaml\nmarket-pulse init --template crypto --path watchlist.yaml\n```\n\n## Portfolio Import\n\nThe visual console accepts PNG\u002FJPEG\u002FWebP brokerage screenshots when `OPENAI_API_KEY` and `OPENAI_MODEL` are configured. The image is sent to the configured AI provider, so redact account identifiers first. AI only transcribes the image; quantity, cost, market, and tags remain editable before they enter the deterministic analysis pipeline.\n\nFile import is also available from the CLI:\n\n```bash\nmarket-pulse import-portfolio --input examples\u002Fportfolio.csv --output watchlist.yaml --template default --force\n```\n\nSupported formats: `.csv`, `.tsv`, `.xlsx` with `pip install -e \".[excel]\"`.\n\nRecognized columns include `symbol`, `ticker`, `code`, `name`, `market`, `currency`, `quantity`, `qty`, `shares`, `cost_basis`, `avg_cost`, `tags`, and `note`. Chinese headers such as `股票代码`, `股票名称`, `持仓`, `成本价`, `标签`, and `备注` are also accepted.\n\n## Dashboard And Site\n\n```bash\nmarket-pulse run --config watchlist.yaml --output reports --history data\u002Fhistory.jsonl --no-notify\nmarket-pulse dashboard --history data\u002Fhistory.jsonl --output reports\u002Fdashboard.html\nmarket-pulse site --reports reports --output site --title \"AI Market Pulse\"\n```\n\nOpen `site\u002Findex.html`. The generated report, dashboard, and site include an EN \u002F 中文 switch.\n\n## Data Providers\n\n```yaml\ndata:\n  providers: [\"akshare\", \"yfinance\"]\n```\n\n## Benchmarks And Freshness\n\n```yaml\nbenchmarks:\n  enabled: true\n  symbols: [\"SPY\", \"QQQ\", \"000300.SS\", \"^HSI\"]\n  default_by_market:\n    US: \"SPY\"\n    CN: \"000300.SS\"\n    HK: \"^HSI\"\n  compare:\n    AAPL: \"QQQ\"\n    NVDA: \"QQQ\"\n  stale_after_days: 4\n```\n\nReports show benchmark context, per-symbol relative strength, latest trading day, data source, and stale\u002Fmissing data warnings.\n\nOptional mainland China providers:\n\n```bash\npip install -e \".[cn]\"\npip install -e \".[tushare]\"\nexport TUSHARE_TOKEN=\"...\"\n```\n\nProviders are tried in order; if one is missing or cannot serve a symbol, the app falls back to the next provider.\n\nCustom providers can be registered with `ProviderSpec` and `register_provider()` without editing the core fallback dispatcher.\n\n## Enable AI Summaries\n\n```yaml\nllm:\n  enabled: true\n  base_url: \"${OPENAI_BASE_URL:-https:\u002F\u002Fapi.openai.com\u002Fv1}\"\n  api_key_env: \"OPENAI_API_KEY\"\n  model: \"${OPENAI_MODEL:-}\"\n  temperature: 0.2\n  prompts_dir: \"prompts\"\n  cache_enabled: true\n  cache_dir: \"data\u002Fai-cache\"\n```\n\n```bash\nexport OPENAI_API_KEY=\"...\"\nexport OPENAI_MODEL=\"your-model-name\"\nmarket-pulse run --config watchlist.yaml --output reports\n```\n\nUseful switches:\n\n```bash\nmarket-pulse run --config watchlist.yaml --output reports --no-ai\nmarket-pulse run --config watchlist.yaml --output reports --ai-only\nmarket-pulse doctor --config watchlist.yaml\n```\n\nThe same environment variables enable screenshot transcription and the console's **Ask This Report** box. Answers are grounded in the generated report JSON and do not call market tools or alter signal scores.\n\n## Intraday Threshold Alerts\n\n```yaml\nalerts:\n  enabled: true\n  score_change: 10\n  daily_move: 0.05\n  relative_20d_drop: 0.05\n  risk_upgrade: true\n  stale_data: true\n```\n\n```bash\nmarket-pulse alert-check --config watchlist.yaml --state data\u002Falert-state.json\n```\n\nThe first run creates a baseline. Later runs only emit new threshold events and reuse the existing notification channels. `.github\u002Fworkflows\u002Fintraday-alert.yml` is opt-in: set repository variable `ENABLE_INTRADAY_ALERTS=true` after configuring data and notification credentials.\n\n## Docker\n\n```bash\ndocker compose up --build\n```\n\nThis generates `reports\u002F`, `data\u002Fhistory.jsonl`, and `site\u002F`.\n\n## Publishing\n\nThis repository includes:\n\n- `.github\u002Fworkflows\u002Fci.yml`\n- `.github\u002Fworkflows\u002Fdaily-report.yml`\n- `.github\u002Fworkflows\u002Fpages.yml`\n- `.github\u002Fworkflows\u002Fintraday-alert.yml`\n- [docs\u002FPUBLISHING.md](docs\u002FPUBLISHING.md)\n\nAfter pushing to GitHub, add optional secrets such as `OPENAI_API_KEY`, `OPENAI_MODEL`, `OPENAI_BASE_URL`, `TELEGRAM_BOT_TOKEN`, `TELEGRAM_CHAT_ID`, and `TUSHARE_TOKEN`.\n\n## Roadmap\n\nSee [CHANGELOG.md](CHANGELOG.md) and [ROADMAP.md](ROADMAP.md).\n\n## Safety\n\nThis software is for quant trading research automation only. It does not provide financial advice, does not guarantee returns, does not connect to brokers, and does not place trades. Always verify market data, news, model outputs, and corporate actions before making decisions.\n","AI Market Pulse 是一个面向量化交易研究的 AI 辅助市场分析工具，将股票关注列表自动转化为每日结构化研究报告。核心功能包括：基于技术指标与规则的信号评分、组合风险归因、基准相对强度分析、多格式报告生成（Markdown\u002FHTML\u002FJSON）及静态网站发布；支持本地离线演示，无需 API 密钥，兼容 OpenAI 类大模型用于文本摘要。适用于个人量化研究员、投资组合经理及金融从业者进行日常持仓筛查、信号复盘、风险监控与投研知识沉淀，不涉及实盘交易或券商对接。",2,"2026-07-11 02:30:35","CREATED_QUERY"]