A股选股器(多周期 MACD 底部反转)
按 5 条硬性条件对指定行业/主题的全部 A 股做批量扫描,找出"长期下跌已充分、空头动能衰竭、中短期共振拐头"的潜在底部反转标的。
选股条件(全部满足才入选)
- 行业/主题前置过滤(最先执行) —— 拿到全市场快照后立即按主题圈定候选范围,是流程里的第一道过滤(见下方"主题前置过滤")。
- 市盈率(动态)> 0 —— 在主题缩圈之后,再用全市场快照剔除亏损股。
- 年K MACD 连续 5 根及以上绿柱,且呈缩短趋势(近6年) —— 长期下跌已充分(多年空头),且空头动能正在衰减。
- 月K MACD 处于绿柱周期且柱子缩短 —— 中长期下跌动能衰竭。
- 周K MACD 出现买入金叉 —— 中期趋势拐头向上。
逻辑链:年K长期绿柱(跌透)→ 月K绿柱缩短(空方力竭)→ 周K金叉(中期反转)。属典型多周期底部反转共振模型。日K金叉条件已移除,周K金叉作为最终入场确认。
主题前置过滤(行业/概念白名单)
在跑 MACD 以及市盈率过滤之前,先用东方财富行业板块 + 概念板块成分圈定候选池,只筛选这些主题相关的股票,大幅减少无效计算(是第一道、也是最前置的过滤)。支持 15 个内置主题:
电力 · 新能源 · 虚拟现实 · 心理学 · 美容审美 · 中年女性服务 · 中医 · 国学 · 生物医药 · 芯片 · 半导体 · PCB · 存储 · AI应用 · 芯片原材料
- 匹配来源:每个主题可配「行业板块名 / 概念板块名 / 股票名称关键词」三类(配置见
references/theme_boards.json)。 - 优先用板块成分(akshare 按板块名解析成分股)命中;板块取不到的主题(如心理学、国学、中年女性服务)回退到股票名称关键词匹配。
- 结果 CSV 新增「主题」列,标注每只入选股命中的主题。
用法
# 默认扫描全部 15 个主题
python scripts/selector.py --output result.csv
# 只扫电力 + 新能源 + 生物医药
python scripts/selector.py --themes 电力,新能源,生物医药 --output result.csv
# 查看可筛选主题
python scripts/selector.py --list-themes
# 关闭主题过滤,扫描全市场
python scripts/selector.py --no-theme-filter --output result.csv
想增删主题或调整板块/关键词,直接编辑
references/theme_boards.json(无需改代码)。 注:心理学 / 国学 / 中年女性服务在 A 股缺乏独立板块,依赖名称关键词粗略匹配,可能存在漏选或泛化,建议人工复核。
快速开始
数据方案与字段定义见 references/data_scheme.md。脚本依赖 AkShare,首次使用先装依赖:
python -m pip install -r scripts/requirements.txt
小规模验证(随机抽样 50 只,避免全市场长时间扫描):
python scripts/selector.py --sample 50 --output result.csv
全市场完整扫描(约 5000 只,建议非交易时段;内置缓存,二次运行更快):
python scripts/selector.py --output result.csv
环境要求与自动补全
脚本依赖 Python 3.9+、numpy / pandas / akshare / requests,并在 --transport curl 兜底路径下依赖系统 curl。
下载安装后无需手动装环境:selector.py 在启动时会自动调用 scripts/ensure_env.py 自检——检测 Python 版本与缺失依赖,缺失则自动 pip install(无写入权限时回退 --user)。首次运行会看到 [env] 安装日志,装完即继续选股。
- 跳过自动安装(CI / 已锁定环境):
python scripts/selector.py --no-setup ... - 单独跑一次环境检查:
python scripts/ensure_env.py(打印ENV_OK即就绪;失败退出码非 0) - 自动安装因网络/权限失败时会告警并退出,此时按提示手动执行
python -m pip install -r scripts/requirements.txt即可
依赖会装到“运行脚本的那个 Python 解释器”里(即执行
python scripts/selector.py的python),因此自动补全发生在下载用户自己的环境中,不影响系统其他项目。
参数说明(常用)
| 参数 | 默认 | 含义 |
|------|------|------|
| --themes | all | 前置行业/主题过滤,逗号分隔,如 电力,新能源,生物医药;all=全部 15 个主题 |
| --theme-config | references/theme_boards.json | 主题配置 JSON 路径(可自定义) |
| --no-theme-filter | off | 关闭行业/主题前置过滤(扫描全市场) |
| --list-themes | off | 打印可选主题后退出 |
| --min-annual-green / --max-annual-green | 5 / 0 | 年K连续绿柱下限 / 上限(0=不限,即5根及以上均满足) |
| --annual-shorten-steps | 2 | 年K绿柱缩短趋势窗口:最近 steps+1 根必须逐根变短(默认2=最近3根递减) |
| --monthly-shorten-steps | 1 | 月K需连续缩短几步(几月变短) |
| --cross-within | 3 | 周K金叉允许发生在最近几根K内(3=最近3根内出现即可) |
| --pe-max | 0 | 市盈率上限,0=不限制 |
| --limit N / --sample N | 0 | 只跑前 N 只 / 随机抽 N 只(调试用) |
| --loose | off | 宽松模式:输出仅差 1 项条件的近似标的供人工复核 |
| --workers | 8 | 并发线程数 |
| --cache-dir / --refresh / --no-cache | .cache/a_share | 日线缓存控制 |
运行说明
- 数据源默认 AkShare(免费、无需 token),脚本内置双传输层:
--transport auto(默认,优先 akshare、失败自动回退curl直连)、akshare、curl。数据中心/IP 被东方财富按 TLS 指纹拦截或限流时,改用--transport curl或curl_cffi(见 data_scheme.md 第 7 节)。 - 接口偶有限流;脚本对每只股票内置 3 次重试与退避,并对所有网络请求加 20 秒默认超时防止挂起。
- 日线起始默认
20180101,需 ≥6 年数据才能满足"年K连续绿柱"判定;近期上市不足 6 年的新股会自动跳过。 - 结果写入 CSV(UTF-8 BOM,Excel 可直接打开),并打印汇总表,含:代码、名称、主题、市盈率、年K绿柱数、年K缩短、月K缩短、周K金叉、达标、最新价。
- 若需换数据源(Baostock / Tushare),只需替换
scripts/selector.py里的fetch_spot/fetch_daily两个函数,下游 MACD 与判定逻辑无需改动(见 data_scheme.md 第 7 节)。
风险提示
本工具仅做技术面量化筛选,不构成任何投资建议。MACD 为滞后指标,多周期共振提高胜率但不保证;实盘前务必结合基本面、流动性与风控自行复核。
微信扫一扫