交易协议服务器

一个连接Interactive Brokers API的模型上下文协议(MCP)服务器,提供全面的交易操作、市场数据检索和投资组合管理功能。

  • by gpolydatas
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 gpolydatas/ibkr-mcp-server

使用说明

盈透证券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网关设置

  1. 下载并安装 盈透证券的TWS或IB网关
  2. 启用API访问:
    • 在TWS中:转到文件→ 全局配置→ API → 设置
    • 选中“启用ActiveX和Socket客户端”--仅适用于Windows
    • 添加受信任的IP地址(本地使用127.0.0.1)
  3. 配置端口:
    • 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)

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

许可证

此项目根据Apache 2.0许可证获得许可-请参阅 许可证 文件以获取详细信息。

免责声明

重要:此软件用于教育和开发目的。交易涉及财务损失的风险。在使用真实账户之前,一定要用纸质交易进行彻底测试。作者不对因使用本软件而产生的任何经济损失负责。

支持

致谢