项目实践

Owning a Hedge Fund: AutoTrading as an AI-Native Trading Firm

12 分钟阅读
AutoTrading / 量化交易 / Paper Trading / LLM / 系统架构 / 美股

最近整理了一下我自己做的项目:AutoTrading

如果用一句更形象的话来描述,我想做的其实不是一个“自动选股脚本”,而是开一家由大模型驱动的交易公司

这家公司里有研究员、有交易员、有基金经理,也有自己的候选池系统、执行系统和经营看板。它不是靠一个模型直接说“买这个”,而是尽量按真实团队的协作方式,把研究、评审、执行和复盘都串起来。

这套系统最核心的两点其实很简单:

  1. 像搭一个真实交易团队一样搭系统。 不是让一个模型直接拍板,而是让不同角色分工合作,再层层汇总成最终决定。
  2. 像经营一家公司一样经营交易流程。 找机会、讨论、执行、回写、看板都在一条链上,而且后面还能继续往里加新的选股方式。

这个项目的整体架构设计参考了 TradingAgents,这里也对它致敬一下。

它把交易研究拆成多个角色协作,也就是把“分析师、研究员、交易员、风控、组合经理”这些职能用多代理方式组织起来。我是在这个架构方向上,继续做了一个更适合我自己使用方式的版本:

  1. 我做的是从选股到交易的整条自动化链路。 它不是只研究一只票,而是每天先跑候选池、再送投委会、再做执行和回写。
  2. TradingAgents 更像围绕单个股票展开分析与决策。 AutoTrading 则更强调“每天要跑起来”的 operating system,重点是让候选发现、评审、执行、展示都接进同一条日常流程。

所以更准确的说法是:AutoTrading 是在 TradingAgents 提供的架构方向上,继续做出来的一个更适合我自己使用节奏的版本,也是一套每天运行的自动化交易工作流。

拥有一间 Hedge Fund

用一句话概括:AutoTrading 是我为一间 AI-Native Hedge Fund 搭的操作系统。

它不是单点工具,而是一组协同模块:

模块通俗理解作用
MarketRegime市场天气预报先判断最近更适合激进进攻,还是先保守一点
Screener找机会的研究部门每天先从市场里找出一批值得关注的标的
InvestmentCommittee投资委员会把这些机会逐个讨论,决定哪些值得真正进入交易计划
Execution交易台把会议结论变成具体动作,并跟踪订单和持仓状态
web公司总看板把研究、决策和执行结果统一展示出来

所以它本质上不是“用一个模型直接说买什么”,而是把一间基金内部会发生的事情拆成可运行的模块:

  1. 先判断现在是强势市场、震荡市场还是弱势市场。
  2. 再从不同策略里找出候选标的。
  3. 然后让多位分析师分别从技术、基本面、事件、社区叙事、宏观风险等角度做评审。
  4. 最后再把结论翻译成执行计划,并进入券商账户的订单、成交、持仓跟踪。

我真正想做的,就是把“拥有一间基金公司”这件事软件化:让大模型以团队协作的方式参与交易,而不是让单个模型直接拍板。

先把这家公司搭起来

如果把它当成一间基金来看,最核心的是组织分工很清楚:

  • 环境层:先判断市场环境,再决定后面的表达方式。
  • 发现层:先生成候选池,而不是让大模型直接全市场自由发挥。
  • 研究层:把观点拆给多个角色,再做多空辩论和管理层裁决。
  • 执行层:把研究结论翻译成订单与风控状态,而不是停在“建议买入”。
  • 展示层:把各环节统一收进一个 dashboard,方便复盘与校验。

这也是整个项目最核心的架构方向。它至少在工程上回答了三个关键问题:

  • 上游环境怎么约束下游决策?
  • 研究结论怎么变成结构化执行语义?
  • 执行结果怎么回流到统一界面,而不是散落在日志里?

它怎么运转

先把这间公司的主链路画出来:

Market Regime
    ↓
Screener
    ↓
Review Queue
    ↓
Investment Committee
  ├─ 基础分析师层
  ├─ Bull / Bear Researcher
  ├─ Research Manager
  ├─ Trader
  └─ Fund Manager
    ↓
Execution
    ↓
Longbridge Paper / 本地执行账本
    ↓
Web Dashboard

从操作层面看,这间基金其实有两个“总控面”:

这张图可以把整套系统看得更直观一些:上面是市场环境和候选池,中间是投委会研究链,下面是执行、风控和看板。它不是几块孤立模块拼在一起,而是一条从研究走到执行、再回到展示层的完整经营链路。

交易台:每天怎么开工

仓库根目录的 main.py 负责把几个模块串起来。普通理解的话,它就像这间公司的“开工按钮”:按下去之后,研究部门先开始找机会,投资委员会再开会,最后交易台再去执行。

如果你想看具体命令和实现细节,最直接的方式不是在文章里抠命令,而是直接去看 GitHub 仓库: AutoTrading on GitHub

管理看板

InvestmentCommittee/main.py 默认启动 8011 端口的 API / scheduler 运行时,而 web/ 目录下的 Next.js 前端负责展示:

  • /regime
  • /screener
  • /investment-committee
  • /execution

这意味着它既有后台工作流,也有前台看板。这两个入口在很多项目里是断开的,但在 AutoTrading 里是刻意统一的。

第一层:先判断今天该怎么做交易

这是我觉得这个项目最重要的设计点。

很多交易系统会把“市场环境”当成一个背景板,但在 AutoTrading 里,它更像是每天开盘前的一场晨会。

系统会先回答几个很现实的问题:

  • 现在这个市场,适不适合积极出手?
  • 应该多做一点,还是先保守一点?
  • 仓位应该放大,还是先留更多现金?
  • 今天更适合顺势做,还是宁愿少做一点?

关键点不在于它给市场打了多少分,而在于这个判断会直接影响后面每一步到底怎么做

它对下游的影响是三段式的:

在候选池里

研究部门在找机会的时候,会自动考虑“现在是不是适合做这种票”。同一只股票,在强势市场里可能排得更靠前,在偏弱市场里可能就先放一放。

在投资委员会里

投资委员会在讨论时,也不能只说“这只票看起来不错”,还得回答“在现在这个市场里,值不值得现在就做”。

在执行层里

到了交易台,系统还会按这个市场判断去控制仓位、现金和出手节奏,而不是前面说想买,后面就一把梭进去。

所以从架构角度看,MarketRegime 的作用不是“提供市场背景”,而是把环境判断前置成整个系统的控制变量。这一点比“先选股,后补一句大盘怎样”严谨很多。

第二层:先有候选池,再谈交易

Screener 模块负责的不是下单,而是每天先把“值得看一眼的机会”找出来。

如果不看代码,只看功能,这条链路其实很好理解:

  1. 同步行情数据
  2. 计算涨跌幅、成交额等衍生字段
  3. 补充个股基础资料与强势原因
  4. 调用模型做摘要或候选分析
  5. 导出给 dashboard 使用的快照

目前这套系统会从三类机会里找票:

  1. 最近一直很强、还在创新高的一批票 这类更像“市场已经用价格投票”的强势股。
  2. 刚开始加速、走势越来越顺的一批票 这类更像“正在进入主升阶段”的趋势股。
  3. 最近市场讨论度突然很高的一批票 这类来自热点话题、社区讨论或情绪快速升温的方向。

如果你想看它们在代码里的内部名字和具体实现,可以直接去 GitHub 看配置和源码;文章这里更关心的是它们在实际使用里分别代表什么。

更关键的是,它不是把三批股票混在一起乱排,而是会按固定规则送去投资委员会。

简单理解就是:

  • 强势股里多挑几只
  • 趋势刚起来的票里挑最像样的一只
  • 热点话题里再挑一只最值得讨论的

这样做的好处是,整个组合不会只剩下一种风格,也不会被单一来源绑死。

这个设计很重要,因为它让 Screener 成为一个候选池组合层,而不是某一个单点策略脚本。这样做至少有三个好处:

  • 可以同时容纳“规则型候选池”和“叙事型候选池”
  • 可以在送审阶段控制组合结构,而不是把所有候选一股脑交给下游
  • 后面如果继续新增策略,只需要按同样协议接入候选池和送审编排,而不需要推翻整条链路

第三层:让投资委员会来做决定

如果说 Market Regime 决定环境,Screener 决定研究名单,那么 Investment Committee 决定的是:这些候选到底能不能进入基金的交易计划。

它不是一个简单评分器,而是一条多层研究链。

先拆成基础分析师

默认有 6 位基础分析师:

  1. 市场结构分析师
  2. 技术指标分析师
  3. 新闻事件与披露分析师
  4. 社区叙事分析师
  5. 基本面分析师
  6. 宏观与外部风险分析师

如果这只票本身就是从“市场最近很热的话题”里出来的,系统还会再加一位专门看情绪和舆论的分析师。

再让多头和空头辩论

基础分析师的输出不会直接变成结论,而是交给:

  • Bull Researcher
  • Bear Researcher

也就是说,这里先做一次“多头观点整合”和“空头观点整合”,而不是一开始就让模型产出单边结论。

最后交给研究经理、交易员和基金经理

之后再进入:

  • Research Manager
  • Trader
  • Fund Manager

它们各自解决的问题不一样:

  • Research Manager:整合共识、分歧、盲区和关键闸门
  • Trader:把研究语言翻译成执行语言,比如分批、触发条件、失效条件
  • Fund Manager:形成最终裁决,例如买入、增持、持有、减持或卖出

所以这一层的真正价值,不只是“模型分析很细”,而是它把研究结论结构化成了可以被执行层消费的输出

这张图对应的其实就是“投委会怎么开会”这件事:先拿到候选名单,再分给不同分析师准备材料,接着做多空讨论和研究经理整合,最后交给基金经理形成结论,并把结果发给执行层。

为什么这一层很关键

很多 AI 项目会停在“模型给出一段分析”这里,但 AutoTrading 不是这样。

它把这场“投委会讨论”真正接进了后面的交易流程里:前面研究出来的观点,要在这里被整理、被取舍、被转成明确动作,然后才能继续往下走。

所以这一层的意义,不是把角色设计得多热闹,而是把“大家各说各话”的分析,收束成一份可以继续执行的决策结果

第四层:把研究结论变成真正的交易动作

很多项目在“建议买入”之后就结束了,但 AutoTrading 继续往下做了一层 Execution

它的职责包括:

  • 读取 Investment Committee 的完整评审结果
  • 解析动作、触发条件、失效条件
  • 结合 Market Regime 的风险边界生成执行计划
  • 同步订单、成交、持仓和账户状态
  • 处理退出、空仓补位、主动换仓

这里最值得注意的是,它并不重复研究逻辑,而是专门处理交易台的执行编排

如果用最通俗的话说,交易台主要做四件事:

  • 把投委会的结论翻译成执行计划
  • 把计划真的送进券商执行通道
  • 持续跟踪订单、成交和持仓变化
  • 在该减仓、补位、换仓的时候继续往下推进

这张图更适合拿来理解“买入之后系统还在做什么”。它不是下完单就结束,而是会继续跟踪订单状态、持仓状态、退出条件、空位补充和主动换仓,所以更像一个真的在持续运作的交易台。

当前默认执行模式是 longbridge_paper,也就是先按 paper trading 的方式运行;如果有需要,这套接口本身也可以切换到实盘自动化。

换句话说,paper 不是能力上限,而是默认起步方式。系统在执行层已经把自动化交易需要的那套编排、同步和风控接口准备好了。

第五层:让整家公司有一个统一看板

这个项目还有一个很重要但容易被忽略的点:它没有让结果停在数据库或日志里。

web/ 目录下的 Next.js 看板把四条链路统一展示出来:

  • Regime
  • Screener
  • Investment Committee
  • Execution

这带来的价值不是“更好看”,而是更像一间基金真正会用的经营看板,更容易做下面三件事:

  1. 检查上游输出有没有真的传到下游
  2. 对照 Dev / Prod / API 结果是否一致
  3. 复盘某一天到底是哪里出了偏差

从工程角度说,Dashboard 其实是这套架构里的“可解释性层”和“验收层”。

这套系统怎么跑起来

如果把它当成一间本地运行的 AI Hedge Fund,使用方式其实很清晰。

1. 先准备运行环境

项目当前依赖几块能力:

  • Python 3.10+
  • 根目录 requirements.txt 中的公共依赖
  • Execution/InvestmentCommittee/ 两个可编辑包
  • web/ 目录下的前端依赖
  • 外部数据与模型凭证
  • Longbridge 账户相关凭证

它不是那种一条命令就能完全跑起来的 demo,因为里面涉及行情、新闻、LLM 和券商 paper 账户这些真实依赖。

所以如果你只是想理解它,最好的方式是:

  1. 先看文章把整体思路看明白。
  2. 再去 GitHub 看仓库结构和 README。
  3. 如果你真的想跑,再按仓库里的说明一步步配置环境。

2. 然后跑研究链路

如果你真的想跑它,最简单的理解方式是:

  • 先让系统找机会
  • 再让投资委员会开会
  • 最后让交易台去执行

具体怎么启动、每个命令怎么配,仓库里写得比文章更准确,建议直接看 GitHub: AutoTrading on GitHub

3. 再跑计划提交和状态同步

如果当天已经跑过一轮,后面系统主要就是两件事:

  • 继续把新计划送出去
  • 持续同步账户里的真实状态

4. 最后回到 Dashboard 看全局

本地开发时,可以直接启动 dashboard:

python main.py dashboard-dev

然后重点看四个页面:

  • /regime:环境判断是否合理
  • /screener:候选池和送审队列是否符合预期
  • /investment-committee:多分析师评审是否完整
  • /execution:订单、成交、持仓、轮换、补位是否正确

如果只讲使用方法,我觉得最重要的不是记住某一个命令,而是理解它的工作顺序:

先有环境,再有候选,再有评审,再有执行,最后通过 dashboard 做统一验证。

最后

对我来说,AutoTrading 后面真正值得继续做的,不是把某一个策略打磨成孤立功能,而是把这间“AI Hedge Fund”的整条经营链继续做顺。

一方面,它可以继续扩更多研究入口和候选来源,让这家公司拥有更丰富的“研究员”和“机会池”;另一方面,也可以把执行、风控、账户切换和看板联动做得更稳,让它从“能跑起来”进一步走向“能长期使用”。

如果你想理解它的用法,最好的方式其实不是盯某一段代码,而是按这条顺序去看:先看市场环境,再看候选池,再看投委会,最后看执行和看板。这个顺序跑通了,后面的扩展空间就会很自然。

相关链接