朋友发来一个链接:"看看我最近搞的东西。"
打开一看——Tickick,一个 AI 多模型股票分析工具。暗色主题,卡片化布局,DeepSeek / Qwen / Kimi 三个模型并行出信号,量价分层展示。做得挺有想法的。
我拿威海广泰(002111)跑了一下。三个模型,6 轮分析,结论都一样:
观望。
技术面看,确实是中性。但"观望"告诉了我什么?我今天早上也知道"观望",问题是——观望的同时,主力资金在流出吗?大盘处于什么阶段?如果明天放量突破我该怎么办?
Tickick 回答不了这些。不是因为它做得不好——相反,多模型共识的思路很棒——而是它只看了技术面一个维度。
我关上页面,跟我的 AI 搭档说:"我们自己搞一个更猛的。"
不做仪表盘,做投研搭档
在动手之前,我先想清楚了三个问题。
第一,别人的 AI 炒股工具在做什么? 基本都是:拿到 K 线数据 → 扔给 LLM → 输出买/卖/观望。本质上是"给 ChatGPT 喂数据让它说一段话"。
第二,为什么结果总是"观望"? 因为只看技术面,多空信号经常对冲归零。MA5 涨了加分,MACD 绿柱扣分,最后约等于零——"中性观望"。就像你同时问了三个医生,一个说没事一个说有事一个说再看看,你能得到什么结论?
第三,散户真正需要什么? 不是一堆指标表格,而是——
"威海广泰技术面偏多,但主力资金在流出,可能是诱多。等回调到 MA5 再介入。"
一段像分析师聊天一样的话,有立场、有理由、有矛盾提示、有操作建议。
基于这些思考,我确定了观潮的三个核心差异化:
MCP-Native 架构
别人做 Web App,我做 MCP Server。什么意思?装好之后,我在 Cursor 或 Claude 里直接说"帮我分析茅台",引擎自动调用,30 秒出完整报告。不需要开浏览器,不需要登录,不需要等 loading 转圈。
而且 MCP 是协议,引擎是引擎——以后要加 Web UI 就套一层皮,要接微信推送就加一个 channel。引擎只写一次。
市场体制感知
这是 Tickick 缺的最关键一环。同一个技术形态在不同市场环境下含义完全不同。
牛市里的回调是买入机会,熊市里的反弹可能是诱多陷阱。横盘市里看什么都是"观望"——不是因为分析不准,而是市场本来就没方向。
观潮会先判断大盘处于 6 种体制中的哪一种(🐂牛市 / 🐻熊市 / 🦀横盘 / 🌊高波动 / 📈震荡偏强 / 📉震荡偏弱),然后调整个股信号的解读。横盘市里评分 +5,体制调整后还是 +5,给"观望";牛市里同样的 +5,调整后可能变成 +15,给"偏多"。
冲突检测
这是我最得意的设计。
技术面看多但主力资金在流出?→ ⚠️ 可能是诱多,等资金回流确认再进场。
个股强势但大盘偏弱?→ 📉 逆势走强需关注持续性,轻仓试探。
放量下跌?→ 🚨 主力出逃信号,别抄底。
缩量上涨?→ 📊 上行动能不足,可能是假突破。
矛盾信号才是真正有价值的洞察。"看多"谁都能说,"看多但小心——主力在出货"这种话才值钱。
两个半小时开发实录
晚上 9 点开始动手。
技术选型(5 分钟)
- MCP 框架:FastMCP(Python),和我 Master-Translator 项目同款,驾轻就熟
- 数据源:AKShare(开源 Python 库),免费、零认证、覆盖 A 股行情/基本面/资金流/龙虎榜/北向资金/新闻
- 技术指标:全手写(MA/RSI/MACD/KDJ/BOLL/ATR/OBV),不依赖 ta-lib 的 C 库
架构设计(10 分钟)
src/tidewatch/
├── server.py ← MCP 入口,7 个工具定义
├── data.py ← AKShare 数据获取层
├── technical.py ← 技术分析引擎
├── regime.py ← 市场体制识别
└── narrative.py ← 叙事式报告生成
职责清晰,每个模块做且只做一件事。
核心实现(90 分钟)
最费时间的是技术分析引擎(453 行)。8 个评分维度,每个都要仔细调权重:
| 维度 | 权重范围 | 评什么 |
|---|---|---|
| 均线系统 | ±25 | 多头/空头排列,MA5 斜率 |
| 均线位置 | ±16 | 价格相对 MA5/MA20 的偏离 |
| RSI | ±13 | 超买超卖 + 方向 |
| MACD | ±19 | 红绿柱 + 金叉/死叉 |
| KDJ | ±5 | J 值极端位 |
| 量能 | ±15 | OBV 斜率 + 量比方向 |
| 布林带 | ±8 | 价格在通道中的位置 |
| K线形态 | ±12 | 锤子线、射击之星、三连阳等 |
第一版把阈值设成了 ±30 才给信号,结果……和 Tickick 一样,永远"观望"。降到 ±8 才有了"偏多/偏空"的立场,±25 给"看多/看空"。
教训:评分体系调参比写指标更重要。
首秀测试(30 分钟)
配置到 VS Code MCP → 重启 → 输入"帮我分析 002111"——
第一次卡住了。VS Code 注入了代理环境变量,AKShare 的请求全部超时。加了 NO_PROXY=* 解决。
第二次出了 outputSchema validation error。FastMCP 2.x 会从 dict[str, Any] 类型注解自动生成 schema,但实际返回的嵌套结构通不过校验。删掉返回类型注解解决。
第三次——跑通了。
两轮 Code Review
开发完让搭档做了两轮 Review(7.5 → 8.5 分),修了这些:
| 问题 | 修复 |
|---|---|
包结构 src/ 太扁平 | → src/tidewatch/,import tidewatch.xxx |
未用的 ta 库依赖 | 删除 |
| 全市场数据每次都拉 | 加 30s 缓存 + 60s 失败冷却 |
| 没有叙事式报告 | 新增 narrative.py |
| 资金单位混乱 | 元→万/亿智能转换 |
实战效果
威海广泰 002111(同一只票对比)
Tickick 的结果:观望。强度 45-60。6 轮全部观望。
观潮的结果:
002111 当前 10.86,近 5 日小幅涨了 3.1%,处于 20 日区间的 48% 位置。
多空在博弈——利多方面有 MA5 上行(+1.4%)、站上 MA5(+0.6%)、OBV 上升(资金流入);但要注意 MACD 绿柱放大。综合评分 +12,多头占优。
大盘震荡偏强(可轻仓参与强势个股)。主力资金净流出 205 万,和技术面方向矛盾。
⚠️ 技术面偏多但主力资金在流出,可能是诱多。
整体偏积极,但信号还不够强,建议轻仓试探或等回调到 MA5(10.79) 再介入。
区别在哪?
- 不再是无差别的"观望",给出了"偏多"的立场(评分 +17)
- 识别出了冲突:技术面向上但主力在出货
- 给了具体操作建议:等回调到 10.79 再介入
- 加入了大盘体制判断:当前震荡偏强
贵州茅台 600519
观潮给出了看空(评分 -36,强空头):
RSI 19.3 极度超卖,近 20 日位置仅 9.1%,MACD 绿柱 -21.5 深度空头。主力资金净流出 2.67 亿,与技术面共振向下。
下方支撑看布林下轨 1359.97。
同时抓到消息面:茅台在持续回购(累计 8.01 亿),但短期技术面和资金面都指向下行。即使有回购护盘,观潮也说了真话——别接飞刀。
克制的艺术
做完 Phase 1 之后,搭档写了一份终极畅想:早上推送持仓预警、盘中实时监控、产业链联动分析、多端推送(微信/Telegram/Siri)、回测引擎、Web Dashboard……
听起来超酷。但我说了一句:
先把引擎做到你自己每天真的用再说触达。
| 畅想 | 我的判断 |
|---|---|
| 多端推送 | 先让自己每天用 → 后面做 |
| 全市场每 5 分钟扫描 | 太重,先做自选股监控 |
| 回测引擎 | 先积累真实信号数据 |
| Web Dashboard | MCP 里看更快 |
Phase 2 只做三件事:
- 信号追踪表(SQLite)—— 每次出信号自动记录,追踪胜率。这是时间的朋友,越积累越值钱
- 行为护栏 v1 —— 追高检测、集中度预警、连续亏损检测。最好的交易系统不是告诉你买什么,而是阻止你犯蠢
- scan_market —— 全市场扫描 Top/Bottom 10 强弱股
最后
1618 行代码,5 个模块,7 个 MCP 工具。从看到朋友的作品到自己的引擎跑通,两个半小时。
这不是对朋友项目的否定——Tickick 的多模型共识思路很好,UI 也做得专业。只是看完之后我想:"如果在技术面的基础上,再加上资金面、市场体制、冲突检测呢?如果不只是给信号,而是像一个分析师跟你聊天呢?"
观潮就是这个想法的产物。
开源在 GitHub: Polly2014/TideWatch。如果你也玩 A 股,装个 MCP Server 试试——在 Claude 里说一句"帮我分析 600519",体验一下被 AI 怼"别接飞刀"的感觉。

