程序员量化交易实战 07:先做一个干净的 A 股股票池
第 6 篇把数据库表结构和迁移检查补上了。现在可以开始处理股票主数据。这一篇只做一件事把原始 A 股列表变成一个干净、稳定、可复用的股票池。别小看这一步。股票池如果随便拼后面策略收益、回测覆盖率和模拟盘观察都会被污染。股票池不是股票列表股票列表是数据源给你的原始结果。股票池是系统决定“这一轮研究允许看哪些标的”的边界。两者差别很大。原始列表里可能有代码格式不统一、重复行、ST、退市整理、行业缺失、市场后缀缺失。股票池要做的是先把这些问题挡在策略外面。代码格式先统一A 股代码在不同系统里经常混着出现600519 600519.SH 300750.sz 000001.SZ策略和数据库不能接受这种混乱。第 7 章新增app/stock_universe.py第一步就是把代码统一成000000.SH/SZdef normalize_a_share_symbol(value: str) - str | None: text str(value or ).strip().upper() if not text: return None if . in text: code, market text.split(., 1) else: code text market SH if code.startswith((6, 9)) else SZ if not re.fullmatch(r\d{6}, code): return None if market not in {SH, SZ}: return None return f{code}.{market}这不是完美的交易所识别逻辑但对当前沪深股票池足够明确。后面如果加入北交所可以在这里扩展而不是让代码格式判断散落在策略里。ST 和退市先过滤掉实战早期不建议把 ST、退市整理标的混进公共股票池。原因很简单它们交易规则、风险暴露和流动性约束都更特殊。如果还没把普通 A 股链路跑稳就先把高风险边界混进来调试会变得很吵。def is_tradeable_a_share_name(name: str) - bool: normalized str(name or ).strip().upper() if not normalized: return False return 退市 not in normalized and not normalized.startswith((ST, *ST))这不是投资建议只是工程边界。等平台有了更细的风险分类再把这些股票作为独立研究池处理。从原始行变成候选对象第 7 章定义了StockCandidatedataclass(frozenTrue) class StockCandidate: symbol: str name: str market: str sector: str lot_size: int 100 source: str manual然后用stock_candidate_from_row()接收不同字段名candidate stock_candidate_from_row( {code: 600036, 股票名称: 招商银行, 行业: 银行, source: eastmoney} )返回结果会变成600036.SH / 招商银行 / SH / 银行 / sourceeastmoney这一步很适合放在纯函数里。真实供应商返回字段可能变但只要入口函数能适配后面的数据库写入和策略研究不需要跟着改。构建公共股票池公共股票池构建逻辑很短def build_public_universe(rows: Iterable[dict], limit: int 500, default_source: str manual) - list[StockCandidate]: out: list[StockCandidate] [] seen: set[str] set() for row in rows: candidate stock_candidate_from_row(row, default_sourcedefault_source) if not candidate or candidate.symbol in seen: continue out.append(candidate) seen.add(candidate.symbol) if len(out) limit: break return out这里有三个明确动作过滤坏数据、按 symbol 去重、达到 limit 后停止。早期我们用 500 只股票作为公共池规模不是因为 500 有什么神奇意义而是为了让本地回测、覆盖率检查和文章里的示例都能快速跑完。等链路稳定后可以扩大到全市场。还要能解释股票池股票池不是构建完就结束。还要能解释它长什么样。universe_summary()会按市场、行业和来源做摘要{ count: 3, by_market: {SH: 1, SZ: 2}, by_source: {eastmoney: 2, qveris: 1}, sample: [600519.SH, 000001.SZ, 300750.SZ], }这类摘要后面会进入数据质量报告。不是为了好看而是为了能在回测前判断这批股票是不是全是某个行业是不是混入了 fallback是不是市场分布明显异常可运行基础校验股票池的结果必须能解释。当前统一用这条命令复现第 01-08 篇的基础能力uv run python -m scripts.chapter_examples foundation-check本章对应输出如下示例输入里包含重复代码和 ST 名称最后只留下600519.SH与000001.SZ。摘要同时给出市场、行业和来源分布这比只打印股票列表更适合后续排查股票池是否异常。本篇实战任务拉取第 7 章代码git clone https://github.com/ax2/zi-quant-platform.git cd zi-quant-platform git checkout chapter-07 uv sync --extra dev uv run pytest只跑股票池测试uv run pytest tests/test_stock_universe.py第 7 章本地全量测试通过155 passed仍只有既有 FastAPI deprecation warning。本章更新与代码仓库本章更新内容新增app/stock_universe.py。实现 A 股代码规范化、ST/退市过滤、去重、限额和股票池摘要。新增tests/test_stock_universe.py覆盖股票池构建的关键边界。代码仓库https://github.com/ax2/zi-quant-platform本章代码git clone https://github.com/ax2/zi-quant-platform.git cd zi-quant-platform git checkout chapter-07 uv sync --extra dev uv run pytest tests/test_stock_universe.py本篇小结股票池是量化系统的研究边界。这一篇没有直接写策略而是先把股票代码规范化、ST/退市过滤、去重、规模限制和来源摘要写成可测试代码。下一篇继续往下走拿到股票池之后怎样把原始 K 线清洗成统一的日线行情。

相关新闻

汽车电子角度传感器KMA2x:磁阻技术、全集成与SENT接口实战解析

汽车电子角度传感器KMA2x:磁阻技术、全集成与SENT接口实战解析

1. 项目概述:为什么汽车电子需要KMA2x这样的角度传感器?在汽车电子这个对可靠性和精度要求近乎苛刻的领域,位置检测无处不在。从你轻踩油门时发动机的精准响应,到方向盘转动时车辆的稳定循迹,背后都离不开一个核心器件…

2026/6/21 15:57:41阅读更多 →
基于CMSIS-DSP与MQX RTOS的嵌入式实时信号处理实战

基于CMSIS-DSP与MQX RTOS的嵌入式实时信号处理实战

1. 项目概述与核心价值在电机控制、音频处理、工业传感这些嵌入式应用里,实时信号处理能力往往是决定产品性能上限的关键。十年前,当我第一次在Cortex-M3上尝试实现一个简单的FIR滤波器时,光是手写汇编优化和定点数处理就耗费了大量精力&…

2026/6/21 15:57:41阅读更多 →
RimSort SteamCMD下载失败终极解决方案:权限配置与路径优化指南

RimSort SteamCMD下载失败终极解决方案:权限配置与路径优化指南

RimSort SteamCMD下载失败终极解决方案:权限配置与路径优化指南 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, commu…

2026/6/21 15:57:41阅读更多 →
强化学习突破200bps语音编码极限:动态比特分配与听觉质量博弈

强化学习突破200bps语音编码极限:动态比特分配与听觉质量博弈

1. 项目缘起:为什么200bps语音编码是一个“地狱级”挑战在语音通信领域,码率(比特率)一直是衡量技术先进性的核心标尺之一。从早期固定电话的64kbps G.711标准,到移动通信中广泛使用的12.2kbps AMR-NB,再到…

2026/6/21 17:12:55阅读更多 →
Linux下Typora激活原理与安全风险分析:从本地代理到开源替代方案

Linux下Typora激活原理与安全风险分析:从本地代理到开源替代方案

1. 项目概述:当Linux遇上Typora的“激活”难题作为一名在Linux桌面环境里摸爬滚打了多年的老用户,我几乎尝试过市面上所有的Markdown编辑器。从VSCode配合各种插件,到功能强大的开源方案,最终,我的目光还是落在了Typor…

2026/6/21 17:12:55阅读更多 →
Whisky终极指南:在Apple Silicon Mac上轻松运行Windows应用

Whisky终极指南:在Apple Silicon Mac上轻松运行Windows应用

Whisky终极指南:在Apple Silicon Mac上轻松运行Windows应用 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 你是否曾经想过在Mac上运行Windows软件或游戏,但又…

2026/6/21 17:12:55阅读更多 →
本地化AI工作流:飞书+OpenClaw+DeepSeek纯内网桌面智能体实战

本地化AI工作流:飞书+OpenClaw+DeepSeek纯内网桌面智能体实战

1. 这不是“AI遥控器”,而是本地化智能体工作流的落地实践很多人看到标题第一反应是:“飞书能控制我的Windows电脑?是不是又要装一堆服务、开远程端口、甚至要搞内网穿透?”——这恰恰是最大的误解。我去年在给一家制造业客户做现…

2026/6/21 17:12:55阅读更多 →
论文双检测时代避坑指南:百考通AI分层改写方案实测解析

论文双检测时代避坑指南:百考通AI分层改写方案实测解析

当下学术论文审核早已告别了“降重即可定稿”的简单阶段,进入查重率AIGC人工智能检测双重审核的常态化时代。无论是高校课程论文、本科硕博毕业论文,还是期刊投稿文稿,都需要同时通过两项检测指标,这也成为了很多学生和科研人员的…

2026/6/21 17:12:55阅读更多 →
探索macOS菜单栏管理新境界:Ice的优雅解决方案

探索macOS菜单栏管理新境界:Ice的优雅解决方案

探索macOS菜单栏管理新境界:Ice的优雅解决方案 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是否曾为macOS菜单栏上拥挤不堪的图标而烦恼?当各种应用图标在有限的空间里争…

2026/6/21 17:07:55阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →