量化小白 02- 股市金融数据获取与清洗

量化小白 02- 股市金融数据获取与清洗

15分钟 ·
播放数1
·
评论数0

本期节目介绍如何获取股票分析拉取的金融数据。

风险提示:本节目只分享工具使用经验,不做为投资建议!

模块一:数据拉取的“漏斗哲学”——先廉价,后昂贵

做A股全市场选股最忌讳的方式就是一开始就对5000多只股票进行深度遍历,这会带来很大的计算冗余和被封禁风险。

  • 全市场快照:第一步只调用最廉价的接口,例如全市场行情快照。用最基础的指标,例如PE,PB,总市值等参数做粗筛,直接剔除不符合粗筛要求的股票。

  • 批量操作代替单点查询:分享一个技巧,如果想剔除特定行业,例如金融、公用事业,不需要逐个查询每只股票的行业属性,而是直接拉取该行业板块的成分股集合,用集合取反的方式一次性清空。

  • 昂贵的接口留给精细选股:只有经过多轮海选存货下来的少数股票,才值得调用“逐股拉取”的方式,例如历年财报、详细分红方案、逐日K线回撤历史等。即把最容易引起风控、最消耗网络资源的操作放在最底层。

模块二:数据清洗的重构真相:——统一标尺与还原

  • 统一标尺:原始数据格式经常不统一,需要把它们先放在统一标尺里。比如,股票代码标准格式应该是6位数字,但原始数据有的缺个0,有的带有.sh/.sz 后缀,需要先强制补齐6位去掉字母;数据里的时间格式有时只有数字,有时带有年月日,需要把时间戳全部转为datetime,方便后续的筛选某一天或某一月数据,计算时间差或按时间排序等操作。 而业务数值有的带逗号,例如1,234.56, 有的带单位,例如100手;有的很合文本,例如价格:10.5, 需要强制转换为纯数字再进行比较,这是程序稳定运行的基础。

  • 多表对齐:需要把散落的数据拼成全貌;

  • 重塑自由现金流计算方式:单纯的现金流数据是不够的,更合理的是计算所有者盈余(Owner Eearnings),必须用到历史PPE/营收均值x当年营收增量来推荐扩张性资本开支,并将这部分从总资本开支里剥离,得到真实的“维护性资本开支”,再计算出真正的所有者盈余;

  • 缺失值:在量化逻辑里,没有数据比用了低质量或错误的数据更糟。采用保守剔除策略保证关键财务指标一旦缺失,宁可错杀也绝不放过;但对于非致命环节,例如个别板块名称拉取失败,则允许fail-open,保证主程序仍可运转。

模块三:防风控的游记战术:作为个人开发者,需要与数据源服务器和平共处,避免被标记为有恶意攻击企图。

  • 拟人化请求和克制查询:减少高频请求。引入全局配置,例如AK_REQUEST-THROTTLE, 在每次成功请求后增加强制休眠,并一定要加入“随机抖动 Jitter), 模拟人类的访问节奏。

  • 指数退避的重试机制:网络通常不总是稳定,遇到链接错误时,不要立刻重试死磕,而是采用指数退避(即下次操作的等待时间翻倍递增)策略。这有时能有效绕过短期IP熔断,也也对目标服务器的尊重。

  • 中间态落盘:这其实是一个存档机制,在每一个筛选动作完成后都输出一份CSV文件记录筛选结果,一旦在下一步筛选中遇到网络崩溃或触发风控,不需要从头来过,可以直接从本地数据复活,也为后续用户查看每一步筛选逻辑提供了依据。

节目代码可从以下链接下载。

github.com

02:26 粗筛+精筛,廉价和昂贵的分配拉数据策略

06:25 为什么不直接看财报,而需要自己计算?

09:42 估值历史和分红数据的处理

11:11 为什么最后看日K线图?

11:47 怎么解决数据报错、网络崩溃、IP风控?

13:26 中间态落盘,保存中间数据可追溯可重启