feat: 改为盘后报告模式 - 正文分析总结+附件详细数据
This commit is contained in:
76
README.md
76
README.md
@@ -1,18 +1,32 @@
|
|||||||
# A股板块监控系统
|
# A股板块盘后分析系统
|
||||||
|
|
||||||
自动获取东方财富板块数据,监控异动并发送邮件通知。
|
自动获取东方财富板块数据,生成盘后分析报告并发送邮件。
|
||||||
|
|
||||||
## 功能特点
|
## 功能特点
|
||||||
|
|
||||||
- 获取行业板块涨跌幅排行
|
- 每个交易日17:00自动执行
|
||||||
- 获取概念板块涨跌幅排行
|
- 获取行业板块和概念板块完整数据
|
||||||
- 监控主力资金流入/流出
|
- 生成分析总结邮件正文
|
||||||
- 检测板块异动(涨跌幅≥3%、资金流入≥10亿)
|
- 详细数据CSV文件作为附件
|
||||||
- 自动发送HTML格式邮件通知
|
- 发送到指定邮箱
|
||||||
|
|
||||||
## 数据来源
|
## 邮件内容
|
||||||
|
|
||||||
东方财富HTTP API (http://push2.eastmoney.com)
|
### 正文(分析总结)
|
||||||
|
|
||||||
|
- 市场整体趋势判断
|
||||||
|
- 热门概念板块 TOP5
|
||||||
|
- 行业涨幅/跌幅 TOP5
|
||||||
|
- 主力资金大幅流入 TOP10
|
||||||
|
- 主力资金大幅流出 TOP10
|
||||||
|
|
||||||
|
### 附件(详细数据)
|
||||||
|
|
||||||
|
CSV文件包含:
|
||||||
|
- 行业板块涨跌幅排行(完整)
|
||||||
|
- 行业板块资金流向排行(完整)
|
||||||
|
- 概念板块涨跌幅排行(完整)
|
||||||
|
- 概念板块资金流向排行(完整)
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
|
|
||||||
@@ -25,52 +39,32 @@ python3 board_monitor.py test
|
|||||||
### 获取板块数据
|
### 获取板块数据
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 获取行业板块涨跌幅TOP20
|
python3 board_monitor.py get industry --limit 20
|
||||||
python3 board_monitor.py get industry --sort pct --limit 20
|
python3 board_monitor.py get concept --limit 20
|
||||||
|
|
||||||
# 获取概念板块资金流入TOP20
|
|
||||||
python3 board_monitor.py get concept --sort flow --limit 20
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 执行监控检查
|
### 手动发送报告
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 监控并发送通知(发现异动时)
|
python3 board_monitor.py report -v
|
||||||
python3 board_monitor.py monitor -v
|
|
||||||
|
|
||||||
# 监控但不发送通知
|
# 发送到其他邮箱
|
||||||
python3 board_monitor.py monitor --no-notify
|
python3 board_monitor.py report --to other@example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
## 定时任务配置
|
## 定时任务配置
|
||||||
|
|
||||||
```bash
|
每个交易日(周一至周五)17:00自动执行:
|
||||||
# 添加到crontab
|
|
||||||
crontab -e
|
|
||||||
|
|
||||||
# 盘中每小时检查(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 17 * * 1-5 python3 board_monitor.py report
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 异动检测阈值
|
## 数据来源
|
||||||
|
|
||||||
| 类型 | 阈值 |
|
东方财富HTTP API (http://push2.eastmoney.com)
|
||||||
|------|------|
|
|
||||||
| 涨幅异动 | ≥ 3% |
|
|
||||||
| 跌幅异动 | ≤ -3% |
|
|
||||||
| 资金流入 | ≥ 10亿 |
|
|
||||||
| 资金流出 | ≤ -10亿 |
|
|
||||||
|
|
||||||
可在 `board_monitor.py` 中修改 `check_anomaly()` 函数的参数调整阈值。
|
|
||||||
|
|
||||||
## 通知邮箱
|
|
||||||
|
|
||||||
默认发送到: zuitoushang@tphai.com
|
|
||||||
|
|
||||||
可在 `send_notification()` 函数中修改。
|
|
||||||
|
|
||||||
## 版本历史
|
## 版本历史
|
||||||
|
|
||||||
|
- v1.1.0 (2026-04-10) - 改为盘后报告模式,正文分析+附件详细数据
|
||||||
- v1.0.0 (2026-04-10) - 初始版本
|
- v1.0.0 (2026-04-10) - 初始版本
|
||||||
435
board_monitor.py
435
board_monitor.py
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
A股板块监控系统
|
A股板块盘后分析系统
|
||||||
获取东方财富板块数据,监控异动,发送通知
|
获取东方财富板块数据,生成分析报告,发送邮件通知
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
@@ -33,23 +33,15 @@ BOARD_TYPES = {
|
|||||||
|
|
||||||
# 数据字段
|
# 数据字段
|
||||||
FIELDS = "f12,f14,f2,f3,f62,f66,f84,f104,f125,f126,f127,f128"
|
FIELDS = "f12,f14,f2,f3,f62,f66,f84,f104,f125,f126,f127,f128"
|
||||||
# f12: 板块代码
|
|
||||||
# f14: 板块名称
|
|
||||||
# f2: 最新价
|
|
||||||
# f3: 涨跌幅
|
|
||||||
# f62: 主力净流入
|
|
||||||
# f66: 主力净流入-陆股通
|
|
||||||
# f84: 领涨股代码
|
|
||||||
# f104: 领涨股名称
|
|
||||||
|
|
||||||
|
|
||||||
def get_board_data(board_type: str, sort_by: str = "f3", limit: int = 50) -> Optional[List[Dict]]:
|
def get_board_data(board_type: str, sort_by: str = "f3", limit: int = 100) -> Optional[List[Dict]]:
|
||||||
"""
|
"""
|
||||||
获取板块数据
|
获取板块数据
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
board_type: 板块类型 (industry/concept)
|
board_type: 板块类型 (industry/concept)
|
||||||
sort_by: 排序字段 (f3=涨跌幅, f66=主力资金)
|
sort_by: 排序字段 (f3=涨跌幅, f62=主力资金)
|
||||||
limit: 返回数量
|
limit: 返回数量
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
@@ -82,7 +74,6 @@ def get_board_data(board_type: str, sort_by: str = "f3", limit: int = 50) -> Opt
|
|||||||
'price': item.get('f2', 0) / 100 if item.get('f2') else 0,
|
'price': item.get('f2', 0) / 100 if item.get('f2') else 0,
|
||||||
'pct_change': item.get('f3', 0) / 100 if item.get('f3') else 0,
|
'pct_change': item.get('f3', 0) / 100 if item.get('f3') else 0,
|
||||||
'main_flow': item.get('f62', 0) / 1e8 if item.get('f62') else 0, # 亿元
|
'main_flow': item.get('f62', 0) / 1e8 if item.get('f62') else 0, # 亿元
|
||||||
'main_flow_lgt': item.get('f66', 0) / 1e8 if item.get('f66') else 0, # 陆股通流入
|
|
||||||
'leader_code': item.get('f84', ''),
|
'leader_code': item.get('f84', ''),
|
||||||
'leader_name': item.get('f104', ''),
|
'leader_name': item.get('f104', ''),
|
||||||
}
|
}
|
||||||
@@ -96,157 +87,163 @@ def get_board_data(board_type: str, sort_by: str = "f3", limit: int = 50) -> Opt
|
|||||||
except urllib.error.URLError as e:
|
except urllib.error.URLError as e:
|
||||||
print(f"❌ 网络请求失败: {e}")
|
print(f"❌ 网络请求失败: {e}")
|
||||||
return None
|
return None
|
||||||
except json.JSONDecodeError as e:
|
|
||||||
print(f"❌ JSON解析失败: {e}")
|
|
||||||
return None
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ 获取数据异常: {e}")
|
print(f"❌ 获取数据异常: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def check_anomaly(boards: List[Dict], pct_threshold: float = 3.0, flow_threshold: float = 10.0) -> Dict:
|
def generate_daily_report(boards_data: Dict, to_email: str = "wlq@tphai.com") -> bool:
|
||||||
"""
|
"""
|
||||||
检查板块异动
|
生成盘后分析报告并发送邮件
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
boards: 板块数据列表
|
boards_data: 板块数据字典 {'industry': [], 'concept': []}
|
||||||
pct_threshold: 涨跌幅阈值 (%)
|
to_email: 收件人邮箱
|
||||||
flow_threshold: 资金流入阈值 (亿元)
|
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
Dict: 异动信息,包含涨跌异动和资金异动
|
bool: 是否发送成功
|
||||||
"""
|
"""
|
||||||
anomaly = {
|
all_industry = boards_data.get('industry', [])
|
||||||
'pct_up': [], # 涨幅异动
|
all_concept = boards_data.get('concept', [])
|
||||||
'pct_down': [], # 跌幅异动
|
|
||||||
'flow_in': [], # 资金流入异动
|
|
||||||
'flow_out': [], # 资金流出异动
|
|
||||||
'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
}
|
|
||||||
|
|
||||||
for board in boards:
|
if not all_industry and not all_concept:
|
||||||
# 涨跌幅异动
|
print("❌ 无数据,无法生成报告")
|
||||||
if board['pct_change'] >= pct_threshold:
|
return False
|
||||||
anomaly['pct_up'].append(board)
|
|
||||||
elif board['pct_change'] <= -pct_threshold:
|
|
||||||
anomaly['pct_down'].append(board)
|
|
||||||
|
|
||||||
# 资金流向异动
|
# 分析总结
|
||||||
if board['main_flow'] >= flow_threshold:
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
anomaly['flow_in'].append(board)
|
|
||||||
elif board['main_flow'] <= -flow_threshold:
|
|
||||||
anomaly['flow_out'].append(board)
|
|
||||||
|
|
||||||
return anomaly
|
# 计算市场趋势
|
||||||
|
avg_pct = 0
|
||||||
|
if all_industry:
|
||||||
|
avg_pct = sum(b['pct_change'] for b in all_industry) / len(all_industry)
|
||||||
|
|
||||||
|
market_trend = '平稳'
|
||||||
|
if avg_pct > 0.5:
|
||||||
|
market_trend = '上涨'
|
||||||
|
elif avg_pct < -0.5:
|
||||||
|
market_trend = '下跌'
|
||||||
|
|
||||||
def format_board_line(board: Dict) -> str:
|
# 排序数据
|
||||||
"""格式化单行板块信息"""
|
industry_by_pct = sorted(all_industry, key=lambda x: x['pct_change'], reverse=True)
|
||||||
pct = board['pct_change']
|
industry_by_flow = sorted(all_industry, key=lambda x: x['main_flow'], reverse=True)
|
||||||
flow = board['main_flow']
|
concept_by_pct = sorted(all_concept, key=lambda x: x['pct_change'], reverse=True)
|
||||||
leader = board['leader_name'] or board['leader_code']
|
concept_by_flow = sorted(all_concept, key=lambda x: x['main_flow'], reverse=True)
|
||||||
|
|
||||||
pct_str = f"+{pct:.2f}%" if pct > 0 else f"{pct:.2f}%"
|
# 生成HTML正文(分析总结)
|
||||||
flow_str = f"+{flow:.2f}亿" if flow > 0 else f"{flow:.2f}亿"
|
html_lines = [
|
||||||
leader_str = f"领涨: {leader}" if leader else ""
|
"<h2>📊 A股板块盘后分析报告</h2>",
|
||||||
|
f"<p>报告时间: {timestamp}</p>",
|
||||||
return f"{board['name']}: {pct_str}, 主力{flow_str} {leader_str}"
|
f"<p>市场整体: <strong>{market_trend}</strong> (行业平均涨跌 {avg_pct:+.2f}%)</p>",
|
||||||
|
"",
|
||||||
|
"<hr>",
|
||||||
def print_board_summary(boards: List[Dict], title: str, limit: int = 10):
|
"",
|
||||||
"""打印板块摘要"""
|
"<h3>🔥 今日热门概念板块 TOP5</h3>",
|
||||||
if not boards:
|
"<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;'>",
|
||||||
return
|
"<tr style='background:#f0f0f0'><th>板块</th><th>涨跌幅</th><th>主力资金</th></tr>",
|
||||||
|
|
||||||
print(f"\n{title}")
|
|
||||||
print("=" * 50)
|
|
||||||
for board in boards[:limit]:
|
|
||||||
print(format_board_line(board))
|
|
||||||
|
|
||||||
|
|
||||||
def print_anomaly_report(anomaly: Dict):
|
|
||||||
"""打印异动报告"""
|
|
||||||
print(f"\n📊 板块异动报告 [{anomaly['timestamp']}]")
|
|
||||||
print("=" * 60)
|
|
||||||
|
|
||||||
has_anomaly = False
|
|
||||||
|
|
||||||
if anomaly['pct_up']:
|
|
||||||
has_anomaly = True
|
|
||||||
print(f"\n🔴 涨幅异动 (涨幅 ≥ 3%)")
|
|
||||||
for board in anomaly['pct_up']:
|
|
||||||
print(f" {format_board_line(board)}")
|
|
||||||
|
|
||||||
if anomaly['pct_down']:
|
|
||||||
has_anomaly = True
|
|
||||||
print(f"\n🟢 跌幅异动 (跌幅 ≥ 3%)")
|
|
||||||
for board in anomaly['pct_down']:
|
|
||||||
print(f" {format_board_line(board)}")
|
|
||||||
|
|
||||||
if anomaly['flow_in']:
|
|
||||||
has_anomaly = True
|
|
||||||
print(f"\n💰 资金大幅流入 (≥ 10亿)")
|
|
||||||
for board in anomaly['flow_in']:
|
|
||||||
print(f" {format_board_line(board)}")
|
|
||||||
|
|
||||||
if anomaly['flow_out']:
|
|
||||||
has_anomaly = True
|
|
||||||
print(f"\n💸 资金大幅流出 (≥ 10亿)")
|
|
||||||
for board in anomaly['flow_out']:
|
|
||||||
print(f" {format_board_line(board)}")
|
|
||||||
|
|
||||||
if not has_anomaly:
|
|
||||||
print("\n✅ 今日无明显异动")
|
|
||||||
|
|
||||||
return has_anomaly
|
|
||||||
|
|
||||||
|
|
||||||
def generate_html_report(anomaly: Dict, board_type: str) -> str:
|
|
||||||
"""生成HTML格式报告"""
|
|
||||||
lines = [
|
|
||||||
"<h2>📊 A股板块异动报告</h2>",
|
|
||||||
f"<p>检测时间: {anomaly['timestamp']}</p>",
|
|
||||||
f"<p>板块类型: {board_type}</p>",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
if anomaly['pct_up']:
|
for board in concept_by_pct[:5]:
|
||||||
lines.append("<h3>🔴 涨幅异动 (涨幅 ≥ 3%)</h3>")
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
lines.append("<ul>")
|
flow_str = f"+{board['main_flow']:.2f}亿" if board['main_flow'] > 0 else f"{board['main_flow']:.2f}亿"
|
||||||
for board in anomaly['pct_up']:
|
html_lines.append(f"<tr><td>{board['name']}</td><td>{pct_str}</td><td>{flow_str}</td></tr>")
|
||||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
|
||||||
lines.append("</ul>")
|
|
||||||
|
|
||||||
if anomaly['pct_down']:
|
html_lines.append("</table>")
|
||||||
lines.append("<h3>🟢 跌幅异动 (跌幅 ≥ 3%)</h3>")
|
html_lines.append("")
|
||||||
lines.append("<ul>")
|
|
||||||
for board in anomaly['pct_down']:
|
|
||||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
|
||||||
lines.append("</ul>")
|
|
||||||
|
|
||||||
if anomaly['flow_in']:
|
html_lines.append("<h3>📈 行业板块涨幅 TOP5</h3>")
|
||||||
lines.append("<h3>💰 资金大幅流入 (≥ 10亿)</h3>")
|
html_lines.append("<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;'>")
|
||||||
lines.append("<ul>")
|
html_lines.append("<tr style='background:#f0f0f0'><th>板块</th><th>涨跌幅</th><th>主力资金</th><th>领涨股</th></tr>")
|
||||||
for board in anomaly['flow_in']:
|
|
||||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
|
||||||
lines.append("</ul>")
|
|
||||||
|
|
||||||
if anomaly['flow_out']:
|
for board in industry_by_pct[:5]:
|
||||||
lines.append("<h3>💸 资金大幅流出 (≥ 10亿)</h3>")
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
lines.append("<ul>")
|
flow_str = f"+{board['main_flow']:.2f}亿" if board['main_flow'] > 0 else f"{board['main_flow']:.2f}亿"
|
||||||
for board in anomaly['flow_out']:
|
html_lines.append(f"<tr><td>{board['name']}</td><td>{pct_str}</td><td>{flow_str}</td><td>{board['leader_name'] or '-'}</td></tr>")
|
||||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
|
||||||
lines.append("</ul>")
|
|
||||||
|
|
||||||
if not (anomaly['pct_up'] or anomaly['pct_down'] or anomaly['flow_in'] or anomaly['flow_out']):
|
html_lines.append("</table>")
|
||||||
lines.append("<p>✅ 今日无明显异动</p>")
|
html_lines.append("")
|
||||||
|
|
||||||
return "\n".join(lines)
|
html_lines.append("<h3>📉 行业板块跌幅 TOP5</h3>")
|
||||||
|
html_lines.append("<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;'>")
|
||||||
|
html_lines.append("<tr style='background:#f0f0f0'><th>板块</th><th>涨跌幅</th><th>主力资金</th></tr>")
|
||||||
|
|
||||||
|
for board in industry_by_pct[-5:]:
|
||||||
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
|
flow_str = f"+{board['main_flow']:.2f}亿" if board['main_flow'] > 0 else f"{board['main_flow']:.2f}亿"
|
||||||
|
html_lines.append(f"<tr><td>{board['name']}</td><td>{pct_str}</td><td>{flow_str}</td></tr>")
|
||||||
|
|
||||||
def send_notification(subject: str, html_body: str, to_email: str = "zuitoushang@tphai.com"):
|
html_lines.append("</table>")
|
||||||
"""发送邮件通知"""
|
html_lines.append("")
|
||||||
# 使用邮件发送技能
|
|
||||||
email_script = Path(__file__).parent.parent.parent / "skills/email/scripts/send_email.py"
|
html_lines.append("<h3>💰 主力资金大幅流入 TOP10</h3>")
|
||||||
|
html_lines.append("<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;'>")
|
||||||
|
html_lines.append("<tr style='background:#f0f0f0'><th>板块</th><th>资金流入(亿)</th><th>涨跌幅</th></tr>")
|
||||||
|
|
||||||
|
inflow_boards = [b for b in industry_by_flow if b['main_flow'] > 10][:10]
|
||||||
|
for board in inflow_boards:
|
||||||
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
|
html_lines.append(f"<tr><td>{board['name']}</td><td>+{board['main_flow']:.2f}</td><td>{pct_str}</td></tr>")
|
||||||
|
|
||||||
|
html_lines.append("</table>")
|
||||||
|
html_lines.append("")
|
||||||
|
|
||||||
|
html_lines.append("<h3>💸 主力资金大幅流出 TOP10</h3>")
|
||||||
|
html_lines.append("<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;'>")
|
||||||
|
html_lines.append("<tr style='background:#f0f0f0'><th>板块</th><th>资金流出(亿)</th><th>涨跌幅</th></tr>")
|
||||||
|
|
||||||
|
outflow_boards = [b for b in industry_by_flow if b['main_flow'] < -10][:10]
|
||||||
|
for board in outflow_boards:
|
||||||
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
|
html_lines.append(f"<tr><td>{board['name']}</td><td>{board['main_flow']:.2f}</td><td>{pct_str}</td></tr>")
|
||||||
|
|
||||||
|
html_lines.append("</table>")
|
||||||
|
html_lines.append("")
|
||||||
|
html_lines.append("<hr>")
|
||||||
|
html_lines.append("<p><em>📊 详细数据请查看附件 CSV 文件</em></p>")
|
||||||
|
|
||||||
|
html_body = "\n".join(html_lines)
|
||||||
|
|
||||||
|
# 生成附件文件(CSV格式)
|
||||||
|
attachment_file = DATA_DIR / f"board_detail_{datetime.now().strftime('%Y%m%d')}.csv"
|
||||||
|
|
||||||
|
csv_lines = [
|
||||||
|
"# A股板块详细数据",
|
||||||
|
f"# 生成时间: {timestamp}",
|
||||||
|
"",
|
||||||
|
"=== 行业板块涨跌幅排行 ===",
|
||||||
|
"板块名称,涨跌幅(%),主力资金(亿),领涨股",
|
||||||
|
]
|
||||||
|
|
||||||
|
for board in industry_by_pct:
|
||||||
|
csv_lines.append(f"{board['name']},{board['pct_change']:.2f},{board['main_flow']:.2f},{board['leader_name'] or ''}")
|
||||||
|
|
||||||
|
csv_lines.append("")
|
||||||
|
csv_lines.append("=== 行业板块资金流向排行 ===")
|
||||||
|
csv_lines.append("板块名称,主力资金(亿),涨跌幅(%),领涨股")
|
||||||
|
|
||||||
|
for board in industry_by_flow:
|
||||||
|
csv_lines.append(f"{board['name']},{board['main_flow']:.2f},{board['pct_change']:.2f},{board['leader_name'] or ''}")
|
||||||
|
|
||||||
|
csv_lines.append("")
|
||||||
|
csv_lines.append("=== 概念板块涨跌幅排行 ===")
|
||||||
|
csv_lines.append("板块名称,涨跌幅(%),主力资金(亿),领涨股")
|
||||||
|
|
||||||
|
for board in concept_by_pct:
|
||||||
|
csv_lines.append(f"{board['name']},{board['pct_change']:.2f},{board['main_flow']:.2f},{board['leader_name'] or ''}")
|
||||||
|
|
||||||
|
csv_lines.append("")
|
||||||
|
csv_lines.append("=== 概念板块资金流向排行 ===")
|
||||||
|
csv_lines.append("板块名称,主力资金(亿),涨跌幅(%),领涨股")
|
||||||
|
|
||||||
|
for board in concept_by_flow:
|
||||||
|
csv_lines.append(f"{board['name']},{board['main_flow']:.2f},{board['pct_change']:.2f},{board['leader_name'] or ''}")
|
||||||
|
|
||||||
|
attachment_file.write_text("\n".join(csv_lines), encoding='utf-8')
|
||||||
|
|
||||||
|
# 发送邮件
|
||||||
|
email_script = SCRIPT_DIR.parent.parent / "skills/email/scripts/send_email.py"
|
||||||
|
|
||||||
|
subject = f"【A股板块盘后分析】{datetime.now().strftime('%Y-%m-%d')}"
|
||||||
|
|
||||||
cmd = [
|
cmd = [
|
||||||
"python3", str(email_script),
|
"python3", str(email_script),
|
||||||
@@ -254,151 +251,89 @@ def send_notification(subject: str, html_body: str, to_email: str = "zuitoushang
|
|||||||
"--to", to_email,
|
"--to", to_email,
|
||||||
"--subject", subject,
|
"--subject", subject,
|
||||||
"--body", html_body,
|
"--body", html_body,
|
||||||
"--html"
|
"--html",
|
||||||
|
"--attach", str(attachment_file)
|
||||||
]
|
]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
|
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
print(f"✅ 邮件发送成功: {to_email}")
|
print(f"✅ 报告发送成功: {to_email}")
|
||||||
|
print(f" 附件: {attachment_file}")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
print(f"❌ 邮件发送失败: {result.stderr}")
|
print(f"❌ 发送失败: {result.stderr}")
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ 邮件发送异常: {e}")
|
print(f"❌ 发送异常: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def monitor(board_types: List[str] = ["industry", "concept"],
|
def run_daily_report(to_email: str = "wlq@tphai.com", verbose: bool = False) -> bool:
|
||||||
notify: bool = True,
|
|
||||||
verbose: bool = False) -> Dict:
|
|
||||||
"""
|
"""
|
||||||
执行板块监控
|
执行盘后报告生成和发送
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
board_types: 要监控的板块类型列表
|
to_email: 收件人邮箱
|
||||||
notify: 是否发送通知(仅在发现异动时)
|
verbose: 是否显示详细日志
|
||||||
verbose: 显示详细日志
|
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
Dict: 监控结果汇总
|
bool: 是否成功
|
||||||
"""
|
"""
|
||||||
import subprocess
|
if verbose:
|
||||||
|
print(f"\n📊 A股板块盘后分析")
|
||||||
|
print("=" * 50)
|
||||||
|
print(f"收件人: {to_email}")
|
||||||
|
print(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||||
|
|
||||||
results = {
|
# 获取所有板块数据
|
||||||
'boards': {},
|
boards_data = {}
|
||||||
'anomalies': {},
|
|
||||||
'has_anomaly': False
|
|
||||||
}
|
|
||||||
|
|
||||||
for board_type in board_types:
|
for board_type in ["industry", "concept"]:
|
||||||
if verbose:
|
if verbose:
|
||||||
print(f"\n📡 获取 {board_type} 板块数据...")
|
print(f"\n📡 获取 {board_type} 板块数据...")
|
||||||
|
|
||||||
# 获取板块数据(按涨跌幅排序)
|
boards = get_board_data(board_type, limit=100)
|
||||||
boards = get_board_data(board_type, sort_by="f3", limit=100)
|
|
||||||
|
|
||||||
if boards:
|
if boards:
|
||||||
results['boards'][board_type] = boards
|
boards_data[board_type] = boards
|
||||||
|
|
||||||
# 检查异动
|
|
||||||
anomaly = check_anomaly(boards)
|
|
||||||
results['anomalies'][board_type] = anomaly
|
|
||||||
|
|
||||||
if anomaly['pct_up'] or anomaly['pct_down'] or anomaly['flow_in'] or anomaly['flow_out']:
|
|
||||||
results['has_anomaly'] = True
|
|
||||||
|
|
||||||
if verbose:
|
if verbose:
|
||||||
# 打印TOP10涨跌
|
print(f"✅ 成功获取 {len(boards)} 条数据")
|
||||||
sorted_by_pct = sorted(boards, key=lambda x: x['pct_change'], reverse=True)
|
|
||||||
print_board_summary(sorted_by_pct[:10], f"涨幅TOP10 ({board_type})")
|
|
||||||
print_board_summary(sorted_by_pct[-10:], f"跌幅TOP10 ({board_type})")
|
|
||||||
|
|
||||||
# 打印异动报告
|
|
||||||
print_anomaly_report(anomaly)
|
|
||||||
else:
|
else:
|
||||||
print(f"❌ 获取 {board_type} 数据失败")
|
print(f"❌ 获取 {board_type} 数据失败")
|
||||||
|
boards_data[board_type] = []
|
||||||
|
|
||||||
# 发送通知(仅在发现异动时)
|
# 生成并发送报告
|
||||||
if notify and results['has_anomaly']:
|
if boards_data.get('industry') or boards_data.get('concept'):
|
||||||
subject = "【板块异动警报】检测到板块异动"
|
return generate_daily_report(boards_data, to_email)
|
||||||
|
else:
|
||||||
# 合并所有异动
|
print("❌ 所有数据获取失败,无法生成报告")
|
||||||
combined_anomaly = {
|
return False
|
||||||
'pct_up': [],
|
|
||||||
'pct_down': [],
|
|
||||||
'flow_in': [],
|
|
||||||
'flow_out': [],
|
|
||||||
'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
}
|
|
||||||
|
|
||||||
for anomaly in results['anomalies'].values():
|
|
||||||
combined_anomaly['pct_up'].extend(anomaly['pct_up'])
|
|
||||||
combined_anomaly['pct_down'].extend(anomaly['pct_down'])
|
|
||||||
combined_anomaly['flow_in'].extend(anomaly['flow_in'])
|
|
||||||
combined_anomaly['flow_out'].extend(anomaly['flow_out'])
|
|
||||||
|
|
||||||
# 去重(按板块名称)
|
|
||||||
for key in ['pct_up', 'pct_down', 'flow_in', 'flow_out']:
|
|
||||||
seen = set()
|
|
||||||
unique = []
|
|
||||||
for board in combined_anomaly[key]:
|
|
||||||
if board['name'] not in seen:
|
|
||||||
seen.add(board['name'])
|
|
||||||
unique.append(board)
|
|
||||||
combined_anomaly[key] = unique
|
|
||||||
|
|
||||||
html_body = generate_html_report(combined_anomaly, "行业+概念板块")
|
|
||||||
send_notification(subject, html_body)
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""命令行入口"""
|
"""命令行入口"""
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="A股板块监控系统")
|
parser = argparse.ArgumentParser(description="A股板块盘后分析系统")
|
||||||
subparsers = parser.add_subparsers(dest="command", help="可用命令")
|
subparsers = parser.add_subparsers(dest="command", help="可用命令")
|
||||||
|
|
||||||
# 获取数据命令
|
|
||||||
get_parser = subparsers.add_parser("get", help="获取板块数据")
|
|
||||||
get_parser.add_argument("type", choices=["industry", "concept"], help="板块类型")
|
|
||||||
get_parser.add_argument("--sort", choices=["pct", "flow"], default="pct", help="排序方式")
|
|
||||||
get_parser.add_argument("--limit", type=int, default=20, help="返回数量")
|
|
||||||
|
|
||||||
# 监控命令
|
|
||||||
monitor_parser = subparsers.add_parser("monitor", help="执行监控检查")
|
|
||||||
monitor_parser.add_argument("--types", nargs="+", default=["industry", "concept"], help="板块类型")
|
|
||||||
monitor_parser.add_argument("--no-notify", action="store_true", help="不发送通知")
|
|
||||||
monitor_parser.add_argument("-v", "--verbose", action="store_true", help="显示详细日志")
|
|
||||||
|
|
||||||
# 测试命令
|
# 测试命令
|
||||||
subparsers.add_parser("test", help="测试API连接")
|
subparsers.add_parser("test", help="测试API连接")
|
||||||
|
|
||||||
|
# 获取数据命令
|
||||||
|
get_parser = subparsers.add_parser("get", help="获取板块数据")
|
||||||
|
get_parser.add_argument("type", choices=["industry", "concept"], help="板块类型")
|
||||||
|
get_parser.add_argument("--limit", type=int, default=20, help="返回数量")
|
||||||
|
|
||||||
|
# 发送报告命令
|
||||||
|
report_parser = subparsers.add_parser("report", help="生成并发送盘后报告")
|
||||||
|
report_parser.add_argument("--to", default="wlq@tphai.com", help="收件人邮箱")
|
||||||
|
report_parser.add_argument("-v", "--verbose", action="store_true", help="显示详细日志")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.command == "get":
|
if args.command == "test":
|
||||||
sort_by = "f3" if args.sort == "pct" else "f66"
|
|
||||||
boards = get_board_data(args.type, sort_by=sort_by, limit=args.limit)
|
|
||||||
|
|
||||||
if boards:
|
|
||||||
print(f"\n📊 {args.type} 板块数据 ({len(boards)} 条)")
|
|
||||||
print("=" * 50)
|
|
||||||
for board in boards:
|
|
||||||
print(format_board_line(board))
|
|
||||||
else:
|
|
||||||
print("❌ 获取数据失败")
|
|
||||||
|
|
||||||
elif args.command == "monitor":
|
|
||||||
monitor(
|
|
||||||
board_types=args.types,
|
|
||||||
notify=not args.no_notify,
|
|
||||||
verbose=args.verbose
|
|
||||||
)
|
|
||||||
|
|
||||||
elif args.command == "test":
|
|
||||||
print("\n🧪 测试东方财富API连接...")
|
print("\n🧪 测试东方财富API连接...")
|
||||||
for board_type in ["industry", "concept"]:
|
for board_type in ["industry", "concept"]:
|
||||||
print(f"\n测试 {board_type} 板块...")
|
print(f"\n测试 {board_type} 板块...")
|
||||||
@@ -406,10 +341,26 @@ def main():
|
|||||||
if boards:
|
if boards:
|
||||||
print(f"✅ 成功获取 {len(boards)} 条数据")
|
print(f"✅ 成功获取 {len(boards)} 条数据")
|
||||||
for board in boards[:3]:
|
for board in boards[:3]:
|
||||||
print(f" - {board['name']}: {board['pct_change']:+.2f}%")
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
|
print(f" - {board['name']}: {pct_str}")
|
||||||
else:
|
else:
|
||||||
print(f"❌ {board_type} 测试失败")
|
print(f"❌ {board_type} 测试失败")
|
||||||
|
|
||||||
|
elif args.command == "get":
|
||||||
|
boards = get_board_data(args.type, limit=args.limit)
|
||||||
|
if boards:
|
||||||
|
print(f"\n📊 {args.type} 板块数据 ({len(boards)} 条)")
|
||||||
|
print("=" * 50)
|
||||||
|
for board in boards:
|
||||||
|
pct_str = f"+{board['pct_change']:.2f}%" if board['pct_change'] > 0 else f"{board['pct_change']:.2f}%"
|
||||||
|
flow_str = f"+{board['main_flow']:.2f}亿" if board['main_flow'] > 0 else f"{board['main_flow']:.2f}亿"
|
||||||
|
print(f"{board['name']}: {pct_str}, 主力{flow_str}")
|
||||||
|
else:
|
||||||
|
print("❌ 获取数据失败")
|
||||||
|
|
||||||
|
elif args.command == "report":
|
||||||
|
run_daily_report(to_email=args.to, verbose=args.verbose)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
|
||||||
|
|||||||
414
data/board_detail_20260410.csv
Normal file
414
data/board_detail_20260410.csv
Normal file
@@ -0,0 +1,414 @@
|
|||||||
|
# A股板块详细数据
|
||||||
|
# 生成时间: 2026-04-10 17:19:21
|
||||||
|
|
||||||
|
=== 行业板块涨跌幅排行 ===
|
||||||
|
板块名称,涨跌幅(%),主力资金(亿),领涨股
|
||||||
|
蓄电池及其他电池,0.06,6.17,9
|
||||||
|
玻纤制造,0.05,8.50,8
|
||||||
|
金融信息服务,0.05,1.26,3
|
||||||
|
期货,0.04,0.98,4
|
||||||
|
锂电池,0.04,26.46,27
|
||||||
|
逆变器,0.04,13.09,9
|
||||||
|
电池,0.04,46.91,94
|
||||||
|
电池化学品,0.04,11.28,42
|
||||||
|
品牌消费电子,0.04,1.42,10
|
||||||
|
锂电专用设备,0.03,3.06,15
|
||||||
|
玻璃玻纤,0.03,9.20,17
|
||||||
|
镍,0.03,3.97,1
|
||||||
|
锂,0.03,9.49,7
|
||||||
|
能源金属,0.03,13.95,10
|
||||||
|
其他数字媒体,0.03,0.33,2
|
||||||
|
其他纺织,0.03,1.32,11
|
||||||
|
印染,0.03,-0.46,4
|
||||||
|
证券Ⅲ,0.03,51.05,49
|
||||||
|
证券Ⅱ,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,52.66,78
|
||||||
|
半导体设备,0.02,-3.02,16
|
||||||
|
其他电子Ⅲ,0.02,12.39,25
|
||||||
|
其他电子Ⅱ,0.02,12.39,25
|
||||||
|
多业态零售,0.02,1.03,14
|
||||||
|
商用载货车,0.02,2.06,8
|
||||||
|
火电设备,0.02,0.04,3
|
||||||
|
其他家居用品,0.02,0.18,20
|
||||||
|
机器人,0.02,1.61,20
|
||||||
|
成品家居,0.02,0.58,16
|
||||||
|
数字芯片设计,0.02,38.64,41
|
||||||
|
玻璃制造,0.02,0.70,9
|
||||||
|
原材料供应链服务,0.02,0.44,11
|
||||||
|
纺织服装设备,0.02,1.74,11
|
||||||
|
冰洗,0.02,0.28,7
|
||||||
|
其他电源设备Ⅱ,0.02,8.80,25
|
||||||
|
多元金融,0.02,1.44,24
|
||||||
|
零食,0.02,0.63,8
|
||||||
|
其他电源设备Ⅲ,0.02,6.45,20
|
||||||
|
大众出版,0.02,0.10,15
|
||||||
|
资产管理,0.02,-0.06,4
|
||||||
|
仓储物流,0.02,0.28,5
|
||||||
|
电力设备,0.02,60.75,330
|
||||||
|
纺织制造,0.02,1.91,25
|
||||||
|
综合电力设备商,0.02,2.31,2
|
||||||
|
金属包装,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.12,1
|
||||||
|
氨纶,0.02,-0.02,1
|
||||||
|
培训教育,0.02,0.74,10
|
||||||
|
光伏辅材,0.02,2.57,16
|
||||||
|
铁矿石,0.02,0.81,4
|
||||||
|
燃料电池,0.02,-0.06,1
|
||||||
|
物流,0.02,1.48,42
|
||||||
|
信托,0.02,0.31,3
|
||||||
|
家纺,0.02,0.14,6
|
||||||
|
跨境物流,0.02,0.48,12
|
||||||
|
商业物业经营,0.02,0.57,15
|
||||||
|
会展服务,0.02,-0.03,3
|
||||||
|
教育,0.02,1.18,15
|
||||||
|
光伏主材,0.02,-0.19,3
|
||||||
|
底盘与发动机系统,0.02,8.49,97
|
||||||
|
旅游零售Ⅲ,0.02,0.54,2
|
||||||
|
旅游零售Ⅱ,0.02,0.54,2
|
||||||
|
游戏Ⅲ,0.02,7.26,22
|
||||||
|
游戏Ⅱ,0.02,7.26,22
|
||||||
|
其他计算机设备,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,0.02,9
|
||||||
|
橡胶,0.01,-0.36,18
|
||||||
|
厨房电器,0.01,0.03,4
|
||||||
|
生物制品,0.01,0.05,48
|
||||||
|
非金属材料Ⅲ,0.01,1.54,9
|
||||||
|
非金属材料Ⅱ,0.01,1.54,9
|
||||||
|
光伏设备,0.01,12.83,56
|
||||||
|
乘用车,0.01,9.18,9
|
||||||
|
计算机设备,0.01,8.96,75
|
||||||
|
造纸,0.01,2.24,20
|
||||||
|
机床工具,0.01,0.87,19
|
||||||
|
家居用品,0.01,0.85,66
|
||||||
|
装修装饰Ⅲ,0.01,0.25,16
|
||||||
|
装修装饰Ⅱ,0.01,0.25,16
|
||||||
|
汽车零部件,0.01,6.35,222
|
||||||
|
端到端供应链服务,0.01,-0.00,7
|
||||||
|
半导体,0.01,21.53,129
|
||||||
|
一般零售,0.01,2.13,53
|
||||||
|
鞋帽及其他,0.01,0.24,10
|
||||||
|
分立器件,0.01,-1.85,13
|
||||||
|
商用车,0.01,1.72,11
|
||||||
|
汽车,0.01,16.41,267
|
||||||
|
|
||||||
|
=== 行业板块资金流向排行 ===
|
||||||
|
板块名称,主力资金(亿),涨跌幅(%),领涨股
|
||||||
|
电力设备,60.75,0.02,330
|
||||||
|
非银金融,52.66,0.02,78
|
||||||
|
证券Ⅲ,51.05,0.03,49
|
||||||
|
证券Ⅱ,51.05,0.03,49
|
||||||
|
电池,46.91,0.04,94
|
||||||
|
数字芯片设计,38.64,0.02,41
|
||||||
|
锂电池,26.46,0.04,27
|
||||||
|
半导体,21.53,0.01,129
|
||||||
|
汽车,16.41,0.01,267
|
||||||
|
能源金属,13.95,0.03,10
|
||||||
|
逆变器,13.09,0.04,9
|
||||||
|
光伏设备,12.83,0.01,56
|
||||||
|
其他电子Ⅲ,12.39,0.02,25
|
||||||
|
其他电子Ⅱ,12.39,0.02,25
|
||||||
|
电池化学品,11.28,0.04,42
|
||||||
|
锂,9.49,0.03,7
|
||||||
|
玻璃玻纤,9.20,0.03,17
|
||||||
|
乘用车,9.18,0.01,9
|
||||||
|
计算机设备,8.96,0.01,75
|
||||||
|
其他电源设备Ⅱ,8.80,0.02,25
|
||||||
|
玻纤制造,8.50,0.05,8
|
||||||
|
底盘与发动机系统,8.49,0.02,97
|
||||||
|
游戏Ⅲ,7.26,0.02,22
|
||||||
|
游戏Ⅱ,7.26,0.02,22
|
||||||
|
电动乘用车,6.96,0.02,3
|
||||||
|
其他电源设备Ⅲ,6.45,0.02,20
|
||||||
|
汽车零部件,6.35,0.01,222
|
||||||
|
其他计算机设备,6.34,0.02,53
|
||||||
|
蓄电池及其他电池,6.17,0.06,9
|
||||||
|
镍,3.97,0.03,1
|
||||||
|
原料药,3.23,0.02,36
|
||||||
|
锂电专用设备,3.06,0.03,15
|
||||||
|
光伏辅材,2.57,0.02,16
|
||||||
|
综合电力设备商,2.31,0.02,2
|
||||||
|
造纸,2.24,0.01,20
|
||||||
|
一般零售,2.13,0.01,53
|
||||||
|
商用载货车,2.06,0.02,8
|
||||||
|
纺织制造,1.91,0.02,25
|
||||||
|
特种纸,1.89,0.02,11
|
||||||
|
纺织服装设备,1.74,0.02,11
|
||||||
|
商用车,1.72,0.01,11
|
||||||
|
机器人,1.61,0.02,20
|
||||||
|
非金属材料Ⅲ,1.54,0.01,9
|
||||||
|
非金属材料Ⅱ,1.54,0.01,9
|
||||||
|
物流,1.48,0.02,42
|
||||||
|
多元金融,1.44,0.02,24
|
||||||
|
品牌消费电子,1.42,0.04,10
|
||||||
|
其他纺织,1.32,0.03,11
|
||||||
|
金融信息服务,1.26,0.05,3
|
||||||
|
教育,1.18,0.02,15
|
||||||
|
多业态零售,1.03,0.02,14
|
||||||
|
期货,0.98,0.04,4
|
||||||
|
机床工具,0.87,0.01,19
|
||||||
|
家居用品,0.85,0.01,66
|
||||||
|
铁矿石,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.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.33,0.03,2
|
||||||
|
信托,0.31,0.02,3
|
||||||
|
仓储物流,0.28,0.02,5
|
||||||
|
冰洗,0.28,0.02,7
|
||||||
|
装修装饰Ⅲ,0.25,0.01,16
|
||||||
|
装修装饰Ⅱ,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.12,0.02,1
|
||||||
|
大众出版,0.10,0.02,15
|
||||||
|
其他橡胶制品,0.10,0.02,14
|
||||||
|
生物制品,0.05,0.01,48
|
||||||
|
火电设备,0.04,0.02,3
|
||||||
|
厨房电器,0.03,0.01,4
|
||||||
|
白色家电,0.02,0.01,9
|
||||||
|
端到端供应链服务,-0.00,0.01,7
|
||||||
|
氨纶,-0.02,0.02,1
|
||||||
|
会展服务,-0.03,0.02,3
|
||||||
|
资产管理,-0.06,0.02,4
|
||||||
|
燃料电池,-0.06,0.02,1
|
||||||
|
耐火材料,-0.13,0.02,8
|
||||||
|
光伏主材,-0.19,0.02,3
|
||||||
|
油气及炼化工程,-0.31,0.03,5
|
||||||
|
橡胶,-0.36,0.01,18
|
||||||
|
其他化学纤维,-0.38,0.02,6
|
||||||
|
印染,-0.46,0.03,4
|
||||||
|
分立器件,-1.85,0.01,13
|
||||||
|
半导体设备,-3.02,0.02,16
|
||||||
|
|
||||||
|
=== 概念板块涨跌幅排行 ===
|
||||||
|
板块名称,涨跌幅(%),主力资金(亿),领涨股
|
||||||
|
昨日连板,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,2.94,9
|
||||||
|
数字哨兵,0.02,-1.53,10
|
||||||
|
燃料电池概念,0.02,18.94,112
|
||||||
|
移动支付,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,-40.93,22
|
||||||
|
第三代半导体,0.01,-21.82,71
|
||||||
|
新能源车,0.01,106.69,539
|
||||||
|
深证100R,0.01,90.28,72
|
||||||
|
化债(AMC)概念,0.01,7.92,49
|
||||||
|
减肥药,0.01,3.65,30
|
||||||
|
周期股,0.01,60.08,68
|
||||||
|
人形机器人,0.01,8.77,189
|
||||||
|
屏下摄像,0.01,-1.27,9
|
||||||
|
茅指数,0.01,62.71,34
|
||||||
|
智能家居,0.01,35.06,134
|
||||||
|
百元股,0.01,35.52,140
|
||||||
|
消费电子概念,0.01,40.53,140
|
||||||
|
无线耳机,0.01,34.12,65
|
||||||
|
2025三季报扭亏,0.01,0.31,9
|
||||||
|
汽车整车,0.01,11.00,23
|
||||||
|
熔盐储能,0.01,0.15,9
|
||||||
|
特斯拉概念,0.01,7.24,167
|
||||||
|
智能穿戴,0.01,41.68,100
|
||||||
|
昨日涨停,0.01,-64.20,31
|
||||||
|
快递概念,0.01,2.67,35
|
||||||
|
AIPC,0.01,14.58,37
|
||||||
|
电子竞技,0.01,5.27,27
|
||||||
|
高压快充,0.01,4.58,44
|
||||||
|
石墨烯,0.01,2.43,50
|
||||||
|
REITs概念,0.01,2.76,17
|
||||||
|
磁悬浮概念,0.01,13.20,25
|
||||||
|
电子烟,0.01,22.47,35
|
||||||
|
存储芯片,0.01,31.68,69
|
||||||
|
空气能热泵,0.01,1.79,30
|
||||||
|
基金重仓,0.01,125.63,349
|
||||||
|
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
|
||||||
|
2025中报预增,0.01,46.18,332
|
||||||
|
百度概念,0.01,-7.02,110
|
||||||
|
超级电容,0.01,-11.24,25
|
||||||
|
无人驾驶,0.01,26.46,211
|
||||||
|
虚拟电厂,0.01,1.27,52
|
||||||
|
|
||||||
|
=== 概念板块资金流向排行 ===
|
||||||
|
板块名称,主力资金(亿),涨跌幅(%),领涨股
|
||||||
|
基金重仓,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
|
||||||
|
Reference in New Issue
Block a user