繁体   English   中英

盈透证券 python API - 将 ReportsFinSummary 转换为 pandas

[英]Interactive Brokers python API - convert ReportsFinSummary to 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM