项目简介
IBTraderMCP 是一个基于 FastMCP 框架开发的盈透证券 (Interactive Brokers) 交易数据服务器。它允许大型语言模型 (LLM) 通过标准化的 Model Context Protocol (MCP) 协议,安全地访问您的盈透证券账户信息、查询实时/历史市场数据、获取公司基本面数据以及交易日历等。此服务器作为LLM应用与IB交易平台之间的高效桥梁,提供可扩展的数据服务,赋能智能体进行更高级的金融分析和决策支持。
主要功能点
- 账户与仓位查询:
- 获取账户摘要,包括净清算价值、现金余额、可用资金、购买力及保证金信息。
- 查询所有股票和期权持仓的详细信息,包含代码、数量、市值、平均成本、未实现盈亏和已实现盈亏。
- 提供全面的仓位汇总分析,如总市值、总盈亏和持仓分布比例。
- 市场数据获取:
- 获取股票的历史K线数据,支持灵活的时间范围和多种K线周期(如1分钟、5分钟、30分钟、1小时、日K、周K、月K)。
- 内置智能缓存机制(使用SQLite本地缓存),显著提升重复查询的市场数据获取速度。
- 交易日历工具:
- 查询指定日期范围内的交易日及其每日开盘、收盘时间。
- 支持多个主要交易所(如NYSE、NASDAQ)。
- 基本面数据查询:
- 获取公司基本信息,如公司名称、行业、板块、交易所等(无需IB订阅)。
- 获取公司概览、财务摘要和分析师报告(后三项需购买IB基本面数据订阅)。
- 日志记录与缓存:
- 结构化日志记录系统,便于操作审计和错误追踪。
- 将市场数据和操作日志持久化存储在本地SQLite数据库中。
安装步骤
在运行 IBTraderMCP 服务器之前,请确保满足所有环境要求并完成配置。
-
环境要求:
- Python 3.8 或更高版本
- 已安装并运行 Interactive Brokers Gateway 或 TWS (Trader Workstation) 应用程序。
- 一个有效的盈透证券账户(可以是模拟盘或实盘)。
-
克隆仓库: 打开您的终端或命令行工具,执行以下命令克隆项目仓库:
git clone https://github.com/WisdomShun/IBTraderMCP.git cd IBTraderMCP -
安装依赖: 进入项目目录后,安装所有Python依赖:
pip install -e . -
配置环境变量: 复制配置文件模板 '.env.example' 到 '.env' 文件:
cp .env.example .env编辑 '.env' 文件,根据您的盈透证券账户和API连接信息进行修改:
# Interactive Brokers Gateway 连接配置 IB_HOST=127.0.0.1 # IB Gateway 所在主机IP地址 IB_PORT=7497 # IB Gateway API 端口。模拟盘通常是 7497,实盘是 7496。 IB_CLIENT_ID=1 # 客户端ID,确保您运行的每个API客户端使用唯一的ID。 IB_ACCOUNT=DU123456 # 替换为您的盈透证券账户号 (例如:U123456)。 # MCP 服务器监听配置 (供MCP客户端连接) MCP_ADDRESS=127.0.0.1 # MCP 服务器监听的IP地址 MCP_PORT=4211 # MCP 服务器监听的端口 MCP_PATH=/ibkr # MCP 服务器的API路径 # 缓存和日志配置 (可根据您的需求进行调整) CACHE_DB_PATH=./data/trading.db # SQLite 数据库文件路径 LOG_LEVEL=INFO # 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL) LOG_PATH=./logs/ # 日志文件存储目录重要安全提示: 盈透证券的账户密码通常需要通过环境变量来安全配置,而不是直接写入 '.env' 文件。请根据您的IB Gateway或TWS配置,将您的IB(模拟/实盘)账号密码信息配置到操作系统环境变量中,例如:
- 'TWS_PASSWORD' (用于实盘账号密码)
- 'TWS_PASSWORD_PAPER' (用于模拟账号密码)
- 'TWS_USERID' (用于实盘账号用户名)
- 'TWS_USERID_PAPER' (用于模拟账号用户名)
-
启动 IB Gateway 或 TWS: 在启动 IBTraderMCP 服务器之前,请务必启动您的 IB Gateway 或 TWS。同时,确保在 IB 应用程序的“配置”->“API”->“Settings”中已启用 API 连接,并核对端口设置与您 '.env' 文件中的 'IB_PORT' 一致。
服务器启动与MCP客户端配置
-
运行 IBTraderMCP 服务器: 在项目根目录运行以下命令来启动 MCP 服务器:
python -m src.server或者使用 FastMCP 命令行工具:
fastmcp run src/server.py --host 127.0.0.1 --port 4211 --path /ibkr服务器启动后,它将监听 'MCP_ADDRESS' 和 'MCP_PORT'(默认 '127.0.0.1:4211'),并提供 '/ibkr' 路径下的服务。
-
MCP 客户端的连接配置示例: 您的 MCP 客户端(例如,一个集成LLM的智能体框架)需要一个JSON格式的配置文件来连接 IBTraderMCP 服务器并了解其提供的工具。以下是一个配置示例,展示了客户端如何连接服务器以及服务器公开的工具及其参数:
{ "name": "IBTraderMCP", "command": ["python", "-m", "src.server"], "args": [ "--transport", "streamable-http", "--host", "127.0.0.1", "--port", "4211", "--path", "/ibkr", "--log-level", "debug" ], "description": "连接盈透证券 (Interactive Brokers) 交易平台,提供账户、仓位、市场数据和基本面分析的上下文信息及功能。", "tools": [ { "name": "get_account_summary", "description": "获取账户摘要,包括净清算价值、现金余额、可用资金、购买力及保证金信息。", "parameters": { "type": "object", "properties": { "currency": { "type": "string", "description": "筛选的币种 (默认: USD)", "default": "USD" } } } }, { "name": "get_stock_positions", "description": "检索所有当前股票仓位,包含代码、数量、市值、平均成本和未实现盈亏等详细信息。", "parameters": { "type": "object", "properties": {} } }, { "name": "get_option_positions", "description": "检索所有当前期权仓位,包含合约规格(行权价、到期日、看涨/看跌)、数量、市值和未实现盈亏等详细信息。", "parameters": { "type": "object", "properties": {} } }, { "name": "get_position_summary", "description": "获取全面的仓位汇总,包括总市值、总盈亏、仓位分配百分比以及股票与期权的细分。", "parameters": { "type": "object", "properties": {} } }, { "name": "get_historical_kline", "description": "获取历史K线(OHLCV)数据,支持灵活的时间范围。支持多种K线周期(1分钟至1个月),并利用缓存机制提高性能。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码 (例如: 'AAPL', 'TSLA')" }, "bar_size": { "type": "string", "description": "K线周期 - '1D' (日K), '1W' (周K), '1M' (月K), '1H' (小时K), '30min', '15min', '5min', '1min'", "default": "1D" }, "duration": { "type": "string", "description": "时间范围 - 例如: '1 Y' (1年), '6 M' (6个月), '1 W' (1周), '1 D' (1天)", "default": "1 Y" }, "end_datetime": { "type": "string", "description": "K线数据的结束日期/时间 (ISO格式,默认当前时间)"}, "use_cache": { "type": "boolean", "description": "是否使用缓存数据以加快检索速度 (默认: true)", "default": true }, "force_refresh": { "type": "boolean", "description": "是否强制刷新,忽略缓存直接从IB获取数据 (默认: false)", "default": false } }, "required": ["symbol"] } }, { "name": "get_daily_kline", "description": "获取指定天数的日K线数据。方便的日OHLCV数据检索封装。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" }, "days": { "type": "integer", "description": "要检索的交易日天数 (默认: 365)", "default": 365 } }, "required": ["symbol"] } }, { "name": "get_weekly_kline", "description": "获取指定周数的周K线数据。适用于中期趋势分析。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" }, "weeks": { "type": "integer", "description": "要检索的周数 (默认: 52)", "default": 52 } }, "required": ["symbol"] } }, { "name": "get_monthly_kline", "description": "获取指定月数的月K线数据。理想的长期趋势分析和历史业绩回顾。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" }, "months": { "type": "integer", "description": "要检索的月数 (默认: 12)", "default": 12 } }, "required": ["symbol"] } }, { "name": "get_trading_calendar", "description": "获取指定日期范围内带有市场开盘/收盘时间的交易日历。返回排除周末和节假日的交易日列表。", "parameters": { "type": "object", "properties": { "start_date": { "type": "string", "description": "开始日期,格式为 YYYY-MM-DD" }, "end_date": { "type": "string", "description": "结束日期,格式为 YYYY-MM-DD" }, "exchange": { "type": "string", "description": "交易所代码 (默认: 'NYSE')", "default": "NYSE" } }, "required": ["start_date", "end_date"] } }, { "name": "get_company_info", "description": "获取公司基本信息,包括公司名称、行业分类、板块、主要交易所和货币。无需IB订阅。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" } }, "required": ["symbol"] } }, { "name": "get_company_overview", "description": "获取全面的公司概况,包括业务描述、运营摘要和公司结构。需要IB基本面数据订阅。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" } }, "required": ["symbol"] } }, { "name": "get_financial_summary", "description": "获取财务摘要,包括营收、利润、利润率、市盈率、每股收益 (EPS) 和其他基本面指标。需要IB基本面数据订阅。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" } }, "required": ["symbol"] } }, { "name": "get_analyst_reports", "description": "获取分析师推荐、共识评级、目标价和华尔街分析师的近期评级变化。需要IB基本面数据订阅。", "parameters": { "type": "object", "properties": { "symbol": { "type": "string", "description": "股票代码" } }, "required": ["symbol"] } } ] } -
基本使用方法: 启动 IBTraderMCP 服务器后,您的 MCP 客户端(例如,一个集成 LLM 的智能体)就可以通过配置的地址和端口连接到该服务器。LLM 智能体可以像调用普通函数一样,通过 JSON-RPC 请求服务器上公开的各种“工具”(例如 'get_account_summary' 或 'get_daily_kline'),并传递相应的参数。服务器会执行这些操作,通过 'ib_insync' 库与盈透证券 API 交互,然后返回结构化的数据,供 LLM 进行分析、报告生成或作为进一步决策的上下文信息。例如,LLM 可以请求“查询苹果公司 (AAPL) 最近30天的日K线数据”,服务器将执行 'get_daily_kline(symbol="AAPL", days=30)' 并返回结果。
信息
分类
商业系统