a-share-daily-report-publish

Other

A股每日复盘报告生成器。自动采集通达信+同花顺问财数据,生成含涨停复盘、题材分组、连板梯队、资金流向等25模块的HTML报告。触发词:'生成A股日报'、'A股复盘'、'今日复盘'

Install

openclaw skills install a-share-daily-report-publish

A股每日复盘报告 v6

前置依赖

安装本 Skill 前需确保以下工具可用:

  1. 通达信 MCP 连接器 (tdx-connector):提供 tdx_quotes(实时行情)和 tdx_screener(条件选股)工具
  2. 同花顺问财 Skill (iwencai):提供自然语言金融数据查询,需配置 API Key
  3. Python 3.11+:运行 generate.py 生成 HTML 报告

⚠️ 以上依赖缺一不可。通达信 MCP 用于行情/涨停/炸板/连板数据,问财用于板块/资金流/融资融券数据。

三大原则

  1. 2轮并行取数:第1轮通达信MCP全并行 → 第2轮问财全并行 → 运行脚本生成
  2. 数据源优先级:通达信MCP > 同花顺问财 > 东方财富妙想
  3. 人气榜优先级:同花顺问财 > 东方财富妙想
  4. 用 generate.py 生成:写JSON → 运行脚本 → 出报告

A股配色

  • 涨=红(#f85149) 跌=绿(#3fb950) 背景=深色(#0b0e11/#1a1e24)

执行流程

Step 1:第1轮并行(通达信MCP,11个调用一次性全发)

#工具参数目的
1tdx_quotescode="000001" setcode="1" hasCalcInfo="1"上证行情+涨跌家数+成交额
2tdx_quotescode="399001" setcode="0" hasCalcInfo="1"深证行情+涨跌家数+成交额
3tdx_quotescode="399006" setcode="0" hasCalcInfo="1"创业板行情
4tdx_quotescode="000688" setcode="1" hasCalcInfo="1"科创50行情
5tdx_screenermessage="涨停" rang="AG" pageSize="200"涨停股+涨停原因+封成比+连板天数
6tdx_screenermessage="炸板股" rang="AG" pageSize="200"炸板股列表
7tdx_screenermessage="跌停" rang="AG" pageSize="50"跌停股列表
8tdx_screenermessage="2连板" rang="AG" pageSize="50"2板详情
9tdx_screenermessage="3连板" rang="AG" pageSize="20"3板详情
10tdx_screenermessage="4连板" rang="AG" pageSize="10"4板详情
11tdx_screenermessage="5连板及以上" rang="AG" pageSize="10"5板+详情

⚠️ 以上11个调用互相独立,必须同一轮全部并行发出,禁止逐个串行!

首板数计算:涨停总数 - 2连板数 - 3连板数 - 4连板数 - 5连板及以上数

Step 2:第2轮并行(问财,12个调用一次性全发)

#工具查询内容目的
1aiwencai"今日A股同花顺二级行业涨幅前5的板块名称涨跌幅主力净流入"行业涨幅榜Top5(模块10)
1biwencai"今日A股同花顺二级行业跌幅最大的5个板块名称涨跌幅主力净流入"行业跌幅榜Top5(模块10)
2iwencai"今日A股成交额排名前10的股票代码名称涨跌幅成交额主力净流入换手率最新价"成交额排行(模块16)
3iwencai"今日A股人气排名前10的股票代码名称涨跌幅换手率量比总市值"人气龙头(模块4)
4iwencai"今日A股主力净流入前5和主力净流出前5的股票名称净流入额"资金风向(模块18)
5iwencai"今日A股跌幅前5的股票代码名称跌幅最新价主力净流出"跌幅榜(模块17)
6iwencai"今日A股同花顺二级行业主力净流入前5的板块名称涨跌幅主力净流入"行业净流入Top5
7iwencai"今日A股同花顺二级行业主力净流出前5的板块名称涨跌幅主力净流入"行业净流出Top5
8iwencai"今日A股概念板块主力净流入前5的板块名称涨跌幅主力净流入"概念净流入Top5
9iwencai"今日A股概念板块主力净流出前5的板块名称涨跌幅主力净流入"概念净流出Top5
10iwencai"今日A股地域板块主力净流入前5的板块名称涨跌幅主力净流入"地域净流入Top5
11iwencai"今日A股地域板块主力净流出前5的板块名称涨跌幅主力净流入"地域净流出Top5
12iwencai"沪深两市近5日融资余额融券余额融资融券余额日期"融资融券(模块21)

⚠️ 以上12个调用互相独立,必须同一轮全部并行发出! ⚠️ 问财用"地域"而非"地区"查询地域板块数据。 ⚠️ 行业查询必须用"同花顺二级行业"而非"行业板块",否则会返回二级+三级行业混合数据,与同花顺APP不一致。 ⚠️ 板块涨跌榜需拆成涨幅/跌幅两个独立查询,合并查询问财不支持。

融资融券数据

已合并至第2轮问财并行查询(#12),无需单独查询。取最新一日的数据填入 margin 字段,与前日对比计算变化。

涨跌家数修正(重要!)

⚠️ tdx_quotesTotalBuyv/TotalSellv/PreVolInStock 字段只统计沪深主板+中小板,不含北交所等,数量偏少约200-300只。

修正方案:在第1轮取数后,用 tdx_screener 查询"全部A股"统计涨跌家数,或者用通达信APP的全市场数据直接填入 total_adv/total_dec/total_flat 字段。

"advance_decline": {
  "sh_adv": 0, "sh_dec": 0, "sh_flat": 0,
  "sz_adv": 0, "sz_dec": 0, "sz_flat": 0,
  "total_adv": 0, "total_dec": 0, "total_flat": 0
}
  • sh_*/sz_*:来自 tdx_quotes(分市场明细展示用)
  • total_*:来自通达信APP全市场数据或问财查询(报告主数据用)
  • generate.py 会优先用 total_*,fallback 到 sh+sz 合计

Step 3:整理数据写入 report_data.json

将所有取到的数据整理为以下JSON格式,写入当前工作目录的 report_data.json

{
  "date": "YYYY-MM-DD",
  "weekday": "周X",
  "time_label": "收盘复盘",
  "time_cutoff": "15:00",
  "market_tag": "📈 深创领涨 沪指微调",
  "market_summary": "2654涨2505跌",
  "indices": {
    "sh": {"price": 0, "chg": 0},
    "sz": {"price": 0, "chg": 0},
    "cy": {"price": 0, "chg": 0},
    "kc": {"price": 0, "chg": 0}
  },
  "advance_decline": {
    "sh_adv": 0, "sh_dec": 0, "sh_flat": 0,
    "sz_adv": 0, "sz_dec": 0, "sz_flat": 0,
    "total_adv": 0, "total_dec": 0, "total_flat": 0
  },
  "total_amount": 0,
  "amount_change": "▲较昨日放量",
  "zt_total": 0,
  "fst_zt": 0,
  "st_zt": 0,
  "st_zt_detail": "ST X只 + *ST Y只",
  "ts_zt": 0,
  "zb_total": 0,
  "dt_total": 0,
  "st_dt": 0,
  "nonst_dt": 0,
  "seal_rate": 0,
  "cy_zt": 0,
  "kc_zt": 0,
  "lianban": {"1": 0, "2": 0, "3": 0, "4": 0, "5": 0},
  "lianban_detail": {
    "2": [{"name": "", "board_type": "", "reason": "", "concepts": ""}],
    "3": [], "4": [], "5": []
  },
  "zt_stocks": [{"code": "", "name": "", "chg": 0, "reason": "", "concepts": "", "board_type": "", "first_time": "", "seal_amount": 0, "seal_ratio": 0, "open_times": 0, "lianban_days": 0, "lianban_label": ""}],
  "zb_stocks": [{"code": "", "name": "", "chg": 0, "reason": "", "concepts": "", "open_times": 0}],
  "dt_stocks": [{"code": "", "name": "", "chg": 0, "is_st": false, "reason": "", "concepts": "", "board_type": "", "lianban_days": 0}],
  "sector_up": [{"name": "", "chg": 0, "flow": 0}],
  "sector_down": [{"name": "", "chg": 0, "flow": 0}],
  "renqi_top": [{"code": "", "name": "", "price": 0, "chg": 0, "turnover_rate": 0, "volume_ratio": 0, "market_cap": "", "tags": ""}],
  "turnover_top": [{"code": "", "name": "", "price": 0, "chg": 0, "amount": 0, "turnover_rate": 0, "flow": 0}],
  "fund_in": [{"name": "", "flow": 0}],
  "fund_out": [{"name": "", "flow": 0}],
  "decline_top": [{"code": "", "name": "", "chg": 0, "price": 0, "flow": 0, "risk": ""}],
  "margin": {
    "rz_balance": "", "rz_change": "",
    "rq_balance": "", "rq_change": "",
    "total": "", "total_change": "",
    "date": ""
  },
  "sector_flow": {
    "industry_in": [{"name": "", "flow": 0}],
    "industry_out": [{"name": "", "flow": 0}],
    "concept_in": [{"name": "", "flow": 0}],
    "concept_out": [{"name": "", "flow": 0}],
    "region_in": [{"name": "", "flow": 0}],
    "region_out": [{"name": "", "flow": 0}]
  },
  "data_sources": {
    "注释": "每个key对应一个模块,值为实际数据来源。generate.py的_DEFAULT_SOURCES有默认值,此处只需覆盖降级场景"
  }
}

⚠️ 数据量要求zt_stocks/zb_stocks/dt_stocks 必须存入全部个股数据,不要截断。generate.py 会按题材自动分组、全部展示。

⚠️ 字段映射(重要):通达信 tdx_screener 返回的 涨停原因 字段(短概念标签,点号分隔,如"PCB概念.锂电池概念")→ 写入 concepts原因揭秘 字段(详细叙事)→ 写入 reason。两者用途不同,不要混淆。

Step 4:运行 generate.py

python generate.py report_data.json

脚本自动:读 template.html + report_data.json → 生成 a-share-report-YYYY-MM-DD.html

data_sources 字段说明:每个模块的数据来源标签。当某个数据源降级(如问财失败改用东财),需将对应 key 的值改为实际来源(如 "sector": "东方财富")。generate.py 会读取此字段自动在报告卡片上标注正确来源,未配置则使用默认值。

Step 5:交付

使用 present_files 交付 HTML 文件。

涨停数据字段说明(通达信 tdx_screener)

字段含义用途
sec_code / sec_name代码/名称报告展示
now_price / chg现价/涨跌幅封板状态判断
封单金额0#封单金额(元)封板强度
首次涨停时间HH:MM:SS早盘/尾盘质量
涨停打开次数整数0=一字板
涨停原因字符串短概念标签,点号分隔,如"PCB概念.锂电池概念"→写入concepts字段,用于题材分组
原因揭秘字符串详细叙事归因,如"全球最大PPE树脂产区停产,PCB材料持续涨价;..."→写入reason字段,用于个股归因展示
板型字符串一字板/换手板/T字板
封成比封单金额/成交额
连续涨停天数整数连板天数
上市状态字符串ST/*ST/退市

封板/炸板判断

  • 涨停打开次数==0 且 chg达涨停幅度 → 一字板封板
  • 涨停打开次数1-2 → T字板
  • 涨停打开次数>2 → 换手板
  • 创业板(300)/科创板(688)涨跌幅≥20% → 20cm涨停

文件路径

  • 模板(锁定不可改):Skill目录下 assets/template.html
  • 生成脚本:Skill目录下 scripts/generate.py
  • 数据文件report_data.json(当前工作目录,临时)
  • 输出a-share-report-YYYY-MM-DD.html(当前工作目录)

25模块→数据源映射(与SECTION_MAP顺序一致)

#模块数据源
1Header计算
24指数卡片tdx_quotes
3涨跌家数tdx_quotes(hasCalcInfo) + 通达信APP全市场数据修正
4人气龙头Top10iwencai
5涨停封板率tdx_screener
6跌停专题tdx_screener
7短线情绪全景tdx_screener计算
8情绪监测tdx_screener计算
9连板天梯tdx_screener
10板块涨跌榜iwencai(同花顺二级行业)
11主线分析tdx_screener涨停原因聚合
12核心个股筛选tdx_screener计算
13涨停复盘tdx_screener涨停详细
14炸板分析tdx_screener炸板详细
15短线策略数据驱动生成
16行情展望数据驱动生成
17成交额排行iwencai
18跌幅榜iwencai
19资金风向iwencai
20板块主力资金流向iwencai(同花顺二级行业/概念/地域各净流入+净流出Top5)
21个股跟踪tdx_screener
22投资策略&心态数据驱动生成
23特殊事件涨停原因提炼
24融资融券iwencai
25Footer计算