def place_plain_order(expiry, symbol, right, strike, orderType, quantity, lmtPrice, orderId): """ Place a sinlge option order orderType="LMT" """ if orderId <= 0: orderId = None client, log_order = init_func() log_order.info("placing order ") ibcontract = IBcontract() ibcontract.secType = get_contract_details(symbol)["secType"] ibcontract.expiry = expiry ibcontract.symbol = symbol ibcontract.exchange = get_contract_details(symbol)["exchange"] ibcontract.right = right ibcontract.strike = strike ibcontract.multiplier = get_contract_details(symbol)["multiplier"] ibcontract.currency = get_contract_details(symbol)["currency"] iborder = IBOrder() iborder.action = bs_resolve(quantity) iborder.lmtPrice = lmtPrice iborder.orderType = orderType iborder.totalQuantity = abs(quantity) iborder.tif = get_order_defaults()["tif"] iborder.transmit = get_order_defaults()["transmit"] order_structure = client.place_new_IB_order(ibcontract, iborder, orderid=orderId) df1 = pd.DataFrame() for idx, x in order_structure.items(): temp = pd.DataFrame.from_dict(x, orient='index').transpose() df1 = df1.append(temp) if not df1.empty: df1 = df1.set_index(['orderid'], drop=True) print(df1) end_func(client=client)
def getPortfolio(self): ''' Returns list of triplets of current (contract, position in number of shares/contracts, market value of position) ''' portfolioList = [] # setup call back variables self.callback.accountEnd = False #self.callback.portfolioContract = None #self.callback.portfolioPosition = None #self.callback.portfolioSecMarketValue = None self.tws.reqAccountUpdates(1, self.accountNumber) while (not self.callback.accountEnd): self.callback.portfolioContract = None self.callback.portfolioPosition = None self.callback.portfolioSecMarketValue = None max_wait = datetime.timedelta(seconds=60) + datetime.datetime.now() while (self.callback.portfolioPosition is None or self.callback.portfolioContract is None or self.callback.portfolioSecMarketValue is None): if datetime.datetime.now() > max_wait: break if self.callback.portfolioPosition is not None and self.callback.portfolioContract is not None and self.callback.portfolioSecMarketValue is not None: myContract = Contract() myContract.exchange = "SMART" myContract.currency = "USD" myContract.symbol = self.callback.portfolioContractSymbol myContract.conId = self.callback.portfolioContractConId myContract.secType = self.callback.portfolioContractSecType myContract.strike = self.callback.portfolioContractStrike myContract.expiry = self.callback.portfolioContractExpiry myContract.right = self.callback.portfolioContractRight myPosition = self.callback.portfolioPosition mySecMarketValue = self.callback.portfolioSecMarketValue portfolioList.append( (myContract, myPosition, mySecMarketValue)) self.tws.reqAccountUpdates(0, self.accountNumber) return portfolioList
def getPortfolio(self): ''' Returns list of triplets of current (contract, position in number of shares/contracts, market value of position) ''' portfolioList = [] # setup call back variables self.callback.accountEnd = False #self.callback.portfolioContract = None #self.callback.portfolioPosition = None #self.callback.portfolioSecMarketValue = None self.tws.reqAccountUpdates(1, self.accountNumber) while (not self.callback.accountEnd): self.callback.portfolioContract = None self.callback.portfolioPosition = None self.callback.portfolioSecMarketValue = None max_wait = datetime.timedelta(seconds=60) + datetime.datetime.now() while (self.callback.portfolioPosition is None or self.callback.portfolioContract is None or self.callback.portfolioSecMarketValue is None): if datetime.datetime.now() > max_wait: break if self.callback.portfolioPosition is not None and self.callback.portfolioContract is not None and self.callback.portfolioSecMarketValue is not None: myContract = Contract() myContract.exchange = "SMART" myContract.currency = "USD" myContract.symbol = self.callback.portfolioContractSymbol myContract.conId = self.callback.portfolioContractConId myContract.secType = self.callback.portfolioContractSecType myContract.strike = self.callback.portfolioContractStrike myContract.expiry = self.callback.portfolioContractExpiry myContract.right = self.callback.portfolioContractRight myPosition = self.callback.portfolioPosition mySecMarketValue = self.callback.portfolioSecMarketValue portfolioList.append((myContract, myPosition, mySecMarketValue)) self.tws.reqAccountUpdates(0, self.accountNumber) return portfolioList
else: logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%j-%H:%M:%S') logging.debug(args) if args.sym: contract.symbol = args.sym if args.exc: contract.exchange = args.exc if args.st: contract.secType = args.st if args.cur: contract.currency = args.cur if args.id: contract.conId = args.id if args.exp: contract.expiry = args.exp if args.pex: contract.primaryExchange = args.pex if args.str: contract.strike = args.str if args.rt: contract.right = args.rt if args.mult: contract.multiplier = args.mult barsize = args.p datatype = args.t rth_only = args.rth pacing = args.pacing num_requests = args.n zerobased = args.z if barsize == "1 day" or barsize == "1W" or barsize == "1M": dt_format = "%Y%m%d" else: dt_format = "%Y%m%d %H:%M:%S"
if args.v: logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.DEBUG, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%j-%H:%M:%S') else: logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%j-%H:%M:%S') logging.debug(args) if args.sym: contract.symbol = args.sym if args.exc: contract.exchange = args.exc if args.st: contract.secType = args.st if args.cur: contract.currency = args.cur if args.id: contract.conId = args.id if args.exp: contract.expiry = args.exp if args.pex: contract.primaryExchange = args.pex if args.str: contract.strike = args.str if args.rt: contract.right = args.rt if args.mult: contract.multiplier = args.mult barsize = args.p datatype = args.t rth_only = args.rth pacing = args.pacing num_requests = args.n zerobased = args.z if barsize == "1 day" or barsize == "1W" or barsize == "1M": dt_format = "%Y%m%d" else: dt_format = "%Y%m%d %H:%M:%S"