Как вставить данные TicketSize и TicketPrice из API IBKRs параллельно в один фрейм данных?Python

Программы на Python
Ответить
Anonymous
 Как вставить данные TicketSize и TicketPrice из API IBKRs параллельно в один фрейм данных?

Сообщение Anonymous »

Я использую этот код для получения данных о ценах и размерах различных акций через API IBKR:

Код: Выделить всё

def tickPrice(self, reqId, tickType, price, attrib):
cas = datetime.now()
cas = cas.strftime("%d/%m/%Y %H:%M")
# data pro SPY
if reqId == 1 and tickType == 2 and price != -1.0:
self.update_bardata(self.SPY_data, cas, price)
# data pro TSLA
elif reqId == 4 and tickType == 2 and price != -1.0:
self.update_bardata(self.TSLA_data, cas, price)
# data pro NVDA
elif reqId == 5 and tickType == 2 and price != -1.0:
self.update_bardata(self.NVDA_data, cas, price)
# data pro AMZN
elif reqId == 6 and tickType == 2 and price != -1.0:
self.update_bardata(self.AMZN_data, cas, price)

def tickSize(self, reqId, tickType, size):
cas = datetime.now()
cas = cas.strftime("%d/%m/%Y %H:%M")
# volume pro SPY
if reqId == 1 and tickType == 8 and size != -1.0:
self.update_tickdata(self.SPY_data, cas, size)
# volume pro TSLA
elif reqId == 4 and tickType == 8 and size != -1.0:
self.update_tickdata(self.TSLA_data,cas,  size)
# volume pro NVDA
elif reqId == 5 and tickType == 8 and size != -1.0:
self.update_tickdata(self.NVDA_data, cas, size)
# data pro AMZN
elif reqId == 6 and tickType == 8 and size != -1.0 :
self.update_tickdata(self.AMZN_data, cas, size)

def update_tickdata(self, data_frame,cas, size):
if cas in data_frame.index:
data_frame.at[cas, 'volume total']=size
data_frame.iat[-1, 9] = size - data_frame.iat[-2, 8]

def update_bardata(self, data_frame, cas, price):
data_frame.loc[cas] = {'price': price}
Но это работает неправильно. цена в порядке, всегда включается в окончательный data_frame, но размер включается в 70-80% ячеек, это означает, что есть пустые ячейки. Некоторые data_frames лучше, AMZN заполнен на 95 %, некоторые очень плохие SPY отсутствуют на 50 % (только размер, цена всегда присутствует).
  • size поток данных - кажется, все в порядке, когда я его печатаю, поток данных очень богатый - поступает больше раз в секунду
  • Я изменил def update_bardata (self, data_frame, cas, цена) на это:

    Код: Выделить всё

    def update_bardata(self, data_frame, cas, price=None, size=None):
    data_frame.loc[cas] = {'price': price, 'total volume': size}
    
но я получаю ошибки из-за отсутствия цены или размера, а также из-за катастрофического сочетания данных о цене и размере в столбец «цена» и пустой столбец «общий объем»
  • чем (с поддержкой ИИ) я попробовал построить список внутри функции update_bardata, которая собрала цену и размер и добавила ее в data_frame

    Код: Выделить всё

    if price is not None:
    data_to_update['price'] = price
    if size is not None:
    data_to_update['size'] = size
    
    data_frame.loc[cas] = data_to_update
    
но это только устранило ошибку из Pandas, но остальное снова было таким же: сочетание данных о цене и размере в 'price ' столбец и пустой столбец "общий объем"
  • use data_frame.loc[cas] = {'volume total': size в def update_tickdata, но результатом снова было сочетание цены и данные размера в первом столбце «цена»
  • используйте разные data_frames, один отдельный для цены, а другой для размера, например:

    Код: Выделить всё

    def update_tickdata(self, data_frame_size,cas, size):
    data_frame_size.loc[cas] = {'volume total': size}
    
    def update_bardata(self, data_frame, cas, price):
    data_frame.loc[cas] = {'price': price}
    
результат был пустым data_frames_size, без какого-либо значения, и снова в data_frame сочетание данных о цене и размере в «цене»
А теперь у меня закончились идеи

Подробнее здесь: https://stackoverflow.com/questions/793 ... nto-one-da
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»