AI 驱动的港股/美股交易文件系统
Longbridge FS 是一个基于文件系统的股票交易框架,通过读写文件完成行情查询与交易操作。天然适配 AI Agent 的文件操作能力。
核心理念:将股票交易抽象为文件系统操作,让 AI Agent 可以像操作文件一样进行交易。无需学习复杂的 API,只需读写文本文件即可完成行情查询、订单提交、风控管理等所有操作。
- 文件驱动 — 通过文件读写完成所有交易操作,AI Agent 无需学习 API
- AI 友好 — JSON 输出,天然适配 AI Agent 的文件操作能力
- 审计追踪 — 所有交易记录在 beancount 格式的 append-only 账本中
- 盈亏追踪 — 自动生成
pnl.json和portfolio.json,实时追踪持仓盈亏 - 风控止损 — 配置
risk_control.json实现自动止损/止盈 - 容错降级 — 网络故障时自动切换到 Mock 模式,保证开发测试不中断
- Kill Switch — 创建
.kill文件即可安全停止 controller
- 使用 AI Agent 进行自动化交易
- 构建基于规则的交易系统
- 交易策略回测与模拟
- 学习股票交易 API
- 交易记录审计与分析
longbridge-fs/
├── cmd/
│ └── longbridge-fs/
│ └── main.go # 入口:init / controller 命令
├── internal/
│ ├── model/types.go # 共享数据结构
│ ├── ledger/
│ │ ├── parser.go # Beancount 解析
│ │ └── compact.go # 已执行订单归档压缩
│ ├── credential/credential.go # 凭证加载 → config.Config
│ ├── broker/broker.go # 订单执行(SDK / Mock)
│ ├── market/market.go # 行情获取(overview / K线 / 分时)
│ ├── account/account.go # 账户状态 / PnL / Portfolio
│ └── risk/risk.go # 风控引擎(止损/止盈)
├── configs/
│ └── credential # API 凭证 (key=value)
├── fs/ # 运行时数据目录
│ ├── account/
│ │ ├── state.json # 账户状态
│ │ └── pnl.json # 持仓盈亏
│ ├── trade/
│ │ ├── beancount.txt # 交易账本
│ │ ├── risk_control.json # 风控规则
│ │ └── blocks/ # 归档区块
│ └── quote/
│ ├── hold/{SYMBOL}/ # 行情数据 (.txt + .json)
│ ├── track/ # 行情触发器
│ └── portfolio.json # 组合总览
├── Makefile
├── go.mod
└── go.sum
make build
# 或
go build -o build/longbridge-fs ./cmd/longbridge-fs创建 configs/credential:
api_key=YOUR_APP_KEY
secret=YOUR_APP_SECRET
access_token=YOUR_ACCESS_TOKEN
# 初始化文件系统
make init
# 或: ./build/longbridge-fs init --root ./fs
# Mock 模式(无需 API)
make dev
# 或: ./build/longbridge-fs controller --root ./fs --mock
# 真实 API
make run
# 或: ./build/longbridge-fs controller --root ./fs --credential ./configs/credentialUsage: longbridge-fs <command> [options]
Commands:
init 初始化 FS 目录结构
controller 启动交易控制器守护进程
Options for controller:
--root PATH FS 根目录 (default: .)
--interval DURATION 轮询间隔 (default: 2s)
--credential FILE 凭证文件路径 (default: credential)
--mock Mock 模式,不调用 API (default: false)
--compact-after N 每 N 笔执行后压缩归档, 0=禁用 (default: 10)
cat >> fs/trade/beancount.txt << 'EOF'
2026-02-11 * "ORDER" "BUY 9988.HK Alibaba"
; intent_id: 20260211-001
; side: BUY
; symbol: 9988.HK
; market: HK
; qty: 1000
; type: LIMIT
; price: 161
; tif: DAY
EOFController 会自动检测新 ORDER 并执行,结果追加为 EXECUTION 或 REJECTION。
# 触发行情获取
touch fs/quote/track/AAPL.US
# Controller 获取后数据在 hold 目录,track 文件被自动删除
cat fs/quote/hold/AAPL.US/overview.json # 实时报价 (JSON)
cat fs/quote/hold/AAPL.US/overview.txt # 实时报价 (文本)
cat fs/quote/hold/AAPL.US/D.json # 日K (120天, JSON)
cat fs/quote/hold/AAPL.US/W.json # 周K (52周, JSON)
cat fs/quote/hold/AAPL.US/5D.json # 5分钟K线 (JSON)
cat fs/quote/hold/AAPL.US/intraday.json # 分时数据 (JSON)# PnL 报告 (持仓 + 当前价格 → 未实现盈亏)
cat fs/account/pnl.json
# 组合总览 (所有持仓 + 行情)
cat fs/quote/portfolio.json# 配置止损/止盈规则
cat > fs/trade/risk_control.json << 'EOF'
{
"700.HK": { "stop_loss": 280.0, "take_profit": 350.0 },
"AAPL.US": { "stop_loss": 150.0, "take_profit": 210.0, "qty": "10" }
}
EOF
# 当价格触及阈值时,controller 自动追加 SELL ORDER 到 beancount.txt
# 触发后规则自动移除,避免重复下单touch fs/.kill # controller 下一轮检测到后安全退出make fmt # 格式化
make lint # 静态检查
make test # 运行测试
make clean # 清理构建
make deps # 下载依赖Controller 会批量处理所有未执行的 ORDER,每个订单处理完成后追加结果:
# 一次性提交多个订单
cat >> fs/trade/beancount.txt << 'EOF'
2026-02-11 * "ORDER" "BUY AAPL"
; intent_id: 20260211-001
; side: BUY
; symbol: AAPL.US
; qty: 100
; type: LIMIT
; price: 180.00
; tif: DAY
2026-02-11 * "ORDER" "BUY MSFT"
; intent_id: 20260211-002
; side: BUY
; symbol: MSFT.US
; qty: 50
; type: MARKET
; tif: DAY
EOF每个订单执行后,controller 会追加 EXECUTION 或 REJECTION 记录:
2026-02-11 * "EXECUTION" "BUY AAPL.US @ 179.50"
; intent_id: 20260211-001
; order_id: 1234567890
; side: BUY
; symbol: AAPL.US
; filled_qty: 100
; avg_price: 179.50
; status: FILLED
; executed_at: 2026-02-11T10:30:00Z
当执行订单数量达到 --compact-after 阈值时,controller 会自动将已执行订单归档到 fs/trade/blocks/ 目录:
fs/trade/blocks/
├── block_0001.txt # 前 10 笔订单
├── block_0002.txt # 第 11-20 笔订单
└── ...
主账本文件 beancount.txt 只保留未执行的订单,保持文件精简。
行情数据同时提供 JSON 和文本两种格式:
JSON 格式(适合程序解析):
{
"symbol": "AAPL.US",
"last_done": 180.50,
"prev_close": 179.00,
"open": 179.50,
"high": 181.00,
"low": 178.50,
"volume": 45000000,
"turnover": 8100000000,
"timestamp": "2026-02-11T16:00:00Z"
}文本格式(适合人类阅读):
Symbol: AAPL.US
Price: $180.50 Change: +1.50 (+0.84%)
Open: $179.50 High: $181.00 Low: $178.50
Volume: 45,000,000 Turnover: $8.1B
Updated: 2026-02-11 16:00:00 EST
- 检查凭证文件是否存在且格式正确
- 使用
--mock模式测试基本功能 - 查看日志输出,检查具体错误信息
- 检查 beancount.txt 格式是否正确(每个字段必须以
;开头) - 确认 controller 正在运行(
ps aux | grep longbridge-fs) - 查看是否有 REJECTION 记录,了解拒绝原因
- 确认 track 文件已创建
- 等待下一个轮询周期(默认 2 秒)
- 检查网络连接和 API 配额
- 不要将
configs/credential文件提交到版本控制系统 - 使用 Mock 模式进行开发和测试
- 在生产环境设置合理的风控规则
- 定期备份 beancount.txt 账本文件
- 使用只读 API token 进行行情查询
A: Beancount 是一种成熟的复式记账格式,具有良好的可读性和可审计性。每笔交易都是 append-only,便于追溯历史记录。
A: 可以配合 cron 或其他调度工具,在指定时间写入 ORDER 到 beancount.txt 文件。
A: 支持所有 Longbridge API 支持的市场,包括港股(HK)、美股(US)、A股(CN)等。
A: 不建议。多个 controller 可能导致订单重复执行。如需分布式部署,请使用文件锁机制。
欢迎提交 Issue 和 Pull Request!
MIT License - 详见 LICENSE 文件