Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A股选股程序 (choose_stock2)

一个基于 Python 的中国A股智能选股程序。从 5000+ 只A股中,根据自定义的指标条件快速筛选出符合要求的股票。

提供 Web UI 界面命令行工具 两种使用方式。

功能特点

  • Web UI 界面:可视化选股,在浏览器中设置条件、查看结果
  • 全市场扫描:一键获取全部A股实时行情数据(东方财富数据源)
  • 5种内置策略:低估值蓝筹、高成长动量、超跌反弹、高股息、放量突破
  • 灵活的条件组合:支持 20+ 筛选字段、7种运算符,自由组合
  • 自动过滤:默认排除 ST、*ST、退市股及停牌股
  • 多种输出格式:终端表格、CSV、JSON
  • YAML 配置:通过配置文件管理策略,无需修改代码
  • 技术指标库:内置 MA、EMA、MACD、RSI、KDJ、布林带、ATR 等指标计算

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 启动 Web UI(推荐)

python app.py

然后打开浏览器访问 **http://localhost:5000**,即可在页面上进行选股操作:

  • 选择内置策略自定义筛选条件
  • 设置排序方式、显示数量、过滤选项
  • 点击「开始选股」查看结果
  • 支持在结果表格中点击表头排序
  • 支持导出 CSV / JSON 文件

3. 命令行使用

# 使用默认策略(低估值蓝筹)
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-fields

Web UI 功能说明

Web UI 提供两种选股模式:

内置策略模式

选择一个内置策略,页面会自动显示该策略的筛选条件。点击「开始选股」即可获取结果。

自定义条件模式

切换到「自定义条件」标签页,可以:

  1. 点击「添加筛选条件」按钮
  2. 选择筛选字段(如市盈率、市净率、换手率等)
  3. 选择运算符(大于、小于、区间等)
  4. 输入筛选值
  5. 可添加多个条件,所有条件取交集

高级选项

  • 排序字段:按总市值、涨跌幅、换手率等排序
  • 排序方向:升序或降序
  • 显示数量:限制返回的股票数量
  • 过滤设置:排除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 自定义条件

在 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.pyBUILTIN_STRATEGIES 字典中注册即可。

方式四:Python 代码中直接调用

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种内置选股策略

API 接口

Web 服务提供以下 API 接口,也可用于程序化调用:

端点 方法 说明
/ GET Web UI 主页
/api/meta GET 获取字段、运算符、策略等元数据
/api/strategy_conditions/<name> GET 查看指定策略的筛选条件
/api/screen POST 执行选股(支持策略模式和自定义条件模式)

选股 API 示例

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
  }'

数据来源

本程序使用东方财富数据接口获取数据。仅用于个人学习和研究,请勿用于商业用途。

免责声明

本程序仅供学习和研究使用,不构成任何投资建议。股市有风险,投资需谨慎。

About

A股选股推荐

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages