def make_order2(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel print("In make order2") print(limit) if limit == 2: if action == 'SELL': print(ProfitPips) order.m_lmtPrice = truncate( float(tHigh[0]) + ((float(truncate(float(tHigh[0]), 4)) - float(truncate(float(tLow[0]), 4))) * int(RiskReward[0])), 4) print("In limit order of make order2") print(order.m_lmtPrice) print(RiskRewardRatio) order.m_orderType = 'LMT' order.m_account = masteraccount order.m_transmit = transmit # elif action == 'SELL': # #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 # order.m_lmtPrice = float(truncate(float(tLow[0]),4)) - 0.0005 # print("In Profit Take") # print(RiskRewardRatio) order.m_transmit = transmit elif limit == 1: # ENTRY A simple stop order order.m_orderType = 'STP' print("in limit 1 of makeorder2") print(action) if action == 'BUY': # Rounding is due to FX, we cannot create an order with bad price, and FX book increments at 0.00005 only! #order.m_lmtPrice = limit - int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(truncate(float(tHigh[0]), 4)) + 0.0005 stopPrice = float(truncate(float(tHigh[0]), 4)) + 0.0005 order.m_auxPrice = stopPrice order.m_parentId = parentId order.m_account = masteraccount elif action == 'SELL': #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(truncate(float(tLow[0]), 4)) - 0.0005 stopPrice = float(truncate(float(tLow[0]), 4)) - 0.0005 order.m_auxPrice = stopPrice order.m_parentId = parentId order.m_account = masteraccount print("in stp order of make order2") # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def make_breakeven(action, qty, limit=None, transmit=True): logger.debug('In Breakeven function') order = Order() order.m_action = action logger.debug('Action is %s', order.m_action) order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('In Breakeven Order Function') order.m_orderType = 'STP' if action == 'Sell': order.m_lmtPrice = float(curBreakeven[0]) logger.debug('In Sell section of Breakeven order') breakevenPrice = float(curBreakeven[0]) logger.debug('break even price is %s', breakevenPrice) order.m_auxPrice = breakevenPrice order.m_account = masteraccount #order.m_parentId = parentId order.m_transmit = transmit logger.debug(' Transmit is %s', transmit) if action == 'Buy': logger.debug('In Buy section of breakeven order') #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(curBreakeven[0]) logger.debug(' Break even price is %s', order.m_lmtPrice) breakevenPrice = float(curBreakeven[0]) order.m_auxPrice = breakevenPrice logger.debug(' Stop price is %s', breakevenPrice) order.m_account = masteraccount #order.m_parentId = parentId # Important that we only send the order when all children are formed. order.m_transmit = transmit logger.debug(' Transmit is %s', order.m_transmi) return order
def make_order_stop(action, qty, limit=None, transmit=True): order = Order() order.m_action = action print(qty) order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel print("In make order_stop") print(limit) order.m_orderType = 'STP' if action == 'Sell': order.m_lmtPrice = float(stopVal[0]) print(order.m_lmtPrice) stopPrice = float(stopVal[0]) print(stopPrice) order.m_auxPrice = stopPrice order.m_account = masteraccount #order.m_parentId = parentId print(transmit) order.m_transmit = transmit print("In sell of make order stop") if action == 'Buy': #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(stopVal[0]) stopPrice = float(stopVal[0]) order.m_auxPrice = stopPrice order.m_account = masteraccount #order.m_parentId = parentId print("in stp order of make order2") # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def make_order_stop(action, qty, limit = None, transmit=True): logger.debug('In MAKE ORDER STOP function') order = Order() order.m_action = action logger.debug('Order action %s', order.m_action) order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('Limit value is %s', limit) order.m_orderType = 'STP' if action == 'Sell': order.m_lmtPrice = float(stopVal[0]) logger.debug('In Sell action. Limit price is %s', order.m_lmtPrice) stopPrice = float(stopVal[0]) logger.debug('In Sell action. STOP price is %s', stopPrice) order.m_auxPrice = stopPrice; order.m_account = masteraccount #order.m_parentId = parentId logger.debug('Transmit is %s', transmit) order.m_transmit = transmit if action == 'Buy': #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(stopVal[0]) logger.debug('In Buy action. Limit price is %s', order.m_lmtPrice) stopPrice = float(stopVal[0]) order.m_auxPrice = stopPrice; order.m_account = masteraccount #order.m_parentId = parentId logger.debug('In Buy action. Stop Price price is %s', stopPrice) logger.debug('In Buy action. account is %s', order.m_account) # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def make__short__order(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('In Short Order Function') logger.debug('Limit Value is %s', limit) if limit == 2: # Profit Target logger.debug('In Limit is 2 subfunction') if action == 'BUY': logger.debug('In Profit Order Subfunction') #logger.debug('Profit Pips is: %s', ProfitPips) logger.debug('Limit Price: %s', order.m_lmtPrice) #logger.debug('Risk Reward Ratio is: %s', RiskRewardRatio) order.m_lmtPrice = truncate((float(tLow[0]) - 0.0022), 4) order.m_orderType = 'LMT' order.m_account = masteraccount order.m_transmit = transmit order.m_transmit = transmit logger.debug('transmitted order') elif limit == 1: logger.debug('In Limit is 1 subfunction') # ENTRY A simple stop order order.m_orderType = 'STP' # if action == 'BUY': # logger.debug('In Buy subfunction') # #logger.debug('Profit Pips is: %s', ProfitPips) # #logger.debug('Risk Reward Ratio is: %s', RiskRewardRatio) # order.m_lmtPrice = (float(tLow[0]) - 0.0002) # stopPrice = truncate((float(tLow[0]) - 0.0002),4) #Stop Order -- Entry Price # logger.debug('STP Price: %s', stopPrice) # # order.m_auxPrice = stopPrice # #order.m_parentId = parentId # order.m_account = masteraccount # order.m_transmit = transmit if action == 'SELL': logger.debug('In Sell subfunction') #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = (float(tLow[0]) - 0.0002) logger.debug('Limit Price: %s', order.m_lmtPrice) stopPrice = truncate((float(tLow[0]) - 0.0002), 4) logger.debug('Stop Price: %s', stopPrice) order.m_auxPrice = stopPrice order.m_parentId = parentId order.m_account = masteraccount # Important that we only send the order when all children are formed. order.m_transmit = transmit logger.debug('transmitted order') return order
def make__short__order(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('In Short Order Function') if limit == 2: logger.debug('In Limit is 2 section') if action == 'BUY': logger.debug('In Buy sections Profit Take') order.m_lmtPrice = truncate( float(tLow[0]) - ((float(truncate(float(tHigh[0]), 4)) - float(truncate(float(tLow[0]), 4))) * int(RiskReward[0])), 4) logger.debug('Limit Price is %s', order.m_lmtPrice) logger.debug('RiskReward Ratio is %s', RiskRewardRatio) order.m_orderType = 'LMT' order.m_account = masteraccount order.m_transmit = transmit order.m_transmit = transmit elif limit == 1: # ENTRY A simple stop order logger.debug('In Limit is 1 Function') order.m_orderType = 'STP' if action == 'BUY': logger.debug('In Limit 1. in Buy action') logger.debug('RiskReward Ratio is %s', RiskRewardRatio) order.m_lmtPrice = truncate( float(tLow[0]) - ((float(truncate(float(tHigh[0]), 4)) - float(truncate(float(tLow[0]), 4))) * int(RiskReward[0])), 4) stopPrice = truncate( float(tLow[0]) - ((float(truncate(float(tHigh[0]), 4)) - float(truncate(float(tLow[0]), 4))) * int(RiskReward[0])), 4) logger.debug('Stop Price is %s', stopPrice) #order.m_parentId = parentId order.m_account = masteraccount order.m_transmit = transmit if action == 'SELL': logger.debug('In Limit 1. in Sell action') #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(truncate(float(tLow[0]), 4)) - 0.0005 stopPrice = float(truncate(float(tLow[0]), 4)) - 0.0005 order.m_auxPrice = stopPrice order.m_parentId = parentId order.m_account = masteraccount # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def make__short__order(action, qty, limit = None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel print("In make order") if limit == 2: if action == 'BUY': print(ProfitPips) order.m_lmtPrice = truncate(float(tLow[0]) - ((float(truncate(float(tHigh[0]),4))- float(truncate(float(tLow[0]),4))) * int(RiskReward[0])),4) print("In Profit Take") print(order.m_lmtPrice) print(RiskRewardRatio) order.m_orderType = 'LMT' order.m_account = masteraccount order.m_transmit = transmit # elif action == 'SELL': # #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 # order.m_lmtPrice = float(truncate(float(tLow[0]),4)) - 0.0005 # print("In Profit Take") # print(RiskRewardRatio) order.m_transmit = transmit elif limit == 1: # ENTRY A simple stop order order.m_orderType = 'STP' if action == 'BUY': print(ProfitPips) print(RiskRewardRatio) order.m_lmtPrice = truncate(float(tLow[0]) - ((float(truncate(float(tHigh[0]),4))- float(truncate(float(tLow[0]),4))) * int(RiskReward[0])),4) stopPrice = truncate(float(tLow[0]) - ((float(truncate(float(tHigh[0]),4))- float(truncate(float(tLow[0]),4))) * int(RiskReward[0])),4) print("In Profit Take") print(stopPrice) order.m_auxPrice = stopPrice #order.m_parentId = parentId order.m_account = masteraccount order.m_transmit = transmit if action == 'SELL': #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 order.m_lmtPrice = float(truncate(float(tLow[0]),4)) - 0.0005 stopPrice = float(truncate(float(tLow[0]),4)) - 0.0005 order.m_auxPrice = stopPrice; order.m_parentId = parentId order.m_account = masteraccount # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def make_trail(action, qty, limit=None, transmit=True): logger.debug('In TRAIL STOP function') order = Order() order.m_action = action #order.m_ocaGroup = 1 #order.ocaType = 1 logger.debug('Order action %s', order.m_action) order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('Limit value is %s', limit) order.m_orderType = 'TRAIL' order.m_outsideRth = True order.m_triggerMethod = 4 logger.debug('entryprice is %s', float(EntryPriceVal[0])) logger.debug('ATRValue is %s', float(ATRValueVal[0])) logger.debug('StopATRMultiple is %s', StopATRMultipleVal[0]) stopPrice = (float(ATRValueVal[0]) * float(StopATRMultipleVal[0])) logger.debug('stop price is %s', stopPrice) stopPrice2 = truncate(stopPrice, 2) logger.debug('stop price is %s', stopPrice2) #order.m_lmtPrice = truncate(float(stopPrice2),2) logger.debug('In SEll action. TRAIL price is %s', order.m_lmtPrice) order.m_auxPrice = stopPrice2 order.m_account = masteraccount logger.debug(' AUX Price price is %s', stopPrice2) logger.debug(' account is %s', order.m_account) # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def make_profit_order(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): logger.debug('In Make Profit Order') order = Order() order.m_action = action order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel profitPrice = float(EntryPriceVal[0]) + (float(ATRValueVal[0]) * float(ProfitATRmultipleVal[0])) logger.debug('profit price is %s', profitPrice) profitPrice2 = truncate(profitPrice, 2) order.m_lmtPrice = truncate((float(profitPrice2)), 2) logger.debug('Profit Target LMT Order Price is is %s', order.m_lmtPrice) order.m_orderType = 'LMT' order.m_triggerMethod = 4 order.m_account = masteraccount order.m_outsideRth = True order.m_transmit = transmit logger.debug('transmitted profit order') return order
def create_order(self, account, orderType, totalQuantity, action): order = Order() order.m_account = account order.m_orderType = orderType order.m_totalQuantity = totalQuantity order.m_action = action return order
def placeOrder(self,symbol,shares,limit=None,account='U8830832',exchange='SMART', transmit=0): ''' place an order on already subscribed contract ''' if symbol not in self.contracts.keys(): self.log.error("Can't place order, not subscribed to %s" % symbol) return action = {-1:'SELL',1:'BUY'} o= Order() o.m_orderId = self.getOrderId() o.m_action = action[cmp(shares,0)] o.m_totalQuantity = abs(shares) o.m_account = account o.m_transmit = transmit if limit is not None: o.m_orderType = 'LMT' o.m_lmtPrice = limit self.log.debug('Placing %s order for %i %s (id=%i)' % (o.m_action,o.m_totalQuantity,symbol,o.m_orderId)) self.tws.placeOrder(o.m_orderId,self.contracts[symbol],o)
def mkOrder(id,shares, limit=None, account='',transmit=0, tif = 'DAY'): ''' create order object Parameters ----------- orderId : The order Id. You must specify a unique value. When the order status returns, it will be identified by this tag. This tag is also used when canceling the order. shares: number of shares to buy or sell. Negative for sell order. limit : price limit, None for MKT order transmit: transmit immideatelly from tws ''' action = {-1:'SELL',1:'BUY'} o = Order() o.m_orderId = id o.m_account=account o.m_action = action[cmp(shares,0)] o.m_totalQuantity = abs(shares) o.m_transmit = transmit if limit is not None: o.m_orderType = 'LMT' o.m_lmtPrice = limit else: o.m_orderType = 'MKT' return o
def create_order(self, account, orderType, totalQuantity, action): order = Order() order.m_account = account order.m_orderType = orderType order.m_totalQuantity = totalQuantity order.m_action = action return order
def placeOrder(self, symbol, shares, limit=None, account='U8830832', exchange='SMART', transmit=0): ''' place an order on already subscribed contract ''' if symbol not in self.contracts.keys(): self.log.error("Can't place order, not subscribed to %s" % symbol) return action = {-1: 'SELL', 1: 'BUY'} o = Order() o.m_orderId = self.getOrderId() o.m_action = action[cmp(shares, 0)] o.m_totalQuantity = abs(shares) o.m_account = account o.m_transmit = transmit if limit is not None: o.m_orderType = 'LMT' o.m_lmtPrice = limit self.log.debug('Placing %s order for %i %s (id=%i)' % (o.m_action, o.m_totalQuantity, symbol, o.m_orderId)) self.tws.placeOrder(o.m_orderId, self.contracts[symbol], o)
def make_sell_order(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty[0] logger.debug('qty is %s', qty[0]) logger.debug('qty type is %s', type(qty)) order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('In Sell Order Function') logger.debug('Limit Value is %s', limit) # ENTRY A simple stop order order.m_orderType = 'MKT' order.m_outsideRth = True order.m_sweepToFill = 1 logger.debug('In Sell Order Function when Limit is 1') logger.debug('Action is %s', action) #order.m_lmtPrice = limit - int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 #order.m_triggerMethod = 4 order.m_parentId = parentId order.m_account = masteraccount order.m_transmit = transmit return order
def makeStkOrder(shares,action,account,ordertype='MKT'): order = Order() order.m_minQty = shares order.m_orderType = ordertype order.m_totalQuantity = shares order.m_action = str(action).upper() order.m_outsideRth = True #allow order to be filled ourside regular trading hours order.m_account = account return order
def create_order(self, account, orderType, totalQuantity, action, lmt_price=None): order = Order() order.m_account = account order.m_orderType = orderType order.m_totalQuantity = totalQuantity order.m_action = action if orderType == "LMT": order.m_lmtPrice = lmt_price return order
def create_order(self, order_type, quantity, action): """Create an Order object (Market/Limit) to go long/short. order_type - 'MKT', 'LMT' for Market or Limit orders quantity - Integral number of assets to order action - 'BUY' or 'SELL'""" order = Order() order.m_orderType = order_type order.m_totalQuantity = quantity order.m_action = action order.m_account = self.current_account return order
def create_order(self, account, orderType, totalQuantity, action, lmt, transmit): order = Order() order.m_account = account order.m_orderType = orderType order.m_totalQuantity = totalQuantity order.m_action = action order.m_lmtPrice = lmt # order.m_trailStopPrice=stp order.m_transmit = transmit return order
def create_order(self, order_type, quantity, action): """Create an Order object (Market/Limit) to go long/short. order_type - 'MKT', 'LMT' for Market or Limit orders quantity - Integral number of assets to order action - 'BUY' or 'SELL'""" order = Order() order.m_orderType = order_type order.m_totalQuantity = quantity order.m_action = action order.m_account = self.current_account return order
def make_long_order(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty[0] logger.debug('qty is %s', qty[0]) logger.debug('qty type is %s', type(qty)) order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('In Long Order Function') logger.debug('Limit Value is %s', limit) # ENTRY A simple stop order order.m_orderType = 'STP' logger.debug('In Long Order Function when Limit is 1') logger.debug('Action is %s', action) # Rounding is due to FX, we cannot create an order with bad price, and FX book increments at 0.00005 only! #order.m_lmtPrice = limit - int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 logger.debug('In Buy action') lmtPrice = float( truncate((float(gap_close) + (float(ATRentrymultiple[0]) * float(ATRVal[0]))), 2)) logger.debug('Buy Stop Limit"Limit" Price or better to buy %s', lmtPrice) float(lmtPrice) logger.debug('lmt price type is %s', type(lmtPrice)) order.m_lmtPrice = lmtPrice stopPrice = float( truncate((float(gap_close) + (float(ATRentrymultiple[0]) * float(ATRVal[0]))), 2)) logger.debug('Buy Stop Limit"Stop" Price to fire a buy order %s', stopPrice) float(stopPrice) logger.debug('stop price type is %s', type(stopPrice)) order.m_auxPrice = stopPrice order.m_triggerMethod = 2 order.m_parentId = parentId order.m_account = masteraccount logger.debug('Buy Upper Limit Price %s', order.m_lmtPrice) logger.debug('Buy Upper Limit Type %s', type(order.m_lmtPrice)) logger.debug('Stop Entry Trigger Price %s ', stopPrice) logger.debug('Stop Entry Trigger Type %s ', type(stopPrice)) logger.debug('Parent ID %s', order.m_parentId) logger.debug('Account is %s', order.m_account) order.m_transmit = transmit return order
def place_order(self, instrument, expiry, quantity, acc=None): """ Send API request to place an order on the exchange. :param instrument: core.instrument.Instrument object :param expiry: contract label :param quantity: order size as a signed integer (quantity > 0 means 'BUY' and quantity < 0 means 'SELL') :param acc: IB account to place order from, if None - the default account will be used """ contract = Contract() contract.m_symbol = instrument.ib_code contract.m_secType = 'FUT' # place_order expects the contract label here, not the actual expiration date contract.m_expiry = expiry contract.m_exchange = instrument.exchange contract.m_currency = instrument.denomination if hasattr(instrument, 'ib_trading_class'): contract.m_tradingClass = instrument.ib_trading_class if hasattr(instrument, 'ib_multiplier'): contract.m_multiplier = instrument.ib_multiplier order = Order() order.m_orderType = 'MKT' order.m_algoStrategy = 'Adaptive' order.m_algoParams = [TagValue('adaptivePriority', 'Patient')] order.m_totalQuantity = int(abs(quantity)) order.m_action = quantity > 0 and 'BUY' or 'SELL' if acc is not None: order.m_account = acc.name self.last_account = acc logger.warning( ' '.join(['Order:', str(self.order_id), contract.m_symbol, contract.m_expiry, \ order.m_action, str(order.m_totalQuantity)])) self.connection.placeOrder(self.order_id, contract, order) self.orders_cache[self.order_id] = {'contract': contract, 'order': order} # order_id may not update just after the order is submitted so we save the previous one and # keep requesting until it's updated or we hit the time/iterations limit prev_id = self.order_id i = 0 while prev_id >= self.order_id: sleep(self.api_delay) i += 1 logger.debug('Requesting next order_id..') self.connection.reqIds(1) self.next_id_event.wait(timeout=(self.api_delay * 30)) self.next_id_event.clear() if i > 60: logger.warning("Couldn't obtain next valid order id. Next orders may not be" "submitted correctly!") return
def newOrder_GUI(action, orderID, quantity,startTime): global trade_params newStkOrder = Order() print orderID, action, trade_params['OrderTIF'],trade_params['OrderType'],quantity,trade_params['Account'],startTime newStkOrder.m_orderId = orderID newStkOrder.m_action = action newStkOrder.m_tif = 'DAY' newStkOrder.m_transmit = True newStkOrder.m_orderType = 'MKT' newStkOrder.m_totalQuantity = quantity newStkOrder.m_account = 'DU164541' newStkOrder.m_goodAfterTime = startTime #newStkOrder.m_goodAfterTime=endTime return newStkOrder
def create_order(order_type, quantity, action, price=None): """Create an Order object (Market/Limit) to go long/short. order_type - 'MKT', 'LMT' for Market or Limit orders quantity - Integral number of assets to order action - 'BUY' or 'SELL'""" order = Order() order.m_orderType = order_type order.m_totalQuantity = quantity order.m_action = action order.m_account = ConfigMgr.get_ib_config()['account_code'] if order_type == 'LMT': order.m_lmtPrice = price elif order_type == 'STP': order.m_auxPrice = price return order
def create_order(self, account, orderType, totalQuantity, action, lmt, transmit, tif, gtd, initsize, subsize, princrement, pradjval, pradjinterval): order = Order() order.m_account = account order.m_orderType = orderType order.m_totalQuantity = totalQuantity order.m_action = action order.m_lmtPrice = lmt order.m_transmit = transmit order.m_tif = tif order.m_goodTillDate = gtd order.m_scaleInitLevelSize = initsize order.m_scaleSubsLevelSize = subsize order.m_scalePriceIncrement = princrement order.m_scalePriceAdjustValue = pradjval order.m_scalePriceAdjustInterval = pradjinterval # order.m_trailStopPrice=trailStopPrice # order.m_percentOffset=percentOffset # order.m_auxPrice=auxPrice #trailStopPrice,percentOffset,auxPrice return order
def processMsg(self, msgId): if (msgId == -1): return False if msgId == self.TICK_PRICE: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() price = self.readDouble() size = 0 if version >= 2: size = self.readInt() canAutoExecute = 0 if version >= 3: canAutoExecute = self.readInt() self.eWrapper().tickPrice(tickerId, tickType, price, canAutoExecute) if version >= 2: sizeTickType = -1 if tickType == 1: sizeTickType = 0 elif tickType == 2: sizeTickType = 3 elif tickType == 4: sizeTickType = 5 if (sizeTickType != -1): self.eWrapper().tickSize(tickerId, sizeTickType, size) elif msgId == self.TICK_SIZE: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() size = self.readInt() self.eWrapper().tickSize(tickerId, tickType, size) elif msgId == self.TICK_OPTION_COMPUTATION: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() impliedVol = self.readDouble() if impliedVol < 0: impliedVol = Double.MAX_VALUE delta = self.readDouble() if abs(delta) > 1: delta = Double.MAX_VALUE optPrice = Double.MAX_VALUE pvDividend = Double.MAX_VALUE gamma = Double.MAX_VALUE vega = Double.MAX_VALUE theta = Double.MAX_VALUE undPrice = Double.MAX_VALUE if version >= 6 or (tickType == TickType.MODEL_OPTION): optPrice = self.readDouble() if optPrice < 0: optPrice = Double.MAX_VALUE pvDividend = self.readDouble() if pvDividend < 0: pvDividend = Double.MAX_VALUE if version >= 6: gamma = self.readDouble() if abs(gamma) > 1: gamma = Double.MAX_VALUE vega = self.readDouble() if abs(vega) > 1: vega = Double.MAX_VALUE theta = self.readDouble() if abs(theta) > 1: theta = Double.MAX_VALUE undPrice = self.readDouble() if undPrice < 0: undPrice = Double.MAX_VALUE self.eWrapper().tickOptionComputation(tickerId, tickType, impliedVol, delta, optPrice, pvDividend, gamma, vega, theta, undPrice) elif msgId == self.TICK_GENERIC: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() value = self.readDouble() self.eWrapper().tickGeneric(tickerId, tickType, value) elif msgId == self.TICK_STRING: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() value = self.readStr() self.eWrapper().tickString(tickerId, tickType, value) elif msgId == self.TICK_EFP: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() basisPoints = self.readDouble() formattedBasisPoints = self.readStr() impliedFuturesPrice = self.readDouble() holdDays = self.readInt() futureExpiry = self.readStr() dividendImpact = self.readDouble() dividendsToExpiry = self.readDouble() self.eWrapper().tickEFP(tickerId, tickType, basisPoints, formattedBasisPoints, impliedFuturesPrice, holdDays, futureExpiry, dividendImpact, dividendsToExpiry) elif msgId == self.ORDER_STATUS: version = self.readInt() id = self.readInt() status = self.readStr() filled = self.readInt() remaining = self.readInt() avgFillPrice = self.readDouble() permId = 0 if version >= 2: permId = self.readInt() parentId = 0 if version >= 3: parentId = self.readInt() lastFillPrice = 0 if version >= 4: lastFillPrice = self.readDouble() clientId = 0 if version >= 5: clientId = self.readInt() whyHeld = None if version >= 6: whyHeld = self.readStr() self.eWrapper().orderStatus(id, status, filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld) elif msgId == self.ACCT_VALUE: version = self.readInt() key = self.readStr() val = self.readStr() cur = self.readStr() accountName = None if version >= 2: accountName = self.readStr() self.eWrapper().updateAccountValue(key, val, cur, accountName) elif msgId == self.PORTFOLIO_VALUE: version = self.readInt() contract = Contract() if version >= 6: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() if version >= 7: contract.m_multiplier = self.readStr() contract.m_primaryExch = self.readStr() contract.m_currency = self.readStr() if version >= 2: contract.m_localSymbol = self.readStr() position = self.readInt() marketPrice = self.readDouble() marketValue = self.readDouble() averageCost = 0.0 unrealizedPNL = 0.0 realizedPNL = 0.0 if version >= 3: averageCost = self.readDouble() unrealizedPNL = self.readDouble() realizedPNL = self.readDouble() accountName = None if version >= 4: accountName = self.readStr() if (version == 6) and (self.m_parent.serverVersion() == 39): contract.m_primaryExch = self.readStr() self.eWrapper().updatePortfolio(contract, position, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName) elif msgId == self.ACCT_UPDATE_TIME: version = self.readInt() timeStamp = self.readStr() self.eWrapper().updateAccountTime(timeStamp) elif msgId == self.ERR_MSG: version = self.readInt() if version < 2: msg = self.readStr() self.m_parent.error(msg) else: id = self.readInt() errorCode = self.readInt() errorMsg = self.readStr() self.m_parent.error(id, errorCode, errorMsg) elif msgId == self.OPEN_ORDER: version = self.readInt() order = Order() order.m_orderId = self.readInt() contract = Contract() if version >= 17: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() if version >= 2: contract.m_localSymbol = self.readStr() order.m_action = self.readStr() order.m_totalQuantity = self.readInt() order.m_orderType = self.readStr() order.m_lmtPrice = self.readDouble() order.m_auxPrice = self.readDouble() order.m_tif = self.readStr() order.m_ocaGroup = self.readStr() order.m_account = self.readStr() order.m_openClose = self.readStr() order.m_origin = self.readInt() order.m_orderRef = self.readStr() if version >= 3: order.m_clientId = self.readInt() if version >= 4: order.m_permId = self.readInt() if version < 18: self.readBoolFromInt() else: order.m_outsideRth = self.readBoolFromInt() order.m_hidden = (self.readInt() == 1) order.m_discretionaryAmt = self.readDouble() if version >= 5: order.m_goodAfterTime = self.readStr() if version >= 6: self.readStr() if version >= 7: order.m_faGroup = self.readStr() order.m_faMethod = self.readStr() order.m_faPercentage = self.readStr() order.m_faProfile = self.readStr() if version >= 8: order.m_goodTillDate = self.readStr() if version >= 9: order.m_rule80A = self.readStr() order.m_percentOffset = self.readDouble() order.m_settlingFirm = self.readStr() order.m_shortSaleSlot = self.readInt() order.m_designatedLocation = self.readStr() if (self.m_parent.serverVersion() == 51): self.readInt() else: if version >= 23: order.m_exemptCode = self.readInt() order.m_auctionStrategy = self.readInt() order.m_startingPrice = self.readDouble() order.m_stockRefPrice = self.readDouble() order.m_delta = self.readDouble() order.m_stockRangeLower = self.readDouble() order.m_stockRangeUpper = self.readDouble() order.m_displaySize = self.readInt() if version < 18: self.readBoolFromInt() order.m_blockOrder = self.readBoolFromInt() order.m_sweepToFill = self.readBoolFromInt() order.m_allOrNone = self.readBoolFromInt() order.m_minQty = self.readInt() order.m_ocaType = self.readInt() order.m_eTradeOnly = self.readBoolFromInt() order.m_firmQuoteOnly = self.readBoolFromInt() order.m_nbboPriceCap = self.readDouble() if version >= 10: order.m_parentId = self.readInt() order.m_triggerMethod = self.readInt() if version >= 11: order.m_volatility = self.readDouble() order.m_volatilityType = self.readInt() if (version == 11): receivedInt = self.readInt() order.m_deltaNeutralOrderType = "NONE" if (receivedInt == 0) else "MKT" else: order.m_deltaNeutralOrderType = self.readStr() order.m_deltaNeutralAuxPrice = self.readDouble() order.m_continuousUpdate = self.readInt() if (self.m_parent.serverVersion() == 26): order.m_stockRangeLower = self.readDouble() order.m_stockRangeUpper = self.readDouble() order.m_referencePriceType = self.readInt() if version >= 13: order.m_trailStopPrice = self.readDouble() if version >= 14: order.m_basisPoints = self.readDouble() order.m_basisPointsType = self.readInt() contract.m_comboLegsDescrip = self.readStr() if version >= 15: if version >= 20: order.m_scaleInitLevelSize = self.readIntMax() order.m_scaleSubsLevelSize = self.readIntMax() else: self.readIntMax() order.m_scaleInitLevelSize = self.readIntMax() order.m_scalePriceIncrement = self.readDoubleMax() if version >= 19: order.m_clearingAccount = self.readStr() order.m_clearingIntent = self.readStr() if version >= 22: order.m_notHeld = self.readBoolFromInt() if version >= 20: if self.readBoolFromInt(): underComp = UnderComp() underComp.m_conId = self.readInt() underComp.m_delta = self.readDouble() underComp.m_price = self.readDouble() contract.m_underComp = underComp if version >= 21: order.m_algoStrategy = self.readStr() if not Util.StringIsEmpty(order.m_algoStrategy): algoParamsCount = self.readInt() if algoParamsCount > 0: order.m_algoParams = list() ## for-while i = 0 while i < algoParamsCount: tagValue = TagValue() tagValue.m_tag = self.readStr() tagValue.m_value = self.readStr() order.m_algoParams.append(tagValue) i += 1 orderState = OrderState() if version >= 16: order.m_whatIf = self.readBoolFromInt() orderState.m_status = self.readStr() orderState.m_initMargin = self.readStr() orderState.m_maintMargin = self.readStr() orderState.m_equityWithLoan = self.readStr() orderState.m_commission = self.readDoubleMax() orderState.m_minCommission = self.readDoubleMax() orderState.m_maxCommission = self.readDoubleMax() orderState.m_commissionCurrency = self.readStr() orderState.m_warningText = self.readStr() self.eWrapper().openOrder(order.m_orderId, contract, order, orderState) elif msgId == self.NEXT_VALID_ID: version = self.readInt() orderId = self.readInt() self.eWrapper().nextValidId(orderId) elif msgId == self.SCANNER_DATA: contract = ContractDetails() version = self.readInt() tickerId = self.readInt() numberOfElements = self.readInt() ## for-while ctr = 0 while ctr < numberOfElements: rank = self.readInt() if version >= 3: contract.m_summary.m_conId = self.readInt() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_summary.m_expiry = self.readStr() contract.m_summary.m_strike = self.readDouble() contract.m_summary.m_right = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_summary.m_localSymbol = self.readStr() contract.m_marketName = self.readStr() contract.m_tradingClass = self.readStr() distance = self.readStr() benchmark = self.readStr() projection = self.readStr() legsStr = None if version >= 2: legsStr = self.readStr() self.eWrapper().scannerData(tickerId, rank, contract, distance, benchmark, projection, legsStr) ctr += 1 self.eWrapper().scannerDataEnd(tickerId) elif msgId == self.CONTRACT_DATA: version = self.readInt() reqId = -1 if version >= 3: reqId = self.readInt() contract = ContractDetails() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_summary.m_expiry = self.readStr() contract.m_summary.m_strike = self.readDouble() contract.m_summary.m_right = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_summary.m_localSymbol = self.readStr() contract.m_marketName = self.readStr() contract.m_tradingClass = self.readStr() contract.m_summary.m_conId = self.readInt() contract.m_minTick = self.readDouble() contract.m_summary.m_multiplier = self.readStr() contract.m_orderTypes = self.readStr() contract.m_validExchanges = self.readStr() if version >= 2: contract.m_priceMagnifier = self.readInt() if version >= 4: contract.m_underConId = self.readInt() if version >= 5: contract.m_longName = self.readStr() contract.m_summary.m_primaryExch = self.readStr() if version >= 6: contract.m_contractMonth = self.readStr() contract.m_industry = self.readStr() contract.m_category = self.readStr() contract.m_subcategory = self.readStr() contract.m_timeZoneId = self.readStr() contract.m_tradingHours = self.readStr() contract.m_liquidHours = self.readStr() self.eWrapper().contractDetails(reqId, contract) elif msgId == self.BOND_CONTRACT_DATA: version = self.readInt() reqId = -1 if version >= 3: reqId = self.readInt() contract = ContractDetails() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_cusip = self.readStr() contract.m_coupon = self.readDouble() contract.m_maturity = self.readStr() contract.m_issueDate = self.readStr() contract.m_ratings = self.readStr() contract.m_bondType = self.readStr() contract.m_couponType = self.readStr() contract.m_convertible = self.readBoolFromInt() contract.m_callable = self.readBoolFromInt() contract.m_putable = self.readBoolFromInt() contract.m_descAppend = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_marketName = self.readStr() contract.m_tradingClass = self.readStr() contract.m_summary.m_conId = self.readInt() contract.m_minTick = self.readDouble() contract.m_orderTypes = self.readStr() contract.m_validExchanges = self.readStr() if version >= 2: contract.m_nextOptionDate = self.readStr() contract.m_nextOptionType = self.readStr() contract.m_nextOptionPartial = self.readBoolFromInt() contract.m_notes = self.readStr() if version >= 4: contract.m_longName = self.readStr() self.eWrapper().bondContractDetails(reqId, contract) elif msgId == self.EXECUTION_DATA: version = self.readInt() reqId = -1 if version >= 7: reqId = self.readInt() orderId = self.readInt() contract = Contract() if version >= 5: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() contract.m_localSymbol = self.readStr() exec_ = Execution() exec_.m_orderId = orderId exec_.m_execId = self.readStr() exec_.m_time = self.readStr() exec_.m_acctNumber = self.readStr() exec_.m_exchange = self.readStr() exec_.m_side = self.readStr() exec_.m_shares = self.readInt() exec_.m_price = self.readDouble() if version >= 2: exec_.m_permId = self.readInt() if version >= 3: exec_.m_clientId = self.readInt() if version >= 4: exec_.m_liquidation = self.readInt() if version >= 6: exec_.m_cumQty = self.readInt() exec_.m_avgPrice = self.readDouble() self.eWrapper().execDetails(reqId, contract, exec_) elif msgId == self.MARKET_DEPTH: version = self.readInt() id = self.readInt() position = self.readInt() operation = self.readInt() side = self.readInt() price = self.readDouble() size = self.readInt() self.eWrapper().updateMktDepth(id, position, operation, side, price, size) elif msgId == self.MARKET_DEPTH_L2: version = self.readInt() id = self.readInt() position = self.readInt() marketMaker = self.readStr() operation = self.readInt() side = self.readInt() price = self.readDouble() size = self.readInt() self.eWrapper().updateMktDepthL2(id, position, marketMaker, operation, side, price, size) elif msgId == self.NEWS_BULLETINS: version = self.readInt() newsMsgId = self.readInt() newsMsgType = self.readInt() newsMessage = self.readStr() originatingExch = self.readStr() self.eWrapper().updateNewsBulletin(newsMsgId, newsMsgType, newsMessage, originatingExch) elif msgId == self.MANAGED_ACCTS: version = self.readInt() accountsList = self.readStr() self.eWrapper().managedAccounts(accountsList) elif msgId == self.RECEIVE_FA: version = self.readInt() faDataType = self.readInt() xml = self.readStr() self.eWrapper().receiveFA(faDataType, xml) elif msgId == self.HISTORICAL_DATA: version = self.readInt() reqId = self.readInt() startDateStr = "" endDateStr = "" completedIndicator = "finished" if version >= 2: startDateStr = self.readStr() endDateStr = self.readStr() completedIndicator += "-" + startDateStr + "-" + endDateStr itemCount = self.readInt() ## for-while ctr = 0 while ctr < itemCount: date = self.readStr() open = self.readDouble() high = self.readDouble() low = self.readDouble() close = self.readDouble() volume = self.readInt() WAP = self.readDouble() hasGaps = self.readStr() barCount = -1 if version >= 3: barCount = self.readInt() self.eWrapper().historicalData(reqId, date, open, high, low, close, volume, barCount, WAP, Boolean.valueOf(hasGaps).booleanValue()) ctr += 1 self.eWrapper().historicalData(reqId, completedIndicator, -1, -1, -1, -1, -1, -1, -1, False) elif msgId == self.SCANNER_PARAMETERS: version = self.readInt() xml = self.readStr() self.eWrapper().scannerParameters(xml) elif msgId == self.CURRENT_TIME: self.readInt() time = self.readLong() self.eWrapper().currentTime(time) elif msgId == self.REAL_TIME_BARS: self.readInt() reqId = self.readInt() time = self.readLong() open = self.readDouble() high = self.readDouble() low = self.readDouble() close = self.readDouble() volume = self.readLong() wap = self.readDouble() count = self.readInt() self.eWrapper().realtimeBar(reqId, time, open, high, low, close, volume, wap, count) elif msgId == self.FUNDAMENTAL_DATA: self.readInt() reqId = self.readInt() data = self.readStr() self.eWrapper().fundamentalData(reqId, data) elif msgId == self.CONTRACT_DATA_END: self.readInt() reqId = self.readInt() self.eWrapper().contractDetailsEnd(reqId) elif msgId == self.OPEN_ORDER_END: self.readInt() self.eWrapper().openOrderEnd() elif msgId == self.ACCT_DOWNLOAD_END: self.readInt() accountName = self.readStr() self.eWrapper().accountDownloadEnd(accountName) elif msgId == self.EXECUTION_DATA_END: self.readInt() reqId = self.readInt() self.eWrapper().execDetailsEnd(reqId) elif msgId == self.DELTA_NEUTRAL_VALIDATION: self.readInt() reqId = self.readInt() underComp = UnderComp() underComp.m_conId = self.readInt() underComp.m_delta = self.readDouble() underComp.m_price = self.readDouble() self.eWrapper().deltaNeutralValidation(reqId, underComp) elif msgId == self.TICK_SNAPSHOT_END: self.readInt() reqId = self.readInt() self.eWrapper().tickSnapshotEnd(reqId) else: self.m_parent.error(EClientErrors.NO_VALID_ID, EClientErrors.UNKNOWN_ID.code(), EClientErrors.UNKNOWN_ID.msg()) return False return True
def processMsg(self, msgId): if (msgId == -1): return False if msgId == self.TICK_PRICE: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() price = self.readDouble() size = 0 if version >= 2: size = self.readInt() canAutoExecute = 0 if version >= 3: canAutoExecute = self.readInt() self.eWrapper().tickPrice(tickerId, tickType, price, canAutoExecute) if version >= 2: sizeTickType = -1 if tickType == 1: sizeTickType = 0 elif tickType == 2: sizeTickType = 3 elif tickType == 4: sizeTickType = 5 if (sizeTickType != -1): self.eWrapper().tickSize(tickerId, sizeTickType, size) elif msgId == self.TICK_SIZE: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() size = self.readInt() self.eWrapper().tickSize(tickerId, tickType, size) elif msgId == self.TICK_OPTION_COMPUTATION: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() impliedVol = self.readDouble() if impliedVol < 0: impliedVol = Double.MAX_VALUE delta = self.readDouble() if abs(delta) > 1: delta = Double.MAX_VALUE modelPrice = float() pvDividend = float() if (tickType == TickType.MODEL_OPTION): modelPrice = self.readDouble() pvDividend = self.readDouble() else: modelPrice = pvDividend = Double.MAX_VALUE self.eWrapper().tickOptionComputation(tickerId, tickType, impliedVol, delta, modelPrice, pvDividend) elif msgId == self.TICK_GENERIC: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() value = self.readDouble() self.eWrapper().tickGeneric(tickerId, tickType, value) elif msgId == self.TICK_STRING: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() value = self.readStr() self.eWrapper().tickString(tickerId, tickType, value) elif msgId == self.TICK_EFP: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() basisPoints = self.readDouble() formattedBasisPoints = self.readStr() impliedFuturesPrice = self.readDouble() holdDays = self.readInt() futureExpiry = self.readStr() dividendImpact = self.readDouble() dividendsToExpiry = self.readDouble() self.eWrapper().tickEFP(tickerId, tickType, basisPoints, formattedBasisPoints, impliedFuturesPrice, holdDays, futureExpiry, dividendImpact, dividendsToExpiry) elif msgId == self.ORDER_STATUS: version = self.readInt() id = self.readInt() status = self.readStr() filled = self.readInt() remaining = self.readInt() avgFillPrice = self.readDouble() permId = 0 if version >= 2: permId = self.readInt() parentId = 0 if version >= 3: parentId = self.readInt() lastFillPrice = 0 if version >= 4: lastFillPrice = self.readDouble() clientId = 0 if version >= 5: clientId = self.readInt() whyHeld = None if version >= 6: whyHeld = self.readStr() self.eWrapper().orderStatus(id, status, filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld) elif msgId == self.ACCT_VALUE: version = self.readInt() key = self.readStr() val = self.readStr() cur = self.readStr() accountName = None if version >= 2: accountName = self.readStr() self.eWrapper().updateAccountValue(key, val, cur, accountName) elif msgId == self.PORTFOLIO_VALUE: version = self.readInt() contract = Contract() if version >= 6: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() if version >= 7: contract.m_multiplier = self.readStr() contract.m_primaryExch = self.readStr() contract.m_currency = self.readStr() if version >= 2: contract.m_localSymbol = self.readStr() position = self.readInt() marketPrice = self.readDouble() marketValue = self.readDouble() averageCost = 0.0 unrealizedPNL = 0.0 realizedPNL = 0.0 if version >= 3: averageCost = self.readDouble() unrealizedPNL = self.readDouble() realizedPNL = self.readDouble() accountName = None if version >= 4: accountName = self.readStr() if (version == 6) and (self.m_parent.serverVersion() == 39): contract.m_primaryExch = self.readStr() self.eWrapper().updatePortfolio(contract, position, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName) elif msgId == self.ACCT_UPDATE_TIME: version = self.readInt() timeStamp = self.readStr() self.eWrapper().updateAccountTime(timeStamp) elif msgId == self.ERR_MSG: version = self.readInt() if version < 2: msg = self.readStr() self.m_parent.error(msg) else: id = self.readInt() errorCode = self.readInt() errorMsg = self.readStr() self.m_parent.error(id, errorCode, errorMsg) elif msgId == self.OPEN_ORDER: version = self.readInt() order = Order() order.m_orderId = self.readInt() contract = Contract() if version >= 17: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() if version >= 2: contract.m_localSymbol = self.readStr() order.m_action = self.readStr() order.m_totalQuantity = self.readInt() order.m_orderType = self.readStr() order.m_lmtPrice = self.readDouble() order.m_auxPrice = self.readDouble() order.m_tif = self.readStr() order.m_ocaGroup = self.readStr() order.m_account = self.readStr() order.m_openClose = self.readStr() order.m_origin = self.readInt() order.m_orderRef = self.readStr() if version >= 3: order.m_clientId = self.readInt() if version >= 4: order.m_permId = self.readInt() if version < 18: self.readBoolFromInt() else: order.m_outsideRth = self.readBoolFromInt() order.m_hidden = (self.readInt() == 1) order.m_discretionaryAmt = self.readDouble() if version >= 5: order.m_goodAfterTime = self.readStr() if version >= 6: self.readStr() if version >= 7: order.m_faGroup = self.readStr() order.m_faMethod = self.readStr() order.m_faPercentage = self.readStr() order.m_faProfile = self.readStr() if version >= 8: order.m_goodTillDate = self.readStr() if version >= 9: order.m_rule80A = self.readStr() order.m_percentOffset = self.readDouble() order.m_settlingFirm = self.readStr() order.m_shortSaleSlot = self.readInt() order.m_designatedLocation = self.readStr() order.m_auctionStrategy = self.readInt() order.m_startingPrice = self.readDouble() order.m_stockRefPrice = self.readDouble() order.m_delta = self.readDouble() order.m_stockRangeLower = self.readDouble() order.m_stockRangeUpper = self.readDouble() order.m_displaySize = self.readInt() if version < 18: self.readBoolFromInt() order.m_blockOrder = self.readBoolFromInt() order.m_sweepToFill = self.readBoolFromInt() order.m_allOrNone = self.readBoolFromInt() order.m_minQty = self.readInt() order.m_ocaType = self.readInt() order.m_eTradeOnly = self.readBoolFromInt() order.m_firmQuoteOnly = self.readBoolFromInt() order.m_nbboPriceCap = self.readDouble() if version >= 10: order.m_parentId = self.readInt() order.m_triggerMethod = self.readInt() if version >= 11: order.m_volatility = self.readDouble() order.m_volatilityType = self.readInt() if (version == 11): receivedInt = self.readInt() order.m_deltaNeutralOrderType = "NONE" if (receivedInt == 0) else "MKT" else: order.m_deltaNeutralOrderType = self.readStr() order.m_deltaNeutralAuxPrice = self.readDouble() order.m_continuousUpdate = self.readInt() if (self.m_parent.serverVersion() == 26): order.m_stockRangeLower = self.readDouble() order.m_stockRangeUpper = self.readDouble() order.m_referencePriceType = self.readInt() if version >= 13: order.m_trailStopPrice = self.readDouble() if version >= 14: order.m_basisPoints = self.readDouble() order.m_basisPointsType = self.readInt() contract.m_comboLegsDescrip = self.readStr() if version >= 15: if version >= 20: order.m_scaleInitLevelSize = self.readIntMax() order.m_scaleSubsLevelSize = self.readIntMax() else: self.readIntMax() order.m_scaleInitLevelSize = self.readIntMax() order.m_scalePriceIncrement = self.readDoubleMax() if version >= 19: order.m_clearingAccount = self.readStr() order.m_clearingIntent = self.readStr() if version >= 20: if self.readBoolFromInt(): underComp = UnderComp() underComp.m_conId = self.readInt() underComp.m_delta = self.readDouble() underComp.m_price = self.readDouble() contract.m_underComp = underComp orderState = OrderState() if version >= 16: order.m_whatIf = self.readBoolFromInt() orderState.m_status = self.readStr() orderState.m_initMargin = self.readStr() orderState.m_maintMargin = self.readStr() orderState.m_equityWithLoan = self.readStr() orderState.m_commission = self.readDoubleMax() orderState.m_minCommission = self.readDoubleMax() orderState.m_maxCommission = self.readDoubleMax() orderState.m_commissionCurrency = self.readStr() orderState.m_warningText = self.readStr() self.eWrapper().openOrder(order.m_orderId, contract, order, orderState) elif msgId == self.NEXT_VALID_ID: version = self.readInt() orderId = self.readInt() self.eWrapper().nextValidId(orderId) elif msgId == self.SCANNER_DATA: contract = ContractDetails() version = self.readInt() tickerId = self.readInt() numberOfElements = self.readInt() ## for-while ctr = 0 while ctr < numberOfElements: rank = self.readInt() if version >= 3: contract.m_summary.m_conId = self.readInt() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_summary.m_expiry = self.readStr() contract.m_summary.m_strike = self.readDouble() contract.m_summary.m_right = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_summary.m_localSymbol = self.readStr() contract.m_marketName = self.readStr() contract.m_tradingClass = self.readStr() distance = self.readStr() benchmark = self.readStr() projection = self.readStr() legsStr = None if version >= 2: legsStr = self.readStr() self.eWrapper().scannerData(tickerId, rank, contract, distance, benchmark, projection, legsStr) ctr += 1 self.eWrapper().scannerDataEnd(tickerId) elif msgId == self.CONTRACT_DATA: version = self.readInt() reqId = -1 if version >= 3: reqId = self.readInt() contract = ContractDetails() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_summary.m_expiry = self.readStr() contract.m_summary.m_strike = self.readDouble() contract.m_summary.m_right = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_summary.m_localSymbol = self.readStr() contract.m_marketName = self.readStr() contract.m_tradingClass = self.readStr() contract.m_summary.m_conId = self.readInt() contract.m_minTick = self.readDouble() contract.m_summary.m_multiplier = self.readStr() contract.m_orderTypes = self.readStr() contract.m_validExchanges = self.readStr() if version >= 2: contract.m_priceMagnifier = self.readInt() self.eWrapper().contractDetails(reqId, contract) elif msgId == self.BOND_CONTRACT_DATA: version = self.readInt() reqId = -1 if version >= 3: reqId = self.readInt() contract = ContractDetails() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_cusip = self.readStr() contract.m_coupon = self.readDouble() contract.m_maturity = self.readStr() contract.m_issueDate = self.readStr() contract.m_ratings = self.readStr() contract.m_bondType = self.readStr() contract.m_couponType = self.readStr() contract.m_convertible = self.readBoolFromInt() contract.m_callable = self.readBoolFromInt() contract.m_putable = self.readBoolFromInt() contract.m_descAppend = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_marketName = self.readStr() contract.m_tradingClass = self.readStr() contract.m_summary.m_conId = self.readInt() contract.m_minTick = self.readDouble() contract.m_orderTypes = self.readStr() contract.m_validExchanges = self.readStr() if version >= 2: contract.m_nextOptionDate = self.readStr() contract.m_nextOptionType = self.readStr() contract.m_nextOptionPartial = self.readBoolFromInt() contract.m_notes = self.readStr() self.eWrapper().bondContractDetails(reqId, contract) elif msgId == self.EXECUTION_DATA: version = self.readInt() orderId = self.readInt() contract = Contract() if version >= 5: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() contract.m_localSymbol = self.readStr() exec_ = Execution() exec_.m_orderId = orderId exec_.m_execId = self.readStr() exec_.m_time = self.readStr() exec_.m_acctNumber = self.readStr() exec_.m_exchange = self.readStr() exec_.m_side = self.readStr() exec_.m_shares = self.readInt() exec_.m_price = self.readDouble() if version >= 2: exec_.m_permId = self.readInt() if version >= 3: exec_.m_clientId = self.readInt() if version >= 4: exec_.m_liquidation = self.readInt() if version >= 6: exec_.m_cumQty = self.readInt() exec_.m_avgPrice = self.readDouble() self.eWrapper().execDetails(orderId, contract, exec_) elif msgId == self.MARKET_DEPTH: version = self.readInt() id = self.readInt() position = self.readInt() operation = self.readInt() side = self.readInt() price = self.readDouble() size = self.readInt() self.eWrapper().updateMktDepth(id, position, operation, side, price, size) elif msgId == self.MARKET_DEPTH_L2: version = self.readInt() id = self.readInt() position = self.readInt() marketMaker = self.readStr() operation = self.readInt() side = self.readInt() price = self.readDouble() size = self.readInt() self.eWrapper().updateMktDepthL2(id, position, marketMaker, operation, side, price, size) elif msgId == self.NEWS_BULLETINS: version = self.readInt() newsMsgId = self.readInt() newsMsgType = self.readInt() newsMessage = self.readStr() originatingExch = self.readStr() self.eWrapper().updateNewsBulletin(newsMsgId, newsMsgType, newsMessage, originatingExch) elif msgId == self.MANAGED_ACCTS: version = self.readInt() accountsList = self.readStr() self.eWrapper().managedAccounts(accountsList) elif msgId == self.RECEIVE_FA: version = self.readInt() faDataType = self.readInt() xml = self.readStr() self.eWrapper().receiveFA(faDataType, xml) elif msgId == self.HISTORICAL_DATA: version = self.readInt() reqId = self.readInt() startDateStr = "" endDateStr = "" completedIndicator = "finished" if version >= 2: startDateStr = self.readStr() endDateStr = self.readStr() completedIndicator += "-" + startDateStr + "-" + endDateStr itemCount = self.readInt() ## for-while ctr = 0 while ctr < itemCount: date = self.readStr() open = self.readDouble() high = self.readDouble() low = self.readDouble() close = self.readDouble() volume = self.readInt() WAP = self.readDouble() hasGaps = self.readStr() barCount = -1 if version >= 3: barCount = self.readInt() self.eWrapper().historicalData(reqId, date, open, high, low, close, volume, barCount, WAP, Boolean.valueOf(hasGaps).booleanValue()) ctr += 1 self.eWrapper().historicalData(reqId, completedIndicator, -1, -1, -1, -1, -1, -1, -1, False) elif msgId == self.SCANNER_PARAMETERS: version = self.readInt() xml = self.readStr() self.eWrapper().scannerParameters(xml) elif msgId == self.CURRENT_TIME: self.readInt() time = self.readLong() self.eWrapper().currentTime(time) elif msgId == self.REAL_TIME_BARS: self.readInt() reqId = self.readInt() time = self.readLong() open = self.readDouble() high = self.readDouble() low = self.readDouble() close = self.readDouble() volume = self.readLong() wap = self.readDouble() count = self.readInt() self.eWrapper().realtimeBar(reqId, time, open, high, low, close, volume, wap, count) elif msgId == self.FUNDAMENTAL_DATA: self.readInt() reqId = self.readInt() data = self.readStr() self.eWrapper().fundamentalData(reqId, data) elif msgId == self.CONTRACT_DATA_END: self.readInt() reqId = self.readInt() self.eWrapper().contractDetailsEnd(reqId) else: self.m_parent.error(EClientErrors.NO_VALID_ID, EClientErrors.UNKNOWN_ID.code(), EClientErrors.UNKNOWN_ID.msg()) return False return True
def make_long_order(action, qty, limit=None, profit_take=None, training_stop_percent=None, transmit=True, parentId=None): order = Order() order.m_action = action order.m_totalQuantity = qty order.m_tif = "GTC" #All orders are GTC by default with NO TIME LIMIT to auto cancel logger.debug('In Long Order Function') logger.debug('Limit Value is %s', limit) if limit == 2: #Profit Target if action == 'SELL': #logger.debug('Profit Pips is %s', ProfitPips) order.m_lmtPrice = truncate((float(tHigh[0]) + 0.0022), 4) logger.debug('In Profit Target section of make long order') logger.debug('Profit Target Limit Order Price is is %s', order.m_lmtPrice) #logger.debug('Risk Reward Ratio is %s', RiskRewardRatio) order.m_orderType = 'LMT' order.m_account = masteraccount order.m_transmit = transmit # elif action == 'SELL': # #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 # order.m_lmtPrice = float(truncate(float(tLow[0]),4)) - 0.0005 # print("In Profit Take") # print(RiskRewardRatio) order.m_transmit = transmit elif limit == 1: # ENTRY A simple stop order order.m_orderType = 'STP' logger.debug('In Long Order Function when Limit is 1') logger.debug('Action is %s', action) if action == 'BUY': # Rounding is due to FX, we cannot create an order with bad price, and FX book increments at 0.00005 only! #order.m_lmtPrice = limit - int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 logger.debug('In Buy action') lmtPrice = truncate((float(tHigh[0]) + 0.0002), 4) logger.debug('Buy Entry Price %s', lmtPrice) order.m_lmtPrice = lmtPrice stopPrice = truncate((float(tHigh[0]) + 0.0002), 4) order.m_auxPrice = stopPrice order.m_parentId = parentId order.m_account = masteraccount logger.debug('Buy Entry Price %s', order.m_lmtPrice) logger.debug('Buy Entry Price Type %s', type(order.m_lmtPrice)) logger.debug('Stop Loss Price %s ', stopPrice) logger.debug('Stop Loss Type %s ', type(stopPrice)) logger.debug('Parent ID %s', order.m_parentId) logger.debug('Account is %s', order.m_account) # elif action == 'SELL': # #order.m_lmtPrice = limit + int(np.around((limit*profit_take_percent)/100.0, 5)/0.00005)*0.00005 # logger.debug('In Sell action') # order.m_lmtPrice = truncate((float(tHigh[0]) + 0.0002),4) # stopPrice = truncate((float(tHigh[0]) + 0.0002),4) # order.m_auxPrice = stopPrice; # order.m_parentId = parentId # order.m_account = masteraccount # logger.debug('SEll Entry Price %s', order.m_lmtPrice) # logger.debug('Stop loss buy Price %s ', stopPrice) # logger.debug('Assigned Stop Price %s ', order.m_auxPrice) # logger.debug('Parent ID %s', order.m_parentId) # logger.debug('Account is %s', order.m_account) # Important that we only send the order when all children are formed. order.m_transmit = transmit return order
def processMsg(self, msgId): """ generated source for method processMsg """ if msgId == -1: return False if msgId == self.TICK_PRICE: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() price = self.readDouble() size = 0 if version >= 2: size = self.readInt() canAutoExecute = 0 if version >= 3: canAutoExecute = self.readInt() self.eWrapper().tickPrice(tickerId, tickType, price, canAutoExecute) if version >= 2: # not a tick sizeTickType = -1 if tickType == 1: # BID sizeTickType = 0 # BID_SIZE elif tickType == 2: # ASK sizeTickType = 3 # ASK_SIZE elif tickType == 4: # LAST sizeTickType = 5 # LAST_SIZE if sizeTickType != -1: self.eWrapper().tickSize(tickerId, sizeTickType, size) elif msgId == self.TICK_SIZE: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() size = self.readInt() self.eWrapper().tickSize(tickerId, tickType, size) elif msgId == self.POSITION: version = self.readInt() account = self.readStr() contract = Contract() contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() contract.m_multiplier = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() contract.m_localSymbol = self.readStr() if version >= 2: contract.m_tradingClass = self.readStr() pos = self.readInt() avgCost = 0 if version >= 3: avgCost = self.readDouble() self.eWrapper().position(account, contract, pos, avgCost) elif msgId == self.POSITION_END: version = self.readInt() self.eWrapper().positionEnd() elif msgId == self.ACCOUNT_SUMMARY: version = self.readInt() reqId = self.readInt() account = self.readStr() tag = self.readStr() value = self.readStr() currency = self.readStr() self.eWrapper().accountSummary(reqId, account, tag, value, currency) elif msgId == self.ACCOUNT_SUMMARY_END: version = self.readInt() reqId = self.readInt() self.eWrapper().accountSummaryEnd(reqId) elif msgId == self.TICK_OPTION_COMPUTATION: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() impliedVol = self.readDouble() if impliedVol < 0: # -1 is the "not yet computed" indicator impliedVol = Double.MAX_VALUE delta = self.readDouble() if abs(delta) > 1: # -2 is the "not yet computed" indicator delta = Double.MAX_VALUE optPrice = Double.MAX_VALUE pvDividend = Double.MAX_VALUE gamma = Double.MAX_VALUE vega = Double.MAX_VALUE theta = Double.MAX_VALUE undPrice = Double.MAX_VALUE if version >= 6 or (tickType == TickType.MODEL_OPTION): # introduced in version == 5 optPrice = self.readDouble() if optPrice < 0: # -1 is the "not yet computed" indicator optPrice = Double.MAX_VALUE pvDividend = self.readDouble() if pvDividend < 0: # -1 is the "not yet computed" indicator pvDividend = Double.MAX_VALUE if version >= 6: gamma = self.readDouble() if abs(gamma) > 1: # -2 is the "not yet computed" indicator gamma = Double.MAX_VALUE vega = self.readDouble() if abs(vega) > 1: # -2 is the "not yet computed" indicator vega = Double.MAX_VALUE theta = self.readDouble() if abs(theta) > 1: # -2 is the "not yet computed" indicator theta = Double.MAX_VALUE undPrice = self.readDouble() if undPrice < 0: # -1 is the "not yet computed" indicator undPrice = Double.MAX_VALUE self.eWrapper().tickOptionComputation(tickerId, tickType, impliedVol, delta, optPrice, pvDividend, gamma, vega, theta, undPrice) elif msgId == self.TICK_GENERIC: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() value = self.readDouble() self.eWrapper().tickGeneric(tickerId, tickType, value) elif msgId == self.TICK_STRING: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() value = self.readStr() self.eWrapper().tickString(tickerId, tickType, value) elif msgId == self.TICK_EFP: version = self.readInt() tickerId = self.readInt() tickType = self.readInt() basisPoints = self.readDouble() formattedBasisPoints = self.readStr() impliedFuturesPrice = self.readDouble() holdDays = self.readInt() futureExpiry = self.readStr() dividendImpact = self.readDouble() dividendsToExpiry = self.readDouble() self.eWrapper().tickEFP(tickerId, tickType, basisPoints, formattedBasisPoints, impliedFuturesPrice, holdDays, futureExpiry, dividendImpact, dividendsToExpiry) elif msgId == self.ORDER_STATUS: version = self.readInt() id = self.readInt() status = self.readStr() filled = self.readInt() remaining = self.readInt() avgFillPrice = self.readDouble() permId = 0 if version >= 2: permId = self.readInt() parentId = 0 if version >= 3: parentId = self.readInt() lastFillPrice = 0 if version >= 4: lastFillPrice = self.readDouble() clientId = 0 if version >= 5: clientId = self.readInt() whyHeld = None if version >= 6: whyHeld = self.readStr() self.eWrapper().orderStatus(id, status, filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld) elif msgId == self.ACCT_VALUE: version = self.readInt() key = self.readStr() val = self.readStr() cur = self.readStr() accountName = None if version >= 2: accountName = self.readStr() self.eWrapper().updateAccountValue(key, val, cur, accountName) elif msgId == self.PORTFOLIO_VALUE: version = self.readInt() contract = Contract() if version >= 6: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() if version >= 7: contract.m_multiplier = self.readStr() contract.m_primaryExch = self.readStr() contract.m_currency = self.readStr() if version >= 2: contract.m_localSymbol = self.readStr() if version >= 8: contract.m_tradingClass = self.readStr() position = self.readInt() marketPrice = self.readDouble() marketValue = self.readDouble() averageCost = 0.0 unrealizedPNL = 0.0 realizedPNL = 0.0 if version >= 3: averageCost = self.readDouble() unrealizedPNL = self.readDouble() realizedPNL = self.readDouble() accountName = None if version >= 4: accountName = self.readStr() if version == 6 and self.m_parent.serverVersion() == 39: contract.m_primaryExch = self.readStr() self.eWrapper().updatePortfolio(contract, position, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName) elif msgId == self.ACCT_UPDATE_TIME: version = self.readInt() timeStamp = self.readStr() self.eWrapper().updateAccountTime(timeStamp) elif msgId == self.ERR_MSG: version = self.readInt() if version < 2: msg = self.readStr() self.m_parent.error(msg) else: id = self.readInt() errorCode = self.readInt() errorMsg = self.readStr() self.m_parent.error(id, errorCode, errorMsg) elif msgId == self.OPEN_ORDER: # read version version = self.readInt() # read order id order = Order() order.m_orderId = self.readInt() # read contract fields contract = Contract() if version >= 17: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() if version >= 32: contract.m_multiplier = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() if version >= 2: contract.m_localSymbol = self.readStr() if version >= 32: contract.m_tradingClass = self.readStr() # read order fields order.m_action = self.readStr() order.m_totalQuantity = self.readInt() order.m_orderType = self.readStr() if version < 29: order.m_lmtPrice = self.readDouble() else: order.m_lmtPrice = self.readDoubleMax() if version < 30: order.m_auxPrice = self.readDouble() else: order.m_auxPrice = self.readDoubleMax() order.m_tif = self.readStr() order.m_ocaGroup = self.readStr() order.m_account = self.readStr() order.m_openClose = self.readStr() order.m_origin = self.readInt() order.m_orderRef = self.readStr() if version >= 3: order.m_clientId = self.readInt() if version >= 4: order.m_permId = self.readInt() if version < 18: # will never happen # order.m_ignoreRth = self.readBoolFromInt() else: order.m_outsideRth = self.readBoolFromInt() order.m_hidden = self.readInt() == 1 order.m_discretionaryAmt = self.readDouble() if version >= 5: order.m_goodAfterTime = self.readStr() if version >= 6: # skip deprecated sharesAllocation field self.readStr() if version >= 7: order.m_faGroup = self.readStr() order.m_faMethod = self.readStr() order.m_faPercentage = self.readStr() order.m_faProfile = self.readStr() if version >= 8: order.m_goodTillDate = self.readStr() if version >= 9: order.m_rule80A = self.readStr() order.m_percentOffset = self.readDoubleMax() order.m_settlingFirm = self.readStr() order.m_shortSaleSlot = self.readInt() order.m_designatedLocation = self.readStr() if self.m_parent.serverVersion() == 51: self.readInt() # exemptCode elif version >= 23: order.m_exemptCode = self.readInt() order.m_auctionStrategy = self.readInt() order.m_startingPrice = self.readDoubleMax() order.m_stockRefPrice = self.readDoubleMax() order.m_delta = self.readDoubleMax() order.m_stockRangeLower = self.readDoubleMax() order.m_stockRangeUpper = self.readDoubleMax() order.m_displaySize = self.readInt() if version < 18: # will never happen # order.m_rthOnly = self.readBoolFromInt() order.m_blockOrder = self.readBoolFromInt() order.m_sweepToFill = self.readBoolFromInt() order.m_allOrNone = self.readBoolFromInt() order.m_minQty = self.readIntMax() order.m_ocaType = self.readInt() order.m_eTradeOnly = self.readBoolFromInt() order.m_firmQuoteOnly = self.readBoolFromInt() order.m_nbboPriceCap = self.readDoubleMax() if version >= 10: order.m_parentId = self.readInt() order.m_triggerMethod = self.readInt() if version >= 11: order.m_volatility = self.readDoubleMax() order.m_volatilityType = self.readInt() if version == 11: receivedInt = self.readInt() order.m_deltaNeutralOrderType = ("NONE" if (receivedInt == 0) else "MKT") else: # version 12 and up order.m_deltaNeutralOrderType = self.readStr() order.m_deltaNeutralAuxPrice = self.readDoubleMax() if version >= 27 and not Util.StringIsEmpty( order.m_deltaNeutralOrderType): order.m_deltaNeutralConId = self.readInt() order.m_deltaNeutralSettlingFirm = self.readStr() order.m_deltaNeutralClearingAccount = self.readStr() order.m_deltaNeutralClearingIntent = self.readStr() if version >= 31 and not Util.StringIsEmpty( order.m_deltaNeutralOrderType): order.m_deltaNeutralOpenClose = self.readStr() order.m_deltaNeutralShortSale = self.readBoolFromInt() order.m_deltaNeutralShortSaleSlot = self.readInt() order.m_deltaNeutralDesignatedLocation = self.readStr() order.m_continuousUpdate = self.readInt() if self.m_parent.serverVersion() == 26: order.m_stockRangeLower = self.readDouble() order.m_stockRangeUpper = self.readDouble() order.m_referencePriceType = self.readInt() if version >= 13: order.m_trailStopPrice = self.readDoubleMax() if version >= 30: order.m_trailingPercent = self.readDoubleMax() if version >= 14: order.m_basisPoints = self.readDoubleMax() order.m_basisPointsType = self.readIntMax() contract.m_comboLegsDescrip = self.readStr() if version >= 29: comboLegsCount = self.readInt() if comboLegsCount > 0: contract.m_comboLegs = [] i = 0 while i < comboLegsCount: comboLeg = ComboLeg() comboLeg.m_conId = self.readInt() comboLeg.m_ratio = self.readInt() comboLeg.m_action = self.readStr() comboLeg.m_exchange = self.readStr() comboLeg.m_openClose = self.readInt() comboLeg.m_shortSaleSlot = self.readInt() comboLeg.m_designatedLocation = self.readStr() comboLeg.m_exemptCode = self.readInt() contract.m_comboLegs.append(comboLeg) i += 1 orderComboLegsCount = self.readInt() if orderComboLegsCount > 0: order.m_orderComboLegs = [] i = 0 while i < orderComboLegsCount: price = self.readDoubleMax() orderComboLeg = OrderComboLeg(price) order.m_orderComboLegs.append(orderComboLeg) i += 1 if version >= 26: smartComboRoutingParamsCount = self.readInt() if smartComboRoutingParamsCount > 0: order.m_smartComboRoutingParams = [] i = 0 while i < smartComboRoutingParamsCount: tagValue = TagValue() tagValue.m_tag = self.readStr() tagValue.m_value = self.readStr() order.m_smartComboRoutingParams.append(tagValue) i += 1 if version >= 15: if version >= 20: order.m_scaleInitLevelSize = self.readIntMax() order.m_scaleSubsLevelSize = self.readIntMax() else: # int notSuppScaleNumComponents = self.readIntMax() order.m_scaleInitLevelSize = self.readIntMax() order.m_scalePriceIncrement = self.readDoubleMax() if version >= 28 and order.m_scalePriceIncrement > 0.0 and order.m_scalePriceIncrement != Double.MAX_VALUE: order.m_scalePriceAdjustValue = self.readDoubleMax() order.m_scalePriceAdjustInterval = self.readIntMax() order.m_scaleProfitOffset = self.readDoubleMax() order.m_scaleAutoReset = self.readBoolFromInt() order.m_scaleInitPosition = self.readIntMax() order.m_scaleInitFillQty = self.readIntMax() order.m_scaleRandomPercent = self.readBoolFromInt() if version >= 24: order.m_hedgeType = self.readStr() if not Util.StringIsEmpty(order.m_hedgeType): order.m_hedgeParam = self.readStr() if version >= 25: order.m_optOutSmartRouting = self.readBoolFromInt() if version >= 19: order.m_clearingAccount = self.readStr() order.m_clearingIntent = self.readStr() if version >= 22: order.m_notHeld = self.readBoolFromInt() if version >= 20: if self.readBoolFromInt(): underComp = UnderComp() underComp.m_conId = self.readInt() underComp.m_delta = self.readDouble() underComp.m_price = self.readDouble() contract.m_underComp = underComp if version >= 21: order.m_algoStrategy = self.readStr() if not Util.StringIsEmpty(order.m_algoStrategy): algoParamsCount = self.readInt() if algoParamsCount > 0: order.m_algoParams = [] i = 0 while i < algoParamsCount: tagValue = TagValue() tagValue.m_tag = self.readStr() tagValue.m_value = self.readStr() order.m_algoParams.append(tagValue) i += 1 orderState = OrderState() if version >= 16: order.m_whatIf = self.readBoolFromInt() orderState.m_status = self.readStr() orderState.m_initMargin = self.readStr() orderState.m_maintMargin = self.readStr() orderState.m_equityWithLoan = self.readStr() orderState.m_commission = self.readDoubleMax() orderState.m_minCommission = self.readDoubleMax() orderState.m_maxCommission = self.readDoubleMax() orderState.m_commissionCurrency = self.readStr() orderState.m_warningText = self.readStr() self.eWrapper().openOrder(order.m_orderId, contract, order, orderState) elif msgId == self.NEXT_VALID_ID: version = self.readInt() orderId = self.readInt() self.eWrapper().nextValidId(orderId) elif msgId == self.SCANNER_DATA: contract = ContractDetails() version = self.readInt() tickerId = self.readInt() numberOfElements = self.readInt() ctr = 0 while ctr < numberOfElements: rank = self.readInt() if version >= 3: contract.m_summary.m_conId = self.readInt() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_summary.m_expiry = self.readStr() contract.m_summary.m_strike = self.readDouble() contract.m_summary.m_right = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_summary.m_localSymbol = self.readStr() contract.m_marketName = self.readStr() contract.m_summary.m_tradingClass = self.readStr() distance = self.readStr() benchmark = self.readStr() projection = self.readStr() legsStr = None if version >= 2: legsStr = self.readStr() self.eWrapper().scannerData(tickerId, rank, contract, distance, benchmark, projection, legsStr) ctr += 1 self.eWrapper().scannerDataEnd(tickerId) elif msgId == self.CONTRACT_DATA: version = self.readInt() reqId = -1 if version >= 3: reqId = self.readInt() contract = ContractDetails() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_summary.m_expiry = self.readStr() contract.m_summary.m_strike = self.readDouble() contract.m_summary.m_right = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_summary.m_localSymbol = self.readStr() contract.m_marketName = self.readStr() contract.m_summary.m_tradingClass = self.readStr() contract.m_summary.m_conId = self.readInt() contract.m_minTick = self.readDouble() contract.m_summary.m_multiplier = self.readStr() contract.m_orderTypes = self.readStr() contract.m_validExchanges = self.readStr() if version >= 2: contract.m_priceMagnifier = self.readInt() if version >= 4: contract.m_underConId = self.readInt() if version >= 5: contract.m_longName = self.readStr() contract.m_summary.m_primaryExch = self.readStr() if version >= 6: contract.m_contractMonth = self.readStr() contract.m_industry = self.readStr() contract.m_category = self.readStr() contract.m_subcategory = self.readStr() contract.m_timeZoneId = self.readStr() contract.m_tradingHours = self.readStr() contract.m_liquidHours = self.readStr() if version >= 8: contract.m_evRule = self.readStr() contract.m_evMultiplier = self.readDouble() if version >= 7: secIdListCount = self.readInt() if secIdListCount > 0: contract.m_secIdList = [] i = 0 while i < secIdListCount: tagValue = TagValue() tagValue.m_tag = self.readStr() tagValue.m_value = self.readStr() contract.m_secIdList.append(tagValue) i += 1 self.eWrapper().contractDetails(reqId, contract) elif msgId == self.BOND_CONTRACT_DATA: version = self.readInt() reqId = -1 if version >= 3: reqId = self.readInt() contract = ContractDetails() contract.m_summary.m_symbol = self.readStr() contract.m_summary.m_secType = self.readStr() contract.m_cusip = self.readStr() contract.m_coupon = self.readDouble() contract.m_maturity = self.readStr() contract.m_issueDate = self.readStr() contract.m_ratings = self.readStr() contract.m_bondType = self.readStr() contract.m_couponType = self.readStr() contract.m_convertible = self.readBoolFromInt() contract.m_callable = self.readBoolFromInt() contract.m_putable = self.readBoolFromInt() contract.m_descAppend = self.readStr() contract.m_summary.m_exchange = self.readStr() contract.m_summary.m_currency = self.readStr() contract.m_marketName = self.readStr() contract.m_summary.m_tradingClass = self.readStr() contract.m_summary.m_conId = self.readInt() contract.m_minTick = self.readDouble() contract.m_orderTypes = self.readStr() contract.m_validExchanges = self.readStr() if version >= 2: contract.m_nextOptionDate = self.readStr() contract.m_nextOptionType = self.readStr() contract.m_nextOptionPartial = self.readBoolFromInt() contract.m_notes = self.readStr() if version >= 4: contract.m_longName = self.readStr() if version >= 6: contract.m_evRule = self.readStr() contract.m_evMultiplier = self.readDouble() if version >= 5: secIdListCount = self.readInt() if secIdListCount > 0: contract.m_secIdList = [] i = 0 while i < secIdListCount: tagValue = TagValue() tagValue.m_tag = self.readStr() tagValue.m_value = self.readStr() contract.m_secIdList.append(tagValue) i += 1 self.eWrapper().bondContractDetails(reqId, contract) elif msgId == self.EXECUTION_DATA: version = self.readInt() reqId = -1 if version >= 7: reqId = self.readInt() orderId = self.readInt() contract = Contract() # read contract fields if version >= 5: contract.m_conId = self.readInt() contract.m_symbol = self.readStr() contract.m_secType = self.readStr() contract.m_expiry = self.readStr() contract.m_strike = self.readDouble() contract.m_right = self.readStr() if version >= 9: contract.m_multiplier = self.readStr() contract.m_exchange = self.readStr() contract.m_currency = self.readStr() contract.m_localSymbol = self.readStr() if version >= 10: contract.m_tradingClass = self.readStr() exec_ = Execution() exec_.m_orderId = orderId exec_.m_execId = self.readStr() exec_.m_time = self.readStr() exec_.m_acctNumber = self.readStr() exec_.m_exchange = self.readStr() exec_.m_side = self.readStr() exec_.m_shares = self.readInt() exec_.m_price = self.readDouble() if version >= 2: exec_.m_permId = self.readInt() if version >= 3: exec_.m_clientId = self.readInt() if version >= 4: exec_.m_liquidation = self.readInt() if version >= 6: exec_.m_cumQty = self.readInt() exec_.m_avgPrice = self.readDouble() if version >= 8: exec_.m_orderRef = self.readStr() if version >= 9: exec_.m_evRule = self.readStr() exec_.m_evMultiplier = self.readDouble() self.eWrapper().execDetails(reqId, contract, exec_) elif msgId == self.MARKET_DEPTH: version = self.readInt() id = self.readInt() position = self.readInt() operation = self.readInt() side = self.readInt() price = self.readDouble() size = self.readInt() self.eWrapper().updateMktDepth(id, position, operation, side, price, size) elif msgId == self.MARKET_DEPTH_L2: version = self.readInt() id = self.readInt() position = self.readInt() marketMaker = self.readStr() operation = self.readInt() side = self.readInt() price = self.readDouble() size = self.readInt() self.eWrapper().updateMktDepthL2(id, position, marketMaker, operation, side, price, size) elif msgId == self.NEWS_BULLETINS: version = self.readInt() newsMsgId = self.readInt() newsMsgType = self.readInt() newsMessage = self.readStr() originatingExch = self.readStr() self.eWrapper().updateNewsBulletin(newsMsgId, newsMsgType, newsMessage, originatingExch) elif msgId == self.MANAGED_ACCTS: version = self.readInt() accountsList = self.readStr() self.eWrapper().managedAccounts(accountsList) elif msgId == self.RECEIVE_FA: version = self.readInt() faDataType = self.readInt() xml = self.readStr() self.eWrapper().receiveFA(faDataType, xml) elif msgId == self.HISTORICAL_DATA: version = self.readInt() reqId = self.readInt() startDateStr = "" endDateStr = "" completedIndicator = "finished" if version >= 2: startDateStr = self.readStr() endDateStr = self.readStr() completedIndicator += "-" + startDateStr + "-" + endDateStr itemCount = self.readInt() ctr = 0 while ctr < itemCount: date = self.readStr() open = self.readDouble() high = self.readDouble() low = self.readDouble() close = self.readDouble() volume = self.readInt() WAP = self.readDouble() hasGaps = self.readStr() barCount = -1 if version >= 3: barCount = self.readInt() self.eWrapper().historicalData( reqId, date, open, high, low, close, volume, barCount, WAP, Boolean.valueOf(hasGaps).booleanValue()) ctr += 1 # send end of dataset marker self.eWrapper().historicalData(reqId, completedIndicator, -1, -1, -1, -1, -1, -1, -1, False) elif msgId == self.SCANNER_PARAMETERS: version = self.readInt() xml = self.readStr() self.eWrapper().scannerParameters(xml) elif msgId == self.CURRENT_TIME: # int version = self.readInt() time = self.readLong() self.eWrapper().currentTime(time) elif msgId == self.REAL_TIME_BARS: # int version = self.readInt() reqId = self.readInt() time = self.readLong() open = self.readDouble() high = self.readDouble() low = self.readDouble() close = self.readDouble() volume = self.readLong() wap = self.readDouble() count = self.readInt() self.eWrapper().realtimeBar(reqId, time, open, high, low, close, volume, wap, count) elif msgId == self.FUNDAMENTAL_DATA: # int version = self.readInt() reqId = self.readInt() data = self.readStr() self.eWrapper().fundamentalData(reqId, data) elif msgId == self.CONTRACT_DATA_END: # int version = self.readInt() reqId = self.readInt() self.eWrapper().contractDetailsEnd(reqId) elif msgId == self.OPEN_ORDER_END: # int version = self.readInt() self.eWrapper().openOrderEnd() elif msgId == self.ACCT_DOWNLOAD_END: # int version = self.readInt() accountName = self.readStr() self.eWrapper().accountDownloadEnd(accountName) elif msgId == self.EXECUTION_DATA_END: # int version = self.readInt() reqId = self.readInt() self.eWrapper().execDetailsEnd(reqId) elif msgId == self.DELTA_NEUTRAL_VALIDATION: # int version = self.readInt() reqId = self.readInt() underComp = UnderComp() underComp.m_conId = self.readInt() underComp.m_delta = self.readDouble() underComp.m_price = self.readDouble() self.eWrapper().deltaNeutralValidation(reqId, underComp) elif msgId == self.TICK_SNAPSHOT_END: # int version = self.readInt() reqId = self.readInt() self.eWrapper().tickSnapshotEnd(reqId) elif msgId == self.MARKET_DATA_TYPE: # int version = self.readInt() reqId = self.readInt() marketDataType = self.readInt() self.eWrapper().marketDataType(reqId, marketDataType) elif msgId == self.COMMISSION_REPORT: # int version = self.readInt() commissionReport = CommissionReport() commissionReport.m_execId = self.readStr() commissionReport.m_commission = self.readDouble() commissionReport.m_currency = self.readStr() commissionReport.m_realizedPNL = self.readDouble() commissionReport.m_yield = self.readDouble() commissionReport.m_yieldRedemptionDate = self.readInt() self.eWrapper().commissionReport(commissionReport) else: self.m_parent.error(EClientErrors.NO_VALID_ID, EClientErrors.UNKNOWN_ID.code(), EClientErrors.UNKNOWN_ID.msg()) return False return True