abc小站

2026-08-30 · 改写

用 Grok Bot 搭个人交易终端:配置原样公开

彭博一个席位一年 27660 美元。散户几乎摸不到,不是软件难,是价钱按机构口径定的。

用 Grok Bot 搭个人交易终端
原图封面。改写自 MAX(@maxdeg0)那篇配置长文。

我花了三周只想搞清一件事:一个人,用手里已经有的 agent,到底能把那套终端复刻多少?

实话是:流程这块,大部分能。授权行情管道不行,那是交易所合同锁死的,消费级别别想冒充。但让终端「像终端、不像表格」的那套工作流,现在一个周末就能搭起来,Grok Bot 当界面层。

下面是具体配置、代码,以及它在哪会断。

为什么是 Grok Bot

之前试过三种,都不对:

Grok Bot 能拉起多个有名字的 Bot,共用一台一直开着的云电脑:浏览器、文件系统、终端都在。你给它发消息,跟在 Slack 上喊同事差不多。换一次会话,它不会忘自己是谁;它能动手(浏览、跑脚本、写文件),不只是回一段字。

终端感和聊天框的差别就在这:每个功能一个专人,大家都读写同一块共享工作区。

┌─────────────────────────────────────────────────────────┐
│                    共享工作区                             │
│  /workspace/signals/live-alerts.json                      │
│  /workspace/positions/live.json                           │
│  /workspace/reports/                                      │
│  /workspace/watchlist.csv                                 │
└───────────────┬─────────────────────────┬─────────────────┘
                 │                         │
        ┌────────▼────────┐       ┌────────▼────────┐
        │   监控层         │       │   界面层         │
        │   6 个 Bot      │──────▶│   Grok Bot      │
        │   各盯一类源     │       │   分析 / 新闻    │
        └──────────────────┘       │   警报 / 宏观    │
                                    │   简报 / 持仓    │
                                    └────────┬──────────┘
                                             │
                                    ┌────────▼──────────┐
                                    │   看板             │
                                    │   本地 React       │
                                    │   localhost:3000   │
                                    └─────────────────────┘

三块在动:监控层盯外面的世界,界面层是你真正说话的地方,看板给你「一墙数字在亮」的感觉。没有这块,怎么都不像终端。

第一步:共享工作区

整套东西就靠一个文件:每个 Bot 都同意往里读、往里写。这一步最容易被跳过,跳过之后你会纳闷:为什么六个 Bot 互相不认识。

mkdir -p workspace/{positions,alerts,reports,news,dashboard,signals}
touch workspace/watchlist.csv
touch workspace/signals/live-alerts.json
touch workspace/positions/live.json

live-alerts.json 是整根脊梁。谁发现值得拿出来的东西,都按同一种形状往里追加:

{
  "alerts": [
    {
      "id": "a-2026-08-29-0031",
      "timestamp": "2026-08-29T14:03:00Z",
      "ticker": "NVDA",
      "source": "SEC 8-K",
      "signal_type": "capacity_expansion",
      "conviction": "HIGH",
      "summary": "Filed 8-K referencing new fab capacity, semis-sector relevant",
      "action_window": "same-day"
    }
  ]
}

固定结构,一个文件,大家用同一种写法。花招就这一下,没有更玄的。

第二步:六个 Bot

在 Grok Bot 里建六个有名字的人。每个人一份很窄的系统提示。别让任何一个「什么都干」,一宽又变回那个万金油聊天框。

Alerts Bot:

你是个人交易终端上的 Alerts Bot。

每 30 秒检查一次 /workspace/signals/live-alerts.json,
看自上一次之后有没有新条目。

凡是 conviction 为 HIGH 的,立刻发到对话里,带上:
- ticker
- signal_type
- conviction
- source
- action_window

不要下单,也不要建议交易。只把信号摊开。
操盘的人自己决定。

Analyst Bot:

你是 Analyst Bot。有人问某只标的时,去找你能找到的
最近卖方研报、评级变动、目标价调整。用不到 150 字
概括街上的共识。共识稀薄或过时,要明说——
别为了听起来有把握,把不确定性抹平。

News Bot、Reports Bot、Position Bot、Macro Bot 一个路数:职责窄、各管一个文件、用人话交出来。Reports Bot 尤其值得排班:

每个交易日美东时间早上 6:00,读过去 24 小时的
/workspace/signals/live-alerts.json,写一份 300 字宏观简报
到 /workspace/reports/macro-YYYYMMDD.md,并发到对话里。
conviction 为 HIGH 的,先标出来。

第三步:监控层

「全天盯盘」靠的是这一层。别让六个 Bot 自己去扫所有源,让它们去派更窄的盯梢。

按类别拆开,别让一个人读完整张网:

超过你设定的确信阈值,就按上面那份结构追加到 live-alerts.json。合同就这一条。监控层可以简陋也可以铺张,只要写进这个文件时格式对。

第四步:看板

没有这一层,它就是个群聊。做一个最小的、会自己刷新的面板,本地 React 就行:

// Dashboard.jsx — 滚动警报条 + 观察名单格子
import { useEffect, useState } from "react";

const CONVICTION_COLOR = {
  HIGH: "#e34f4f",
  MEDIUM: "#e3a94f",
  LOW: "#4f8fe3",
};

function AlertTicker({ alerts }) {
  return (
    <div style={{ overflow: "hidden", height: 32, background: "#0a0a0a" }}>
      <div style={{ display: "flex", gap: 24, animation: "scroll 30s linear infinite" }}>
        {alerts.map((a) => (
          <span key={a.id} style={{ color: CONVICTION_COLOR[a.conviction] }}>
            {a.ticker} · {a.signal_type} · {a.conviction}
          </span>
        ))}
      </div>
    </div>
  );
}

function WatchlistGrid({ tickers }) {
  return (
    <div style={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 8 }}>
      {tickers.map((t) => (
        <div key={t.symbol} style={{ background: "#111", padding: 12, borderRadius: 6 }}>
          <div style={{ fontFamily: "monospace" }}>{t.symbol}</div>
          <div style={{ color: t.changePct >= 0 ? "#4fe38f" : "#e34f4f" }}>
            {t.price} ({t.changePct.toFixed(2)}%)
          </div>
        </div>
      ))}
    </div>
  );
}

export default function Dashboard() {
  const [alerts, setAlerts] = useState([]);
  const [watchlist, setWatchlist] = useState([]);

  useEffect(() => {
    const interval = setInterval(async () => {
      const res = await fetch("/workspace/signals/live-alerts.json");
      const data = await res.json();
      setAlerts(data.alerts.slice(-15));
    }, 5000);
    return () => clearInterval(interval);
  }, []);

  return (
    <div style={{ background: "#000", color: "#fff", minHeight: "100vh", padding: 16 }}>
      <AlertTicker alerts={alerts} />
      <WatchlistGrid tickers={watchlist} />
    </div>
  );
}

故意做得很小:4×4 观察名单,一条滚动警报,直接读 Bot 们写的那份 JSON。后面要加板块热力图,就是再铺一张按涨跌上色的格子;盈亏条也是同一套,对着 positions/live.json。先做出能跑的最小版,再往上叠。

它替不了什么

这块得说清楚。吹过了,你会信一条不该信的信号:

这是给从来没有机构权限的个人用的工具,不是给持牌基金当彭博替代品。

实际花多少钱

对照一个彭博席位一年 27660 美元,差不多便宜九倍。覆盖的是终端日常流程,不是它那根授权数据的芯。

一天怎么用

跑起来之后,正常一次开盘是这样:

  1. 一个标签页开看板,一个开 Grok Bot
  2. Alerts Bot 蹦出来:「NVDA — SEC 8-K,扩产,HIGH,当天窗口」
  3. 你问 Analyst Bot 街上怎么看这只
  4. 你问 Position Bot 现在板块敞口怎样
  5. 你自己决定。下单走你本来就在用的券商。这套东西故意不帮你把单子送出去

单独拿出来,没有哪一块很惊人。不一样的是:全在一个地方,一直在跑,而不是你在六个服务之间切标签、把线索弄丢。

真要搭,有两件事比别的都先做对:一份大家都认的共享文件结构;职责很窄的专人,而不是一个 Bot 兼六份工。剩下的,都是在这两条上面迭代。

改写自 MAX(@maxdeg0)2026 年 8 月 29 日的 X 长文。原文:https://x.com/maxdeg0/status/2093716508006395998