INNER CODE UNIT · Python
residual
shashankvemuri/Finance · src/finance/backtesting/engine.py:147
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
else:
lower = middle
desired = target * ((lower + upper) / 2) / price
execute(desired - shares, price, timestamp, opens.index[i - 1] if i else pd.NaT, "open")
prior_target = source_target.copy()