def start_tickers(): symTickerIddict = {} contractdict = {} reqID = 1 symid = 1 for sym in symbol_list2: print sym, symid fname1 = DataDown + today + '.' + sym + '.RTticks.csv' ## backup the tick files before restarting backupTickfiles(fname1) ## flush the tickfile rpu_rp.WriteArrayToCsvfile(fname1, []) ### restart ticker ##build the cntract dict but probably not use contract = ibutiles.create_ticksym(symid, sym) contractdict.update({sym: contract}) symTickerIddict.update({str(symid): sym}) print symTickerIddict ticktype = ticktypedict[sym] ## restart the ticker tws_conn.reqRealTimeBars(reqID, contract, '', ticktype, 0) symid += 1 reqID += 1 sleep(1)
def get_vola(): reqID = 111 contract = ibutiles.create_ticksym(99, 'SPY') genericTicks = '' snapshot = True ###### sym = 'SPY' ###### contract = contractdict[sym] tws_conn.reqMktData(reqID, contract, genericTicks, snapshot) ######################################### symid = 0 for sym in symbol_list_opts: print sym underlying = symdict[sym] if underlying == 'SPY': underPricenew = TicksUtile.recenttick(underlying, 'dload') optionpricenew = TicksUtile.recenttick(sym, 'dload') optionprice = 5.00 underPrice = 200.0 print underPricenew, optionpricenew print typedict[sym] ATMstrike = round(underPrice, -2) print 'atm', ATMstrike if typedict[sym] == 'OPT': symid += 1 contract = contractdict[sym] tws_conn.calculateImpliedVolatility(reqID, contract, optionprice, underPrice) reqID += 1 sleep(1) tws_conn.cancelCalculateImpliedVolatility(reqID)
def get_vola(): reqID =111 contract = ibutiles.create_ticksym(99,'SPY') genericTicks ='' snapshot = True ###### sym = 'SPY' ###### contract = contractdict[sym] tws_conn.reqMktData(reqID,contract,genericTicks,snapshot) ######################################### symid = 0 for sym in symbol_list_opts: print sym underlying = symdict[sym] if underlying == 'SPY': underPricenew = TicksUtile.recenttick(underlying,'dload') optionpricenew = TicksUtile.recenttick(sym,'dload') optionprice = 5.00 underPrice = 200.0 print underPricenew, optionpricenew print typedict[sym] ATMstrike = round(underPrice,-2) print 'atm', ATMstrike if typedict[sym] == 'OPT': symid+=1 contract = contractdict[sym] tws_conn.calculateImpliedVolatility(reqID,contract,optionprice,underPrice) reqID +=1 sleep(1) tws_conn.cancelCalculateImpliedVolatility(reqID)
def start_tickers(): symTickerIddict ={} contractdict ={} reqID=1 symid =1 for sym in symbol_list2: print sym, symid fname1 = DataDown + today + '.' + sym +'.RTticks.csv' ## backup the tick files before restarting backupTickfiles(fname1) ## flush the tickfile rpu_rp.WriteArrayToCsvfile(fname1,[]) ### restart ticker ##build the cntract dict but probably not use contract = ibutiles.create_ticksym(symid,sym) contractdict.update({sym : contract}) symTickerIddict.update({str(symid) : sym}) print symTickerIddict ticktype = ticktypedict[sym] ## restart the ticker tws_conn.reqRealTimeBars(reqID,contract,'',ticktype,0) symid+=1 reqID +=1 sleep(1)
def build_c_dbase(slist): symid = 1 symTickerIddict ={} contractdict ={} for sym in slist: contract = ibutiles.create_ticksym(symid,sym) contractdict.update({sym : contract}) symTickerIddict.update({str(symid) : sym}) symid +=1 print symTickerIddict return contractdict
def build_c_dbase(slist): symid = 1 symTickerIddict = {} contractdict = {} for sym in slist: contract = ibutiles.create_ticksym(symid, sym) contractdict.update({sym: contract}) symTickerIddict.update({str(symid): sym}) symid += 1 print symTickerIddict return contractdict
def send_prof_orders(): ## enter proforders if any profsneeded = rpu_rp.CsvToLines(filledNoProfFile) profsplaced = [] profitticks = 3 stopticks = 14 profmult = 1 ## print profsneeded ## print 'those were all the profs needed' for entryorder in profsneeded: ## print entryorder, 'entryorder' flipsign = int(1) tside = 'BUY' if entryorder[1] == 'BUY': tside = 'SELL' flipsign = int(-1) tsize = int(entryorder[2]) sym = entryorder[3] profitticks = int(profticksdict[sym]) print 'original signal order = ', entryorder orderprice = float(entryorder[4]) decimalboost = float(dboostdict[sym]) onetick = float(tickdict[sym]) addamt = onetick * int(entrywiderdict[sym]) tranflag = False profprice = orderprice - (profmult * profitticks * onetick * flipsign) - (flipsign * addamt) stopprice = orderprice + (stopticks * onetick * flipsign) + (flipsign * addamt) ## print profprice,stopprice profitorder = ibutiles.create_order('LMT', tsize, tside, profprice, tranflag, profprice, profprice, 'profit') stoporder = ibutiles.create_order('STP', tsize, tside, stopprice, tranflag, stopprice, stopprice, 'stop') order_id = get_orderid() symcontract = ibutiles.create_ticksym( 23, sym) ## might need to vary this number at some point tws_conn.placeOrder(order_id, symcontract, profitorder) tws_conn.placeOrder(order_id + 1, symcontract, stoporder) print 'placed a profit and stop order here ' print sym, tside, str(tsize), str(profprice), 'PROFITORDER', order_id profsplaced.append(entryorder) sleep(2) rpu_rp.WriteArrayToCsvfileAppend(filledNProfSentFile, profsplaced) rpu_rp.WriteArrayToCsvfile(filledNoProfFile, [])
def send_prof_orders(): ## enter proforders if any profsneeded = rpu_rp.CsvToLines(filledNoProfFile) profsplaced = [] profitticks = 3 stopticks = 14 profmult = 1 ## print profsneeded ## print 'those were all the profs needed' for entryorder in profsneeded: ## print entryorder, 'entryorder' flipsign = int(1) tside = 'BUY' if entryorder[1] == 'BUY': tside = 'SELL' flipsign = int(-1) tsize = int(entryorder[2]) sym = entryorder[3] profitticks = int(profticksdict[sym]) print 'original signal order = ', entryorder orderprice = float(entryorder[4]) decimalboost = float(dboostdict[sym]) onetick = float(tickdict[sym]) addamt = onetick * int(entrywiderdict[sym]) tranflag = False profprice = orderprice - (profmult * profitticks * onetick *flipsign) - (flipsign *addamt) stopprice = orderprice + (stopticks * onetick *flipsign) + (flipsign *addamt) ## print profprice,stopprice profitorder = ibutiles.create_order('LMT', tsize, tside, profprice,tranflag,profprice,profprice,'profit') stoporder = ibutiles.create_order('STP', tsize, tside, stopprice,tranflag,stopprice,stopprice,'stop') order_id = get_orderid() symcontract = ibutiles.create_ticksym(23,sym) ## might need to vary this number at some point tws_conn.placeOrder(order_id, symcontract, profitorder) tws_conn.placeOrder(order_id+1, symcontract, stoporder) print 'placed a profit and stop order here ' print sym, tside, str(tsize), str(profprice),'PROFITORDER',order_id profsplaced.append(entryorder) sleep(2) rpu_rp.WriteArrayToCsvfileAppend(filledNProfSentFile,profsplaced) rpu_rp.WriteArrayToCsvfile(filledNoProfFile,[])
global symbol_list today = rpu_rp.todaysdateunix() from datetime import datetime libbars = EXE + 'library.bars.csv' libsyms = EXE + 'library.syms.csv' symdict = rpu_rp.create_dict(libsyms,0,1) symbol_list = symdict.keys() ######################################## symTickerIddict ={} contractdict ={} symid=0 ##flush files here is bad if building on hist.... for sym in symbol_list: symid+=1 ## sleep(1) contract = ibutiles.create_ticksym(symid,sym) contractdict.update({sym : contract}) symTickerIddict.update({str(symid) : sym}) ## rpu_rp.WriteArrayToCsvfile(DataDown +today+'.'+sym+ '.rthbars.csv',[]) rpu_rp.WriteArrayToCsvfile(TMP +'replys.RTticks',[]) ################# rpu_rp.WriteArrayToCsvfile(DataDown +today+'.'+ '.RTticks.csv',[]) ### flush onerow =[] def RTBar_reply_handler(msg): if msg.typeName == 'realtimeBar': reqid=(((str(msg)).split()[1]).split('=')[1]).replace(',','') sym=symTickerIddict[reqid] ## print str(msg) ## print 'is a bar..', sym onerow = (str(msg)).split(',') rpu_rp.WriteArrayToCsvfileAppend(DataDown +today+'.'+sym+ '.RTticks.csv',[onerow])
tfactor = float(0.5) else: tfactor = float(1.0) tsize = int(int(tsizedict[sym]) * tfactor) decimalboost = float(dboostdict[sym]) onetick = float(tickdict[sym]) roundfactor = int(roundfactordict[sym]) addamt = onetick * int(entrywiderdict[sym]) ## create contract here symib = symdict[sym] ibsecType = typedict[sym] #'CASH' ibexchange = exchdict[sym] #'IDEALPRO' cashcurr = currdict[sym] #'USD' expiry = expiredict[sym] #'ignore' symcontract = ibutiles.create_ticksym(14,symib, ibsecType, ibexchange, cashcurr,expiry) ######## poll for a recent price tws_conn.reqMktData(14,symcontract,'BID',True) ## use this to get a valid price sleep(1) for l in rpu_rp.CsvToLines('pricenow'): if roundfactor == 0: tickrounder = 0.25 pricenow = round(float(l[0]) / tickrounder) * tickrounder pass else: tickrounder = roundfactor pricenow = round(float(l[0]),roundfactor) print pricenow price = round(float((sig[3]))/float(decimalboost),roundfactor) sigprice = price onetick = float(1/decimalboost)
def create_contract_dictionary(ordid,sym): contract = ibutiles.create_ticksym(ordid,sym) contractdict.update({sym : contract}) symTickerIddict.update({ordid : sym})
def dload_list(symbol_list,durmode): barlistall = bardict.keys() barlist =[] for b in barlistall: if modedict[b] != 'special' : barlist.append(b) ########################## def backupTickfiles(fname1): fname2 = fname1.replace('.csv','bu.csv') f1 = rpu_rp.CsvToLines(fname1) f2 = rpu_rp.CsvToLines(fname2) for line in f1: f2.append(line) rpu_rp.WriteArrayToCsvfile(fname2,f2) rpu_rp.WriteArrayToCsvfile(fname1,[]) ############# def error_handler(msg): if 'historicalData' in str(msg): print 'error probably pacing hist data' pass elif 'connection is OK' in str(msg): pass else: print "Server Error: %s" % msg ############# def historical_data_handler(msg): global newDataList fname = DataDown+ today + '.' + sym + '.' + bar.replace(' ','')+'.ddload.csv' if ('finished' in str(msg.date)) == False: ### keep building the list ## print (int(msg.date)) fstring = "%Y-%m-%d %H:%M:%S" dateold = localtime(int(msg.date)) tdate = strftime(fstring, dateold) if bar == '1 day': tdate = (str((int(msg.date))))[0:4] + '-' + str((int(msg.date)))[4:6]+ '-' + str((int(msg.date)))[6:8] + ' 23:59:58' ## print tdate ## print msg.date dataStr = '%s, %s, %s, %s, %s, %s, %s' % (sym, tdate, msg.open, msg.high, msg.low, msg.close, msg.volume) newDataList = newDataList + [dataStr] else: print 'next list' rpu_rp.WriteStringsToFile(fname,'') #flush the file for a in newDataList: if len(a) > 2: rpu_rp.WriteStringsToFileAppend(fname,a) newDataList = [] ########## def reply_handler(msg): if msg.typeName == 'historicalData': pass else: print "Server Response: %s, %s" % (msg.typeName, msg) #################### tws_conn = Connection.create(port=7496, clientId=109) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) tws_conn.register(historical_data_handler, message.historicalData) ####################################### trans_id = 0 if durmode == 'd': barlist = ['1day'] if durmode == '5secs': barlist =['5secs'] for sym in symbol_list: for bar in barlist: fname = DataDown+ today + '.' + sym + '.' + bar.replace(' ','')+'.ddload.csv' backupTickfiles(fname) ########## duration = bardict[bar] barspaced = bardictspaced[bar] contract = ibutiles.create_ticksym(trans_id,sym) ticktype = ticktypedict[sym] print bar, sym, duration,ticktype, barspaced tws_conn.reqHistoricalData(trans_id, contract, '', duration, barspaced, ticktype, 0, 2) trans_id = trans_id + 1 sleep(3) ############### print 'disconnecting from ib..' tws_conn.disconnect() for sym in symbol_list: for dura in barlist: throw_out_lastbar(sym,dura,today)
################################ ##rpu_rp.WriteStringsToFile(TMP +'Entry.orders.Sent.csv','') sizemult = 2 print 'starting prof sender...' ############################## libsyms = EXE + 'library.syms.csv' symdict = rpu_rp.create_dict(libsyms,0,1) symbol_list = symdict.keys() ###################### ##print symcontrdict = {} counter = 0 for sym in symbol_list: counter +=1 symcontract = ibutiles.create_ticksym(counter,sym) sleep (1) dict2 = {sym : symcontract} symcontrdict.update(dict2) print 'adding to dict', sym ################# print 'done with dict' ##########################3 while loop < loopmax: scan_for_fills() siglistfile = sigarea + today +'.recentsigsexec.csv' if os.path.isfile(siglistfile): recentsigs = rpu_rp.CsvToLines(siglistfile) ## print recentsigs sigfileage = check_for_CP_change(siglistfile)
# (The clientId is chosen by us and we will need # separate IDs for both the execution connection and # market data connection) tws_conn = Connection.create(port=7496, clientId=100) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) ################ timelimit = 2 timer = 1 while timer < timelimit: print 'running next loop' # Create an order ID which is 'global' for this session. This # will need incrementing once new orders are submitted. order_id = timer symcontract = ibutiles.create_ticksym(14,'EUR', 'CASH', 'IDEALPRO', 'USD','ignoreexp') sym_order = ibutiles.create_order('LMT', 100000, 'SELL', 1.1498) tws_conn.reqMktData(14,symcontract,'BID',True) # Use the connection to the send the order to IB tws_conn.placeOrder(order_id, symcontract, sym_order) sleep(5) tws_conn.cancelOrder(order_id) timer += 1 sleep(5) # Disconnect from TWS print 'disconnecting..loop is done..' tws_conn.disconnect() ##reqGlobalCancel()
if dur == '30 secs': tfactor = float(0.5) else: tfactor = float(1.0) tsize = int(int(tsizedict[sym]) * tfactor) decimalboost = float(dboostdict[sym]) onetick = float(tickdict[sym]) roundfactor = int(roundfactordict[sym]) addamt = onetick * int(entrywiderdict[sym]) onetick = float(1/decimalboost) tickrounder = roundfactor if roundfactor == 0: tickrounder = 0.25 ## create contract here symib = symdict[sym] symcontract = ibutiles.create_ticksym(14,sym) ######## poll for a recent price tws_conn.reqMktData(14,symcontract,'BID',True) ## use this to get a valid price rpu_rp.WriteArrayToCsvfile('pricenow',[]) for l in rpu_rp.CsvToLines('pricenow'): pricebid = float(l[0]) ################## if sigid == prevsigid: tranflag = False ######################### order_id = get_orderid() prevsigid = sigid print sigprice, decimalboost, 'is sigprice' pricebid = float(sigprice)/float(decimalboost) if tickrounder == 0: pricenow = round(pricebid,roundfactor)
tdate = (str((int(msg.date))))[0:4] + '-' + str((int(msg.date)))[4:6]+ '-' + str((int(msg.date)))[6:8] + ' 23:59:58' ## print tdate ## print msg.date dataStr = '%s, %s, %s, %s, %s, %s, %s' % (sym, tdate, msg.open, msg.high, msg.low, msg.close, msg.volume) newDataList = newDataList + [dataStr] else: print 'next list' rpu_rp.WriteStringsToFile(fname,'') #flush the file for a in newDataList: if len(a) > 2: rpu_rp.WriteStringsToFileAppend(fname,a) newDataList = [] #################################### tws_conn = Connection.create(port=7496, clientId=109) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) tws_conn.register(historical_data_handler, message.historicalData) ####################################### for sym in symbol_list: for bar in barlist: duration = bardict[bar] print bar, sym contract = ibutiles.create_ticksym(trans_id,sym) tws_conn.reqHistoricalData(trans_id, contract, '', duration, bar, 'MIDPOINT', 0, 2) trans_id = trans_id + 1 sleep(4) ############### print 'disconnecting from ib..' tws_conn.disconnect()
def dload_list(symbol_list, durmode): barlistall = bardict.keys() barlist = [] for b in barlistall: if modedict[b] != 'special': barlist.append(b) ########################## def backupTickfiles(fname1): fname2 = fname1.replace('.csv', 'bu.csv') f1 = rpu_rp.CsvToLines(fname1) f2 = rpu_rp.CsvToLines(fname2) for line in f1: f2.append(line) rpu_rp.WriteArrayToCsvfile(fname2, f2) rpu_rp.WriteArrayToCsvfile(fname1, []) ############# def error_handler(msg): if 'historicalData' in str(msg): print 'error probably pacing hist data' pass elif 'connection is OK' in str(msg): pass else: print "Server Error: %s" % msg ############# def historical_data_handler(msg): global newDataList fname = DataDown + today + '.' + sym + '.' + bar.replace( ' ', '') + '.ddload.csv' if ('finished' in str(msg.date)) == False: ### keep building the list ## print (int(msg.date)) fstring = "%Y-%m-%d %H:%M:%S" dateold = localtime(int(msg.date)) tdate = strftime(fstring, dateold) if bar == '1 day': tdate = (str((int(msg.date))))[0:4] + '-' + str( (int(msg.date)))[4:6] + '-' + str( (int(msg.date)))[6:8] + ' 23:59:58' ## print tdate ## print msg.date dataStr = '%s, %s, %s, %s, %s, %s, %s' % ( sym, tdate, msg.open, msg.high, msg.low, msg.close, msg.volume) newDataList = newDataList + [dataStr] else: print 'next list' rpu_rp.WriteStringsToFile(fname, '') #flush the file for a in newDataList: if len(a) > 2: rpu_rp.WriteStringsToFileAppend(fname, a) newDataList = [] ########## def reply_handler(msg): if msg.typeName == 'historicalData': pass else: print "Server Response: %s, %s" % (msg.typeName, msg) #################### tws_conn = Connection.create(port=7496, clientId=109) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) tws_conn.register(historical_data_handler, message.historicalData) ####################################### trans_id = 0 if durmode == 'd': barlist = ['1day'] if durmode == '5secs': barlist = ['5secs'] for sym in symbol_list: for bar in barlist: fname = DataDown + today + '.' + sym + '.' + bar.replace( ' ', '') + '.ddload.csv' backupTickfiles(fname) ########## duration = bardict[bar] barspaced = bardictspaced[bar] contract = ibutiles.create_ticksym(trans_id, sym) ticktype = ticktypedict[sym] print bar, sym, duration, ticktype, barspaced tws_conn.reqHistoricalData(trans_id, contract, '', duration, barspaced, ticktype, 0, 2) trans_id = trans_id + 1 sleep(3) ############### print 'disconnecting from ib..' tws_conn.disconnect() for sym in symbol_list: for dura in barlist: throw_out_lastbar(sym, dura, today)
rpu_rp.WriteStringsToFileAppend(fname, a) newDataList = [] #################################### tws_conn = Connection.create(port=7496, clientId=109) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) tws_conn.register(historical_data_handler, message.historicalData) ####################################### for sym in symbol_list: symib = symdict[sym] #'CASH' ibsecType = typedict[sym] #'CASH' ibexchange = exchdict[sym] #'IDEALPRO' cashcurr = currdict[sym] #'USD' expiry = expiredict[sym] #'ignore' for bar in barlist: duration = bardict[bar] print bar, sym, symib, ibsecType, ibexchange, cashcurr, expiry, duration contract = ibutiles.create_ticksym(trans_id, symib, ibsecType, ibexchange, cashcurr, expiry) tws_conn.reqHistoricalData(trans_id, contract, '', duration, bar, 'BID_ASK', 0, 2) trans_id = trans_id + 1 sleep(5) ############### print 'disconnecting from ib..' tws_conn.disconnect()
################################ ##rpu_rp.WriteStringsToFile(TMP +'Entry.orders.Sent.csv','') sizemult = 2 print 'starting prof sender...' ############################## libsyms = EXE + 'library.syms.csv' symdict = rpu_rp.create_dict(libsyms, 0, 1) symbol_list = symdict.keys() ###################### ##print symcontrdict = {} counter = 0 for sym in symbol_list: counter += 1 symcontract = ibutiles.create_ticksym(counter, sym) sleep(1) dict2 = {sym: symcontract} symcontrdict.update(dict2) print 'adding to dict', sym ################# print 'done with dict' ##########################3 while loop < loopmax: scan_for_fills() siglistfile = sigarea + today + '.recentsigsexec.csv' if os.path.isfile(siglistfile): recentsigs = rpu_rp.CsvToLines(siglistfile) ## print recentsigs sigfileage = check_for_CP_change(siglistfile)
def scan_for_fills(): entrysSentFile = TMP + 'Entry.orders.Sent.csv' filledNoProfFile = TMP + 'Entry.orders.FilledNoProf.csv' filledNProfSentFile = TMP + 'Entry.orders.FilledNProfSent.csv' ProfSentFile = TMP + 'Profit.orders.Sent.csv' openarray = [] fillNoProf = [] filledNProfSent = [] replys = rpu_rp.CsvToLines( TMP + 'entryreplys') ## this reads the replies from the sigcreate login for l in rpu_rp.CsvToLines(entrysSentFile): if len(l) > 0: print l status ='open' listordid = l[0] #poll for status tws_conn.orderStatus(listordid) sleep(3) ### give it time to read list ## filledstring = 'orderStatus orderId='+listordid +', ' status=Filled' for rep in replys: ## CAPTURE FILL PRICE HERE AND USE INSTEAD OF ENTRYPRICE IN FILE if len(rep) > 1 and rep[1] == ' status=Filled' and rep[0] == '<orderStatus orderId='+listordid: print 'found a fill in entry orders', listordid ## status='filled' if len(rep) > 1 and rep[1] == ' status=Cancelled' and rep[0] == '<orderStatus orderId='+listordid: ## print 'found a fill in entry orders', listordid status='cxld' if status == 'filled': fillNoProf.append(l) pass elif status == 'cxld': ## print 'was cxld, deleting from list',l pass else: openarray.append(l) ## print 'is open still',l rpu_rp.WriteArrayToCsvfile(entrysSentFile,openarray) rpu_rp.WriteArrayToCsvfile(filledNoProfFile,fillNoProf) ## enter proforders if any profsneeded = rpu_rp.CsvToLines(filledNoProfFile) profsplaced = [] profitticks = 3 stopticks = 14 profmult = 1 for entryorder in profsneeded: print profsneeded print 'those were all the profs needed' flipsign = int(1) tside = 'BUY' if entryorder[1] == 'BUY': tside = 'SELL' flipsign = int(-1) tsize = int(entryorder[2]) sym = entryorder[3] profitticks = int(profticksdict[sym]) print 'original signal order = ', entryorder orderprice = float(entryorder[4]) decimalboost = float(dboostdict[sym]) onetick = float(tickdict[sym]) addamt = onetick * int(entrywiderdict[sym]) tranflag = False profprice = orderprice - (profmult * profitticks * onetick *flipsign) - (flipsign *addamt) stopprice = orderprice + (stopticks * onetick *flipsign) + (flipsign *addamt) ## print profprice,stopprice profitorder = ibutiles.create_order('LMT', tsize, tside, profprice,tranflag,profprice,profprice,'profit') stoporder = ibutiles.create_order('STP', tsize, tside, stopprice,tranflag,stopprice,stopprice,'stop') order_id = get_orderid() symcontract = ibutiles.create_ticksym(23,sym) ## might need to vary this number at some point tws_conn.placeOrder(order_id, symcontract, profitorder) tws_conn.placeOrder(order_id+1, symcontract, stoporder) print 'placed a profit and stop order here ' print sym, tside, str(tsize), str(profprice),'PROFITORDER' profsplaced.append(entryorder) sleep(4) rpu_rp.WriteArrayToCsvfileAppend(filledNProfSentFile,profsplaced) rpu_rp.WriteArrayToCsvfile(filledNoProfFile,[])
def scan_for_fills(): entrysSentFile = TMP + 'Entry.orders.Sent.csv' filledNoProfFile = TMP + 'Entry.orders.FilledNoProf.csv' filledNProfSentFile = TMP + 'Entry.orders.FilledNProfSent.csv' ProfSentFile = TMP + 'Profit.orders.Sent.csv' openarray = [] fillNoProf = [] filledNProfSent = [] replys = rpu_rp.CsvToLines( TMP + 'entryreplys') ## this reads the replies from the sigcreate login for l in rpu_rp.CsvToLines(entrysSentFile): if len(l) > 0: print l status = 'open' listordid = l[0] #poll for status tws_conn.orderStatus(listordid) sleep(3) ### give it time to read list ## filledstring = 'orderStatus orderId='+listordid +', ' status=Filled' for rep in replys: ## CAPTURE FILL PRICE HERE AND USE INSTEAD OF ENTRYPRICE IN FILE if len(rep) > 1 and rep[1] == ' status=Filled' and rep[ 0] == '<orderStatus orderId=' + listordid: print 'found a fill in entry orders', listordid ## status='filled' if len(rep) > 1 and rep[1] == ' status=Cancelled' and rep[ 0] == '<orderStatus orderId=' + listordid: ## print 'found a fill in entry orders', listordid status = 'cxld' if status == 'filled': fillNoProf.append(l) pass elif status == 'cxld': ## print 'was cxld, deleting from list',l pass else: openarray.append(l) ## print 'is open still',l rpu_rp.WriteArrayToCsvfile(entrysSentFile, openarray) rpu_rp.WriteArrayToCsvfile(filledNoProfFile, fillNoProf) ## enter proforders if any profsneeded = rpu_rp.CsvToLines(filledNoProfFile) profsplaced = [] profitticks = 3 stopticks = 14 profmult = 1 for entryorder in profsneeded: print profsneeded print 'those were all the profs needed' flipsign = int(1) tside = 'BUY' if entryorder[1] == 'BUY': tside = 'SELL' flipsign = int(-1) tsize = int(entryorder[2]) sym = entryorder[3] profitticks = int(profticksdict[sym]) print 'original signal order = ', entryorder orderprice = float(entryorder[4]) decimalboost = float(dboostdict[sym]) onetick = float(tickdict[sym]) addamt = onetick * int(entrywiderdict[sym]) tranflag = False profprice = orderprice - (profmult * profitticks * onetick * flipsign) - (flipsign * addamt) stopprice = orderprice + (stopticks * onetick * flipsign) + (flipsign * addamt) ## print profprice,stopprice profitorder = ibutiles.create_order('LMT', tsize, tside, profprice, tranflag, profprice, profprice, 'profit') stoporder = ibutiles.create_order('STP', tsize, tside, stopprice, tranflag, stopprice, stopprice, 'stop') order_id = get_orderid() symcontract = ibutiles.create_ticksym( 23, sym) ## might need to vary this number at some point tws_conn.placeOrder(order_id, symcontract, profitorder) tws_conn.placeOrder(order_id + 1, symcontract, stoporder) print 'placed a profit and stop order here ' print sym, tside, str(tsize), str(profprice), 'PROFITORDER' profsplaced.append(entryorder) sleep(4) rpu_rp.WriteArrayToCsvfileAppend(filledNProfSentFile, profsplaced) rpu_rp.WriteArrayToCsvfile(filledNoProfFile, [])
sym, tdate, msg.open, msg.high, msg.low, msg.close, msg.volume) newDataList = newDataList + [dataStr] else: print 'next list' rpu_rp.WriteStringsToFile(fname, '') #flush the file for a in newDataList: if len(a) > 2: rpu_rp.WriteStringsToFileAppend(fname, a) newDataList = [] #################################### tws_conn = Connection.create(port=7496, clientId=109) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) tws_conn.register(historical_data_handler, message.historicalData) ####################################### for sym in symbol_list: for bar in barlist: duration = bardict[bar] print bar, sym contract = ibutiles.create_ticksym(trans_id, sym) tws_conn.reqHistoricalData(trans_id, contract, '', duration, bar, 'MIDPOINT', 0, 2) trans_id = trans_id + 1 sleep(4) ############### print 'disconnecting from ib..' tws_conn.disconnect()
########################## symTickerIddict = {} contractdict = {} reqID = 1 symid = 1 for sym in symbol_list: print sym, symid fname1 = DataDown + today + '.' + sym + '.RTticks.csv' ## backup the tick files before restarting backupTickfiles(fname1) ## flush the tickfile rpu_rp.WriteArrayToCsvfile(fname1, []) ### restart ticker ##build the cntract dict but probably not use contract = ibutiles.create_ticksym(symid, sym) contractdict.update({sym: contract}) symTickerIddict.update({str(symid): sym}) print symTickerIddict ticktype = ticktypedict[sym] ## restart the ticker tws_conn.reqRealTimeBars(reqID, contract, '', ticktype, 0) symid += 1 reqID += 1 sleep(1) ######################## def get_vola(): reqID = 33 ##contract = ibutiles.create_ticksym(99,sym)
tfactor = float(0.5) tsize = int(max(1,(int(tsizedict[sym]) * tfactor))) ## print 'tsize',tsize onetick = float(tickdict[sym]) roundfactor = int(roundfactordict[sym]) addamt = onetick * int(entrywiderdict[sym]) onetick = float(1/decimalboost) tickrounder = roundfactor if roundfactor == 0: tickrounder = 0.25 ## create contract here techline = symlinedict[sym] ## calculate roundie roundieline = round(float(priceinsignal),roundfactor-2) ## print 'WARNING ... line at: >> ',techline,'roundie = ',roundieline symcontract = ibutiles.create_ticksym(14,sym) ######## poll for a recent price rpu_rp.WriteStringsToFile('pricenow','') ######## tws_conn.reqMktData(14,symcontract,'BID',True) sleep(1) for l in rpu_rp.CsvToLines('pricenow'): pricebid = float(l[0]) sleep(1) ## allows oderide to write to window remove later order_id = get_orderid() if tickrounder != 0: pricenow = round(float(ask),roundfactor) ######################################################## sigprice = round(float(priceinsignal)/float(decimalboost),roundfactor) ######################## flipsign = int(-1) if tside == 'SELL':
# (The clientId is chosen by us and we will need # separate IDs for both the execution connection and # market data connection) tws_conn = Connection.create(port=7496, clientId=100) tws_conn.connect() tws_conn.register(error_handler, 'Error') tws_conn.registerAll(reply_handler) ################ timelimit = 2 timer = 1 while timer < timelimit: print 'running next loop' # Create an order ID which is 'global' for this session. This # will need incrementing once new orders are submitted. order_id = timer symcontract = ibutiles.create_ticksym(14,'EUR', 'CASH', 'IDEALPRO', 'USD','ignoreexp') sym_order = ibutiles.create_order('LMT', 100000, 'SELL', 1.1498) tws_conn.reqMktData(14,symcontract,'BID',True) # Use the connection to the send the order to IB tws_conn.placeOrder(order_id, symcontract, sym_order) sleep(5) tws_conn.cancelOrder(order_id) timer += 1 sleep(5) # Disconnect from TWS print 'disconnecting..loop is done..' tws_conn.disconnect() ##reqGlobalCancel()