Example #1
0
    def _fill(self, order, price):
        '''Fill the order at this price and delete the order
        from the pending list.'''
        del self._orders[order.id]
        pos = self._positions.pop(order.asset, None)
        if pos is None:
            pos = zp.Position(order.asset)
            pos.amount = 0
            pos.cost_basis = 0

        new_amount = pos.amount + order.amount
        if new_amount < 0:
            log.warn('not enough shares')
            return
        volume = price * order.amount
        self._portfolio.cash -= volume
        self._account.cash = self._portfolio.cash
        self._account.buying_power -= volume

        if new_amount == 0:
            return

        new_volume = price * order.amount + pos.cost_basis * pos.amount
        pos.cost_basis = new_volume / new_amount
        pos.amount = new_amount
        pos.last_sale_date = self.now
        self._positions[order.asset] = pos
Example #2
0
    def positions(self):
        '''
        pos = self._api.list_positions()
        return pos
        '''

        z_positions = zp.Positions()
        positions = self._api.list_positions()
        position_map = {}
        symbols = []
        for pos in positions:
            symbol = pos.symbol
            try:
                z_position = zp.Position(symbol_lookup(symbol))
            except SymbolNotFound:
                continue
            z_position.amount = int(pos.qty)
            z_position.cost_basis = float(pos.cost_basis) / float(pos.qty)
            z_position.last_sale_price = None
            z_position.last_sale_date = None
            z_positions[symbol_lookup(symbol)] = z_position
            z_position.last_sale_price = np.nan
            z_position.last_sale_date = pd.NaT
            symbols.append(symbol)
            position_map[symbol] = z_position
        return z_positions
Example #3
0
    def positions(self):
        z_positions = zp.Positions()
        positions = self._api.list_positions()
        position_map = {}
        symbols = []
        for pos in positions:
            symbol = pos.symbol
            try:
                z_position = zp.Position(symbol_lookup(symbol))
            except SymbolNotFound:
                continue
            z_position.amount = int(pos.qty)
            z_position.cost_basis = float(pos.cost_basis) / float(pos.qty)
            z_position.last_sale_price = None
            z_position.last_sale_date = None
            z_positions[symbol_lookup(symbol)] = z_position
            symbols.append(symbol)
            position_map[symbol] = z_position

        trades = self._symbol_trades(symbols)
        for symbol, trade in trades.items():
            z_position = position_map[symbol]
            if trade is None:
                z_position.last_sale_price = np.nan
                z_position.last_sale_date = pd.NaT
            else:
                z_position.last_sale_price = float(trade.price)
                z_position.last_sale_date = trade.timestamp
        return z_positions
Example #4
0
    def positions(self):
        z_positions = zp.Positions()
        positions = self._api.list_positions()
        position_map = {}
        symbols = []
        for pos in positions:
            symbol = pos.symbol
            try:
                z_position = zp.Position(symbol_lookup(symbol))
            except SymbolNotFound:
                continue
            z_position.amount = int(pos.qty)
            z_position.cost_basis = float(pos.cost_basis) / float(pos.qty)
            z_position.last_sale_price = None
            z_position.last_sale_date = None
            z_positions[symbol_lookup(symbol)] = z_position
            symbols.append(symbol)
            position_map[symbol] = z_position

        quotes = self._api.list_quotes(symbols)
        for quote in quotes:
            price = quote.last
            dt = quote.last_timestamp
            z_position = position_map[quote.symbol]
            z_position.last_sale_price = float(price)
            z_position.last_sale_date = dt
        return z_positions
Example #5
0
 def set_position(self, symbol, amount, cost_basis,
                  last_sale_price=None, last_sale_date=None):
     asset = api.symbol(symbol) if isinstance(symbol, str) else symbol
     pos = zp.Position(asset)
     pos.amount = amount
     pos.cost_basis = cost_basis
     pos.last_sale_price = last_sale_price
     pos.last_sale_date = last_sale_date
     self._positions[asset] = pos