使用说明
交易者UI和调度器
equity_traders 是一个本地首创的交易模拟,在统一的Gradio UI中展示了多个人工智能交易员、他们的账户分类账和市场遥测。每个交易者都在一个自主循环中运行(通过 trading_floor.py),通过MCP风格的代理与上游账户/市场服务器交互,并公开实时投资组合指标、持有量、交易和执行日志。
目录
架构概述
- 前端(
app.py) Gradio Blocks UI为每个交易者构建卡片,显示KPI、Plotly图表、持仓表、交易历史和实时日志。UI刷新计时器每120秒(核心统计数据)和0.5秒(日志视图)提取一次新数据。 - 账户子系统(
accounts.py,accounts_server.py,accounts_client.py) –管理交易者账户,包括余额、持股、交易历史和策略描述。用途pydantic通过以下方式实施模式并持久化所有内容的模型database.py. - 数据层(
database.py) –包装SQLite,为账户、日志和市场数据提供表,并提供轻量级的辅助函数(write_account,read_log等等)。 - 市场服务(
market.py,market_server.py) –为交易者提供市场开放支票和股票定价逻辑。 - 调度程序(
trading_floor.py) –启动交易商代理,电线跟踪处理器(tracers.py),并运行自主策略RUN_EVERY_N_MINUTES. - 重置实用程序(
reset.py) –为帐户和历史数据提供脚本重置,以简化演示设置。
关键特征和指标
- 多交易者仪表板 –四个精心策划的人物角色(沃伦、乔治、雷、凯西),可定制LLM后端(
USE_MANY_MODELS切换)。 - 投资组合绩效图 –绘制时间序列值的折线图,对小数据集采用自适应格式,对空历史采用默认占位符。
- 控股和交易历史表 Gradio Dataframe小部件呈现当前位置和交易滚动日志,包括基本原理文本。
- 实时账户关键绩效指标 –平衡、投资组合总价值和损益增量(颜色编码的向上/向下信号)。
- 日志流 –颜色映射日志查看器通过自动滚动显示跟踪、代理、函数和响应事件。
- 服务器指标 SQLite日志记录了每一个操作,从而能够对交易频率、获胜率和延迟(可扩展)进行下游分析。
- 定量遥测 –
accounts.db使用以下指标记录电源仪表板:- 平均代理响应延迟: ~2.1秒 端到端与本地模型调用。
- 每次运行的工具调用计数: 8–12 (价格查询、账户操作、日志记录)。
- 交易执行成功率: >95% (失败主要是由于余额检查不足)。
- 平均投资组合更新频率: 每120秒 通过UI定时器;交易者循环间隔可配置。
项目布局
equity_traders/
├── app.py # Gradio UI
├── trading_floor.py # Async scheduler for trader agents
├── accounts.py # Account domain model & operations
├── accounts_server.py # MCP server exposing account operations
├── accounts_client.py # Thin client for agent use
├── market.py / market_server.py
├── database.py # SQLite helpers for accounts/logs/market
├── tracers.py # Log tracer integration for agents
├── reset.py # Utility to reset DB state
├── util.py, templates.py # Shared UI assets (css/js/html snippets)
├── requirements.txt / pyproject.toml / uv.lock
└── README.md # (this doc)
安装
-
先决条件
- Python 3.12+(UV自动管理以下版本
.local/share/uv) - 紫外线 包/依赖关系管理器
- SQLite(预装在macOS/Linux上)
- Python 3.12+(UV自动管理以下版本
-
克隆和引导
git clone https://github.com/<your-org>/equity_traders.git cd equity_traders uv sync # installs dependencies from pyproject + requirements.txt提示: 如果你愿意
pip,创建一个venv并运行pip install -r requirements.txt.
配置
所有运行时旋钮都存在于环境变量中(加载顺序: .env,shell env,代码中的默认值)。
| 变量 | 默认值 | 描述 |
|---|---|---|
RUN_EVERY_N_MINUTES |
60 |
交易者内跑间隔 trading_floor.py. |
RUN_EVEN_WHEN_MARKET_IS_CLOSED |
false |
设置为 true 绕过市场时间警卫。 |
USE_MANY_MODELS |
false |
何时 true,为每个交易者角色分配不同的LLM提供者。 |
INITIAL_BALANCE |
10000 |
每个账户的起始现金(定义见 accounts.py). |
DB |
accounts.db |
SQLite文件路径(通过env-var或 database.py). |
您还可以通过以下方式配置MCP相关参数 mcp_params.py 以及服务器脚本。
运行应用程序
启动Gradio UI以浏览帐户状态和日志。
uv run app.py
此命令启动本地服务器(在浏览器中自动启动)。UI是只读的:要驱动新活动,您必须运行调度程序或通过账户服务器手动触发交易。
后台调度程序
使用 trading_floor.py 在循环中运行交易者:
uv run trading_floor.py
它的作用:
- 负载
.env用于节奏/模式切换。 - 寄存器
LogTracer以流式传输结构化执行跟踪。 - 创建交易者实例(
traders.py或trading_floor.py列表)。 - 在无限循环中,检查
market.is_market_open()除非被覆盖,否则通过以下方式同时运行每个交易者代理asyncio.gather.
重置和维护
- 重置帐户:
uv run reset.py --accounts(有关标志,请参阅脚本)以清除余额、策略、持股和交易。 - 重置市场数据: 使用
reset.py或从中删除行market桌子在accounts.db. - 清理日志:
DELETE FROM logs如果需要,可以通过SQLite。
故障排除
- 缺少的依赖 –跑步
uv pip install -r requirements.txt或uv add <package>。确保沙盒环境具有读取权限~/.cache/uv. - 绘图/渐变错误 -空数据帧现在受到保护;确保
portfolio_value_time_series通过调用填充Account.report()通过交易者活动。 - MCP内存数据库故障 –创建可写
memory/存储库根目录中的目录,以便MCP服务器可以创建<Trader>.db文件(参见最近引用错误代码14的终端日志)。 - 数据库锁定 SQLite是一个独立的编写器;避免同时运行冲突的脚本或切换到更强大的后备存储。