Avi-L commited on
Commit
2392da2
·
verified ·
1 Parent(s): 097d28e

engine passes realized daily vol to impact model

Browse files
Files changed (1) hide show
  1. crypto_eval/engine.py +9 -1
crypto_eval/engine.py CHANGED
@@ -18,6 +18,12 @@ import pandas as pd
18
  from .costs import funding_cost, fee, slippage_cost
19
 
20
 
 
 
 
 
 
 
21
  def run_backtest(
22
  bars: pd.DataFrame,
23
  positions: pd.Series,
@@ -47,8 +53,10 @@ def run_backtest(
47
  # turnover: position changes at t fill at bar t's close
48
  dpos = pos.diff().fillna(pos.iloc[0])
49
  turnover_notional = (dpos.abs() * close)
 
50
  fees = turnover_notional.map(lambda n: fee(n, fill_side))
51
- slips = turnover_notional.map(lambda n: slippage_cost(n, adv_notional))
 
52
 
53
  fund = funding_cost(pos, funding, close)
54
 
 
18
  from .costs import funding_cost, fee, slippage_cost
19
 
20
 
21
+ def _realized_daily_vol_bps(close: pd.Series) -> float:
22
+ rets = close.pct_change().dropna()
23
+ ann = rets.std(ddof=1) * np.sqrt(24 * 365)
24
+ return float(ann / np.sqrt(365) * 1e4)
25
+
26
+
27
  def run_backtest(
28
  bars: pd.DataFrame,
29
  positions: pd.Series,
 
53
  # turnover: position changes at t fill at bar t's close
54
  dpos = pos.diff().fillna(pos.iloc[0])
55
  turnover_notional = (dpos.abs() * close)
56
+ daily_vol_bps = _realized_daily_vol_bps(close)
57
  fees = turnover_notional.map(lambda n: fee(n, fill_side))
58
+ slips = turnover_notional.map(
59
+ lambda n: slippage_cost(n, adv_notional, daily_vol_bps))
60
 
61
  fund = funding_cost(pos, funding, close)
62