INNER CODE UNIT · Python

equity_at_open

shashankvemuri/Finance · src/finance/backtesting/engine.py:142

        equity_at_open = cash + shares @ price
        if equity_at_open <= 0:
            raise ValueError(f"account insolvent at {timestamp}; short losses exceeded equity")
        if rebalance or not np.array_equal(source_target, prior_target):
            # Solve for post-cost equity so a fully invested long never overspends cash.
            def residual(equity, target=target, price=price, equity_at_open=equity_at_open):
                quantity = target * equity / price - shares
                fill = price * (1 + np.sign(quantity) * slippage)
                costs = np.sum(quantity * (fill - price) + np.abs(quantity) * fill * commission)
                return equity + costs - equity_at_open

            if residual(0) > 0:
                raise ValueError(f"costs exceed equity at {timestamp}")
            lower, upper = 0.0, equity_at_open
            for _ in range(60):
                middle = (lower + upper) / 2
                if residual(middle) > 0:
                    upper = middle

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…