Как вставить выделенную часть строки в кадр данных pandas - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть следующий код для извлечения данных в реальном времени каждые 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!

1 Ответ

0 голосов
/ 24 апреля 2018

В соответствии с документацией , для преобразования данных бара в кадр данных:

# convert to pandas dataframe:
df = util.df(bars)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...