Python TWS API:使用reqAccountUpdates创建带位置的数据帧
当有更新时,我使用以下脚本从TWS API接收我的位置 我的问题是,我想创建一个新的pandas数据框,包含我的所有资产,并在每次更新时保存到磁盘。投资组合的持有量一次以符号的形式出现,所以我不知道如何将每一行附加到一个数据帧,但是当发生新的更新时,启动一个新的数据帧。我无法区分账户更新和同一更新中的下一行职位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
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')
。