INNER CODE UNIT · Python
quantity
shashankvemuri/Finance · src/finance/backtesting/engine.py:148
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()
new_position = (shares != 0) & (np.sign(shares) != np.sign(previous_shares))