交易模拟器

一个本地优先的交易模拟器,展示多个AI驱动的交易者、其账户分类和市场遥测数据,通过统一的Gradio UI界面。

  • by hardikjoshi746
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 hardikjoshi746/MCP_stock_picker

使用说明

交易者UI和调度器

equity_traders 是一个本地首创的交易模拟,在统一的Gradio UI中展示了多个人工智能交易员、他们的账户分类账和市场遥测。每个交易者都在一个自主循环中运行(通过 trading_floor.py),通过MCP风格的代理与上游账户/市场服务器交互,并公开实时投资组合指标、持有量、交易和执行日志。

目录

  1. 架构概述
  2. 关键特征和指标
  3. 项目布局
  4. 安装
  5. 配置
  6. 运行应用程序
  7. 后台调度程序
  8. 重置和维护
  9. 故障排除

架构概述

  • 前端(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)

安装

  1. 先决条件

    • Python 3.12+(UV自动管理以下版本 .local/share/uv)
    • 紫外线 包/依赖关系管理器
    • SQLite(预装在macOS/Linux上)
  2. 克隆和引导

    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是一个独立的编写器;避免同时运行冲突的脚本或切换到更强大的后备存储。