Esempio n. 1
0
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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
        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"

    logging.info("Starting to download {}, series: {}, bartype: '{}'".format(
Esempio n. 5
0
    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"

    logging.info("Starting to download {}, series: {}, bartype: '{}'".format(contract_to_string(contract), datatype, barsize))