【问题标题】:Interactive Brokers python API - convert ReportsFinSummary to pandasInteractive Brokers python API - 将 ReportsFinSummary 转换为 pandas
【发布时间】:2020-05-15 15:05:29
【问题描述】:

我正在尝试做一些我认为很简单的事情......显然不是。我想使用 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()

【问题讨论】:

    标签: python beautifulsoup interactive-brokers ibpy ib-api


    【解决方案1】:

    这是未经测试的,但应该能让你走上正轨。您使用的是多年未开发的 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)
    

    【讨论】:

    • 嗨,这确实为我指明了正确的方向,但不幸的是,两周后我仍然不在那里。我认为由于某种原因,xml 报告没有存储在变量中,因此漂亮的汤不是......漂亮!对此代码的任何指针将不胜感激:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多