преобразовать запрос данных IbPy в кадр данных pandas

У меня есть приведенный ниже код, который загружает исторические данные с помощью IbPy от Interactive Brokers и сохраняет их в csv. Вместо того, чтобы сохранять его в csv, я хотел бы напрямую передавать данные в кадр данных pandas (минуя бит csv).

Кто-нибудь может помочь?

from time import sleep, strftime, localtime  
from ib.ext.Contract import Contract  
from ib.opt import ibConnection, message  


new_symbolinput = ['ES', 'NQ']
newDataList = []  
dataDownload = []  

def historical_data_handler(msg):  
    global newDataList  
    print (msg.reqId, msg.date, msg.close)
    if ('finished' in str(msg.date)) == False:  
        new_symbol = new_symbolinput[msg.reqId]  
        dataStr = '%s, %s, %s' % (new_symbol, strftime("%Y-%m-%d", localtime(int(msg.date))), msg.close)  
        newDataList = newDataList + [dataStr]
    else:  
        new_symbol = new_symbolinput[msg.reqId]  
        filename = 'minutetrades' + new_symbol + '.csv'  
        csvfile = open('csv_day_test/' + filename,'w')  
        for item in newDataList:  
            csvfile.write('{} \n'.format(item))
        csvfile.close()  
        newDataList = []  
        global dataDownload  
        dataDownload.append(new_symbol)  

con = ibConnection()  
con.register(historical_data_handler, message.historicalData)  
con.connect()  

symbol_id = 0  
for i in new_symbolinput:  
    print (i)  
    qqq = Contract()  
    qqq.m_symbol = i  
    qqq.m_secType = 'FUT'  
    qqq.m_exchange = 'GLOBEX'  
    qqq.m_currency = 'USD'
    qqq.m_expiry = '201609'
    con.reqHistoricalData(symbol_id, qqq, '', '1 W', '1 day', 'TRADES', 1, 2)  

    symbol_id = symbol_id + 1  
    sleep(10)  

print (dataDownload) 
filename = 'downloaded_symbols.csv'  
csvfile = open('csv_day_test/' + filename,'w')  
for item in dataDownload:  
    csvfile.write('%s \n' % item)  
csvfile.close()

person Panda_User    schedule 24.08.2016    source источник
comment
Мне не очень понятно, что делает ваш код. Не могли бы вы показать/объяснить, что содержит переменная dataDownload? Возможным решением было бы сохранить данные в виде словаря и в конце вызвать pd.DataFrame(dictionary).   -  person Álvaro Marco    schedule 24.08.2016


Ответы (2)


В def history_data_handler(msg) замените приведенный ниже код; это будет писать непосредственно в кадр данных.

  else:
df_new = pd.DataFrame( columns=['Code', 'Date', 'Close'])
j = 0
for i in newDataList:
    df_new.loc[j] = i.split(',')
    j = j + 1
df_new.set_index('Date',inplace=True)
#print df_new

Попробуйте записать значения msg.close непосредственно в df, а не сначала помещать в строку и разбивать.

person Jettiesburg    schedule 28.11.2016

Обновленный ответ:

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

# convert to pandas dataframe
df = util.df(bars)
person newcool    schedule 26.03.2021