def dbcontract_to_ibcontract(dbcontract): symbol = str(dbcontract.sym) localSym = str(dbcontract.local_sym) if str(dbcontract.secType) == 'CASH': symbol = str(dbcontract.sym) + str(dbcontract.cur) if str(dbcontract.secType) == 'FUT': year = str(dbcontract.contractMonth)[0:4] mon = str(dbcontract.contractMonth)[4:6] addSym = '' print symbol, year, int(mon) if int(mon) == 1: addSym = 'F' print addSym if int(mon) == 2: addSym = 'G' if int(mon) == 3: addSym = 'H' if int(mon) == 4: addSym = 'J' if int(mon) == 5: addSym = 'K' if int(mon) == 6: addSym = 'M' if int(mon) == 7: addSym = 'N' if int(mon) == 8: addSym = 'Q' if int(mon) == 9: addSym = 'U' if int(mon) == 10: addSym = 'V' if int(mon) == 11: addSym = 'X' if int(mon) == 12: addSym = 'Z' addSym += year[3:4] print addSym localSym += addSym print 'Found', localSym contract = Contract() contract.symbol = str(symbol) contract.secType = str(dbcontract.secType) contract.exchange = str(dbcontract.exch) contract.primaryExchange = str(dbcontract.exch) contract.currency = str(dbcontract.cur) contract.expiry = str(dbcontract.expiry) #contract.strike= # Strike Price contract.localSymbol = localSym return contract
def create_contract(security): if security.split('.')[0]=='FUT': contract = Contract() contract.symbol = security.split('.')[1] contract.secType = 'FUT' contract.exchange = 'GLOBEX' contract.currency = security.split('.')[2] contract.expiry= security.split('.')[3] contract.primaryExchange='GLOBEX' elif security.split('.')[0]=='CASH': contract = Contract() contract.symbol = security.split('.')[1] contract.secType = 'CASH' contract.exchange = 'IDEALPRO' contract.currency = security.split('.')[2] contract.primaryExchange='IDEALPRO' elif security.split('.')[0]=='STK': contract = Contract() contract.symbol = security.split('.')[1] contract.secType = 'STK' contract.exchange = 'SMART' contract.currency = 'USD' contract.primaryExchange='SMART' return contract
def get_last_hist_data(client, symbols, startDate, endDate = datetime.datetime.now()): ibcontract = IBcontract() #ibcontract.secType = "FUT" #ibcontract.expiry="201809" #ibcontract.symbol="GE" #ibcontract.exchange="GLOBEX" ibcontract.secType = 'STK' ibcontract.exchange = 'SMART' ibcontract.currency = 'USD' ibcontract.primaryExchange = 'SMART' for index in range(len(symbols)): symbol = symbols[index] ibcontract.symbol = symbol lastDate = endDate while (cmp(startDate, lastDate) < 0): curDay = lastDate + datetime.timedelta(days = -28) print symbol, curDay, lastDate sdatetime=lastDate.strftime("%Y%m%d %H:%M:%S %Z") ans=client.get_IB_historical_data(ibcontract, sdatetime, '4 W', '1 hour', index) lastDate = curDay time.sleep(1) print "orglen: ", len(ans) ans = ans.drop_duplicates(subset=['symbol', 'sdate']) print "endlen: ", len(ans) ans.to_csv(symbol+".csv") #print ans conn=MySQLdb.connect(host='127.0.0.1',user='******',passwd='border', db='finance', port=3306) cur=conn.cursor() values=[] header = 'insert into stock_data_1hour(`symbol`, `sdate`, `open`, `high`, `low`, `close`, `volume`, `barcount`, `wap`, `hasgaps`, `ctime`) values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' for row in ans.iterrows(): index, data = row values.append((data['symbol'], data['sdate'], data['open'], data['high'], data['low'], data['close'], data['volume'], data['barcount'], data['wap'], data['hasgaps'], time.time())) #print 'Index: %s, symbol: %s, date: %s, close: %s' % (index, data['symbol'], data['sdate'], data['close']) cur.executemany(header, values) conn.commit() cur.close() conn.close() time.sleep(5)
callback = IBWrapper() #client=IBclient(callback, "DU220055") client=IBclient(callback, "All") #client.req_account_summary(10000) ibcontract = IBcontract() #ibcontract.secType = "FUT" #ibcontract.expiry="201509" #ibcontract.symbol="GBL" #ibcontract.exchange="DTB" ibcontract.secType = 'STK' ibcontract.exchange = 'SMART' ibcontract.currency = 'USD' ibcontract.primaryExchange = 'SMART' ibcontract.symbol = "TRUE" ## Get contract details cdetails=client.get_contract_details(ibcontract) ## In particular we want the expiry. You cannot just use cdetails['expiry'][:6] to map back to the yyyymm ## expiry since certain contracts expire the month before they should! print "Expiry is %s" % cdetails['expiry'] ## Once you have the portfolio positions then you can use these expiries to map back (account_value, portfolio_data)=client.get_IB_account_data() #time.sleep(30)
datefmt='%j-%H:%M:%S') else: logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%j-%H:%M:%S') logging.debug(args) if args.sym: contract.symbol = args.sym if args.exc: contract.exchange = args.exc if args.st: contract.secType = args.st if args.cur: contract.currency = args.cur if args.id: contract.conId = args.id if args.exp: contract.expiry = args.exp if args.pex: contract.primaryExchange = args.pex if args.str: contract.strike = args.str if args.rt: contract.right = args.rt if args.mult: contract.multiplier = args.mult barsize = args.p datatype = args.t rth_only = args.rth pacing = args.pacing num_requests = args.n zerobased = args.z if barsize == "1 day" or barsize == "1W" or barsize == "1M": dt_format = "%Y%m%d" else: dt_format = "%Y%m%d %H:%M:%S"
args = parser.parse_args() if args.v: logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.DEBUG, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%j-%H:%M:%S') else: logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%j-%H:%M:%S') logging.debug(args) if args.sym: contract.symbol = args.sym if args.exc: contract.exchange = args.exc if args.st: contract.secType = args.st if args.cur: contract.currency = args.cur if args.id: contract.conId = args.id if args.exp: contract.expiry = args.exp if args.pex: contract.primaryExchange = args.pex if args.str: contract.strike = args.str if args.rt: contract.right = args.rt if args.mult: contract.multiplier = args.mult barsize = args.p datatype = args.t rth_only = args.rth pacing = args.pacing num_requests = args.n zerobased = args.z if barsize == "1 day" or barsize == "1W" or barsize == "1M": dt_format = "%Y%m%d" else: dt_format = "%Y%m%d %H:%M:%S"