2022-02-17 16:36:35 +01:00
|
|
|
import pandas as pd
|
|
|
|
|
from data_loader.types import ForwardReturnSeries
|
2022-03-02 00:26:33 +01:00
|
|
|
from labeling.types import EventsDataFrame
|
2022-02-17 16:36:35 +01:00
|
|
|
|
2022-02-17 19:22:17 +01:00
|
|
|
|
2022-02-17 16:36:35 +01:00
|
|
|
def create_forward_returns(series: pd.Series, period: int) -> ForwardReturnSeries:
|
|
|
|
|
assert period > 0
|
|
|
|
|
indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=period)
|
2022-02-17 19:22:17 +01:00
|
|
|
|
2022-02-17 16:36:35 +01:00
|
|
|
forward_returns = series.rolling(window=indexer).sum()
|
2022-02-17 19:22:17 +01:00
|
|
|
return forward_returns
|
2022-03-02 00:26:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def purge_overlapping_events(events: EventsDataFrame) -> EventsDataFrame:
|
|
|
|
|
events = events.copy()
|
|
|
|
|
indicies_to_remove = []
|
|
|
|
|
last_event_end = events.iloc[0]["start"]
|
|
|
|
|
for index, row in events.iterrows():
|
|
|
|
|
if row["start"] < last_event_end:
|
|
|
|
|
indicies_to_remove.append(index)
|
|
|
|
|
else:
|
|
|
|
|
last_event_end = row["end"]
|
|
|
|
|
events.drop(indicies_to_remove, inplace=True)
|
|
|
|
|
return events
|