HamSession commited on
Commit
e211908
·
verified ·
1 Parent(s): 6de2dea

Add adjust_ohlcv.py

Browse files
Files changed (1) hide show
  1. adjust_ohlcv.py +12 -7
adjust_ohlcv.py CHANGED
@@ -78,6 +78,17 @@ def _close_prior(df: pd.DataFrame, ex_date: dt.date) -> float | None:
78
  return float((regular if not regular.empty else last_day)["close"].iloc[-1])
79
 
80
 
 
 
 
 
 
 
 
 
 
 
 
81
  def _dividend_events(df: pd.DataFrame, dividends: pd.DataFrame | None) -> dict[dt.date, tuple[float, float]]:
82
  """{ex_date: (amount, close_prior)}; close_prior is taken from the bars unless given.
83
 
@@ -88,13 +99,7 @@ def _dividend_events(df: pd.DataFrame, dividends: pd.DataFrame | None) -> dict[d
88
  events: dict[dt.date, tuple[float, float]] = {}
89
  given = dividends["close_prior"] if "close_prior" in dividends else [None] * len(dividends)
90
  for d, amount, cp in zip(dividends["date"], dividends["amount"], given, strict=True):
91
- ex_date = pd.Timestamp(d).date()
92
- if ex_date in events:
93
- events[ex_date] = (events[ex_date][0] + float(amount), events[ex_date][1])
94
- continue
95
- close_prior = cp if not pd.isna(cp) else _close_prior(df, ex_date)
96
- if close_prior is not None and close_prior > 0:
97
- events[ex_date] = (float(amount), float(close_prior))
98
  return events
99
 
100
 
 
78
  return float((regular if not regular.empty else last_day)["close"].iloc[-1])
79
 
80
 
81
+ def _add_dividend(events: dict, df: pd.DataFrame, ex_date: dt.date, amount: float, close_prior) -> None:
82
+ """Insert one dividend; a repeat ex-date adds to the amount already recorded."""
83
+ if ex_date in events:
84
+ events[ex_date] = (events[ex_date][0] + amount, events[ex_date][1])
85
+ return
86
+ if pd.isna(close_prior):
87
+ close_prior = _close_prior(df, ex_date)
88
+ if close_prior is not None and close_prior > 0:
89
+ events[ex_date] = (amount, float(close_prior))
90
+
91
+
92
  def _dividend_events(df: pd.DataFrame, dividends: pd.DataFrame | None) -> dict[dt.date, tuple[float, float]]:
93
  """{ex_date: (amount, close_prior)}; close_prior is taken from the bars unless given.
94
 
 
99
  events: dict[dt.date, tuple[float, float]] = {}
100
  given = dividends["close_prior"] if "close_prior" in dividends else [None] * len(dividends)
101
  for d, amount, cp in zip(dividends["date"], dividends["amount"], given, strict=True):
102
+ _add_dividend(events, df, pd.Timestamp(d).date(), float(amount), cp)
 
 
 
 
 
 
103
  return events
104
 
105