python - Interactive Brokers python API - 将 ReportsFinSummary 转换为 pandas
问题描述
我正在尝试做一些我认为很简单的事情……显然不是。我想使用 python ib api 从 ReportFinSummary 中提取一些数据。我希望能够使用 DPS 数字。我正在尝试用漂亮的汤对 xml 代码进行排序,没有任何乐趣。任何帮助将不胜感激。艾伦
from ib.opt import ibConnection, message
from ib.ext.Contract import Contract
from time import sleep
from bs4 import BeautifulSoup
import pandas as pd
def fundamentalData_handler(msg):
print(msg)
def error_handler(msg):
print(msg)
tws = ibConnection(port=7497, clientId=123)
tws.register(error_handler, message.Error)
tws.register(fundamentalData_handler, message.fundamentalData)
tws.connect()
c = Contract()
c.m_symbol = 'RDSA'
c.m_secType = 'STK'
c.m_exchange = "SMART"
c.m_currency = "GBP"
tws.reqFundamentalData(1,c,'ReportsFinSummary')
soup = BeautifulSoup(tws.reqFundamentalData(1,c,'ReportsFinSummary'),'xml')
DPS_Data = soup.find_all('DividendPerShares')
DPS = []
for dates in DPS_Data:
DPS.append(DPS_Data.get_text())
print(pd.DataFrame({'DPS_Data': DPS}))
sleep(2)
tws.disconnect()
解决方案
这是未经测试的,但应该让你走上正确的轨道。您使用的是多年未开发的 IbPy,最好使用本机 API 或 IbPythonic。
from ib.opt import ibConnection, message
from ib.ext.Contract import Contract
from time import sleep
from bs4 import BeautifulSoup
import pandas as pd
class IB():
def __init__(self):
pass
def fundamentalData_handler(self, msg):
self.data = msg
def error_handler(self, msg):
print(msg)
def connect(self, port=7497, clientId=123):
self.tws = ibConnection(port, clientId)
self.tws.register(self.error_handler, message.Error)
self.tws.register(self.fundamentalData_handler, message.fundamentalData)
self.tws.connect()
def disconnect(self):
self.tws.disconnect()
def get(self):
c = Contract()
c.m_symbol = 'RDSA'
c.m_secType = 'STK'
c.m_exchange = "SMART"
c.m_currency = "GBP"
self.tws.reqFundamentalData(1, c, 'ReportsFinSummary')
while not hasattr(self, 'data'):
sleep(0.1)
soup = BeautifulSoup(self.data)
DPS_Data = soup.find_all('DividendPerShares')
DPS = [DPS_Data.get_text() for dates in DPS_Data]
return pd.DataFrame({'DPS_Data': DPS})
ib = IB()
ib.connect()
df = ib.get()
ib.disconnect()
print(df)
推荐阅读
- python - 为什么即使使用 cv.IMREAD_ANYDEPTH,cv2.imread 也会为 32 位图像输出一个零矩阵?
- android - 如何使用 Firebase SDK 在原生 Android 和 iOS 应用中实现跨域测量?
- excel - 是否有内置的excel函数可以检查:“1,3,5-9,13,16-20,23”中的“10”(或任何数字)?
- angular - 更新视图时出现 ExpressionChangedAfterItHasBeenCheckedError
- java - 有没有办法修复我的自定义主题按钮的样式?
- javascript - 检测垃圾邮件过滤器
- java - rpc 错误:代码 = 2 desc = oci 运行时错误:执行失败:参数列表太长
- c++ - OpenGL对象局部旋转全局旋转
- android-studio - 找不到 com.android.tools.build:gradle:6.7.1。gradle build 不同步
- python - Python API to C++ - 返回指向对象而不是完整对象的指针