{"adoption": {"forks": 391, "observed_at": "2026-08-28T04:05:56.065244+00:00", "stars": 1930}, "canonical_url": "https://ross.abutalabs.com/products/qstock", "card": {"archived": false, "artifact_type": "library", "description": "qstock由“Python金融量化”公众号开发，试图打造成个人量化投研分析包，目前包括数据获取（data）、可视化(plot)、选股(stock)和量化回测（策略backtest）模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口；  选股模块提供了同花顺的选股数据和自定义选股，包括RPS、MM趋势、财务指标、资金流模型等；  回测模块为大家提供向量化（基于pandas）和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号，获取更多应用信息。  ", "domain": ["fintech", "data-science", "data-visualization", "analytics"], "enriched": true, "function": ["data-science", "data-visualization", "etl", "charts"], "health_score": 27, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["tkfy920/qstock"], "name": "tkfy920/qstock", "platform": ["python", "cross-platform"], "pushed_at": "2025-03-16T03:36:35+00:00", "repo": "tkfy920/qstock", "stars": 1930, "tags": ["quantitative-finance", "stock-analysis", "backtesting", "stock-screening", "market-data", "chinese-markets", "webscraping-data"], "topics": [], "urls": [], "use_cases": ["fetch realtime Chinese A-share market quotes in python", "backtest a trading strategy with pandas", "screen stocks by RPS or fund flow", "plot interactive candlestick charts of stock prices", "get intraday tick data for a stock", "monitor unusual order flow alerts during trading", "download historical stock data from eastmoney"], "what_it_is": "qstock is a Python library for personal quantitative investment research, providing modules for fetching financial market data (from Eastmoney, THS, Sina), interactive web-based visualization, stock screening (RPS, MM trend, financial indicators, fund flow), and backtesting (vectorized pandas-based and event-driven). It offers clean, normalized market data interfaces for Chinese A-shares, futures, ETFs, HK/US stocks, and more.", "when_to_avoid": ["you need institutional-grade data reliability or official licensed data feeds", "you require advanced event-driven backtesting with realistic execution modeling", "you work primarily with non-Chinese markets or need guaranteed long-term maintenance"], "when_to_choose": ["you need a simple all-in-one Python toolkit for Chinese market data, screening, and backtesting", "you want clean normalized financial data without writing scrapers", "you are a retail quant doing personal investment research on A-shares"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/qstock", "repo": "tkfy920/qstock", "role": "main", "score": 37}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.065244+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:08:51.209153+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "49391c32c4728bd4e1b410c0e02fce3f668f07de72c646cb14564288378af747", "fetched_at": "2026-08-28T04:05:56.065244+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tkfy920/qstock"}, {"content_hash": "cfc0b7a129b2822dae106c07ae091d3adbc67dfc2919a73a2a348c176be6bc4e", "fetched_at": "2026-08-29T10:48:18.904449+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/qstock/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 11, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1423, "days_push": 535, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 37, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}