ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

free-stockdb全市场扫描scan_market解析:多线程并行遍历回调模型完整指南

free-stockdb全市场扫描scan_market解析:多线程并行遍历回调模型完整指南 free-stockdb全市场扫描scan_market解析多线程并行遍历回调模型完整指南【免费下载链接】free-stockdb面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎集成增量同步、本地缓存、复权、批量查询、回测与指标计算。项目地址: https://gitcode.com/GitHub_Trending/fr/free-stockdb对于做 A 股量化研究的朋友来说逐股请求往往是全市场回测最大的性能瓶颈。free-stockdb 本地量化数据引擎提供的scan_market接口用一个回调模型把遍历 7000 股票这件事变成了批量并行的流水线你只需注册一个处理函数引擎会按 K 线周期和日期把每只股票的数据推到你的回调里无需手动循环拉取。什么是 scan_market一次调用遍历整个市场scan_market是 client.hpp 中定义的批量扫描接口注释直接写明它的定位批量高效高并发数据并行扫描接口。它接收三个参数参数类型作用ktypeKType枚举选择 K 线周期日 / 1 / 5 / 15 / 30 分钟 / 周 / 月dateuint32_t扫描的日期格式YYYYMMDD分钟线为YYYYMMDDHHMMcallbackBatchCallback每只股票数据就绪时触发的处理函数KType枚举完整定义在 client.hpp覆盖日线、分钟线到周线、月线的所有常用周期——这意味着同一套扫描逻辑可以直接复用于分钟级策略筛选和日线级因子计算。回调模型为什么数据推给你比你去拉更快传统写法是for code in codes: data get(code)——请求、等待、再请求7000 只股票就是 7000 次往返。而scan_market采用回调Callback模型调用方不关心下一只股票是谁、数据在哪读只关心数据到了怎么处理。回调类型签名在 client.hpp 中定义using BatchCallback std::functionvoid(const std::string code, const std::vectorKRecord data);这行类型定义就是整个回调模型的核心每次回调你拿到两样东西——股票代码和当日 K 线记录数组。回调内部你只需要做选股条件判断、指标计算或信号标记数据搬运、股票列表维护、时间对齐全部由引擎完成。这种推式结构有三个直接好处零空转股票之间的衔接由引擎调度不存在客户端逐股发起请求的等待间隙逻辑解耦换策略只改回调函数扫描流程完全不变⚡并行友好回调接口天然可分片——多进程各自负责一部分股票注册同一回调即可实现全市场并行遍历。并行遍历内部流程三步走从 client.cpp 的实现可以看到一次scan_market调用内部按三步完成前置校验检查服务连接状态与回调是否有效L134未连接时安全返回不抛异常获取全市场股票列表调用get_stock_list()拿到StockMeta集合其中包含代码、名称、市场SH/SZ/BJ与上市日期client.hpp逐股查询并回调为每只股票构造QueryOptions把start_date与end_date都锁定为目标日期取出该日 K 线后立即触发callback(code, data)形成连续不断的数据流水线client.cpp。QueryOptions结构client.hpp中默认复权类型为NONE即扫描拿到的是原始行情如需前复权/后复权口径可结合AdjustType枚举扩展查询选项。KRecord 紧凑记录回调数据为什么快回调传入的KRecord数组是性能的另一半来源。它被设计成32 字节紧凑对齐结构client.hpp字段包含字段说明datetime时间戳日线YYYYMMDD、分钟线YYYYMMDDHHMMopen / high / low / close四价float存储volume / amount成交量与成交额注释中明确标注了内存映射零拷贝优化——数据在服务端以连续内存布局组织批量读取时避免逐条序列化开销。对回调模型而言这意味着每一轮回调触发的数据拷贝成本极低7000 只股票的全市场遍历不会在数据传输层卡住。从扫描到选股如何把结果用起来扫描只是第一步scan_market的真正价值在于和下游能力串联指标计算回调拿到记录后可直接用compute_ma/compute_ema/compute_macd静态方法做向量化指标计算client.hpp示例工程 main.cpp 展示了 5 万根 K 线在毫秒级完成 MA MACD 计算的基准测试网页与表格查看扫描结果可直接通过 HTTP APIhttp://127.0.0.1:7899/查询用 HTML 看板按代码、日期、周期、复权类型筛选浏览参考 http_api.py 与根目录的 数据网页版.htmlPython 侧批量查询SDK 的rd.get_data()支持传入 7000 代码列表做批量取数与 C 扫描接口互补详见 sdk_test.py指标批量计算zb.get()一次计算 39 种指标示例见 zb_test.py 与 zhibiao.py。服务默认监听127.0.0.1:7899也支持配置为局域网服务用于分布式回测多台机器各扫一个股票分片再汇总结果即可把单机全市场遍历升级为真正的集群并行。性能要点与使用建议 建议说明回调保持轻量回调里只做判断和累加重计算放到扫描结束后批量执行按日期分片分钟级策略可用多进程各扫不同日期/股票段互不干扰先过滤再深算先用价格/成交量粗筛命中条件的股票再做指标精算关注连接状态实现已做未连接保护client.cpp但仍建议启动时调用is_connected()确认相关文件速查接口声明cpp/include/stockdb/client.hpp扫描实现cpp/src/client.cpp客户端示例cpp/examples/main.cpp服务端构建cpp/CMakeLists.txt数据源同步协议docs/DATA_SOURCE.md配置文件stockdb.conf、sync_url.txtscan_market把遍历全市场从一个需要自己写循环、管连接、防限频的脏活变成一个注册回调即可的声明式调用——这正是 free-stockdb 把数据工程与策略研究解耦的典型体现扫描归引擎策略归你。【免费下载链接】free-stockdb面向 A 股日K、分钟K与ETF分钟数据的本地量化引擎集成增量同步、本地缓存、复权、批量查询、回测与指标计算。项目地址: https://gitcode.com/GitHub_Trending/fr/free-stockdb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表