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