使用说明
盈透证券MCP服务器
模型上下文协议(MCP)服务器,连接到Interactive Brokers API,用于全面的交易操作、市场数据检索和投资组合管理。
特性
- 实时市场数据:获取实时报价、买卖价格和市场数据
- 历史数据:使用可定制的时间框架检索历史价格数据
- 投资组合管理:查看头寸、账户摘要和投资组合指标
- 订单管理:下单、修改和取消订单
- 账户信息:访问账户详细信息、购买力和现金余额
- 多资产支持:股票、期权、期货、外汇等
- 连接管理:TWS/IB网关的自动连接处理
可用工具
连接管理
connect_to_ibkr()-手动建立与IBKR的连接get_connection_status()-检查当前连接状态
账户和投资组合
get_account_summary()-获取现金、购买力等账户摘要。get_positions()-检索所有当前职位calculate_portfolio_metrics()-计算投资组合指标和损益
市场数据
get_market_data(symbol, exchange, sec_type)-获取实时市场数据get_historical_data(symbol, duration, bar_size, what_to_show, exchange, sec_type)-检索历史数据
订单管理
place_order(symbol, action, quantity, order_type, limit_price, exchange, sec_type)-下达交易订单get_open_orders()-获取所有未结/待处理订单get_all_orders()-获取所有订单(已完成和待处理)get_order_status(order_id)-检查特定订单的状态cancel_order(order_id)-取消现有订单
先决条件
盈透证券账户
- 活跃的盈透证券账户
- TWS(交易员工作站)或IB网关已安装并正在运行
- 在TWS/网关设置中启用API访问
TWS/IB网关设置
- 下载并安装 盈透证券的TWS或IB网关
- 启用API访问:
- 在TWS中:转到文件→ 全局配置→ API → 设置
- 选中“启用ActiveX和Socket客户端”--仅适用于Windows
- 添加受信任的IP地址(本地使用127.0.0.1)
- 配置端口:
- IB网关:默认端口4001
- TWS纸张交易:默认端口7497
- TWS实时交易:默认端口7496
安装
使用Docker(推荐)
docker pull gpolydatas/ibkr-mcp-server:latest
docker run -d --name ibkr-mcp-server \
-e IBKR_HOST=127.0.0.1 \
-e IBKR_PORT=4001 \
-e IBKR_CLIENT_ID=0 \
--network host \
gpolydatas/ibkr-mcp-server:latest
来源
git clone https://github.com/gpolydatas/ibkr-mcp-server.git
cd ibkr-mcp-server
pip install -r requirements.txt
python ibkr_mcp_server.py
配置
环境变量
| 变量 | 描述 | 默认值 | 示例 |
|---|---|---|---|
IBKR_HOST |
TWS/网关主机地址 | 127.0.0.1 |
127.0.0.1 |
IBKR_PORT |
TWS/网关端口 | 4001 |
4001 (网关), 7497 (TWS纸) |
IBKR_CLIENT_ID |
用于连接的客户端ID | 0 |
0 |
端口参考
| 服务 | 端口 | 描述 |
|---|---|---|
| IB网关 | 4001 | 通过网关进行实时/纸质交易 |
| TWS纸张交易 | 7497 | 通过TWS进行纸张交易 |
| TWS实时交易 | 7496 | 通过TWS进行实时交易 |
使用示例
基本连接测试
# Test connection to IBKR
result = await connect_to_ibkr()
print(result)
获取帐户信息
# Get account summary
account = await get_account_summary()
print(f"Buying Power: {account['account_info']['AvailableFunds']['value']}")
# Get current positions
positions = await get_positions()
for symbol, position in positions['positions'].items():
print(f"{symbol}: {position['position']} shares")
市场数据
# Get real-time market data for AAPL
market_data = await get_market_data("AAPL", "SMART", "STK")
print(f"AAPL Price: {market_data['market_data'].get('LAST', 'N/A')}")
# Get historical data
historical = await get_historical_data("AAPL", "1 D", "1 min", "TRADES")
print(f"Retrieved {historical['bars_count']} bars")
交易
# Place a market order to buy 100 shares of AAPL
order = await place_order("AAPL", "BUY", 100, "MKT")
print(f"Order ID: {order['order_id']}")
# Check order status
status = await get_order_status(order['order_id'])
print(f"Order Status: {status['order_info']['status']}")
# Get all open orders
open_orders = await get_open_orders()
print(f"Open Orders: {open_orders['total_open_orders']}")
api参考
订单类型
MKT-市场秩序LMT-限价订单STP-停止订单STP LMT-止损限价单
安全类型
STK-库存OPT-选项FUT-未来CASH-外汇IND-索引
历史数据参数
- 持续时间:
1 D,1 W,1 M,1 Y等等。 - 钢筋尺寸:
1 min,5 mins,15 mins,1 hour,1 day等等。 - 展示什么:
TRADES,MIDPOINT,BID,ASK,BID_ASK等等。
错误处理
服务器包括针对常见问题的全面错误处理:
- 连接失败:自动重试逻辑
- 市场数据限制:妥善处理数据订阅限制
- 订单验证:提交前订单验证
- 网络超时:可配置的超时处理
安全考虑
- 本地网络:仅供本地网络使用
- API权限:需要适当的IBKR API权限
- 数据保护:没有永久存储敏感数据
- 连接安全性:使用IBKR的安全API协议
故障排除
常见问题
连接失败
Failed to connect to IBKR. Make sure TWS or IB Gateway is running and API connections are enabled.
- 确保TWS/网关正在运行
- 检查API设置是否已启用
- 验证端口号和主机地址
- 检查防火墙设置
权限不足
- 验证IBKR账户是否具有API交易权限
- 检查帐户设置中是否启用了API访问
- 确保客户端ID是唯一的
市场数据问题
- 验证IBKR帐户中的市场数据订阅
- 检查市场是否对所请求的交易品种开放
- 某些数据需要额外的权限
调试模式
将日志级别设置为DEBUG以获取详细的连接信息:
logging.basicConfig(level=logging.DEBUG)
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
此项目根据Apache 2.0许可证获得许可-请参阅 许可证 文件以获取详细信息。
免责声明
重要:此软件用于教育和开发目的。交易涉及财务损失的风险。在使用真实账户之前,一定要用纸质交易进行彻底测试。作者不对因使用本软件而产生的任何经济损失负责。
支持
- 问题:报告漏洞和功能请求 GitHub问题
- 文档: 交互式经纪人API文档
- 社区:加入存储库讨论部分的讨论
致谢
- 内置于 FastMCP
- 用途 交互式经纪人Python API
- 跟随 模型上下文协议 规格