Skip to content

Commit 16df786

Browse files
author
rob
committed
include price in psuedo fills calculation
1 parent 0d560aa commit 16df786

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

syscore/pandas/pdutils.py

+10
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@
1313
DEFAULT_DATE_FORMAT_FOR_CSV = "%Y-%m-%d %H:%M:%S"
1414

1515

16+
def rolling_pairwise_correlation(
17+
x: pd.DataFrame, periods: int, min_periods: int = 3
18+
) -> pd.Series:
19+
20+
assert len(x.columns) == 2
21+
22+
rolling_corr_df = x.rolling(periods, min_periods=min_periods).corr()
23+
return rolling_corr_df.droplevel(1)[::2].iloc[:, 1]
24+
25+
1626
def is_a_series(x: Union[pd.Series, pd.DataFrame]) -> bool:
1727
columns = getattr(x, "columns", None)
1828
return columns is None

sysdata/sim/sim_data.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,7 @@ def _resolve_start_date(sim_data: simData):
305305

306306
if isinstance(start_date, datetime.date):
307307
# yaml parses unquoted date like 2000-01-01 to datetime.date
308-
start_date = datetime.datetime.combine(
309-
start_date, datetime.datetime.min.time()
310-
)
308+
start_date = datetime.datetime.combine(start_date, datetime.datetime.min.time())
311309
elif not isinstance(start_date, datetime.datetime):
312310
try:
313311
start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")

systems/accounts/pandl_calculators/pandl_cash_costs.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pandas as pd
44

55
from syscore.pandas.pdutils import uniquets
6+
from syscore.pandas.find_data import get_row_of_series_before_date
67
from syscore.pandas.strategy_functions import calculate_cost_deflator, years_in_data
78
from syscore.dateutils import generate_equal_dates_within_year
89
from syscore.genutils import flatten_list
@@ -110,11 +111,15 @@ def _pseudo_fills_for_year(self, year: int) -> list:
110111
average_holding_by_period = self._average_holdings_within_year(
111112
year, rolls_per_year
112113
)
113-
notional_price = 0 # doesn't actually affect costs
114+
price_series = self.price.ffill()
114115
last_date_with_positions = self.last_date_with_positions
115116

116117
fills_this_year = [
117-
Fill(date=date, qty=qty, price=notional_price)
118+
Fill(
119+
date=date,
120+
qty=qty,
121+
price=get_row_of_series_before_date(price_series, date),
122+
)
118123
for date, qty in zip(date_list, average_holding_by_period)
119124
if date <= last_date_with_positions
120125
]

0 commit comments

Comments
 (0)