{"adoption": {"forks": 224, "observed_at": "2026-08-28T04:03:45.523277+00:00", "stars": 1145}, "canonical_url": "https://ross.abutalabs.com/products/finhack", "card": {"archived": false, "artifact_type": "framework", "description": "FinHack®，一个易于拓展的量化金融框架，它在当前版本中集成了数据采集、因子计算、因子挖掘、因子分析、机器学习、策略编写、量化回测、实盘接入等全流程的量化投研工作。", "domain": ["fintech", "machine-learning"], "enriched": true, "function": ["machine-learning", "data-science", "etl", "caching", "database", "workflow-automation", "trading"], "health_score": 79, "homepage": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8", "language": "Python", "license": "NOASSERTION", "license_family": "other", "maturity": "experimental", "member_repos": ["FinHackCN/finhack"], "name": "FinHackCN/finhack", "platform": ["python", "cli"], "pushed_at": "2026-08-19T03:01:18+00:00", "repo": "FinHackCN/finhack", "stars": 1145, "tags": ["quantitative-finance", "backtesting", "factor-mining", "alpha-factors", "tushare", "a-share", "live-trading", "quant-research", "mysql", "redis", "data-engineering", "automation", "linux", "docker"], "topics": ["investment", "quant", "quantitative", "quantitative-finance", "trading"], "urls": [], "use_cases": ["backtest A-share trading strategies with T+1 and price limit rules", "compute Alpha101 and Alpha191 factors from a formula engine", "mine and analyze stock factors with machine learning", "collect market data from tushare into MySQL", "run multiprocess backtests and model training on a server", "connect strategies to live trading", "organize multiple strategy projects with isolated environments"], "what_it_is": "FinHack is an extensible Python quantitative finance framework covering the full quant research workflow: data collection, factor computation and mining, factor analysis, machine learning, strategy development, backtesting, and live trading integration. It includes an Alpha101/Alpha191 formula-based factor engine, A-share backtesting rules (price limits, T+1), dynamic adjustment mechanisms, and multiprocess backtesting and model training.", "when_to_avoid": ["you need US stocks, futures, forex, or crypto support (planned but not implemented)", "you require a stable, production-ready system - the project is mid-refactor and currently broken", "you need Windows support or a lightweight install without MySQL/Redis", "you cannot accept the GPL-3.0 dual license for commercial use"], "when_to_choose": ["you need an end-to-end open-source quant research pipeline for Chinese A-share markets", "you want extensible factor computation, mining, and backtesting in Python", "you need multiprocess backtesting and ML training on your own hardware"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/finhack", "repo": "FinHackCN/finhack", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "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:03:45.523277+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:45.523277+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:34:25.378008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36f17883dfb17a3ff01918e19417651cf758da2cb8a41b541217f6006fc8a7c4", "fetched_at": "2026-08-28T04:03:45.523277+00:00", "kind": "readme", "missing": false, "url": "https://github.com/FinHackCN/finhack"}, {"content_hash": "bb13a04cf85afe0ead676a87bb4711b2ecd99133c43965b8c333f56fad0d6698", "fetched_at": "2026-08-29T12:39:35.672518+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/FinHackCN/finhack/wiki/1%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 98, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1382, "days_push": 14, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 76, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}