内容
# 交易大脑
个人交易副驾驶,构建为一组适用于Claude的MCP服务器。连接Claude到**Sierra Chart**(实时市场数据和账户状态)和**Discord**(用作知识源的交易教育社区),并使用本地SQLite日志进行持久记忆。
## 内部结构
| MCP | 目的 | 工具 |
|---|---|---|
| **sierra-mcp** | Sierra Chart桥接器(期货:ES、NQ、MES、MNQ在CME) | `ping_sierra`、`get_quote`、`get_recent_bars`(DTC)、`get_recent_bars_scid`(本地文件)、`get_latest_tick_scid`、`get_scid_status`、`get_futures_context`、`get_market_features`、`list_trade_accounts`、`get_account_balance`、`get_positions`、`get_open_orders`、`place_sim_market_order`、`close_sim_position` |
| **discord-mcp** | 只读Discord频道作为知识库 | `list_servers`、`list_channels`、`read_recent_messages`、`search_messages`、`fetch_image`、`list_groups`、`read_group` |
| **journal-mcp** | 本地SQLite记忆,用于观察、交易、审查和结构化剧本知识 | 工具:`log_observation`、`log_trade`、`update_trade`、`search_journal`、`list_recent`、`daily_summary`、`add_knowledge_item`、`search_knowledge`、`list_knowledge_topics`、`review_knowledge_item`、`promote_observation_to_knowledge`、`list_workflows`、`premarket_review`、`postmarket_review`、`weekly_trading_review`、`discord_study_ingest` |
Discord是只读的。journal-mcp只写入本地SQLite日志数据库。sierra-mcp包含严格控制的模拟/评估订单工具。实际订单放置不在范围内。
## 它们如何与Sierra Chart通信
两种路径,互补:
1. **DTC协议**(`get_quote`、`get_recent_bars`,账户/仓位)— 通过Sierra本地DTC服务器的TCP JSON。需要Denali Exchange Data Feed + Service Package 11+ 才能进行完整市场数据重新分配。SC数据(免费/延迟)拒绝DTC重新分配。
2. **`.scid`文件读取器**(`get_recent_bars_scid`、`get_latest_tick_scid`)— 直接从磁盘读取Sierra的本地tick存储文件,实时聚合tick成条形,可以读取最新的tick并具有文件新鲜度。无论DTC权限如何都有效。~数秒延迟实时(文件刷新频率)。
`get_futures_context` 是紧凑的ES/NQ上下文包:最新tick、更新时间、近期条形、近似当前Globex会话OHLC/VWAP/增量、ATR和简单偏差读取。`get_market_features` 是指标引擎路径:它从原始`.scid` tick计算当前/之前的Globex VWAP、POC、VAH/VAL、高量节点、增量和价格位置。
## 要求
- Windows(Sierra Chart是Windows原生;路径假设为`D:\SierraChart\Data\`)
- Python 3.11+
- [uv](https://docs.astral.sh/uv/) 用于环境/锁定文件管理
- 具有启用DTC的Sierra Chart账户(全局设置 → Sierra Chart服务器设置 → 编码:**JSON**)
- Discord机器人令牌(来自 [discord.com/developers/applications](https://discord.com/developers/applications) 的应用程序,启用消息内容意图)
- Claude Desktop
## 设置
```powershell
# 克隆
git clone https://github.com/AndreuCrespo/trading-brain.git D:\inversion
cd D:\inversion
# 安装每个MCP(创建每个项目的.venv + uv.lock)
cd sierra-mcp ; uv sync ; cd ..
cd discord-mcp ; uv sync ; cd ..
cd journal-mcp ; uv sync ; cd ..
```
每个项目,复制 `.env.example` → `.env` 并填写密钥。discord-mcp的 `.env`:
```
DISCORD_BOT_TOKEN=您的机器人令牌
```
sierra-mcp 环境变量(均为可选,默认值合理):
```
SIERRA_DTC_HOST=127.0.0.1
SIERRA_DTC_PORT=11099
SIERRA_DTC_HISTORICAL_PORT=11098
SIERRA_DATA_PATH=D:\SierraChart\Data
```
对于订单工具,请从 `sierra-mcp/safety.example.json` 创建一个本地gitignored `sierra-mcp/safety.json`,并列出Claude允许操作的演示/评估账户:
```json
{
"allowed_sim_accounts": ["SimTB1"]
}
```
journal-mcp 环境变量(可选):
```
JOURNAL_DB_PATH=D:\inversion\journal-mcp\data\journal.db
```
## 连接到Claude Desktop
编辑 `%APPDATA%\Claude\claude_desktop_config.json` 并添加:
```json
{
"mcpServers": {
"sierra": {
"command": "D:\\inversion\\sierra-mcp\\.venv\\Scripts\\python.exe",
"args": ["D:\\inversion\\sierra-mcp\\src\\sierra_mcp\\server.py"]
},
"discord": {
"command": "D:\\inversion\\discord-mcp\\.venv\\Scripts\\python.exe",
"args": ["D:\\inversion\\discord-mcp\\src\\discord_mcp\\server.py"]
},
"journal": {
"command": "D:\\inversion\\journal-mcp\\.venv\\Scripts\\python.exe",
"args": ["D:\\inversion\\journal-mcp\\src\\journal_mcp\\server.py"]
}
}
}
```
完全重启Claude Desktop(从系统托盘退出,而不是最小化)。MCP出现在配置 → 开发人员下。
> 注意:参数使用绝对文件路径而不是 `python -m sierra_mcp.server`,因为Claude Desktop在调用`-m`模块模式时混淆了项目路径中的`ó`。直接加载文件绕过了这一点;每个`server.py`在顶部都有一个`sys.path`垫片,以便其包导入解析。
## 开发工作流(MCP检查器)
```powershell
cd sierra-mcp # 或 discord-mcp / journal-mcp
uv run mcp dev src/sierra_mcp/server.py
```
在检查器UI中,将命令指向每个项目的venv python,参数指向文件路径(与Claude Desktop相同的原因):
- 命令:`D:\inversion\sierra-mcp\.venv\Scripts\python.exe`
- 参数:`D:\inversion\sierra-mcp\src\sierra_mcp\server.py`
## Discord频道分类法
discord-mcp 将频道分组为 [`discord-mcp/groups.yml`](discord-mcp/groups.yml) 中定义的域类别:`prep`、`post`、`recursos`、`fondeo`、`futuros`、`stocks`。通过确切名称或前缀匹配。编辑YAML以添加新频道 - 无需代码更改。
`read_group` 并行读取组中每个频道的消息:
```
read_group(server="...", group="post", limit_per_channel=5)
# → 同时获取postmarket-futuros、postmarket-stocks、setups-database、writes-up的快照
```
## 日志记忆
journal-mcp 将本地记忆存储在SQLite中(默认为 `journal-mcp/data/journal.db`,被git忽略)。它故意保持简单:观察和交易,可通过文本、符号、标签、日期和类型搜索。
将其用于市场观察、交易计划、事后分析、重复错误、规则以及每日/每周审查原始资料。
它还具有一个用于从Discord/PPT/视频/手动审查中得出的剧本知识的结构化`knowledge_items`表。知识项具有生命周期字段:`status`(`draft`、`reviewed`、`approved`、`active`、`stale`、`deprecated`)、`confidence`(`explicit`、`inferred`、`uncertain`)、`kind`、`topic`、来源引用、有效日期和可选`superseded_by`。交易决策工作流程应使用`search_knowledge`默认值,仅返回`approved`/`active`项。
它还公开了工作流工具(和匹配的MCP提示),这些工具从Claude Desktop协调其他MCP:
- `premarket_review`:读取Discord `prep`、Sierra市场特征和日志剧本/风险记忆。
- `postmarket_review`:读取Discord `post`、图表截图、Sierra市场特征和日志记忆。
- `weekly_trading_review`:总结周从日志 + Discord文章 + 当前市场特征。
- `discord_study_ingest`:读取Discord课程频道/截图并保存结构化的草稿剧本知识以供后续审查/批准。
示例流程:
```
log_observation(content="MES 在后市背景下拒绝 VWAP", tags=["vwap", "post"], symbol="MES")
log_trade(symbol="MESM26-CME", side="long", entry_price=7590.5, quantity=1, account="Sim1", setup="EF")
daily_summary(date="2026-06-01")
```
## 示例对话
> *"从Estudio trading donAdri的`post`组中读取最后5条消息,获取MESM26-CME的最后10个1分钟条形,并告诉我讨论的内容是否与近期价格走势相符。*
> *"2029-5月的帖子在postmarket-futuros中有两个附件截图。阅读它们并总结EOM交易的样子。*
> *"带我了解 `📘15-theplan` 并告诉我 donAdri 的系统如何处理仓位大小。*
> *"将今天的主要错误记录为带有`risk`和`discipline`标签的日记观察,然后显示我最近10条关于MES的日记记录。*
> 在会话前运行 `premarket_review` 提示,然后如果看起来正确,将最终计划保存到日记中。
## 状态和已知限制
- ✅ `ping_sierra`、`get_recent_bars_scid` 验证为实时数据
- ✅ `get_latest_tick_scid` 在MESM26-CME上进行烟雾测试,文件/滴答年龄约为1-2秒
- ✅ `get_futures_context` 在MESM26-CME上使用当前Globex会话进行烟雾测试
- ✅ `get_market_features` 计算当前/之前的Globex VWAP、POC、VAH/VAL和值位置标签,来自本地`.scid`滴答
- ✅ Discord工具均针对实时社区服务器进行验证
- ✅ journal-mcp 在本地SQLite上进行烟雾测试
- ⚠️ `get_quote` / `get_recent_bars`(DTC)返回 *"请求未授权"*,尽管具有SP11 + Denali活动。正在使用`get_recent_bars_scid`变通方法;正在与Sierra支持团队进行调查。
- ✅ `get_positions` 在DTC消息ID修复后正确响应;在添加订单放置之前使用手动打开的模拟仓位验证。
- ✅ `place_sim_market_order` 预览/防护验证。实时提交需要Sierra DTC监听和交易模拟模式开启。
- ⚠️ `get_account_balance` 在模拟账户上返回空值。Sierra可能不会为交易模拟模式账户维护余额。
- 无真实货币订单放置。
## 路线图
短期内,按优先级顺序:
1. 在实际Claude Desktop对话中使用journal-mcp,并根据实际工作流程痛点完善模式。
2. 在`.scid`滴答之上扩展市场特征:RTH/ETH分割、pVWAP/mVWAP、ADR/RVOL和更丰富的市场配置文件/状态标签。
3. 如果需要真正的bid/ask/DOM实时数据,请在Sierra Chart内构建一个ACSIL桥,将滴答/报价/深度写入本地文件或套接字。
4. 订单放置(首先是模拟,带有明确的每次调用确认)。
长期目标:更多数据源作为单独的MCP(SEC EDGAR、FRED、新闻)、简单的`.scid`基准测试框架。
## 布局
```
inversion/
├── README.md
├── .gitignore
├── sierra-mcp/
│ ├── CLAUDE.md # 每个项目的未来Claude会话指南
│ ├── pyproject.toml
│ ├── uv.lock
│ └── src/sierra_mcp/
│ ├── server.py # FastMCP工具
│ ├── dtc_client.py # 异步DTC TCP/JSON
│ ├── dtc_messages.py
│ ├── scid_reader.py # 本地.scid滴答文件读取器
│ └── config.py
└── discord-mcp/
├── pyproject.toml
├── uv.lock
├── groups.yml # 频道分类法(编辑我,不是代码)
└── src/discord_mcp/
├── server.py
├── client.py # Discord REST API客户端
├── groups.py # YAML加载器 + 频道匹配器
└── config.py
└── journal-mcp/
├── pyproject.toml
├── uv.lock
├── data/ # 本地SQLite数据库,被git忽略
└── src/journal_mcp/
├── server.py # FastMCP工具
├── db.py # SQLite模式/帮助器
└── config.py
```