Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d77c4a852 | |||
| 1fb58d23da | |||
| bd1ec2ea01 | |||
| bb19b67460 |
116
README.md
116
README.md
@@ -1,18 +1,57 @@
|
||||
# A股板块监控系统
|
||||
# A股板块盘后分析系统
|
||||
|
||||
自动获取东方财富板块数据,监控异动并发送邮件通知。
|
||||
自动获取东方财富板块数据,生成盘后分析报告并发送邮件。支持历史数据存储和长时间跨度分析。
|
||||
|
||||
## 功能特点
|
||||
|
||||
- 获取行业板块涨跌幅排行
|
||||
- 获取概念板块涨跌幅排行
|
||||
- 监控主力资金流入/流出
|
||||
- 检测板块异动(涨跌幅≥3%、资金流入≥10亿)
|
||||
- 自动发送HTML格式邮件通知
|
||||
- 每个交易日17:00自动执行
|
||||
- 获取行业板块和概念板块完整数据
|
||||
- **历史数据存储**(SQLite数据库)
|
||||
- **长时间跨度分析**(连续涨跌、板块轮动、资金趋势)
|
||||
- 生成分析总结邮件正文
|
||||
- 详细数据CSV文件作为附件
|
||||
- 发送到指定邮箱
|
||||
|
||||
## 数据来源
|
||||
## 邮件内容
|
||||
|
||||
东方财富HTTP API (http://push2.eastmoney.com)
|
||||
### 正文(分析总结)
|
||||
|
||||
**一、市场情绪分析**
|
||||
- 市场评级(强势上涨/偏强/平稳/偏弱/弱势下跌)
|
||||
- 涨跌板块统计、平均涨跌幅、资金净流
|
||||
|
||||
**二、资金流向分析**
|
||||
- TOP5板块资金合计、资金集中度
|
||||
|
||||
**三、板块强弱分析**
|
||||
- 强势板块数量、弱势板块数量及示例
|
||||
|
||||
**四、概念板块热度**
|
||||
- 热门概念TOP5、冷门概念TOP5
|
||||
|
||||
**五、行业板块排行**
|
||||
- 涨幅TOP5、跌幅TOP5
|
||||
|
||||
**六、主力资金排行**
|
||||
- 大幅流入TOP10、大幅流出TOP10
|
||||
|
||||
**七、投资建议**
|
||||
- 根据市场情绪给出策略建议
|
||||
|
||||
**八、历史趋势分析** ⭐新增
|
||||
- 近期市场趋势(连续上涨/下跌/震荡)
|
||||
- 近5日资金流向详情
|
||||
- 连续上涨板块(近3日累计涨幅)
|
||||
- 连续下跌板块(近3日累计跌幅)
|
||||
- 板块轮动分析(新进入涨幅TOP10)
|
||||
|
||||
### 附件(详细数据)
|
||||
|
||||
CSV文件包含:
|
||||
- 行业板块涨跌幅排行(完整)
|
||||
- 行业板块资金流向排行(完整)
|
||||
- 概念板块涨跌幅排行(完整)
|
||||
- 概念板块资金流向排行(完整)
|
||||
|
||||
## 使用方法
|
||||
|
||||
@@ -25,52 +64,47 @@ python3 board_monitor.py test
|
||||
### 获取板块数据
|
||||
|
||||
```bash
|
||||
# 获取行业板块涨跌幅TOP20
|
||||
python3 board_monitor.py get industry --sort pct --limit 20
|
||||
|
||||
# 获取概念板块资金流入TOP20
|
||||
python3 board_monitor.py get concept --sort flow --limit 20
|
||||
python3 board_monitor.py get industry --limit 20
|
||||
python3 board_monitor.py get concept --limit 20
|
||||
```
|
||||
|
||||
### 执行监控检查
|
||||
### 手动发送报告
|
||||
|
||||
```bash
|
||||
# 监控并发送通知(发现异动时)
|
||||
python3 board_monitor.py monitor -v
|
||||
python3 board_monitor.py report -v
|
||||
|
||||
# 监控但不发送通知
|
||||
python3 board_monitor.py monitor --no-notify
|
||||
# 发送到其他邮箱
|
||||
python3 board_monitor.py report --to other@example.com
|
||||
```
|
||||
|
||||
### 查看历史数据
|
||||
|
||||
```bash
|
||||
# 查看近5日市场统计
|
||||
python3 board_monitor.py history --days 5
|
||||
|
||||
# 查看指定板块历史
|
||||
python3 board_monitor.py history --board "电力设备" --days 10
|
||||
```
|
||||
|
||||
## 定时任务配置
|
||||
|
||||
```bash
|
||||
# 添加到crontab
|
||||
crontab -e
|
||||
每个交易日(周一至周五)17:00自动执行:
|
||||
|
||||
# 盘中每小时检查(9:30-15:00)
|
||||
30-59 9 * * 1-5 /usr/bin/python3 /home/xian/.openclaw/workspace-coder/works/board-monitor/board_monitor.py monitor
|
||||
0-15 10-14 * * 1-5 /usr/bin/python3 /home/xian/.openclaw/workspace-coder/works/board-monitor/board_monitor.py monitor
|
||||
0-0 15 * * 1-5 /usr/bin/python3 /home/xian/.openclaw/workspace-coder/works/board-monitor/board_monitor.py monitor
|
||||
```
|
||||
0 17 * * 1-5 python3 board_monitor.py report
|
||||
```
|
||||
|
||||
## 异动检测阈值
|
||||
## 数据存储
|
||||
|
||||
| 类型 | 阈值 |
|
||||
|------|------|
|
||||
| 涨幅异动 | ≥ 3% |
|
||||
| 跌幅异动 | ≤ -3% |
|
||||
| 资金流入 | ≥ 10亿 |
|
||||
| 资金流出 | ≤ -10亿 |
|
||||
|
||||
可在 `board_monitor.py` 中修改 `check_anomaly()` 函数的参数调整阈值。
|
||||
|
||||
## 通知邮箱
|
||||
|
||||
默认发送到: zuitoushang@tphai.com
|
||||
|
||||
可在 `send_notification()` 函数中修改。
|
||||
历史数据保存在 `data/board_history.db` SQLite数据库中,包含:
|
||||
- 每日板块涨跌幅
|
||||
- 主力资金流向
|
||||
- 领涨股信息
|
||||
|
||||
## 版本历史
|
||||
|
||||
- v1.3.0 (2026-04-10) - 新增历史数据存储和长时间跨度分析
|
||||
- v1.2.0 (2026-04-10) - 增加专业分析内容
|
||||
- v1.1.0 (2026-04-10) - 改为盘后报告模式
|
||||
- v1.0.0 (2026-04-10) - 初始版本
|
||||
1034
board_monitor.py
1034
board_monitor.py
File diff suppressed because it is too large
Load Diff
414
data/board_detail_20260410.csv
Normal file
414
data/board_detail_20260410.csv
Normal file
@@ -0,0 +1,414 @@
|
||||
# A股板块详细数据
|
||||
# 生成时间: 2026-04-10 18:05:49
|
||||
|
||||
=== 行业板块涨跌幅排行 ===
|
||||
板块名称,涨跌幅(%),主力资金(亿),领涨股
|
||||
蓄电池及其他电池,5.68,80.50,
|
||||
锂电池,4.12,653.27,
|
||||
逆变器,4.06,236.64,
|
||||
电池,3.96,1354.11,
|
||||
电池化学品,3.75,546.21,
|
||||
品牌消费电子,3.71,37.30,
|
||||
锂电专用设备,3.34,73.28,
|
||||
玻璃玻纤,3.25,145.38,
|
||||
能源金属,2.92,329.08,
|
||||
其他数字媒体,2.83,3.24,
|
||||
印染,2.63,7.14,
|
||||
证券Ⅱ,2.57,578.89,
|
||||
非银金融,2.26,792.38,
|
||||
半导体设备,2.20,192.78,
|
||||
其他电子Ⅱ,2.17,240.33,
|
||||
其他电子Ⅲ,2.17,240.33,
|
||||
火电设备,2.05,7.89,
|
||||
数字芯片设计,1.99,1040.08,
|
||||
多元金融,1.89,132.31,
|
||||
其他电源设备Ⅱ,1.89,198.90,
|
||||
其他电源设备Ⅲ,1.87,134.45,
|
||||
大众出版,1.85,35.78,
|
||||
电力设备,1.83,2979.54,
|
||||
纺织制造,1.83,48.89,
|
||||
综合电力设备商,1.82,56.56,
|
||||
视频媒体,1.72,3.15,
|
||||
光伏辅材,1.71,49.61,
|
||||
燃料电池,1.70,0.85,
|
||||
物流,1.69,51.79,
|
||||
教育,1.66,18.04,
|
||||
光伏主材,1.65,28.85,
|
||||
旅游零售Ⅱ,1.64,15.99,
|
||||
游戏Ⅱ,1.62,135.19,
|
||||
游戏Ⅲ,1.62,135.19,
|
||||
白色家电,1.50,41.61,
|
||||
橡胶,1.49,30.80,
|
||||
非金属材料Ⅱ,1.47,30.88,
|
||||
生物制品,1.47,137.60,
|
||||
光伏设备,1.45,627.59,
|
||||
乘用车,1.45,102.48,
|
||||
计算机设备,1.44,355.06,
|
||||
造纸,1.43,37.95,
|
||||
家居用品,1.41,68.17,
|
||||
装修装饰Ⅱ,1.41,22.03,
|
||||
汽车零部件,1.38,608.49,
|
||||
一般零售,1.38,63.40,
|
||||
半导体,1.38,1982.82,
|
||||
分立器件,1.37,174.59,
|
||||
商用车,1.36,55.03,
|
||||
汽车,1.35,798.23,
|
||||
玻纤制造,0.05,8.50,8
|
||||
金融信息服务,0.05,1.26,3
|
||||
期货,0.04,0.98,4
|
||||
镍,0.03,3.97,1
|
||||
锂,0.03,9.49,7
|
||||
其他纺织,0.03,1.32,11
|
||||
证券Ⅲ,0.03,51.05,49
|
||||
油气及炼化工程,0.03,-0.31,5
|
||||
钴,0.02,0.50,2
|
||||
塑料包装,0.02,0.63,8
|
||||
其他橡胶制品,0.02,0.10,14
|
||||
多业态零售,0.02,1.03,14
|
||||
商用载货车,0.02,2.06,8
|
||||
其他家居用品,0.02,0.18,20
|
||||
机器人,0.02,1.61,20
|
||||
成品家居,0.02,0.58,16
|
||||
玻璃制造,0.02,0.70,9
|
||||
原材料供应链服务,0.02,0.44,11
|
||||
纺织服装设备,0.02,1.74,11
|
||||
冰洗,0.02,0.28,7
|
||||
零食,0.02,0.63,8
|
||||
资产管理,0.02,-0.06,4
|
||||
仓储物流,0.02,0.28,5
|
||||
金属包装,0.02,0.51,5
|
||||
公路货运,0.02,0.13,4
|
||||
电动乘用车,0.02,6.96,3
|
||||
其他化学纤维,0.02,-0.38,6
|
||||
教育运营及其他,0.02,0.37,3
|
||||
其他生物制品,0.02,0.15,31
|
||||
氨纶,0.02,-0.02,1
|
||||
培训教育,0.02,0.74,10
|
||||
铁矿石,0.02,0.81,4
|
||||
家纺,0.02,0.14,6
|
||||
信托,0.02,0.31,3
|
||||
跨境物流,0.02,0.48,12
|
||||
商业物业经营,0.02,0.57,15
|
||||
会展服务,0.02,-0.03,3
|
||||
底盘与发动机系统,0.02,8.49,97
|
||||
旅游零售Ⅲ,0.02,0.54,2
|
||||
其他计算机设备,0.02,6.34,53
|
||||
耐火材料,0.02,-0.13,8
|
||||
其他通用设备,0.02,0.59,43
|
||||
特种纸,0.02,1.89,11
|
||||
原料药,0.02,3.23,36
|
||||
非金属材料Ⅲ,0.01,1.54,9
|
||||
厨房电器,0.01,0.03,4
|
||||
机床工具,0.01,0.87,19
|
||||
装修装饰Ⅲ,0.01,0.25,16
|
||||
端到端供应链服务,0.01,-0.00,7
|
||||
鞋帽及其他,0.01,0.24,10
|
||||
|
||||
=== 行业板块资金流向排行 ===
|
||||
板块名称,主力资金(亿),涨跌幅(%),领涨股
|
||||
电力设备,2979.54,1.83,
|
||||
半导体,1982.82,1.38,
|
||||
电池,1354.11,3.96,
|
||||
数字芯片设计,1040.08,1.99,
|
||||
汽车,798.23,1.35,
|
||||
非银金融,792.38,2.26,
|
||||
锂电池,653.27,4.12,
|
||||
光伏设备,627.59,1.45,
|
||||
汽车零部件,608.49,1.38,
|
||||
证券Ⅱ,578.89,2.57,
|
||||
电池化学品,546.21,3.75,
|
||||
计算机设备,355.06,1.44,
|
||||
能源金属,329.08,2.92,
|
||||
其他电子Ⅱ,240.33,2.17,
|
||||
其他电子Ⅲ,240.33,2.17,
|
||||
逆变器,236.64,4.06,
|
||||
其他电源设备Ⅱ,198.90,1.89,
|
||||
半导体设备,192.78,2.20,
|
||||
分立器件,174.59,1.37,
|
||||
玻璃玻纤,145.38,3.25,
|
||||
生物制品,137.60,1.47,
|
||||
游戏Ⅱ,135.19,1.62,
|
||||
游戏Ⅲ,135.19,1.62,
|
||||
其他电源设备Ⅲ,134.45,1.87,
|
||||
多元金融,132.31,1.89,
|
||||
乘用车,102.48,1.45,
|
||||
蓄电池及其他电池,80.50,5.68,
|
||||
锂电专用设备,73.28,3.34,
|
||||
家居用品,68.17,1.41,
|
||||
一般零售,63.40,1.38,
|
||||
综合电力设备商,56.56,1.82,
|
||||
商用车,55.03,1.36,
|
||||
物流,51.79,1.69,
|
||||
证券Ⅲ,51.05,0.03,49
|
||||
光伏辅材,49.61,1.71,
|
||||
纺织制造,48.89,1.83,
|
||||
白色家电,41.61,1.50,
|
||||
造纸,37.95,1.43,
|
||||
品牌消费电子,37.30,3.71,
|
||||
大众出版,35.78,1.85,
|
||||
非金属材料Ⅱ,30.88,1.47,
|
||||
橡胶,30.80,1.49,
|
||||
光伏主材,28.85,1.65,
|
||||
装修装饰Ⅱ,22.03,1.41,
|
||||
教育,18.04,1.66,
|
||||
旅游零售Ⅱ,15.99,1.64,
|
||||
锂,9.49,0.03,7
|
||||
玻纤制造,8.50,0.05,8
|
||||
底盘与发动机系统,8.49,0.02,97
|
||||
火电设备,7.89,2.05,
|
||||
印染,7.14,2.63,
|
||||
电动乘用车,6.96,0.02,3
|
||||
其他计算机设备,6.34,0.02,53
|
||||
镍,3.97,0.03,1
|
||||
其他数字媒体,3.24,2.83,
|
||||
原料药,3.23,0.02,36
|
||||
视频媒体,3.15,1.72,
|
||||
商用载货车,2.06,0.02,8
|
||||
特种纸,1.89,0.02,11
|
||||
纺织服装设备,1.74,0.02,11
|
||||
机器人,1.61,0.02,20
|
||||
非金属材料Ⅲ,1.54,0.01,9
|
||||
其他纺织,1.32,0.03,11
|
||||
金融信息服务,1.26,0.05,3
|
||||
多业态零售,1.03,0.02,14
|
||||
期货,0.98,0.04,4
|
||||
机床工具,0.87,0.01,19
|
||||
燃料电池,0.85,1.70,
|
||||
铁矿石,0.81,0.02,4
|
||||
培训教育,0.74,0.02,10
|
||||
玻璃制造,0.70,0.02,9
|
||||
零食,0.63,0.02,8
|
||||
塑料包装,0.63,0.02,8
|
||||
其他通用设备,0.59,0.02,43
|
||||
成品家居,0.58,0.02,16
|
||||
商业物业经营,0.57,0.02,15
|
||||
旅游零售Ⅲ,0.54,0.02,2
|
||||
金属包装,0.51,0.02,5
|
||||
钴,0.50,0.02,2
|
||||
跨境物流,0.48,0.02,12
|
||||
原材料供应链服务,0.44,0.02,11
|
||||
教育运营及其他,0.37,0.02,3
|
||||
信托,0.31,0.02,3
|
||||
仓储物流,0.28,0.02,5
|
||||
冰洗,0.28,0.02,7
|
||||
装修装饰Ⅲ,0.25,0.01,16
|
||||
鞋帽及其他,0.24,0.01,10
|
||||
其他家居用品,0.18,0.02,20
|
||||
其他生物制品,0.15,0.02,31
|
||||
家纺,0.14,0.02,6
|
||||
公路货运,0.13,0.02,4
|
||||
其他橡胶制品,0.10,0.02,14
|
||||
厨房电器,0.03,0.01,4
|
||||
端到端供应链服务,-0.00,0.01,7
|
||||
氨纶,-0.02,0.02,1
|
||||
会展服务,-0.03,0.02,3
|
||||
资产管理,-0.06,0.02,4
|
||||
耐火材料,-0.13,0.02,8
|
||||
油气及炼化工程,-0.31,0.03,5
|
||||
其他化学纤维,-0.38,0.02,6
|
||||
|
||||
=== 概念板块涨跌幅排行 ===
|
||||
板块名称,涨跌幅(%),主力资金(亿),领涨股
|
||||
昨日连板,0.04,-19.86,7
|
||||
昨日连板_含一字,0.04,-20.89,11
|
||||
GDR,0.04,24.42,10
|
||||
麒麟电池,0.04,8.22,8
|
||||
纳米银,0.04,3.12,5
|
||||
刀片电池,0.04,10.08,11
|
||||
动力电池回收,0.03,40.08,40
|
||||
科创板做市商,0.03,23.30,14
|
||||
3D摄像头,0.03,22.01,8
|
||||
固态电池,0.03,51.62,178
|
||||
券商概念,0.03,52.56,55
|
||||
钠离子电池,0.03,23.34,53
|
||||
锂矿概念,0.03,28.75,29
|
||||
同步磁阻电机,0.03,2.09,7
|
||||
托育服务,0.02,1.30,7
|
||||
PLC概念,0.02,0.93,8
|
||||
数字货币,0.02,10.40,75
|
||||
商汤概念,0.02,0.94,13
|
||||
噪声防治,0.02,-0.01,9
|
||||
碳化硅,0.02,-15.10,34
|
||||
宁组合,0.02,16.40,23
|
||||
碳基材料,0.02,1.18,16
|
||||
昨日涨停_含一字,0.02,-63.25,36
|
||||
锂电池概念,0.02,45.36,324
|
||||
地摊经济,0.02,5.92,27
|
||||
玻璃基板,0.02,-1.25,26
|
||||
大盘成长,0.02,87.72,68
|
||||
氟化工概念,0.02,3.37,28
|
||||
科创板做市股,0.02,-2.96,35
|
||||
无线充电,0.02,30.49,32
|
||||
轮毂电机,0.02,-0.05,9
|
||||
ERP概念,0.02,4.14,17
|
||||
星闪概念,0.02,13.74,36
|
||||
跨境支付,0.02,4.91,47
|
||||
机器人执行器,0.02,3.39,31
|
||||
华为欧拉,0.02,0.28,14
|
||||
发电机概念,0.02,1.33,21
|
||||
参股期货,0.02,28.16,41
|
||||
创业成份,0.02,63.70,76
|
||||
互联网金融,0.02,61.70,153
|
||||
蓝宝石,0.02,-6.10,11
|
||||
电子身份证,0.02,1.16,34
|
||||
电池技术,0.02,46.49,446
|
||||
燃料电池概念,0.02,18.94,112
|
||||
船舶制造,0.02,2.94,9
|
||||
数字哨兵,0.02,-1.53,10
|
||||
移动支付,0.02,4.00,56
|
||||
生物识别,0.02,4.48,42
|
||||
汽车芯片,0.02,26.48,56
|
||||
复合集流体,0.02,-3.42,19
|
||||
换电概念,0.02,12.01,31
|
||||
华为汽车,0.02,7.88,100
|
||||
蚂蚁概念,0.02,10.98,52
|
||||
储能概念,0.01,60.46,345
|
||||
2025三季报预增,0.01,-2.91,73
|
||||
进口博览,0.01,0.35,14
|
||||
液冷概念,0.01,-4.57,90
|
||||
汽车热管理,0.01,6.16,79
|
||||
减速器,0.01,5.77,68
|
||||
新能源车,0.01,106.69,539
|
||||
第三代半导体,0.01,-21.82,71
|
||||
昨日首板,0.01,-40.93,22
|
||||
深证100R,0.01,90.28,72
|
||||
化债(AMC)概念,0.01,7.92,49
|
||||
减肥药,0.01,3.65,30
|
||||
屏下摄像,0.01,-1.27,9
|
||||
人形机器人,0.01,8.77,189
|
||||
周期股,0.01,60.08,68
|
||||
智能家居,0.01,35.06,134
|
||||
无线耳机,0.01,34.12,65
|
||||
茅指数,0.01,62.71,34
|
||||
百元股,0.01,35.52,140
|
||||
2025三季报扭亏,0.01,0.31,9
|
||||
消费电子概念,0.01,40.53,140
|
||||
智能穿戴,0.01,41.68,100
|
||||
特斯拉概念,0.01,7.24,167
|
||||
汽车整车,0.01,11.00,23
|
||||
熔盐储能,0.01,0.15,9
|
||||
昨日涨停,0.01,-64.20,31
|
||||
快递概念,0.01,2.67,35
|
||||
AIPC,0.01,14.58,37
|
||||
石墨烯,0.01,2.43,50
|
||||
电子竞技,0.01,5.27,27
|
||||
REITs概念,0.01,2.76,17
|
||||
高压快充,0.01,4.58,44
|
||||
电子烟,0.01,22.47,35
|
||||
磁悬浮概念,0.01,13.20,25
|
||||
存储芯片,0.01,31.68,69
|
||||
基金重仓,0.01,125.63,349
|
||||
空气能热泵,0.01,1.79,30
|
||||
ST股,0.01,-2.32,124
|
||||
小米概念,0.01,2.29,171
|
||||
全息技术,0.01,2.58,10
|
||||
贬值受益,0.01,8.27,143
|
||||
CRO,0.01,-4.61,31
|
||||
超级电容,0.01,-11.24,25
|
||||
无人驾驶,0.01,26.46,211
|
||||
百度概念,0.01,-7.02,110
|
||||
虚拟电厂,0.01,1.27,52
|
||||
2025中报预增,0.01,46.18,332
|
||||
|
||||
=== 概念板块资金流向排行 ===
|
||||
板块名称,主力资金(亿),涨跌幅(%),领涨股
|
||||
基金重仓,125.63,0.01,349
|
||||
新能源车,106.69,0.01,539
|
||||
深证100R,90.28,0.01,72
|
||||
大盘成长,87.72,0.02,68
|
||||
创业成份,63.70,0.02,76
|
||||
茅指数,62.71,0.01,34
|
||||
互联网金融,61.70,0.02,153
|
||||
储能概念,60.46,0.01,345
|
||||
周期股,60.08,0.01,68
|
||||
券商概念,52.56,0.03,55
|
||||
固态电池,51.62,0.03,178
|
||||
电池技术,46.49,0.02,446
|
||||
2025中报预增,46.18,0.01,332
|
||||
锂电池概念,45.36,0.02,324
|
||||
智能穿戴,41.68,0.01,100
|
||||
消费电子概念,40.53,0.01,140
|
||||
动力电池回收,40.08,0.03,40
|
||||
百元股,35.52,0.01,140
|
||||
智能家居,35.06,0.01,134
|
||||
无线耳机,34.12,0.01,65
|
||||
存储芯片,31.68,0.01,69
|
||||
无线充电,30.49,0.02,32
|
||||
锂矿概念,28.75,0.03,29
|
||||
参股期货,28.16,0.02,41
|
||||
汽车芯片,26.48,0.02,56
|
||||
无人驾驶,26.46,0.01,211
|
||||
GDR,24.42,0.04,10
|
||||
钠离子电池,23.34,0.03,53
|
||||
科创板做市商,23.30,0.03,14
|
||||
电子烟,22.47,0.01,35
|
||||
3D摄像头,22.01,0.03,8
|
||||
燃料电池概念,18.94,0.02,112
|
||||
宁组合,16.40,0.02,23
|
||||
AIPC,14.58,0.01,37
|
||||
星闪概念,13.74,0.02,36
|
||||
磁悬浮概念,13.20,0.01,25
|
||||
换电概念,12.01,0.02,31
|
||||
汽车整车,11.00,0.01,23
|
||||
蚂蚁概念,10.98,0.02,52
|
||||
数字货币,10.40,0.02,75
|
||||
刀片电池,10.08,0.04,11
|
||||
人形机器人,8.77,0.01,189
|
||||
贬值受益,8.27,0.01,143
|
||||
麒麟电池,8.22,0.04,8
|
||||
化债(AMC)概念,7.92,0.01,49
|
||||
华为汽车,7.88,0.02,100
|
||||
特斯拉概念,7.24,0.01,167
|
||||
汽车热管理,6.16,0.01,79
|
||||
地摊经济,5.92,0.02,27
|
||||
减速器,5.77,0.01,68
|
||||
电子竞技,5.27,0.01,27
|
||||
跨境支付,4.91,0.02,47
|
||||
高压快充,4.58,0.01,44
|
||||
生物识别,4.48,0.02,42
|
||||
ERP概念,4.14,0.02,17
|
||||
移动支付,4.00,0.02,56
|
||||
减肥药,3.65,0.01,30
|
||||
机器人执行器,3.39,0.02,31
|
||||
氟化工概念,3.37,0.02,28
|
||||
纳米银,3.12,0.04,5
|
||||
船舶制造,2.94,0.02,9
|
||||
REITs概念,2.76,0.01,17
|
||||
快递概念,2.67,0.01,35
|
||||
全息技术,2.58,0.01,10
|
||||
石墨烯,2.43,0.01,50
|
||||
小米概念,2.29,0.01,171
|
||||
同步磁阻电机,2.09,0.03,7
|
||||
空气能热泵,1.79,0.01,30
|
||||
发电机概念,1.33,0.02,21
|
||||
托育服务,1.30,0.02,7
|
||||
虚拟电厂,1.27,0.01,52
|
||||
碳基材料,1.18,0.02,16
|
||||
电子身份证,1.16,0.02,34
|
||||
商汤概念,0.94,0.02,13
|
||||
PLC概念,0.93,0.02,8
|
||||
进口博览,0.35,0.01,14
|
||||
2025三季报扭亏,0.31,0.01,9
|
||||
华为欧拉,0.28,0.02,14
|
||||
熔盐储能,0.15,0.01,9
|
||||
噪声防治,-0.01,0.02,9
|
||||
轮毂电机,-0.05,0.02,9
|
||||
玻璃基板,-1.25,0.02,26
|
||||
屏下摄像,-1.27,0.01,9
|
||||
数字哨兵,-1.53,0.02,10
|
||||
ST股,-2.32,0.01,124
|
||||
2025三季报预增,-2.91,0.01,73
|
||||
科创板做市股,-2.96,0.02,35
|
||||
复合集流体,-3.42,0.02,19
|
||||
液冷概念,-4.57,0.01,90
|
||||
CRO,-4.61,0.01,31
|
||||
蓝宝石,-6.10,0.02,11
|
||||
百度概念,-7.02,0.01,110
|
||||
超级电容,-11.24,0.01,25
|
||||
碳化硅,-15.10,0.02,34
|
||||
昨日连板,-19.86,0.04,7
|
||||
昨日连板_含一字,-20.89,0.04,11
|
||||
第三代半导体,-21.82,0.01,71
|
||||
昨日首板,-40.93,0.01,22
|
||||
昨日涨停_含一字,-63.25,0.02,36
|
||||
昨日涨停,-64.20,0.01,31
|
||||
|
BIN
data/board_history.db
Normal file
BIN
data/board_history.db
Normal file
Binary file not shown.
175
fetch_history.py
Normal file
175
fetch_history.py
Normal file
@@ -0,0 +1,175 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
批量获取板块历史K线数据
|
||||
"""
|
||||
|
||||
import urllib.request
|
||||
import json
|
||||
import sqlite3
|
||||
import os
|
||||
import time
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
# 清除代理
|
||||
for v in ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY']:
|
||||
os.environ.pop(v, None)
|
||||
|
||||
SCRIPT_DIR = Path(__file__).parent
|
||||
DATA_DIR = SCRIPT_DIR / "data"
|
||||
DB_FILE = DATA_DIR / "board_history.db"
|
||||
|
||||
|
||||
def get_board_codes():
|
||||
"""从数据库获取已保存的板块代码"""
|
||||
conn = sqlite3.connect(DB_FILE)
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT DISTINCT board_code, board_name FROM board_data WHERE board_type="industry"')
|
||||
industry = cursor.fetchall()
|
||||
|
||||
cursor.execute('SELECT DISTINCT board_code, board_name FROM board_data WHERE board_type="concept"')
|
||||
concept = cursor.fetchall()
|
||||
|
||||
conn.close()
|
||||
return industry, concept
|
||||
|
||||
|
||||
def get_kline(code: str, days: int = 25):
|
||||
"""获取板块历史K线"""
|
||||
secid = f"90.{code}"
|
||||
url = f"http://push2his.eastmoney.com/api/qt/stock/kline/get?secid={secid}&fields1=f1,f2,f3,f4,f5,f6&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63&klt=101&fqt=1&end=20500101&lmt={days}"
|
||||
|
||||
try:
|
||||
req = urllib.request.Request(url, headers={
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
||||
'Referer': 'http://quote.eastmoney.com/'
|
||||
})
|
||||
|
||||
with urllib.request.urlopen(req, timeout=15) as resp:
|
||||
data = json.loads(resp.read().decode())
|
||||
|
||||
if data.get('data') and data['data'].get('klines'):
|
||||
klines = data['data']['klines']
|
||||
result = []
|
||||
|
||||
for kline in klines:
|
||||
parts = kline.split(',')
|
||||
# 格式: 日期,开盘,收盘,最高,最低,成交量,成交额,振幅,涨跌幅,涨跌额,换手率
|
||||
result.append({
|
||||
'date': parts[0],
|
||||
'pct_change': float(parts[8]) if parts[8] != '-' else 0,
|
||||
'amount': float(parts[6]) if parts[6] != '-' else 0,
|
||||
})
|
||||
|
||||
return result
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def save_to_db(board_type: str, code: str, name: str, klines: list):
|
||||
"""保存到数据库"""
|
||||
conn = sqlite3.connect(DB_FILE)
|
||||
cursor = conn.cursor()
|
||||
|
||||
count = 0
|
||||
for kline in klines:
|
||||
try:
|
||||
cursor.execute('''
|
||||
INSERT OR REPLACE INTO board_data
|
||||
(date, board_type, board_code, board_name, pct_change, main_flow, leader_name)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (
|
||||
kline['date'],
|
||||
board_type,
|
||||
code,
|
||||
name,
|
||||
kline['pct_change'],
|
||||
kline['amount'] / 1e8,
|
||||
''
|
||||
))
|
||||
count += 1
|
||||
except:
|
||||
continue
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return count
|
||||
|
||||
|
||||
def main():
|
||||
print("\n📊 批量获取板块历史数据")
|
||||
print("=" * 50)
|
||||
|
||||
industry, concept = get_board_codes()
|
||||
print(f"\n行业板块: {len(industry)} 个")
|
||||
print(f"概念板块: {len(concept)} 个")
|
||||
|
||||
# 获取行业板块历史
|
||||
print("\n📡 获取行业板块历史数据...")
|
||||
success = 0
|
||||
for i, (code, name) in enumerate(industry, 1):
|
||||
print(f" [{i}/{len(industry)}] {name}...", end=' ', flush=True)
|
||||
|
||||
klines = get_kline(code, 25)
|
||||
if klines:
|
||||
count = save_to_db('industry', code, name, klines)
|
||||
print(f"✅ {count}条")
|
||||
success += 1
|
||||
else:
|
||||
print("❌")
|
||||
|
||||
time.sleep(0.15)
|
||||
|
||||
print(f"\n行业板块完成: {success}/{len(industry)}")
|
||||
|
||||
# 获取概念板块历史
|
||||
print("\n📡 获取概念板块历史数据...")
|
||||
success = 0
|
||||
for i, (code, name) in enumerate(concept, 1):
|
||||
print(f" [{i}/{len(concept)}] {name}...", end=' ', flush=True)
|
||||
|
||||
klines = get_kline(code, 25)
|
||||
if klines:
|
||||
count = save_to_db('concept', code, name, klines)
|
||||
print(f"✅ {count}条")
|
||||
success += 1
|
||||
else:
|
||||
print("❌")
|
||||
|
||||
time.sleep(0.15)
|
||||
|
||||
print(f"\n概念板块完成: {success}/{len(concept)}")
|
||||
|
||||
# 统计
|
||||
conn = sqlite3.connect(DB_FILE)
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT COUNT(DISTINCT date) FROM board_data')
|
||||
date_count = cursor.fetchone()[0]
|
||||
|
||||
cursor.execute('SELECT MIN(date), MAX(date) FROM board_data')
|
||||
min_date, max_date = cursor.fetchone()
|
||||
|
||||
cursor.execute('SELECT COUNT(*) FROM board_data')
|
||||
total = cursor.fetchone()[0]
|
||||
|
||||
cursor.execute('SELECT date, COUNT(*) FROM board_data GROUP BY date ORDER BY date')
|
||||
dates = cursor.fetchall()
|
||||
|
||||
conn.close()
|
||||
|
||||
print(f"\n✅ 完成!")
|
||||
print(f" 数据日期: {date_count} 天")
|
||||
print(f" 日期范围: {min_date} ~ {max_date}")
|
||||
print(f" 总记录: {total} 条")
|
||||
|
||||
print(f"\n 日期分布:")
|
||||
for date, cnt in dates[-10:]:
|
||||
print(f" {date}: {cnt} 条")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user