{"repo":"hello245m/free-stockdb","free":true,"listed":false,"github":"https://github.com/hello245m/free-stockdb","clone":"git clone https://github.com/hello245m/free-stockdb.git","description":"面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎，集成增量同步、本地缓存、复权、批量查询、回测与指标计算。","language":"HTML","stars":2073,"topics":["a-share","algorithmic-trading","backtesting","china-stock-market","kline","local-first","market-data","mcp","quant-research","quantitative-finance","stock-data","stock-market","technical-analysis","time-series-database"],"license":"MIT","category":"quant_research_platform","readme_excerpt":"[08-10]windows，macos，alpine，manylinux版本已发布。[08-04]mac，linux版本完成，已通过多轮压力测试，即将发布。\n\n# free-stockdb\n\n## 本地量化数据引擎\n\n面向 A 股日K、分钟K与 ETF 分钟、tick级数据的本地量化引擎。free-stockdb 将数据同步、清洗、复权、组织为可直接用于批量查询、批量计算研究的数据底座。\n\n**❤️双击更新 -> 双击启动 -> 直接调用。**\n\n[下载地址1(密码:79hf)](https://wwbrv.lanzoum.com/b0fql0gsh)\n\n[下载地址2](https://github.com/hello245m/free-stockdb/releases/tag/%E6%B5%8B%E8%AF%95%E7%89%88%E6%9C%AC0.3.1)\n\n数据本地落盘，研究不再依赖远程接口。\n\n| 本地优先 | 增量同步 | 数据支持(按需) | 本地指标计算 | 五种调用方式 |\n|---|---|---|---|---|\n| 数据在用户磁盘 | 只处理变化数据 | 日/周/月/1/5/15/30分钟/tick | 39 种指标、5 种指数 | Python / HTTP / Excel / HTML / MCP |\n\n```mermaid\nflowchart TB\n    A[\"数据更新：同步、清洗、复权、增量\"] --> B[\"free-stockdb 本地数据与计算引擎\"]\n    B --> C[\"Python SDK\"]\n    B --> D[\"HTTP API\"]\n    B --> E[\"Excel / WPS\"]\n    B --> F[\"HTML 网页\"]\n    B --> G[\"AI MCP\"]\n```\n\n同步后的查询、计算、回测和接口都使用本机数据，不与远程请求链路耦合。\n\n## 为什么需要本地数据引擎\n\n全市场批量回测的瓶颈不是策略代码，而是数据工程。以全市场 7000+ 股票分钟线回测为例，远程 API 方案的真实工作量：\n\n| 环节 | 在线 API 方案的真实耗时 | free-stockdb |\n|---|---|---|\n| 数据下载 | 全市场分钟数据逐股请求，受限频/积分/IP 风控约束，实测需要**3-5 天**；爬虫方案批量拉取封号/限频 | 通过 `sync_url.txt` 配置数据源，Zstd 压缩传输，增量同步，断点续传 |\n| 数据清洗 | 处理停牌、退市、代码变更、缺失补拉、时间排序，**1-2 天** | 同步流程自动完成 |\n| 复权处理 | 获取分红送转数据、推算复权因子、历史回刷，**1-2 天** | 内置完整复权因子，查询时写时计算 |\n| 存储设计 | 选型数据库、设计表结构、建索引、批量入库、优化查询，**1-3 天** | 定制 C++ 时序引擎，开箱即用 |\n| 指标计算 | 编写 MA/MACD/KDJ 等公式、pandas 全市场遍历极慢（单次数小时），**2-3 天** | 内置 39 指标 + 5 指数，Rust 计算核心比 pandas 快 3 倍，**数秒完成** |\n| 板块映射 | 爬取概念/行业数据、构建双向索引、持续维护，**1-2 天** | 内置申万一二三级 + 1200 概念板块，`bk.get()` 毫秒查询 |\n| 接口对接 | Python/HTTP/Excel/AI 各自对接维护，**1-2 天** | 五种调用方式统一内置 |\n| **合计** | **最少 10-15 个工作日才能跑通第一个全市场策略** | **30 分钟内从零到可运行** |\n\n远程 API 方案在全市场回测场景下不是慢，是跑不通。free-stockdb 将数据工程与策略研究完整解耦：数据更新在同步层完成，策略只读本地数据集，数据源可替换，研究接口不变。\n\n## 已集成的数据工程\n\n| 使用者原本需要维护 | 启动后直接获得 |\n|---|---|\n| 接口 Token、限频、封ip、断点恢复和全市场数据调度 | 数据源增量同步、文件校验和本地存量数据 |\n| 新股、停牌、退市、代码变更、时间排序与历史修正 | 统一的数据组织、复权因子与查询协议 |\n| 数据库选型、表结构、索引、批量入库和查询优化 | 本地 C++ 时序数据服务，按代码和时间范围批量读取 |\n| pandas/DataFrame 拼接、指标滚动计算与中间缓存 | `zb.get()` 批量指标和指数计算接口 |\n| Python、HTTP、Excel、网页、AI 工具的多套对接 | 一套本地协议对应 Python SDK、HTTP API、Excel/WPS、HTML、MCP |\n\n数据完成同步后，查询、计算和回测只依赖本地数据集；更新与研究彼此独立。\n\n## 两分钟开始\n\nWindows 使用者可从 [Releases](https://github.com/hello245m/free-stockdb/releases) 下载发行包。首次运行：\n\n```text\n1. 运行数据更新工具\n2. 数据同步到 ./data\n3. 启动 stockdb (仅2.2mb)\n4. 直接使用 Python、HTTP、Excel/WPS、网页或 MCP 查询本机数据\n```\n\n已有数据完整落盘在 `./data`；后续更新只处理变化数据，离线时仍可继续查询、回测和计算。\n\n## 数据存储与数据源\n\n历史数据采用 Zstd 压缩，不按未压缩记录体积占用磁盘，比csv/mysql小3倍以上。首次同步从配置的数据源获取历史数据，后续只更新增量，不走逐股、逐页的远程 API 拉取流程。\n\n默认数据集聚焦高频行情与复权，底层数据库支持任意自定义数据存储，低频率数据：财报、宏观、资金流等可按需要接入同一套本地查询与计算引擎。\n\n## 核心能力\n\n### 本地全市场数据运行时\n\n- 日线、周线、月线，以及 1/5/15/30 分钟 K 线，tick级数据(按需)\n- 价格、成交量、成交额、换手率、估值、市值、ST 等常用字段\n- 前复权、后复权、不复权和原始复权因子查询\n- 股票、ETF、行业和概念板块的组织与双向查询\n- 本地存储、无远程查询延迟，研究和回测不受远程 API 并发配额影响\n- 可配置局域网服务，多人协作、分布式回测。\n\n### 批量查询与计算\n\n```python\nresult = rd.get_data(\n    code=7000_codes,         # 7000+ 股票 / ETF\n    start=any_start,              # 任意时间周期\n    end=any_end,\n    frequency=any_frequency,# 分钟 / 日 / 周 / 月\n    fq=any_fq,                      # 前复权 / 后复权 / 不复权\n    fields=any_fields,          # 任意单多字段筛选\n    as_df=False/True          # 返回list、dict、 DataFrame\n)\n```\n\n```python\nresult = zb.get(\n    name=\"ma,kdj,macd,....\",      # 39指标 / 5种指数计算\n    codes=7000_codes,        # 单股 / 批量 / 全市场\n    start=any_start,        # 任意时间范围\n    end=any_end,\n    frequency=any_frequency, # 分钟 / 日 / 周 / 月\n    fq=any_fq,               # 前复权 / 后复权 / 不复权\n    n=[\"5,10,20\", None, \"12,26,9\"],  # 每个指标独立参数\n    cross=\"with_value\"       # 原始指标 / 金叉信号 / 二者同时返回\n)\n```\n\n```python\nresult = bk.get(\n    x=code_or_board_or_codes,   # 股票代码 / 板块名称或代码 / 批量股票\n    category=0-3,                      # 概念板块 / 申万一级 / 申万二级 / 申万三级\n    fields=\"code,name,symbols\" # 任意单多字段筛选\n)\n```\n\n`get_data()` 面向全市场、长周期和字段筛选；`zb.get()` 面向 39 种技术指标和 5 种指数计算；`bk.get()` 用于股票与行业/概念板块的双向映射。数据和计算始终在本机服务侧完成，避免研究代码反复把全市场数据搬运到远程 API 或临时 DataFrame 中。股票优化查询器rd.get/keys/vals()支持区间a>b，正则*，排序，截取[:num]，遍历，类SQL查询。\n\n### 批量写入私有存储[./mydb][08-05升级]\n#适用于：个性数据，动态因子，实时缓存，私有策略，私有数据，私有数据源，其他小众数据，一次写入本地永久保存\n```python\n批量写入：\npipeline=rd.pipe()\nfor i in range(10000000):\n    pipeline.mset(table,key,key2,value)\nawait pipeline\n```\n```python\n单条写入：\nawait rd.set(table,value)\nawait rd.set(table,key,value)\nawait rd.set(table,key,key2,value)\n#value_type:list/dict/int/float/str/bytes/df\n```\n```python\n字段修改：\nawait rd.set(table,key,key2,new_value)\nawait rd.get(table,key,key2).get(\"sub_key\").set(\"sub_sub_key\").val(\"new_value\")\n写入/修改立即可读，无延迟+WAL无丢失。\n```\n```python\n批量读取：\nawait rd.get(table,key,key2) ->list/dict/int/float/str/bytes/df\nawait rd.get(table_exp,key_exp,key_exp).get(sub_key).all()[-3:] ->list/dict/int/float/str/bytes/df\n#exp：支持正则，范围，匹配，截取，遍历，子节点，列式读取\n#get：可替换成 len,keys,delete,vals,set,setr,setl\n详细参考示例：`rd_test.py`\n```\n### 批量挂载数据与单点读取[./dataN][08-05升级]\nsync_url.txt现支持多点写入：\n| 来源 | 类型 | 存储|\n|---|---|---|\n|site1 or path1| minutes_data|save_to_data_path|\n|site2 or path2| days_data |save_to_data1_path|\n|site3 or path3| ticks_data|save_to_data2_path|\n|your_site4_path4| your_data|save_to_your_path|\n...\n\n自动读取：\n```python\nrd.get()->auto_read_all_data\n\n```\n\n\n**内置 39 种技术指标：**\n\n| 类别 | 指标 |\n|---|---|\n| 趋势类 | MA、EMA、SMA、WMA、DMA、EXPMA、TRIX、DMI、DFMA、BBI |\n| 震荡类 | MACD、KDJ、RSI、WR、CCI、PSY、BIAS、ROC、MTM、DPO |\n| 通道类 | BOLL、KTN、TAQ |\n| 量价类 | OBV、VR、EMV、MFI、CR、MASS |\n| 综合类 | ATR、ASI、BRAR、XSII、STD、SUM、HHV、LLV、REF |\n\n**5 种指数计算方法（zhishu）：** 等权、流通市值加权、成交额加权、成交量加权、总市值加权\n\n### 五种调用方式\n\n| 调用方式 | 适用场景 |\n|---|---|\n| Python SDK | 回测、研究和策略开发（同步 `get_data()` / 异步 `get_data_async()`） |\n| HTTP API | 任意语言与本地系统集成（`http://127.0.0.1:7899/?cmd=get&t=...`） |\n| Excel / WPS 宏 | 表格分析、选股和办公自动化 |\n| HTML 页面 | 无代码查看、筛选和浏览本地行情数据 |\n| AI MCP | Claude、Cursor、Windsurf 等支持 MCP 协议的 AI 工具直接查询、计算和分析本地数据 |\n\nMCP 协议为自实现，无需额外安装 MCP SDK。AI 工具通过 MCP 连接后可直接调用 `get_data()`、`zb.get()`、`bk.get()` 查询本地行情、计算指标和分析板块。\n\n调用示例位于 `调用方式/`。\n\n## 数据源可控与长期使用\n\n数据源是输入，不是产品的唯一依赖。你可以：\n\n- 在 `sync_url.txt` 切换到自己的同步节点、内网服务器或网络共享目录。\n- 用 `file://` 或本地目录离线同步已归档的数据快照。\n- 通过本地写入接口接入其他行情来源，补充或更新自有数据。\n- 保留本地数据快照，在任何没有外网、没有 Token 的环境中继续查询与回测。\n\n因此，数据源服务的可用性变化不会让已同步的研究数据失效；更换输入源也不要求替换本地查询、计算和调用层。\n\n## 数据质量与复权\n\n本地数据保留不复权行情与复权因子，查询时可按需要返回前复权、后复权或不复权结果。可通过本地接口抽样检查复权因子、价格、成交量和公司行为日期；使用者也可以用自己认可的数据源生成或校验本地数据。\n\n## 硬件与存储要求\n\n| 项目 | 最低配置 | 推荐配置 |\n|---|---|---|\n| 磁盘空间 | 约 5GB（仅日线） | 约 20GB（含全量分钟线） |\n| 内存 | 2GB | 8GB+ |\n| 操作系统 | Windows 7+ | Windows 10+ |\n\n数据采用 Zstd 压缩存储，实际磁盘占用远小于同等 CSV/MySQL 方案。\n\n## 本地网络与安全行为\n\n- 服务默认监听 `127.0.0.1:7899`，不会主动暴露到公网。\n- 同步器只访问 `sync_url.txt` 或 `--source` 指定的地址；配置为空时不会发起同步请求。\n- 同步文件在写入前校验清单中的 SHA-256 与大小；公共同步节点应使用 HTTPS。\n- 发布包应从 Releases 下载并核对对应版本提供的 SHA-256。\n\n## 源码与构建\n\n`cpp/` 包含本地服务、同步器、客户端计算示例和 CMake 构建定义；`sync_url.txt` 和调用协议均公开。构建 C++ 组件需要 CMake 3.14+、C++17 编译器、libcurl 和 OpenSSL 开发包。Windows 用户可直接使用 Releases 中的预编译发行包，无需自行编译。\n\n```bash\ncmake -S cpp -B cpp/build\ncmake --build cpp/build --config Release\n```\n\n🚀️ **更新与运行示例**\n\n![更新运行图](https://github.com/hello245m/free-stockdb/blob/main/%E6%9B%B4%E6%96%B0%E8%BF%90%E8%A1%8C%E5%9B%BE.png) ![数据库运行图](https://github.com/hello245m/free-stockdb/blob/main/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%90%E8%A1%8C%E5%9B%BE.png)\n\n\n\n## 许可证与免责声明\n\n本仓库适用 [项目许可证](LICENSE)。数据版权、使用授权和再分发条件由各数据源及其权利人决定；使用者应自行确认数据源条款。\n\n本项目用于软件学习、数据管理与量化研究，不构成投资建议。任何数据完整性、及时性和交易决策风险均应由使用者独立评估。\n\n[08-05]赞助商：[![Powered by Atlas Cloud](https://www.atlascloud.ai/oss-program/powered-by-atlas-cloud.svg)](https://www.atlascloud.ai/?ref=HRYSJ8)\n","default_branch":"main","files":39,"tree":[".gitignore","LICENSE","README.md","cpp/CMakeLists.txt","cpp/examples/main.cpp","cpp/include/stockdb/client.hpp","cpp/include/stockdb/server.hpp","cpp/include/stockdb/updater.hpp","cpp/src/client.cpp","cpp/src/server.cpp","cpp/src/updater.cpp","cpp/tools/main_server.cpp","cpp/tools/main_updater.cpp","docs/DATA_SOURCE.md","pybao/native_mcp.py","pybao/stock_sdk.py","pybao/zhibiao.py","pybao/安装.py","pybao/说明_运行-安装.py-即可任何地方调用stockdb类似pip.txt","stockdb.conf","sync_url.txt","先看！这个！！使用说明.txt","数据库运行图.png","数据网页版.html","更新运行图.png","网页版示范.png","调用方式/ai_mcp/README.md","调用方式/ai_mcp/stock_mcp_server.py","调用方式/excel/wps_js_macro.js","调用方式/excel/查看数据.html","调用方式/excel/说明.txt","调用方式/http/http_api.py","调用方式/http/rd_test.py","调用方式/python/http_js.js","调用方式/python/rd_test.py","调用方式/python/sdk_test.py","调用方式/python/zb_test.py","调用方式/python/调用.txt","调用方式/调用说明.txt"],"storefront":"/r/hello245m","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/hello245m/free-stockdb/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}