aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/dates.py23
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),