У меня есть следующий код для извлечения данных в реальном времени каждые 5 секунд из IB с пакетом ib_insync
import pandas as pd
import datetime
from ib_insync.ticker import Ticker
from ib_insync import *
ib = IB()
ib.connect('127.0.0.1', 7496, clientId=1)
def SimpleFuture():
contract = Contract()
contract.symbol = "GXBT"
contract.secType = "FUT"
contract.exchange = "CFECRYPTO"
contract.currency = "USD"
contract.lastTradeDateOrContractMonth = "201805"
return contract
def onBarUpdate(bars, hasNewBar):
print(bars[-1])
ib.setCallback('barUpdate', onBarUpdate)
bars = ib.reqRealTimeBars(SimpleFuture(), 5, 'MIDPOINT', False)
ib.sleep(60)
ib.cancelRealTimeBars(bars)
ib.disconnect()
Это дает мне следующие результаты:
RealTimeBar(time=datetime.datetime(2018, 4, 24, 17, 8, 30,
tzinfo=datetime.timezone.utc), open=9360.0, high=9360.0, low=9360.0,
close=9360.0, volume=-1, wap=-1.0, count=-1)
Моя цель - обновить CSV-файл, добавив в него только следующие столбцы: DateTime , Open , High , Low , Закрыть .
Прежде чем делать это с .to_csv, я думаю, что мне нужно поместить результаты в DataFrame, с которым мне нужна помощь.
Использование df= pd.DataFrame(bars[-1])
дает мне эту ошибку:
ValueError: DataFrame constructor not properly called!