1 摘要

用 AI 辅助做股票相关决策,原理很简单:首先获取你关注的股票相关数据,然后提取一些特征,结合用户的需求交给 AI。AI 会充当投资经理的角色,进行分析和决策。用户说“我不懂资产负债表、利润表、蜡烛图、筹码分布,也不会看财报研报……”。而有一定能力的大模型,基本具备普通投资经理的素质,可以帮你解释和决策。

这东西没什么门槛,谁都能做,关键在于工具是否好用,比如:抓取哪些信息、如何处理、怎样交给大模型,以及如何呈现出来,怎么做又省时又省钱。

最近,我开发了一个股票辅助决策工具 XYStock,并已在 GitHub 上开源。我和朋友们使用后都感觉不错,下面就来介绍一下。

项目地址:https://github.com/xieyan0811/xystock

2 引言

最近股票市场非常活跃。前几周,我在分享会上分析了 TradingAgents 的论文和源码,第二周小伙伴又分析了其他中文的开源股票辅助工具。我们把“星”数较高的都试了一遍。各有千秋,确实有很多让人眼前一亮的功能,但还没找到一个完全够用的工具。喜欢 A 工具的某个功能,又喜欢 B 工具的另一个功能,但不能对单支股票逐个使用一遍——时间和大模型的成本都不划算。

于是就打算自己花点时间开发一下。然后遇到了是从头写,还是在他人的代码基础上修改的问题。修改别人的代码对我来说更花时间(有些代码是 AI 工具生成的,很多过程文件都没删,不知道哪些是有用的),风格不同,还容易出错。修改完是否要提交 PR,提交了还有可能要别人来合并和测试,想想就麻烦。最终,决定重新自己开发。

这个项目主要是为了自己用着方便,顺便分享给我的小伙伴们。目标就是实用,不是功能全面完美。由于时间有限,我在第一周完成整体功能布局,第二周优化和调试,后续可能不再频繁更新,只会修复特别严重的 bug。所以,如果需要修改或添加功能,大家可以直接 fork 后自行修改(加功能方面的 issue 就尽量别提了)。

3 功能 & 设计

3.1 使用场景

股票相关的数据和指标我可以通过 APP 或者在财经网站上看到,有些还有“持仓/买入/卖出”的建议。那为什么还需要自己做工具呢?

下面列出了一些需求,而我目前还没找到现成方法:

  • 信息并不是获取不到或不充足,而是看不过来,不知道如何解读:比如,如何看 KDJ 指标,布林开口大小背后的逻辑是什么?净利润 xx 在所属行业中算高还是低……
  • 数据指标是零散的,没有具体结论。即使有结论,没有推理过程,也不敢相信。需要一个像 DeepSeek 深度思考一样的工具,可以看到推理过程。即使出了问题,至少知道问题出在哪里,而不是玄学、黑盒。
  • 网上给出的推荐操作是卖出,但不知道什么时候卖,什么情况下卖。需要具体的建议:如果持有,什么时候卖;如果空仓,什么时候买;做长线、中线还是短线?具体点位是多少?
  • 有些信息 API 和大模型可能抓不到,但我想告诉大模型。比如:最近微信群里大家都在议论股票,我需要一个渠道把这些信息输入给模型和其它数据一同分析。
  • 需要针对用户定制的建议,考虑到用户的风险偏好、交易方式、容易犯的错误,需要在决策时提醒用户。因为不同的操作风格(左侧/右侧,长线/短线)有时需要完全不同的建议。
  • 考虑到人的情绪波动,不仅在股票下跌时会感到焦虑,当盘面剧烈波动时,不确定性会导致焦虑,从而引发非理性操作,也需要从情绪角度提示用户。
  • 对于一些意料外的情况,比如某股票突然上涨超过 5%,用户可能会想看一下新闻,分析原因,并需要对突发事件的实时分析和建议。
  • 优化那些 " 多数人 " 能够操作的可选项,比如:A 股、ETF 基金、港股通。有些项目可能参考了一些国外开源代码,包含很多美股内容,但我们买不了,即使是港股通也有门槛。与其花时间做得全面,不如重点开发 80%+ 用户都会使用的功能。
  • 试用的几个 AI 工具每次分析一支股票耗时约 15-20 分钟,有的不缓存,每次都重新拉取数据并调用 AI 进行从头思考,需要更节省时间和金钱的解决方案。

3.2 主要功能

工具提供了两个主要功能模块:大盘分析和个股分析。

受此前参与的“天池基金申购/赎回量预测”活动的启发:在预测个股时,需要以大趋势为前提,尤其是在现阶段,大盘有明显的趋势。因此,我将大盘预测这一部分单独作了界面。另一个启发是,对于难以预测的长期趋势和短期事件,可以通过经济数据和新闻事件实时捕捉,可解决一部分问题。

在大盘分析部分,收集的数据包括:大盘指数(如上证、深成、创业板、科创板等)、技术指标(如移动平均线、MACD、RSI 等)、市场基本面(包括估值、资金流向、融资融券等)。

在个股分析部分,收集的数据包括:股票基本信息、行情趋势(含风险分析)、新闻资讯、筹码分析。

在进行最终的 AI 分析时,还考虑了用户相关的因素:支持用户输入自己的观点和关注重点;输入持仓情况,设置用户画像,以及用户常犯的错误。这些用户相关的特征,在一些券商 APP 中,可能是通过数据总结出来的。在没有数据的情况下,让用户自己输入,只要是客观全面,其实效果也差不多,可能还更好。再退一步,可以把券商 APP 中的用户画像直接贴过来。

### 3.3 界面设计

工具设计通常有两种极端:过于学术和过于简单。过于简单,它思考了二十分钟,给一个 300 字的结论,咱也不知道它拿的是什么数据,思考逻辑靠不靠谱。有的则过于学术,充满大量文字和重复内容,语言专业又晦涩,工具本来是为了省事,结果却增加了工作量和时间,我几乎不会从头到尾详细阅读,一般就扫一下过程,就直接跳到结论部分。

在这个项目的返回内容长度方面,我有意进行了缩减,控制了返回信息的长度,以免大脑需要再次提取主要内容。让每个小块独立进行思考,分别产生结果并显示,最后将这些结果整合形成结论。如果不想查看推理过程,可以直接跳到最后一个选项卡看结论;如果希望了解决策过程和数据,也都支持显示,且数据尽量以表格形式清晰展示,一眼看明白。

AI 的分析既不冗长也不深奥,主要解决的问题是“决策”和“理解”:在多个指标共同作用下,最终的决策具体是什么;尽量解释重要指标对结果产生影响的原理。

4 具体实现

4.1 安装和使用

安装和使用方法如下:

1
2
3
4
git clone git@github.com:xieyan0811/xystock.git
cd xystock
docker build . -t xystock:latest
docker compose up -d

打开本机的 8811 商品,先配置大模型相关参数。随后可以依次尝试以下功能:token 统计、大盘分析、股票分析。

我觉得工程化这部分做得还行,基本上可以通过 Docker 一键安装,然后在 Web 界面上设置 api-key 就能使用。Docker 的数量、配置文件以及界面设计都力求最简。

4.2 编码

程序使用 Python 编写,目前有效代码约有 6000 行。

在编码方面,这是我第一次以 copilot 为主,我作为辅助。也是第一次在月底之前就把套餐里的 token 全部用完了。使用 vscode+copilot+claude+agent 的方式优点确实很多,而最大的问题是产生了很多冗余代码。我尽量去除这些冗余,但由于时间有限,有些实现得还是有点罗嗦。因为功能已经实现,又担心改动后会出现问题,所以暂时没再修改。在这个过程中踩了不少坑,后续会写篇文章一并总结。

4.3 优化

4.3.1 数据处理

只要是我能拿到和计算的,尽量都算到最后一步之后再喂给模型,而不是一堆脏数据直接扔进去。

4.3.2 缓机机制

为节约时间和 token,我使用了缓存机制。对于更新速度较慢的基本面数据,不会每次都重新获取数据并进行 AI 分析,每种数据都设置了过期时间。目前测试的结果是,首次分析一个股票大约需要 2-3 分钟,而如果数据被缓存,那么后续分析时间约为一分钟左右,这也取决于使用的 LLM 及其速度。

也可能有人说:一次不过几分钱或者几毛钱,犯得着这么精打细算吗?但我觉得,如果关注的股票数量多,每支股票一天多次分析,每次都重复所有操作确实浪费。

#### 4.3.3 技术栈

看了一些类似产品,使用了 agent 和 mcp 等技术。在本项目中,流程基本是固定的,没有太多需要大模型来选择调度的内容。使用这些工具后,还需考虑不同能力的模型带来的问题,比如死循环。此外,并不涉及写论文,也不太纠结一定要使用最新技术。

还是遵循奥卡姆剃刀原则:如无必要,勿增实体。保持结构和功能的足够简单,以免:底层复杂会增加开发难度;界面复杂则会导致常用功能难以找到。

5 后续

最近看到一些“贪婪恐惧指数”之类的工具,和当前实现的大盘预测工具有点类似,尤其是在当前阶段,可能会涉及到逃顶的问题,后面可能会加一下。

此外,还有一些需要改进的地方,比如代码注释过多、功能调用层次复杂、缓存内容冗余等。改动可能导致功能出错的风险,目前不影响功能,暂不处理,

项目地址:https://github.com/xieyan0811/xystock

如果你喜欢,觉得用着不错,请帮我点亮小星星。