我用Python写了个选股器,3分钟筛出优质股(附代码)
析言工作室 | 量化投资实践分享
一、散户选股的三大痛点
你是不是也有这样的经历:
📱 信息过载:每天刷到几十只"牛股"推荐,不知道该信谁
😰 情绪化交易:涨了不敢追,跌了不敢买,最后高位接盘
🎲 缺乏系统:选股全靠感觉,今天看K线,明天听消息
问题的本质:没有一套可执行、可验证、可持续的选股标准。
今天,我把自己打磨了数月的量化选股策略分享出来,希望能给你一些启发。
二、策略核心:三层评分体系
我们的选股器V1.0采用三层评分架构:
最终得分 = 新因子(60%) + 传统因子(25%) + 基本面(15%) × 风险加成系数
为什么是这套权重?
新因子(60%):经过IC/IR验证,短期预测能力更强
传统因子(25%):经典指标,稳定性好
基本面(15%):过滤"雷区",确保安全边际
三、五大核心因子详解
1️⃣ 趋势一致性因子 (Trend_Consistency)
原理:股价与成交量的趋势是否同向
通俗理解:好股票上涨时是"量价齐升",而不是"缩量上涨"(可能是诱多)
评分逻辑:
价格趋势与成交量趋势同向 → 高分
价格涨但成交量萎缩 → 扣分
2️⃣ RSI极端值因子 (RSI_Extreme)
原理:捕捉超卖反弹机会
通俗理解:就像弹簧,压得太狠总会反弹
评分逻辑:
RSI在30-45区间 → 最佳买入窗口
RSI < 20(极度超卖)→ 可能有基本面问题,反而扣分
3️⃣ 布林带下轨因子 (BB_Lower)
原理:股价触及布林带下轨时的反弹概率
通俗理解:股价跌到"安全线"附近,反弹概率增大
评分逻辑:
股价接近下轨但未破 → 高分
已经跌破下轨 → 可能有下跌惯性,扣分
4️⃣ 下跌抵抗因子 (Down_Resistance)
原理:下跌过程中是否出现抵抗信号
通俗理解:跌的时候有没有"人"在护盘
评分逻辑:
下跌但成交量萎缩 + 出现长下影线 → 有抵抗,加分
放量下跌 → 无抵抗,扣分
5️⃣ 波动率收缩因子 (Volatility_Contraction)
原理:波动率收缩往往预示着变盘
通俗理解:暴风雨前的宁静
评分逻辑:
近期波动率明显低于历史平均 → 加分
波动率异常放大 → 扣分
四、风险控制:软惩罚 vs 硬过滤
很多量化策略采用硬过滤:
市盈率太高?直接剔除
是ST股?直接剔除
近期有解禁?直接剔除
问题:容易误杀!有些高PE股票(如成长股)其实很有潜力。
我们的方案是软惩罚机制:
# 不是直接剔除,而是扣分
风险得分 = 基础分 - Σ(各项风险扣分)
# 例如:
- 高PE(>100):扣5分
- 近期有大额解禁:扣8分
- 高质押比例:扣6分
- 是ST股:扣20分(但不剔除)
好处:
✅ 不会错过"好但看起来有风险"的股票
✅ 综合评分后,风险高的自然排在后面
✅ 更加灵活,适应不同市场环境
五、基本面三层过滤
尽管有软惩罚,我们还是在入口加了硬性基本面过滤,排除明显的问题股:
实战效果:
在最近的选股中,这套过滤帮我们排除了三阳马这样的亏损股(PE为负),避免了踩雷。
六、今日选股实战
以下是今日选股器的TOP5结果(2026-05-07):
⚠️ 注意:以上仅为策略示例,不构成投资建议。股市有风险,入市需谨慎。
七、核心代码分享
以下是选股器的核心评分逻辑(Python):
def calculate_stock_score(df):
"""
综合评分函数
"""
# 新因子评分(60%权重)
new_factor_score = (
df['Trend_Consistency'] * 0.20 +
df['RSI_Extreme'] * 0.15 +
df['BB_Lower'] * 0.15 +
df['Down_Resistance'] * 0.10
) * 0.60
# 传统因子评分(25%权重)
traditional_score = (
df['RSI_Normalized'] * 0.10 +
df['MACD_Signal'] * 0.10 +
df['Volume_MA'] * 0.05
) * 0.25
# 基本面评分(15%权重)
fundamental_score = (
df['PE_Score'] * 0.05 +
df['PB_Score'] * 0.05 +
df['MarketCap_Score'] * 0.05
) * 0.15
# 风险惩罚
risk_penalty = df['Risk_Penalty']
risk_multiplier = max(0.5, 1 - risk_penalty / 100)
# 最终得分
final_score = (new_factor_score + traditional_score + fundamental_score) * risk_multiplier
return final_score
完整代码获取方式:关注公众号「析言工作室」,回复关键词 "选股器",即可获取:
✅ stock_picker_v1.0.py - 选股器主程序
✅ _fetch_fundamental_v3.py - 基本面数据更新工具
✅ requirements.txt - 依赖配置文件
✅ README_使用说明.md - 详细使用文档
👇 详细使用教程见本文第八部分
八、下载与使用指南
📦 下载方式
关注公众号「析言工作室」回复关键词 "选股器",即可获取完整代码包
🚀 快速开始(3步上手)
第1步:安装Python环境
确保你的电脑已安装 Python 3.8 或更高版本。
检查方法:打开命令行,输入:
python --version
如果显示版本号(如 Python 3.9.7),说明已安装。如果未安装,请访问 python.org 下载安装。
第2步:安装依赖库
打开命令行(Windows按 Win+R,输入 cmd),进入下载包所在文件夹,运行:
pip install pandas numpy requests akshare
💡 提示:如果安装较慢,可以添加国内镜像源:
pip install pandas numpy requests akshare -i https://pypi.tuna.tsinghua.edu.cn/simple
第3步:运行选股器
在命令行中输入:
python stock_picker_v1.0.py
等待约1-3分钟,程序会自动:
1. 获取最新股票数据
2. 计算各项因子得分
3. 输出TOP20推荐股票列表
输出示例:
========================================
析言工作室 - 选股器 V1.0
========================================
📊 选股参数:
价格范围: 2-100元
持股周期: 1-15天
风控模式: 软惩罚
📈 TOP 20 推荐标的:
排名 股票代码 股票名称 综合得分 推荐理由
---- -------- -------- -------- --------
1 SH600177 雅戈尔 88.5 趋势一致性好,基本面稳健
2 SZ002123 星锐科技 85.2 RSI处于最佳区间
3 SZ002456 大豪科技 82.1 布林带下轨反弹信号
...
========================================
⚙️ 自定义配置
你可以根据自己的需求调整选股参数,编辑 stock_picker_v1.0.py 文件:
1. 调整价格范围
找到以下代码(约在第120行附近):
PRICE_MIN = 2 # 最低股价(元)
PRICE_MAX = 100 # 最高股价(元)
修改数字即可,例如只选10-50元的股票:
PRICE_MIN = 10
PRICE_MAX = 50
2. 调整持股周期
HOLDING_MIN = 1 # 最短持股天数
HOLDING_MAX = 15 # 最长持股天数
3. 调整因子权重
找到 calculate_score() 函数(约在第300行附近),修改权重:
# 新因子评分(60%权重)
new_factor_score = (
df['Trend_Consistency'] * 0.20 + # 趋势一致性
df['RSI_Extreme'] * 0.15 + # RSI极端值
df['BB_Lower'] * 0.15 + # 布林带
df['Down_Resistance'] * 0.10 # 下跌抵抗
) * 0.60
⚠️ 注意:所有权重之和应等于1.0
4. 调整基本面过滤条件
# 基本面过滤
PE_MIN = 0 # 最小市盈率(排除亏损股)
PE_MAX = 200 # 最大市盈率(排除极度高估)
PB_MIN = 0.5 # 最小市净率
MARKET_CAP_MIN = 20 # 最小流通市值(亿元)
📊 更新基本面数据
选股器需要基本面数据(PE、PB、市值等)进行过滤。
首次使用或每周更新时,运行:
python _fetch_fundamental_v3.py
这个程序会:
1. 从腾讯财经API获取所有股票的估值数据
2. 保存到本地数据库 _xiyan_data.db
3. 供选股器调用
💡 建议:每周运行一次,保持数据新鲜度。
❓ 常见问题
Q1: 运行时报错 "No module named 'pandas'"
解决:依赖库未安装,运行:
pip install pandas numpy requests akshare
Q2: 选股结果为空
可能原因:
1. 基本面数据未更新 → 运行 _fetch_fundamental_v3.py
2. 过滤条件太严格 → 放宽 PE_MAX 或 MARKET_CAP_MIN
3. 数据库文件缺失 → 检查 _xiyan_data.db 是否存在
Q3: 如何保存选股结果
程序会自动保存为CSV文件,文件名格式:
选股结果_YYYYMMDD_HHMMSS.csv
Q4: 可以用于实盘交易吗
免责声明:本选股器仅供学习研究使用,不构成投资建议。股市有风险,投资需谨慎。
建议:
先用模拟盘测试策略有效性
结合自身判断,不要盲目跟单
设置止损线,控制单笔亏损
九、重要风险提示
1. 量化≠稳赚:任何策略都有失效的时候,过去的表现不代表未来
2. 定期回测:建议每月回顾策略有效性,及时调整参数
3. 分散投资:不要把所有资金押在一只或几只股票上
4. 止损纪律:设定好止损线,严格执行
十、写在最后
这套选股器是我从0到1摸索出来的,中间踩过很多坑:
一开始只有技术指标,选到了亏损股
后来加了硬过滤,又误杀了不少好股票
最终才确定这套"软惩罚+基本面过滤"的方案
投资是一场修行,量化只是工具,不是圣杯。
希望这套策略能给你一些启发。如果你也有好的想法,欢迎在评论区交流!
如果觉得有用,欢迎:👍 点赞支持 | 💬 留言交流 | 📤 转发分享 | ⭐ 关注「析言工作室」
本文仅供学习交流,不构成投资建议。股市有风险,投资需谨慎。
析言工作室专注量化投资研究与实践,用数据和代码探索市场的规律