用 Tushare 搭一个 A 股多因子选股工具

2026-08-20 · 量化 · 折腾笔记

选股这件事,靠肉眼翻几千只股票不现实。于是想做一个工具:把 A 股全市场拉下来,用几个"因子"给每只股票打分排序,筛出综合得分靠前的标的。数据源用的是 Tushare Pro,一个对个人友好的 A 股数据接口。

数据源与限频的现实

Tushare 的免费/低积分档有个绕不开的约束:限频。不同接口限频规则不同——

更麻烦的是它有"惩罚升级"机制:违规次数累积会让限频等级逐级升级,从"1 次/分钟"一路升级到"5 次/天",而且等时间不解决,级别和最近的违规行为绑定。一旦触发按天级,当天必须停止一切尝试。

这意味着程序必须把限频当成一等公民来设计,而不是事后补救。

因子设计

选了几个经典因子,各维度覆盖:

因子含义类别
20/60 日动量近期涨势趋势
低波动收益稳定性风险
流动性成交活跃度交易
PE / PB估值水平价值
股息率分红回报价值
市值公司规模规模

打分方式:每个因子在全部股票上做百分位归一化,加权求和得到综合分,再按分排序输出榜单。

架构:缓存优先,失败即降级

针对限频,核心设计就一句话:低频接口一律本地缓存,单次尝试,失败即降级,绝不重试

一个关键的工程细节:daily_basic(含 PE/PB/股息率/市值)当天数据要收盘后才更新,早于这个时间点请求会返回 0 行。而 0 行结果不能当有效缓存存下来,否则下次运行会把空数据当成命中。所以读取缓存时要校验非空,遇到空就回退到上一个交易日。

结果:完整版 7 因子

把 7 个因子全部启用后,跑出的榜单风格发生了明显变化:

这本身就是个有意思的观察:因子选股的"审美"完全由你选的因子决定,换成价值/股息类因子,榜单就从"成长科技"变成了"低估值蓝筹"。

搬上云,定时跑

工具跑通后,把它搬到云服务器上,用 cron 每天收盘后自动跑一次,输出候选榜单和报告:

# crontab(工作日 16:30,收盘后数据已更新)
30 16 * * 1-5 cd ~/stock_selector && ./.venv/bin/python select_stocks.py >> cron.log 2>&1

数据缓存随代码一起传上去,服务器直接复用本地已有的缓存,避免重新拉取触发限频。

小结

这个工具最有价值的不是那 7 个因子本身,而是"在严格限频下怎么稳定取数"这套设计:缓存优先、单次尝试、失败降级、自适应冷却。把约束当成设计输入,比把约束当成 bug 去修,结果靠谱得多。

至于选股结果,只能作为研究参考——市场有风险,因子再漂亮也不是保证。

← 返回笔记列表