← 返回主页
多模态 AI K线形态 Kotlin 评测集

宇树腰斩这4天,我让 AI 读了读它的K线——它回了四个字:瀑布线

2026.08 · by Easin

所有"AI 炒股"项目都在把数字喂给大模型。但K线形态是视觉概念——人类交易者是怎么读图的,就应该怎么交给 AI。

上一篇文章(《我给 AI 写了两个 Kotlin MCP 服务器》)发布后,我继续挖 MCP 生态的空白,发现了一件奇怪的事:把渲染好的K线图喂给视觉大模型做形态识别,这个方向全网几乎没有认真做过——搜遍 GitHub,同类项目全部低于 2 Star,而最接近的 AI-Kline(341★)只做数值计算。连 31k Star 的 Vibe-Trading,视觉工具也只拿来 OCR。

于是我做了 kline-vision。先看结果——

三张图,三次盲测

下面三张K线图由程序合成(稍后解释为什么),我把它们交给视觉大模型,不给任何提示,只问"这是什么形态":

头肩顶形态K线图
测试一:AI 的回答——"头肩顶形态",并主动补充:"连接左肩与头部之间的低点以及头部与右肩之间的低点,形成一条近似水平的支撑线(颈线)"
双底形态K线图
测试二:AI 的回答——"DOUBLE_BOTTOM(双底 / W 底)",还指出了形态含义:"当价格突破颈线时,形态完成,预示下跌趋势可能结束"
上升旗形K线图
测试三:AI 的回答——"ASCENDING_FLAG(上升旗形)",识别出了"近乎垂直上涨的旗杆"和"向下倾斜的窄幅整理旗面"

3/3 全对。而且它给出的不是分类标签,是带结构的分析——颈线位置、W 形成因、旗杆旗面关系。这正是人类交易员读图的方式。

关键技巧:标签由构造保证的评测集

做形态识别,最大的难题是没有标注数据。真实K线的形态标注主观且昂贵,公开数据集不存在。

kline-vision 反过来解决:它内置一个参数化形态生成器——先画出形态的几何骨架(头肩顶就是"左肩高点 → 颈线低点 → 更高的头部 → 颈线低点 → 与左肩等高的右肩 → 向下突破"),再叠加真实感的噪声(影线、抖动、量能变化)。

// 头肩顶的骨架:数值本身就是标签
val anchors = listOf(
    base, base - 1.2,        // 上涨铺垫
    base + 1.8,              // 左肩
    base - 0.6, base + 3.2,  // 颈线低点、头部(最高)
    base - 0.6, base + 1.7,  // 颈线低点、右肩
    base - 1.9,              // 向下突破
)

标签不是标的,是构造出来的——所以是精确的。一条命令就能生成任意规模的评测集(6 种形态 × N 个变体 + manifest),给任何视觉模型打分。想比较 GPT-4o、GLM-4V、Qwen-VL 谁更会读K线?跑一遍评测集就有答案。

渲染器:零依赖的 Java2D

图表渲染没有用任何库——纯 Java2D 手绘:红涨绿跌(A股惯例)、蜡烛实体与影线、MA5/MA10 均线、量能面板、深色终端风格。确定性输入 = 确定性输出,同一份数据永远渲染出同一张图,评测才有意义。

平安银行真实日K渲染图
真实数据同样能渲染:平安银行(000001)最近 90 个交易日,MCP 工具 analyze_stock 一条链路完成"拉行情 → 渲染 → 识别"

MCP 封装:完整闭环

整个能力封装成了 4 个 MCP 工具,Claude / Cursor 直接调用:

render_synthetic   渲染带标签的演示形态图(无需 API key)
generate_eval      生成完整评测集
classify_chart     图片 → 视觉模型 → 形态 JSON
analyze_stock      股票代码 → 真实行情 → 渲染 → 识别(完整闭环)

视觉模型走 OpenAI 兼容协议,GPT-4o / GLM-4V / Qwen-VL / 本地 vLLM 换个环境变量就切换。没配 key 时优雅降级:照常渲染出图,返回配置指引。

顺手又做了一个:T+1 回放引擎

调研时发现另一个空白:交易 Agent 框架爆火,但没人做 A股规则的模拟器——让 Agent 回测A股策略,它会愉快地把早上买的股票下午卖掉,因为没有东西强制 T+1。

于是同一天写了 t1-replay:确定性规则引擎(T+1 锁定、涨跌停 ±10%/±20%、整手、佣金印花税过户费全模型)暴露成 4 个 MCP 工具。11 个规则单测全绿,真实行情 e2e 里 Agent 试图当日卖出被当场拒绝——然后次日用更高的价格卖出,每分钱都对账。

实战:宇树上市这 4 天

热点送上门了。宇树科技(688836)上市 4 个交易日,1100 元开盘 → 608.11 元收盘,-44.7%,技术性腰斩、深度破发。我把它喂给了自己的工具链:analyze_stock 688836 一条命令完成"拉行情 → 渲染 → 识别"。

8/19  开1100.00 收845.00   首日 -23.1%
8/20  开 790.00 收687.00   -18.7%
8/21  开 659.00 收672.41   +2.1%(弱反弹)
8/24  开 640.26 收608.11   -9.6%(今日)
宇树科技 688836 上市4日K线渲染图
宇树科技上市以来全部 4 根日K(kline-vision 渲染自真实行情)

视觉大模型的判读原文:

"呈现典型的断头铡刀式单边下跌形态(Cascade Down / 瀑布线)。4 根K线构成连续下杀结构,无有效反弹,形似自由落体,属于极端弱势形态。首日巨阴线(-23.1%)高开后单边下行,全天几无反抽……"

注意它用的词:"断头铡刀""瀑布线"——这是中文股民的黑话,不是教科书术语。你喂给它一张图,它用交易员的语言回答你。这就是视觉路线和数字路线的差别:形态本来就是视觉概念。

写在最后

这一轮的三件套已经形成闭环:kline-mcp 喂数据和指标,kline-vision 负责视觉形态识别,t1-replay 负责规则约束下的训练与评分。任何一个 MCP 客户端(Claude、Cursor、Vibe-Trading……)都能把它们组装成自己的A股研究工作台。

bayshier/kline-vision
K线图 → VLM 形态识别(含评测集)
bayshier/t1-replay
A股 T+1 纸面交易回放引擎(MCP)
bayshier/kline-mcp
A股 K线与指标 MCP 服务器

数据来自公开接口,形态识别仅供研究学习,不构成投资建议。

Easin's Code Lab · 作者:Easin ← 返回主页 · 上一篇:两个 Kotlin MCP 服务器 · GitHub ↗