Python TWS API:使用reqAccountUpdates创建带位置的数据帧

Python TWS API:使用reqAccountUpdates创建带位置的数据帧,python,pandas,api,interactive-brokers,Python,Pandas,Api,Interactive Brokers,当有更新时,我使用以下脚本从TWS API接收我的位置 我的问题是,我想创建一个新的pandas数据框,包含我的所有资产,并在每次更新时保存到磁盘。投资组合的持有量一次以符号的形式出现,所以我不知道如何将每一行附加到一个数据帧,但是当发生新的更新时,启动一个新的数据帧。我无法区分账户更新和同一更新中的下一行职位 from ibapi.client import EClient from ibapi.wrapper import EWrapper from ibapi.contract impor

当有更新时,我使用以下脚本从TWS API接收我的位置

我的问题是,我想创建一个新的pandas数据框,包含我的所有资产,并在每次更新时保存到磁盘。投资组合的持有量一次以符号的形式出现,所以我不知道如何将每一行附加到一个数据帧,但是当发生新的更新时,启动一个新的数据帧。我无法区分账户更新和同一更新中的下一行职位

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from threading import Timer
import pandas as pd


class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

    def error(self, reqId, errorCode, errorString):
        print("Error: ", reqId, " ", errorCode, " ", errorString)

    def nextValidId(self, orderId):
        self.start()

    def updatePortfolio(self, contract: Contract, position: float, marketPrice: float, marketValue: float, averageCost: float, unrealizedPNL: float, realizedPNL: float, accountName: str):
        df = pd.DataFrame([contract,position,marketPrice,marketValue])
        df.to_csv('holdings.csv')

    def updateAccountTime(self, timeStamp: str):
        print("UpdateAccountTime. Time:", timeStamp)

    def accountDownloadEnd(self, accountName: str):
        print("AccountDownloadEnd. Account:", accountName)

    def start(self):
        self.reqAccountUpdates(True, "")

    def stop(self):
        self.reqAccountUpdates(False, "")
        self.done = True
        self.disconnect()

def main():
    app = TestApp()
    app.nextOrderId = 0
    app.connect("127.0.0.1", 7496, 6)

    app.run()

if __name__ == "__main__":
    main()

这只是为每个符号创建一个新的csv,覆盖上一个。

每次调用
df.to\u csv('holdings.csv')
,它都会创建一个新的csv文件。如果要将数据附加到现有CSV文件,需要将
模式
参数设置为
a
,如
df.to_CSV('holdings.CSV',mode='a')