Ich habe versucht, IbPy vor und erfolgreich die Daten zu bekommen, aber jetzt habe ich Ibapi stattdessen verwenden, die schwieriger ist und immer noch nicht vollständig handeln kann, aber es hat einen angepassten historischen Preis.
Also das ist mein Code, den Sie anpassen müssen, was Sie wollen.
1.Get Excel Aktien Mitglied Form
from ib.opt import ibConnection, message
from ib.ext.Contract import Contract
from ib.ext.Order import Order
from ib.ext.TickType import TickType as tt
from time import sleep, time, strftime
import datetime
from __future__ import print_function #I'm using 3.x style print
import pandas as pd
import numpy as np
from math import ceil
import re
xls_file = pd.ExcelFile('xxxx\\Interactive_Broker_trading\\SNP2.xlsx')
df = xls_file.parse('Sheet1')
Ticker = df.iloc[:,1]
all_data = pd.DataFrame(Ticker)
all_data.columns = ['ticker']
all_data['type'] = 'STK'
all_data['exchange'] = 'SMART'
all_data['curr'] = 'USD'
all_data['bidPrice'] =0
all_data['askPrice'] =0
all_data['lastPrice'] =0
all_data['HistoryPrice']=0
2.Get der Historische Preis für Schleife unter Verwendung, da mein Konto ein Limit von 100 Anfrage pro Moment hat, damit ich es in 8 mehrere Sitzungen für S devide & P 505. Dann wieder an jedem 70 Aktien anmelden. Ich kann die Summe von 505 in 2 Minuten bekommen.
def error_handler(msg):
print(msg)
def my_callback_handler(msg):
if msg.field in [tt.BID,tt.ASK,tt.LAST]:
# from ib.ext.TickType import TickType as tt
#now we can just store the response in the data frame
all_data.loc[msg.tickerId,tt.getField(msg.field)] = msg.price
# if msg.field == tt.LAST:
# # print('a')
# print(all_data.loc[msg.tickerId,'ticker'],msg.price)
t = time()
max_amount_per_Iter = 70 #max number per iter to save cost
max_Iter = ceil(len(all_data)/max_amount_per_Iter)
for i in range (0,max_Iter):
print('====================for : ',i+1,'==========================')
sleep(1)
tws = ibConnection(clientId=11+i)
tws.register(my_callback_handler, message.tickPrice, message.tickSize)
tws.register(error_handler, 'Error')
tws.connect()
all_dum = all_data.iloc[i*max_amount_per_Iter:min((i+1)*max_amount_per_Iter,len(all_data)),:]
for index, row in all_dum.iterrows():
c = Contract()
c.m_symbol = row['ticker']
c.m_exchange = row['exchange']
c.m_currency = row['curr']
c.m_secType = row['type']
# the tickerId is just the index in but for some reason it needs str()
tws.reqMktData(str(index),c,'',False)
sleep(0.2)
sleep(2)
print('=========End round : ',i+1,'with time :',time() - t,'==============')
tws.disconnect()
Wenn die Anfrage erfolgreich gesendet wird, sollte sie entweder die Daten oder eine Fehlermeldung irgendeiner Art zurückgeben. Sie sollten sicherstellen, dass Sie die Fehlermeldungen erfassen. Ich bin mit Ibpy nicht vertraut, aber ich habe herausgefunden, wie man die Protokollierung hier https://github.com/blampe/IbPy/wiki/Getting-Started aktiviert. Wenn Sie IBGateway verwenden, aktivieren Sie auch das Kontrollkästchen "Protokoll anzeigen", um zu sehen, was dort passiert (nicht sicher, wie die Protokolle in TWS angezeigt werden). – kingdc
Hallo ich habe es geändert, so kann ich den Fehler erhalten, das ist, was ich bekomme: TWS Zeit bei Verbindung: 20170801 23:59:20 WET –
TB1
Also scheint es keine Verbindung zu usfuture, usfarm, fundfarm und ushmds sind die, die nicht 24/7 dran sein sollen oder ich müssen Sie bezahlen, um Zugang zu haben? – TB1