INNER CODE UNIT · Python
as_frame
shashankvemuri/Finance · src/finance/backtesting/engine.py:60
def as_frame(data):
return data.to_frame("asset") if isinstance(data, pd.Series) else data
opens, closes, targets = (
frame(as_frame(open_prices), positive=True),
frame(as_frame(close_prices), positive=True),
frame(as_frame(targets)),
)
if not opens.index.equals(closes.index) or not opens.index.equals(targets.index):
raise ValueError("open, close and target timestamps must match exactly")
if not opens.columns.equals(closes.columns) or not opens.columns.equals(targets.columns):
raise ValueError("open, close and target asset columns must match exactly")
if len(opens) < 2 or (targets.abs().sum(axis=1) > 1 + 1e-12).any():
raise ValueError("require at least two bars and gross targets <= 1")
finite(initial_cash, "initial_cash", minimum=np.finfo(float).tiny)
for name, cost in [
("commission", commission),
("slippage", slippage),