diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/dates.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/python/dates.py b/python/dates.py index 4418d857..acfafe12 100644 --- a/python/dates.py +++ b/python/dates.py @@ -21,7 +21,8 @@ def prev_immdate(valdate): def imm_dates(start_date, end_date): start_date = bus_day.rollback(start_date)-19*Day() start_date = QuarterBegin(startingMonth=3).rollback(start_date) - return (pd.date_range(start_date, end_date, freq='QS-MAR', closed='left'). + #should be close=left I think + return (pd.date_range(start_date, end_date, freq='QS-MAR', closed=None). shift(19, freq='D'). shift(0, bus_day)) @@ -30,6 +31,26 @@ def days_accrued(tradedate): delta = start_protection-prev_immdate(start_protection) return delta.days +def isleapyear(date): + return ((date.year % 4) == 0 & (~(date.year % 100 == 0) | date.year % 400 == 0)) + +def yearfrac(date1, date2, daycount): + if daycount == '30/360': + d1 = date1.dt.day.copy() + d2 = date2.dt.day.copy() + d2[(d2==31) & (d1.isin([30,31]))] = 30 + d1.replace({31:30}) + y1 = date1.dt.year + y2 = date2.dt.year + m1 = date1.dt.month + m2 = date2.dt.month + return (360*(y2-y1)+30*(m2-m1)+d2-d1)/360 + days_accrued = date2 - date1 + if daycount == 'ACT/365': + return days_accrued.dt.days/365 + if daycount == 'ACT/360': + return days_accrued.dt.days/360 + class TestDaysAccrued(unittest.TestCase): def test(self): dates = [('2015-01-07', 17), |
