返回

如何通过 POST 请求从 Interactive Brokers 获取股票代码?

python

通过 POST 请求从 Interactive Brokers 获取股票代码

前言

Interactive Brokers (IB) 是一个广受欢迎的在线交易平台,提供广泛的金融产品。虽然 IB 提供了丰富的功能和数据,但它没有提供一种简便的方法来直接获取股票代码。本文将介绍一种通过 POST 请求从 IB 网站获取股票代码的解决方案。

问题陈述

许多 IB 用户需要从其网站批量获取股票代码,但目前还没有一个简单的方法。常规请求查询变得越来越不可靠,因此需要一种替代方案。

解决方法

我们开发了一个 Python 代码示例,演示了如何模仿 IB 的产品搜索功能,并通过 POST 请求获取股票代码。该方法涉及以下步骤:

  • 建立一个会话对象,用于维护与 IB 网站的连接。
  • 构造一个包含适当参数和标头的 POST 请求。
  • 发送请求并处理响应。
  • 解析响应以提取股票代码。

代码示例

import requests
from requests.packages.urllib3.util.retry import Retry

# 建立会话
session = requests.Session()

# 重试策略
retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
session.mount('https://', retries)

# 构造请求
url = "https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters"
payload = {"pageNumber": 1, "pageSize": "100", "sortField": "symbol", "sortDirection": "ASC", "product_country": ["GB"], "product_symbol": "", "new_product": "all", "product_type": ["STK"], "domain": "uk"}
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}

# 发送请求
response = session.post(url, data=payload, headers=headers)

# 解析响应
if response.status_code == 200:
    data = response.json()
    for product in data['products']:
        print(product['symbol'])
else:
    print("请求失败:", response.status_code)

总结

通过上述代码示例,用户可以成功地从 IB 网站获取股票代码。该解决方案可以自动执行从 IB 获取股票代码的任务,并为开发人员提供了一个可靠的替代方案。

常见问题解答

  1. 为什么我需要使用 POST 请求?
    IB 网站不提供一个简单的端点来获取股票代码,因此必须使用 POST 请求来发送查询。

  2. 代码是否适用于所有 IB 股票代码?
    是的,该代码可以用于获取 IB 上所有上市股票代码。

  3. 如何处理页面大小?
    IB 限制了每页返回的股票代码数量。通过调整 "pageSize" 参数,可以增加或减少返回的代码数量。

  4. 如何处理错误?
    代码包含了一个重试策略来处理网络错误。如果请求失败,将自动重试。

  5. 我如何定制代码以满足我的需求?
    可以通过修改 "payload" 字典和 "headers" 字典来定制代码。例如,可以更改 "product_country" 参数来获取特定国家的股票代码。