返回 Skill 列表
extension
分类: 数据与分析无需 API Key

超短复盘日记

江州大道丨超短复盘日记 v4.3——A股每日涨停复盘看板 HTML 生成器。 当用户要生成"超短复盘"、"涨停复盘"、"复盘看板"、"江州大道"时触发。 数据源:通达信 MCP(tdx-connector,单一数据源覆盖行情/选股/K线/阶段排行,替代原 iFind + westock 双源)。 CSS与HTML结构已按07-20模板完全冻结(references/css_frozen.md + html_sections.md), 每日仅替换数据区和叙事段落。 v4.3:12段完整布局——含封单TOP10/一字板/阶段涨幅榜/ST退市分组/炸板明细紧凑版(2列网格+题材分组)。 v4.2:数据完整性强制校验(涨停数对账)。

person作者: user_35be4c04hubcommunity

江州大道 · 超短复盘看板生成器 v4.1(12段完整版)

触发条件

"超短复盘"、"涨停复盘"、"复盘看板"、"江州大道"。

模板来源

CSS 和 HTML 结构已于 2026-07-22 完全冻结,模板来源为 D:/Desktop/江州大道复盘/江州大道_超短复盘_07-20.html

冻结文件:

  • references/css_frozen.md — 完整 CSS(181行),4格mood-grid / 2x2 kpi / .rw股票行 / .zha-row炸板行
  • references/html_sections.md — 完整 HTML body 骨架(~37KB),作为模板复制

模板特征

| 特征 | 07-20 模板 | 07-22 v4.1 完整版 | |------|-----------|----------------| | mood-grid | 4 格(涨停/跌停/连板高度/一字板) | ✅ 4格 | | kpi | 2×2=4 格(成交额/炸板率/连板家数/周期定位) | ✅ 4格 | | 昨日回顾 | | ✅ 无 | | 主线柱状图 | (.theme-row 横向条形图) | ✅ 有 | | 阶段涨幅榜 | (.rank-grid 3卡片,5/10/20日) | ✅ 有(tdx_screener 阶段涨幅选股) | | 涨停封单 TOP10 | (.row 排行) | ✅ 有(tdx_quotes 封单金额,恢复原始字段) | | 炸板明细·封板未果 | (.zha-row 炸板行,v4.3 紧凑版:2列网格 + 题材分组头) | ✅ 有(tdx_screener 炸板选股) | | 一字板·封板质量 | (独立 sec) | ✅ 有(tdx_quotes 今开=最高=最低 且涨停判定) | | ST/退市分组 | (.lz 子标题) | ✅ 有 | | gauge-scale | 0/30/50/70/100 | ✅ 0/30/50/70/100 |

页面顺序(12段,严格固定,不可改)

  1. brand-header(品牌头图 2.35:1,渐变背景+光影)
  2. 温度计 sec(4格 mood-grid + .premia 概要叙事)
  3. 情绪决策 sec(2×2 kpi + .dual 赚钱/亏钱 + .mid 连板+中军 + .verdict 决策)
  4. 主线题材柱状图 sec(.theme-row 横向柱状图 + .sig 叙事)
  5. 连板梯队·涨停明细 sec(.lz 板数标题 + .rw 股票行 + ST/退市分组
  6. 涨停封单资金 TOP10 sec(.row 排行,tdx_quotes 封单金额降序取 TOP10)
  7. 一字板·封板质量 sec(.row 排行 + 分析叙事)
  8. 炸板明细·封板未果 sec(.zha-row 炸板行,tdx_screener 炸板选股)
  9. 阶段涨幅榜 sec(.rank-grid 3卡片:5/10/20日涨幅各TOP10)
  10. 风险警示 sec(.warn 叙事段)
  11. 观察锚点 sec(.anchor .a.hi/.po/.mn/.rk 四卡片)
  12. Footer(.ft 数据源+免责)

通达信 MCP 核心工具清单(tdx-connector)

| 工具 | 用途 | 单次上限 | |------|------|---------| | tdx_screener | 自然语言选股(涨停/跌停/炸板/阶段涨幅/行业/条件) | 默认20,可调大 | | tdx_quotes | 实时行情快照(价/涨跌幅/换手率/成交额/封单金额/今开高低) | 批量 | | tdx_kline | 日K线回溯(连板天数/一字板判定/区间涨停次数) | 1只/次 | | tdx_lookup_stock | 名称/简称检索证券代码与市场 | - | | tdx_indicator_select | 结构化指标与资料 | - | | wenda_news_query | 财经新闻/主题资讯(涨停原因替代) | - | | tdx_api_data | 统一底层API(阶段排行/封单等高级查询兜底) | - |

字段恢复说明(切换至 tdx 后)

对比旧版 iFind + westock 双源,切换至通达信 MCP 后下列字段恢复可用:

| 恢复字段 | 来源工具 | |----------|---------| | 封单金额 | tdx_quotes 封单金额字段(封单 TOP10 不再用成交额替代) | | 涨停时间(FTIME) | tdx_quotes / tdx_kline 首板时间 | | 涨停原因 | wenda_news_query 主题资讯替代 | | 炸板列表 | tdx_screener("今日炸板的A股") 直接返回 |

生成流程(v4.0 模板冻结)

核心原则

CSS 和 HTML 结构永不修改。生成脚本 = 读取冻结模板 + 填入每日数据。

Step 0: 拉取数据(通达信 MCP / tdx-connector)

# 0a. 指数实时行情(上证/深证/创业)
tdx_quotes(codes=["000001", "399001", "399006"], fields=["最新价", "涨跌幅", "成交额"])
# 涨停家数 = len(0b结果);跌停家数 = len(0c结果);涨跌家数由指数行情+选股结果推导

# 0b. 涨停名单(自然语言选股)
tdx_screener(query="今日涨停的A股股票", limit=500)   # → UP池 代码+简称

# 0c. 跌停名单
tdx_screener(query="今日跌停的A股股票", limit=500)   # → DOWN池

# 0d. 批量实时行情(涨停/跌停池,含封单与开高低)
tdx_quotes(codes=[...涨停代码], fields=["最新价", "涨跌幅", "换手率", "成交额", "封单金额", "今开", "最高", "最低"])

# 0e. 连板天数(日K线回溯近10日涨停/一字板次数,高标优先生效)
tdx_kline(code, period="day", count=10)   # 数区间内涨停天数 → 连板高度

# 0f. 阶段涨幅榜(自然语言阶段选股,5/10/20日各 TOP)
tdx_screener(query="近5日涨幅最大的20只A股", limit=20)
tdx_screener(query="近10日涨幅最大的20只A股", limit=20)
tdx_screener(query="近20日涨幅最大的20只A股", limit=20)

# 0g. 炸板列表
tdx_screener(query="今日炸板的A股股票", limit=200)

# 0h. 封单 TOP10(从 0d 行情按 封单金额 降序取 TOP10,恢复原始字段)
# 0i. 一字板(今开==最高==最低 且 涨停,由 0d 行情判定)

S 列表字段(6字段):(code, name, price, chg_pct, hsl%, 题材)

Step 1: 生成 Python 生成器脚本

创建 gen_brand_header_{date_str}.py

  1. 读取冻结模板

    • references/css_frozen.md → 完整 CSS 字符串(181行,原样复制)
    • references/html_sections.md → HTML body 结构骨架
  2. 构建数据区

    • S 列表、D 列表、连板字典
    • UP/DOWN/W_UP/W_DN/AMT/sentiment/max_cont_nonst
    • 叙事段落(premia、dual、mid、verdict、warn、anchor)
  3. 按页面顺序拼接

    <!DOCTYPE html> → <style>冻结CSS</style> → brand-header →
    温度计sec → 情绪决策sec → 主线柱状图sec →
    涨停明细sec → 炸板sec → 风险警示sec → 锚点sec → Footer
    
  4. 渲染股票行(.rw 格式):

    f'<div class="rw"><div class="nm">{name}<span class="bd">{cont}板</span><span class="rs">{theme}</span></div><div class="code"><span class="px">+{chg}%</span><span class="ex">{hsl}%</span></div></div>'
    

Step 2: 运行 + 截图

python gen_brand_header_{date_str}.py
node screenshot_report.js {html路径}  # 输出 header/body/full 三张PNG

输出路径:D:/Desktop/江州大道复盘/江州大道_超短复盘_{date_str}.html

关键规则(v4.0 冻结)

  1. CSS 绝不修改:从 references/css_frozen.md 原样复制(181行,07-20模板)
  2. HTML 结构绝不修改:页面顺序固定为 9 个板块(见上方)
  3. .rw 股票行格式固定.nm(名称+badge+题材) + .code(涨跌幅+换手率)
  4. .lz 板数标题<div class="lz">N板 <span class="c">X只</span></div>
  5. .subg 子分组<div class="subg">ST/反包·翘板<span class="cnt">X只</span></div>
  6. .theme-row 柱状图<div class="theme-row"><div class="nm">题材</div><div class="barwrap"><div class="bar" style="width:N%"></div></div><div class="cnt">N</div></div>
  7. .sig 题材叙事:放在柱状图下方
  8. .dual 赚钱/亏钱双栏:左边 .col.e 赚钱效应,右边 .col.l 亏钱效应
  9. mood-grid 始终 4 格:涨停/跌停/连板高度(非ST)/一字板
  10. kpi 始终 2×2=4 格:成交额/炸板率/连板家数/周期定位
  11. 无昨日回顾板块(07-20 模板特征)
  12. 炸板板块tdx_screener("今日炸板的A股") 返回炸板列表;若为空或异常,标注"炸板数据暂不可用"
  13. 换手率标注:>25% 黄底(.hsl-warn)已包含在 CSS 中,渲染时自行匹配
  14. 命名冲突修复:002460=赣锋锂业,002756=永兴材料,003029=永兴材料旧码不可再用

数据完整性规则(v4.2,防止涨停数不准)

根本问题

v4.0-v4.1 的数据流程是:screener 返回 JSON → 人工目视转录到 Python 脚本 → 手写 tuple。这个链路极易引入两类错误:

  1. 遗漏:screener 返回 128 只,手动转录漏掉几只(如 07-23 漏了 5 只)
  2. 伪涨停混入:为凑数把涨幅 < 9.5% 的股票加入 UP_ALL(如 +7.65% 赣锋锂业)

强制校验规则

生成的 gen_brand_header_{date}.py 必须在脚本末尾加入以下校验代码:

# ═══ 数据完整性校验(v4.2 强制) ═══
# screener 返回的 meta.total 必须与脚本收录的 UP_ALL 长度一致
_SCREENER_TOTAL = {从 screener meta.total 读取的值}
_actual = len(UP_ALL)
if _actual != _SCREENER_TOTAL:
    raise SystemExit(f"❌ 涨停数据不完整!脚本收录 {_actual} 只,screener 返回 {_SCREENER_TOTAL} 只,差 {_SCREENER_TOTAL - _actual} 只。请检查遗漏。")
print(f"✅ 涨停数据完整校验通过: {_actual}/{_SCREENER_TOTAL}")

若校验失败 → 立即停止,对照 screener JSON 逐只排查遗漏/多余,修复后再继续。

防遗漏三原则

  1. 涨幅判定:chg ≥ +9.5% 才是真实涨停(考虑到 9.93%-10.13% 的含入误差),涨跌幅 < +9% 的绝对不放入 UP_ALL
  2. 双重验证:screener 拉取后立刻确认 meta.total 数字,并在 HTML 生成前做 len(UP_ALL) == meta.total 校验
  3. 禁止凑数:不允许用非涨停股填充数据来"凑"某个数字;涨停数少了就是因为遗漏,必须从 screener 中找回来

STEP 0 拉取涨停时必做

拉取涨停池后,立即记录 meta.total 值和 meta.pageSize,确保 pageSize > total(无截断)。若 total > 200 条,需调整 pageSize。

炸板明细·紧凑排版规则(v4.3 新增)

24 只炸板默认单列 24 行会占满两屏,不利于手机端扫读。v4.3 起强制使用 2 列网格 + 题材分组

HTML 结构

<div class="sec"><div class="sec-t"><span class="bar"></span>炸板明细 · 封板未果<span class="tag2">N只</span></div>
  <div class="zha-grid">
    <div class="zha-group"><span class="gh">🔴 MLCC / 被动元件炸板群</span><span class="gc">5只 · 集体利好兑现</span></div>
    <div class="zha-row"><div class="nm">风华高科<span class="se">000636</span></div><div class="r"><span class="chg up">+4.62%</span></div></div>
    <div class="zha-row"><div class="nm">火炬电子<span class="se">603678</span></div><div class="r"><span class="chg up">+1.91%</span></div></div>
    ...(组内 2 列网格自动填充)
    <div class="zha-group"><span class="gh">🟠 光通信 / 算力分歧</span><span class="gc">5只 · 集体利好兑现</span></div>
    ...
    <div class="zha-group"><span class="gh">⚪ 其他</span><span class="gc">14只 · 集体利好兑现</span></div>
    ...
  </div>
  <div class="sig tip">简短的炸板归因(≤4 行)</div>
</div>

CSS(已加入 references/css_frozen.md)

.zha-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;margin-top:4px}
.zha-group{display:flex;align-items:baseline;grid-column:1/3;padding:6px 4px 2px;border-top:1px solid var(--line);font-size:11px;color:var(--sub);font-weight:700}
.zha-group .gh{color:#a8071a}
.zha-group .gc{margin-left:auto;font-size:10px;font-weight:400}
.zha-row{display:flex;align-items:baseline;padding:5px 4px;border-bottom:1px dashed var(--line);font-size:12px}
.zha-row .nm{font-weight:700;font-size:12.5px}
.zha-row .nm .se{font-size:9px;color:var(--sub);font-weight:400;margin-left:3px}
.zha-row .r{margin-left:auto;text-align:right}
.zha-row .r .chg{font-weight:800;font-variant-numeric:tabular-nums}
.zha-row .r .chg.up{color:var(--gold)}
.zha-row .r .chg.dn{color:var(--red)}

分组规则

  1. 第一组(🔴 红)= MLCC / 被动元件(识别关键词 MLCC
  2. 第二组(🟠 橙)= 光通信 / 算力 / 电网·光通信 / 光通信
  3. 第三组(⚪ 灰)= 其他剩余品种
  4. 不能只有 1 组:若 24 只全在同一题材,把该题材拆出 TOP10 高涨幅做红组,其余做灰组

视觉收益

  • 24 行单列 → 12 行双列 + 3 个分组头,体积减少 ~50%
  • 题材分组让"MLCC/被动元件炸板潮"等结构性信号一眼可见
  • 题材标签从每只股票行剥离,避免冗余重复