feat: 改为盘后报告模式 - 正文分析总结+附件详细数据
This commit is contained in:
76
README.md
76
README.md
@@ -1,18 +1,32 @@
|
||||
# A股板块监控系统
|
||||
# A股板块盘后分析系统
|
||||
|
||||
自动获取东方财富板块数据,监控异动并发送邮件通知。
|
||||
自动获取东方财富板块数据,生成盘后分析报告并发送邮件。
|
||||
|
||||
## 功能特点
|
||||
|
||||
- 获取行业板块涨跌幅排行
|
||||
- 获取概念板块涨跌幅排行
|
||||
- 监控主力资金流入/流出
|
||||
- 检测板块异动(涨跌幅≥3%、资金流入≥10亿)
|
||||
- 自动发送HTML格式邮件通知
|
||||
- 每个交易日17:00自动执行
|
||||
- 获取行业板块和概念板块完整数据
|
||||
- 生成分析总结邮件正文
|
||||
- 详细数据CSV文件作为附件
|
||||
- 发送到指定邮箱
|
||||
|
||||
## 数据来源
|
||||
## 邮件内容
|
||||
|
||||
东方财富HTTP API (http://push2.eastmoney.com)
|
||||
### 正文(分析总结)
|
||||
|
||||
- 市场整体趋势判断
|
||||
- 热门概念板块 TOP5
|
||||
- 行业涨幅/跌幅 TOP5
|
||||
- 主力资金大幅流入 TOP10
|
||||
- 主力资金大幅流出 TOP10
|
||||
|
||||
### 附件(详细数据)
|
||||
|
||||
CSV文件包含:
|
||||
- 行业板块涨跌幅排行(完整)
|
||||
- 行业板块资金流向排行(完整)
|
||||
- 概念板块涨跌幅排行(完整)
|
||||
- 概念板块资金流向排行(完整)
|
||||
|
||||
## 使用方法
|
||||
|
||||
@@ -25,52 +39,32 @@ 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
|
||||
# 添加到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()` 函数中修改。
|
||||
东方财富HTTP API (http://push2.eastmoney.com)
|
||||
|
||||
## 版本历史
|
||||
|
||||
- v1.1.0 (2026-04-10) - 改为盘后报告模式,正文分析+附件详细数据
|
||||
- v1.0.0 (2026-04-10) - 初始版本
|
||||
439
board_monitor.py
439
board_monitor.py
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
A股板块监控系统
|
||||
获取东方财富板块数据,监控异动,发送通知
|
||||
A股板块盘后分析系统
|
||||
获取东方财富板块数据,生成分析报告,发送邮件通知
|
||||
"""
|
||||
|
||||
import urllib.request
|
||||
@@ -33,23 +33,15 @@ BOARD_TYPES = {
|
||||
|
||||
# 数据字段
|
||||
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)
|
||||
sort_by: 排序字段 (f3=涨跌幅, f66=主力资金)
|
||||
sort_by: 排序字段 (f3=涨跌幅, f62=主力资金)
|
||||
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,
|
||||
'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_lgt': item.get('f66', 0) / 1e8 if item.get('f66') else 0, # 陆股通流入
|
||||
'leader_code': item.get('f84', ''),
|
||||
'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:
|
||||
print(f"❌ 网络请求失败: {e}")
|
||||
return None
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"❌ JSON解析失败: {e}")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"❌ 获取数据异常: {e}")
|
||||
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: 板块数据列表
|
||||
pct_threshold: 涨跌幅阈值 (%)
|
||||
flow_threshold: 资金流入阈值 (亿元)
|
||||
boards_data: 板块数据字典 {'industry': [], 'concept': []}
|
||||
to_email: 收件人邮箱
|
||||
|
||||
返回:
|
||||
Dict: 异动信息,包含涨跌异动和资金异动
|
||||
bool: 是否发送成功
|
||||
"""
|
||||
anomaly = {
|
||||
'pct_up': [], # 涨幅异动
|
||||
'pct_down': [], # 跌幅异动
|
||||
'flow_in': [], # 资金流入异动
|
||||
'flow_out': [], # 资金流出异动
|
||||
'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
all_industry = boards_data.get('industry', [])
|
||||
all_concept = boards_data.get('concept', [])
|
||||
|
||||
for board in boards:
|
||||
# 涨跌幅异动
|
||||
if board['pct_change'] >= pct_threshold:
|
||||
anomaly['pct_up'].append(board)
|
||||
elif board['pct_change'] <= -pct_threshold:
|
||||
anomaly['pct_down'].append(board)
|
||||
|
||||
# 资金流向异动
|
||||
if board['main_flow'] >= flow_threshold:
|
||||
anomaly['flow_in'].append(board)
|
||||
elif board['main_flow'] <= -flow_threshold:
|
||||
anomaly['flow_out'].append(board)
|
||||
if not all_industry and not all_concept:
|
||||
print("❌ 无数据,无法生成报告")
|
||||
return False
|
||||
|
||||
return anomaly
|
||||
|
||||
|
||||
def format_board_line(board: Dict) -> str:
|
||||
"""格式化单行板块信息"""
|
||||
pct = board['pct_change']
|
||||
flow = board['main_flow']
|
||||
leader = board['leader_name'] or board['leader_code']
|
||||
# 分析总结
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
pct_str = f"+{pct:.2f}%" if pct > 0 else f"{pct:.2f}%"
|
||||
flow_str = f"+{flow:.2f}亿" if flow > 0 else f"{flow:.2f}亿"
|
||||
leader_str = f"领涨: {leader}" if leader else ""
|
||||
# 计算市场趋势
|
||||
avg_pct = 0
|
||||
if all_industry:
|
||||
avg_pct = sum(b['pct_change'] for b in all_industry) / len(all_industry)
|
||||
|
||||
return f"{board['name']}: {pct_str}, 主力{flow_str} {leader_str}"
|
||||
|
||||
|
||||
def print_board_summary(boards: List[Dict], title: str, limit: int = 10):
|
||||
"""打印板块摘要"""
|
||||
if not boards:
|
||||
return
|
||||
market_trend = '平稳'
|
||||
if avg_pct > 0.5:
|
||||
market_trend = '上涨'
|
||||
elif avg_pct < -0.5:
|
||||
market_trend = '下跌'
|
||||
|
||||
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)
|
||||
# 排序数据
|
||||
industry_by_pct = sorted(all_industry, key=lambda x: x['pct_change'], reverse=True)
|
||||
industry_by_flow = sorted(all_industry, key=lambda x: x['main_flow'], reverse=True)
|
||||
concept_by_pct = sorted(all_concept, key=lambda x: x['pct_change'], reverse=True)
|
||||
concept_by_flow = sorted(all_concept, key=lambda x: x['main_flow'], reverse=True)
|
||||
|
||||
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>",
|
||||
# 生成HTML正文(分析总结)
|
||||
html_lines = [
|
||||
"<h2>📊 A股板块盘后分析报告</h2>",
|
||||
f"<p>报告时间: {timestamp}</p>",
|
||||
f"<p>市场整体: <strong>{market_trend}</strong> (行业平均涨跌 {avg_pct:+.2f}%)</p>",
|
||||
"",
|
||||
"<hr>",
|
||||
"",
|
||||
"<h3>🔥 今日热门概念板块 TOP5</h3>",
|
||||
"<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;'>",
|
||||
"<tr style='background:#f0f0f0'><th>板块</th><th>涨跌幅</th><th>主力资金</th></tr>",
|
||||
]
|
||||
|
||||
if anomaly['pct_up']:
|
||||
lines.append("<h3>🔴 涨幅异动 (涨幅 ≥ 3%)</h3>")
|
||||
lines.append("<ul>")
|
||||
for board in anomaly['pct_up']:
|
||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
||||
lines.append("</ul>")
|
||||
for board in concept_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>")
|
||||
|
||||
if anomaly['pct_down']:
|
||||
lines.append("<h3>🟢 跌幅异动 (跌幅 ≥ 3%)</h3>")
|
||||
lines.append("<ul>")
|
||||
for board in anomaly['pct_down']:
|
||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
||||
lines.append("</ul>")
|
||||
html_lines.append("</table>")
|
||||
html_lines.append("")
|
||||
|
||||
if anomaly['flow_in']:
|
||||
lines.append("<h3>💰 资金大幅流入 (≥ 10亿)</h3>")
|
||||
lines.append("<ul>")
|
||||
for board in anomaly['flow_in']:
|
||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
||||
lines.append("</ul>")
|
||||
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><th>领涨股</th></tr>")
|
||||
|
||||
if anomaly['flow_out']:
|
||||
lines.append("<h3>💸 资金大幅流出 (≥ 10亿)</h3>")
|
||||
lines.append("<ul>")
|
||||
for board in anomaly['flow_out']:
|
||||
lines.append(f"<li>{format_board_line(board)}</li>")
|
||||
lines.append("</ul>")
|
||||
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><td>{board['leader_name'] or '-'}</td></tr>")
|
||||
|
||||
if not (anomaly['pct_up'] or anomaly['pct_down'] or anomaly['flow_in'] or anomaly['flow_out']):
|
||||
lines.append("<p>✅ 今日无明显异动</p>")
|
||||
html_lines.append("</table>")
|
||||
html_lines.append("")
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def send_notification(subject: str, html_body: str, to_email: str = "zuitoushang@tphai.com"):
|
||||
"""发送邮件通知"""
|
||||
# 使用邮件发送技能
|
||||
email_script = Path(__file__).parent.parent.parent / "skills/email/scripts/send_email.py"
|
||||
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>")
|
||||
|
||||
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>")
|
||||
|
||||
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 = [
|
||||
"python3", str(email_script),
|
||||
@@ -254,151 +251,89 @@ def send_notification(subject: str, html_body: str, to_email: str = "zuitoushang
|
||||
"--to", to_email,
|
||||
"--subject", subject,
|
||||
"--body", html_body,
|
||||
"--html"
|
||||
"--html",
|
||||
"--attach", str(attachment_file)
|
||||
]
|
||||
|
||||
try:
|
||||
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
|
||||
if result.returncode == 0:
|
||||
print(f"✅ 邮件发送成功: {to_email}")
|
||||
print(f"✅ 报告发送成功: {to_email}")
|
||||
print(f" 附件: {attachment_file}")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ 邮件发送失败: {result.stderr}")
|
||||
print(f"❌ 发送失败: {result.stderr}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ 邮件发送异常: {e}")
|
||||
print(f"❌ 发送异常: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def monitor(board_types: List[str] = ["industry", "concept"],
|
||||
notify: bool = True,
|
||||
verbose: bool = False) -> Dict:
|
||||
def run_daily_report(to_email: str = "wlq@tphai.com", verbose: bool = False) -> bool:
|
||||
"""
|
||||
执行板块监控
|
||||
执行盘后报告生成和发送
|
||||
|
||||
参数:
|
||||
board_types: 要监控的板块类型列表
|
||||
notify: 是否发送通知(仅在发现异动时)
|
||||
verbose: 显示详细日志
|
||||
to_email: 收件人邮箱
|
||||
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': {},
|
||||
'anomalies': {},
|
||||
'has_anomaly': False
|
||||
}
|
||||
# 获取所有板块数据
|
||||
boards_data = {}
|
||||
|
||||
for board_type in board_types:
|
||||
for board_type in ["industry", "concept"]:
|
||||
if verbose:
|
||||
print(f"\n📡 获取 {board_type} 板块数据...")
|
||||
|
||||
# 获取板块数据(按涨跌幅排序)
|
||||
boards = get_board_data(board_type, sort_by="f3", limit=100)
|
||||
boards = get_board_data(board_type, limit=100)
|
||||
|
||||
if boards:
|
||||
results['boards'][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
|
||||
|
||||
boards_data[board_type] = boards
|
||||
if verbose:
|
||||
# 打印TOP10涨跌
|
||||
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)
|
||||
print(f"✅ 成功获取 {len(boards)} 条数据")
|
||||
else:
|
||||
print(f"❌ 获取 {board_type} 数据失败")
|
||||
boards_data[board_type] = []
|
||||
|
||||
# 发送通知(仅在发现异动时)
|
||||
if notify and results['has_anomaly']:
|
||||
subject = "【板块异动警报】检测到板块异动"
|
||||
|
||||
# 合并所有异动
|
||||
combined_anomaly = {
|
||||
'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
|
||||
# 生成并发送报告
|
||||
if boards_data.get('industry') or boards_data.get('concept'):
|
||||
return generate_daily_report(boards_data, to_email)
|
||||
else:
|
||||
print("❌ 所有数据获取失败,无法生成报告")
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""命令行入口"""
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="A股板块监控系统")
|
||||
parser = argparse.ArgumentParser(description="A股板块盘后分析系统")
|
||||
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连接")
|
||||
|
||||
# 获取数据命令
|
||||
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()
|
||||
|
||||
if args.command == "get":
|
||||
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":
|
||||
if args.command == "test":
|
||||
print("\n🧪 测试东方财富API连接...")
|
||||
for board_type in ["industry", "concept"]:
|
||||
print(f"\n测试 {board_type} 板块...")
|
||||
@@ -406,10 +341,26 @@ def main():
|
||||
if boards:
|
||||
print(f"✅ 成功获取 {len(boards)} 条数据")
|
||||
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:
|
||||
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:
|
||||
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