一个基于 Python 的中国A股智能选股程序。从 5000+ 只A股中,根据自定义的指标条件快速筛选出符合要求的股票。
提供 Web UI 界面 和 命令行工具 两种使用方式。
- Web UI 界面:可视化选股,在浏览器中设置条件、查看结果
- 全市场扫描:一键获取全部A股实时行情数据(东方财富数据源)
- 5种内置策略:低估值蓝筹、高成长动量、超跌反弹、高股息、放量突破
- 灵活的条件组合:支持 20+ 筛选字段、7种运算符,自由组合
- 自动过滤:默认排除 ST、*ST、退市股及停牌股
- 多种输出格式:终端表格、CSV、JSON
- YAML 配置:通过配置文件管理策略,无需修改代码
- 技术指标库:内置 MA、EMA、MACD、RSI、KDJ、布林带、ATR 等指标计算
pip install -r requirements.txtpython app.py然后打开浏览器访问 **http://localhost:5000**,即可在页面上进行选股操作:
- 选择内置策略 或 自定义筛选条件
- 设置排序方式、显示数量、过滤选项
- 点击「开始选股」查看结果
- 支持在结果表格中点击表头排序
- 支持导出 CSV / JSON 文件
# 使用默认策略(低估值蓝筹)
python main.py
# 使用指定策略
python main.py --strategy growth_momentum
# 只看前20只,按涨跌幅排序
python main.py --strategy volume_breakout --top 20 --sort change_pct
# 输出为CSV文件
python main.py --format csv --output result.csv
# 查看所有内置策略
python main.py --list-strategies
# 查看所有可筛选字段
python main.py --list-fieldsWeb UI 提供两种选股模式:
选择一个内置策略,页面会自动显示该策略的筛选条件。点击「开始选股」即可获取结果。
切换到「自定义条件」标签页,可以:
- 点击「添加筛选条件」按钮
- 选择筛选字段(如市盈率、市净率、换手率等)
- 选择运算符(大于、小于、区间等)
- 输入筛选值
- 可添加多个条件,所有条件取交集
- 排序字段:按总市值、涨跌幅、换手率等排序
- 排序方向:升序或降序
- 显示数量:限制返回的股票数量
- 过滤设置:排除ST/退市股、排除停牌股
| 策略名称 | 说明 | 适用场景 |
|---|---|---|
value_bluechip |
低PE + 低PB + 大市值 | 稳健型投资,寻找低估蓝筹 |
growth_momentum |
强势涨幅 + 高换手 + 中盘 | 趋势投资,追踪成长股 |
oversold_rebound |
低价 + 短期超跌 + 基本面可 | 逆向投资,博弈反弹 |
high_dividend |
极低PE + PB + 大市值 | 长期持有,获取分红 |
volume_breakout |
高量比 + 适度涨幅 + 高换手 | 短线交易,捕捉放量突破 |
| 字段名 | 含义 | 字段名 | 含义 |
|---|---|---|---|
price |
最新价 | pe_ttm |
市盈率(TTM) |
change_pct |
涨跌幅(%) | pb |
市净率 |
volume |
成交量 | total_mv |
总市值(元) |
amount |
成交额 | circ_mv |
流通市值(元) |
amplitude |
振幅(%) | volume_ratio |
量比 |
turnover_rate |
换手率(%) | change_pct_60d |
60日涨跌幅 |
high / low |
最高/最低 | change_pct_ytd |
年初至今涨跌幅 |
可用运算符: >, >=, <, <=, ==, !=, between
在 Web UI 中切换到「自定义条件」模式,可视化地添加和编辑筛选条件。
编辑 config.yaml 中的 custom_conditions:
custom_conditions:
- field: "pe_ttm"
operator: "between"
value: [5, 25]
description: "市盈率 5~25"
- field: "pb"
operator: "<"
value: 3.0
description: "市净率 < 3"
- field: "total_mv"
operator: ">="
value: 10000000000
description: "总市值 >= 100亿"在 strategies/ 目录下创建新的策略文件:
from src.screener import StockScreener
def my_strategy(screener: StockScreener) -> StockScreener:
screener.clear_conditions()
screener.add_condition("pe_ttm", "between", [5, 30], "市盈率 5~30")
screener.add_condition("change_pct", ">", 0, "当日上涨")
screener.add_condition("volume_ratio", ">=", 1.5, "量比≥1.5")
return screener然后在 strategies/builtin.py 的 BUILTIN_STRATEGIES 字典中注册即可。
from src.data_fetcher import DataFetcher
from src.screener import StockScreener
screener = StockScreener(DataFetcher())
screener.add_condition("pe_ttm", "between", [5, 20], "市盈率5~20")
screener.add_condition("pb", "<", 2.0, "市净率<2")
result = screener.screen(sort_by="total_mv", top_n=30)
print(result)choose_stock2/
├── app.py # Web UI 服务(Flask)
├── main.py # 命令行工具入口
├── config.yaml # 选股配置文件
├── requirements.txt # Python 依赖
├── README.md
├── templates/
│ └── index.html # Web UI 页面模板
├── static/
│ ├── css/style.css # 样式
│ └── js/app.js # 前端交互逻辑
├── src/
│ ├── __init__.py
│ ├── data_fetcher.py # 数据获取模块(东方财富API+并发)
│ ├── indicators.py # 技术指标计算(MA/EMA/MACD/RSI/KDJ/BOLL等)
│ └── screener.py # 选股引擎(条件过滤 + 排序)
└── strategies/
├── __init__.py
└── builtin.py # 5种内置选股策略
Web 服务提供以下 API 接口,也可用于程序化调用:
| 端点 | 方法 | 说明 |
|---|---|---|
/ |
GET | Web UI 主页 |
/api/meta |
GET | 获取字段、运算符、策略等元数据 |
/api/strategy_conditions/<name> |
GET | 查看指定策略的筛选条件 |
/api/screen |
POST | 执行选股(支持策略模式和自定义条件模式) |
curl -X POST http://localhost:5000/api/screen \
-H "Content-Type: application/json" \
-d '{
"mode": "strategy",
"strategy": "value_bluechip",
"exclude_st": true,
"exclude_suspended": true,
"sort_by": "total_mv",
"ascending": false,
"top_n": 10
}'本程序使用东方财富数据接口获取数据。仅用于个人学习和研究,请勿用于商业用途。
本程序仅供学习和研究使用,不构成任何投资建议。股市有风险,投资需谨慎。