From 18d1577d567cf99752f2f5e8a7fafaceff476f6f Mon Sep 17 00:00:00 2001 From: Maya Tydykov Date: Tue, 3 May 2016 14:23:20 -0400 Subject: [PATCH 1/4] MAINT: incorporate string support --- tests/pipeline/test_earnings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/pipeline/test_earnings.py b/tests/pipeline/test_earnings.py index 74f58597..f645edfa 100644 --- a/tests/pipeline/test_earnings.py +++ b/tests/pipeline/test_earnings.py @@ -55,8 +55,7 @@ class EarningsCalendarLoaderTestCase(WithNextAndPreviousEventDataLoader, 'datetime64[ns]', 'NaN' ), NEXT_ANNOUNCEMENT: self.get_expected_next_event_dates( - dates, 'datetime64[ns]', 'NaN' - ), + dates, 'datetime64[ns]', 'NaN'), } cols[DAYS_TO_NEXT] = self._compute_busday_offsets( cols[NEXT_ANNOUNCEMENT] From 8a3b82c5369c74a12dbad0f07943f0faa58130b3 Mon Sep 17 00:00:00 2001 From: Maya Tydykov Date: Thu, 5 May 2016 11:20:53 -0400 Subject: [PATCH 2/4] ENH: add column for currency type --- tests/pipeline/test_dividends.py | 61 ++++++++++++++++++--- zipline/pipeline/common.py | 13 ++++- zipline/pipeline/data/dividends.py | 11 +++- zipline/pipeline/loaders/blaze/dividends.py | 12 +++- zipline/pipeline/loaders/dividends.py | 49 +++++++++++++++-- 5 files changed, 128 insertions(+), 18 deletions(-) diff --git a/tests/pipeline/test_dividends.py b/tests/pipeline/test_dividends.py index 7534ef73..c4e226ab 100644 --- a/tests/pipeline/test_dividends.py +++ b/tests/pipeline/test_dividends.py @@ -15,6 +15,7 @@ from zipline.pipeline.common import ( NEXT_EX_DATE, NEXT_PAY_DATE, PREVIOUS_ANNOUNCEMENT, + PREVIOUS_CURRENCY_TYPE, PREVIOUS_EX_DATE, PREVIOUS_PAY_DATE, PREVIOUS_AMOUNT, @@ -22,8 +23,8 @@ from zipline.pipeline.common import ( TS_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, EX_DATE_FIELD_NAME, - PAY_DATE_FIELD_NAME -) + PAY_DATE_FIELD_NAME, + CURRENCY_FIELD_NAME, NEXT_CURRENCY_TYPE) from zipline.pipeline.data.dividends import ( DividendsByAnnouncementDate, DividendsByExDate, @@ -46,7 +47,8 @@ from zipline.pipeline.loaders.dividends import ( ) from zipline.pipeline.loaders.utils import ( zip_with_dates, - zip_with_floats + zip_with_floats, + zip_with_strs, ) from zipline.testing.fixtures import ( WithPipelineEventDataLoader, @@ -60,7 +62,8 @@ dividends_cases = [ EX_DATE_FIELD_NAME: pd.to_datetime(['2014-01-15', '2014-01-20']), PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-15', '2014-01-20']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-10']), - ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-09']) + ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-09']), + CURRENCY_FIELD_NAME: ["$", "EUR"] }), # K1--K2--A2--A1. pd.DataFrame({ @@ -68,7 +71,8 @@ dividends_cases = [ EX_DATE_FIELD_NAME: pd.to_datetime(['2014-01-20', '2014-01-15']), PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-20', '2014-01-15']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-10']), - ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-09']) + ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-09']), + CURRENCY_FIELD_NAME: ["EUR", "$"] }), # K1--A1--K2--A2. pd.DataFrame({ @@ -76,7 +80,8 @@ dividends_cases = [ EX_DATE_FIELD_NAME: pd.to_datetime(['2014-01-10', '2014-01-20']), PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-10', '2014-01-20']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-15']), - ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-14']) + ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-14']), + CURRENCY_FIELD_NAME: ["$", "EUR"] }), # K1 == K2. pd.DataFrame({ @@ -84,14 +89,16 @@ dividends_cases = [ EX_DATE_FIELD_NAME: pd.to_datetime(['2014-01-10', '2014-01-15']), PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-10', '2014-01-15']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05'] * 2), - ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-04']) + ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-04']), + CURRENCY_FIELD_NAME: ["$", "EUR"] }), pd.DataFrame( columns=[CASH_AMOUNT_FIELD_NAME, EX_DATE_FIELD_NAME, PAY_DATE_FIELD_NAME, TS_FIELD_NAME, - ANNOUNCEMENT_FIELD_NAME], + ANNOUNCEMENT_FIELD_NAME, + CURRENCY_FIELD_NAME], dtype='datetime64[ns]' ), ] @@ -157,6 +164,16 @@ next_amounts = [['NaN', 1, 15, 'NaN'], ['NaN', 3, 'NaN', 1, 'NaN'], ['NaN', 6, 23, 'NaN']] +prev_currency_types = [[None, "$", "EUR"], + [None, "$", "EUR"], + [None, "$", "EUR"], + [None, "$", "EUR"]] + +next_currency_types = [[None, "$", "EUR", None], + [None, "EUR", "$", "EUR", None], + [None, "$", None, "EUR", None], + [None, "$", "EUR", None]] + class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): @@ -169,6 +186,8 @@ class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, PREVIOUS_AMOUNT: DividendsByAnnouncementDate.previous_amount.latest, DAYS_SINCE_PREV_DIVIDEND_ANNOUNCEMENT: BusinessDaysSinceDividendAnnouncement(), + PREVIOUS_CURRENCY_TYPE: + DividendsByAnnouncementDate.previous_currency.latest, } @classmethod @@ -204,6 +223,8 @@ class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, ['NaT', '2014-01-04', '2014-01-14'], ['NaT', '2014-01-04']] amounts = [['NaN', 1, 15], ['NaN', 7, 13], ['NaN', 3, 1], ['NaN', 23]] + currency_types = [[None, "$", "EUR"], [None, "$", "EUR"], + [None, "$", "EUR"]] cols = { PREVIOUS_ANNOUNCEMENT: self.get_sids_to_frames( zip_with_dates, announcement_dates, date_intervals, dates, @@ -212,6 +233,10 @@ class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, PREVIOUS_AMOUNT: self.get_sids_to_frames( zip_with_floats, amounts, date_intervals, dates, 'float', 'NaN' ), + PREVIOUS_CURRENCY_TYPE: self.get_sids_to_frames( + zip_with_strs, currency_types, date_intervals, dates, + 'category', None + ), } cols[ @@ -263,6 +288,8 @@ class DividendsByExDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): PREVIOUS_EX_DATE: DividendsByExDate.previous_date.latest, NEXT_AMOUNT: DividendsByExDate.next_amount.latest, PREVIOUS_AMOUNT: DividendsByExDate.previous_amount.latest, + PREVIOUS_CURRENCY_TYPE: DividendsByExDate.previous_currency.latest, + NEXT_CURRENCY_TYPE: DividendsByExDate.next_currency.latest, DAYS_TO_NEXT_EX_DATE: BusinessDaysUntilNextExDate(), DAYS_SINCE_PREV_EX_DATE: BusinessDaysSincePreviousExDate() } @@ -296,6 +323,14 @@ class DividendsByExDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): PREVIOUS_AMOUNT: self.get_sids_to_frames( zip_with_floats, prev_amounts, prev_date_intervals, dates, 'float', 'NaN' + ), + PREVIOUS_CURRENCY_TYPE: self.get_sids_to_frames( + zip_with_strs, prev_currency_types, prev_date_intervals, dates, + 'category', None + ), + NEXT_CURRENCY_TYPE: self.get_sids_to_frames( + zip_with_strs, next_currency_types, next_date_intervals, dates, + 'category', None ) } @@ -349,6 +384,8 @@ class DividendsByPayDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): PREVIOUS_PAY_DATE: DividendsByPayDate.previous_date.latest, NEXT_AMOUNT: DividendsByPayDate.next_amount.latest, PREVIOUS_AMOUNT: DividendsByPayDate.previous_amount.latest, + PREVIOUS_CURRENCY_TYPE: DividendsByPayDate.previous_currency.latest, + NEXT_CURRENCY_TYPE: DividendsByPayDate.next_currency.latest, } @classmethod @@ -380,6 +417,14 @@ class DividendsByPayDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): PREVIOUS_AMOUNT: self.get_sids_to_frames( zip_with_floats, prev_amounts, prev_date_intervals, dates, 'float', 'NaN' + ), + PREVIOUS_CURRENCY_TYPE: self.get_sids_to_frames( + zip_with_strs, prev_currency_types, prev_date_intervals, dates, + 'category', None + ), + NEXT_CURRENCY_TYPE: self.get_sids_to_frames( + zip_with_strs, next_currency_types, next_date_intervals, dates, + 'category', None ) } diff --git a/zipline/pipeline/common.py b/zipline/pipeline/common.py index 9dbab69d..d75ee558 100644 --- a/zipline/pipeline/common.py +++ b/zipline/pipeline/common.py @@ -5,6 +5,10 @@ ACTUAL_VALUE_FIELD_NAME = 'actual_value' AD_FIELD_NAME = 'asof_date' ANNOUNCEMENT_FIELD_NAME = 'announcement_date' BUYBACK_AMOUNT_FIELD_NAME = 'buyback_amount' +CASH_FIELD_NAME = 'cash' +CASH_AMOUNT_FIELD_NAME = 'cash_amount' +COUNT_FIELD_NAME = 'count' +CURRENCY_FIELD_NAME = 'currency_type' BUYBACK_ANNOUNCEMENT_FIELD_NAME = 'buyback_date' BUYBACK_TYPE_FIELD_NAME = 'buyback_type' BUYBACK_UNIT_FIELD_NAME = 'buyback_unit' @@ -27,6 +31,7 @@ MEAN_FIELD_NAME = 'mean' NEXT_AMOUNT = 'next_amount' NEXT_ANNOUNCEMENT = 'next_announcement' NEXT_COUNT = 'next_count' +NEXT_CURRENCY_TYPE = 'next_currency_type' NEXT_EX_DATE = 'next_ex_date' NEXT_FISCAL_QUARTER = 'next_fiscal_quarter' NEXT_FISCAL_YEAR = 'next_fiscal_year' @@ -46,10 +51,12 @@ PREVIOUS_BUYBACK_AMOUNT = 'previous_value' PREVIOUS_BUYBACK_ANNOUNCEMENT = 'previous_buyback_announcement' PREVIOUS_BUYBACK_CASH = 'previous_buyback_cash' PREVIOUS_BUYBACK_SHARE_COUNT = 'previous_buyback_share_count' -PREVIOUS_BUYBACK_TYPE = 'previous_buyback_type' -PREVIOUS_BUYBACK_UNIT = 'previous_value_type' -PREVIOUS_COUNT = 'previous_count' PREVIOUS_DISCLOSURE_DATE = 'previous_disclosure_date' +PREVIOUS_COUNT = 'previous_count' +PREVIOUS_BUYBACK_TYPE = 'previous_buyback_type' +PREVIOUS_VALUE = 'previous_value' +PREVIOUS_VALUE_TYPE = 'previous_value_type' +PREVIOUS_CURRENCY_TYPE = 'previous_currency_type' PREVIOUS_EX_DATE = 'previous_ex_date' PREVIOUS_FISCAL_QUARTER = 'previous_fiscal_quarter' PREVIOUS_FISCAL_YEAR = 'previous_fiscal_year' diff --git a/zipline/pipeline/data/dividends.py b/zipline/pipeline/data/dividends.py index 176aac43..1178ed9a 100644 --- a/zipline/pipeline/data/dividends.py +++ b/zipline/pipeline/data/dividends.py @@ -1,7 +1,11 @@ """ Dataset representing dates of upcoming dividends. """ -from zipline.utils.numpy_utils import datetime64ns_dtype, float64_dtype +from zipline.utils.numpy_utils import ( + datetime64ns_dtype, + float64_dtype, + categorical_dtype +) from .dataset import Column, DataSet @@ -11,6 +15,8 @@ class DividendsByExDate(DataSet): previous_date = Column(datetime64ns_dtype) next_amount = Column(float64_dtype) previous_amount = Column(float64_dtype) + next_currency = Column(categorical_dtype) + previous_currency = Column(categorical_dtype) class DividendsByPayDate(DataSet): @@ -18,8 +24,11 @@ class DividendsByPayDate(DataSet): previous_date = Column(datetime64ns_dtype) next_amount = Column(float64_dtype) previous_amount = Column(float64_dtype) + next_currency = Column(categorical_dtype) + previous_currency = Column(categorical_dtype) class DividendsByAnnouncementDate(DataSet): previous_announcement_date = Column(datetime64ns_dtype) previous_amount = Column(float64_dtype) + previous_currency = Column(categorical_dtype) diff --git a/zipline/pipeline/loaders/blaze/dividends.py b/zipline/pipeline/loaders/blaze/dividends.py index 6fd86be1..e7b84058 100644 --- a/zipline/pipeline/loaders/blaze/dividends.py +++ b/zipline/pipeline/loaders/blaze/dividends.py @@ -1,6 +1,7 @@ from zipline.pipeline.common import ( ANNOUNCEMENT_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, EX_DATE_FIELD_NAME, PAY_DATE_FIELD_NAME, SID_FIELD_NAME, @@ -47,6 +48,7 @@ class BlazeDividendsByAnnouncementDateLoader(BlazeEventsLoader): {TS_FIELD_NAME}: datetime, {CASH_AMOUNT_FIELD_NAME}: ?float64, {ANNOUNCEMENT_FIELD_NAME}: ?datetime, + {CURRENCY_FIELD_NAME}: ?string, }} Where each row of the table is a record including the sid to identify the @@ -61,13 +63,15 @@ class BlazeDividendsByAnnouncementDateLoader(BlazeEventsLoader): TS_FIELD_NAME=TS_FIELD_NAME, SID_FIELD_NAME=SID_FIELD_NAME, CASH_AMOUNT_FIELD_NAME=CASH_AMOUNT_FIELD_NAME, - ANNOUNCEMENT_FIELD_NAME=ANNOUNCEMENT_FIELD_NAME + ANNOUNCEMENT_FIELD_NAME=ANNOUNCEMENT_FIELD_NAME, + CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME, ) _expected_fields = frozenset({ TS_FIELD_NAME, SID_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, ANNOUNCEMENT_FIELD_NAME }) @@ -103,6 +107,7 @@ class BlazeDividendsByExDateLoader(BlazeEventsLoader): {TS_FIELD_NAME}: datetime, {EX_DATE_FIELD_NAME}: ?datetime, {CASH_AMOUNT_FIELD_NAME}: ?datetime, + {CURRENCY_FIELD_NAME}: ?string, }} Where each row of the table is a record including the sid to identify the @@ -118,6 +123,7 @@ class BlazeDividendsByExDateLoader(BlazeEventsLoader): SID_FIELD_NAME=SID_FIELD_NAME, EX_DATE_FIELD_NAME=EX_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME=CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME, ) _expected_fields = frozenset({ @@ -125,6 +131,7 @@ class BlazeDividendsByExDateLoader(BlazeEventsLoader): SID_FIELD_NAME, EX_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, }) concrete_loader = DividendsByExDateLoader @@ -159,6 +166,7 @@ class BlazeDividendsByPayDateLoader(BlazeEventsLoader): {TS_FIELD_NAME}: datetime, {PAY_DATE_FIELD_NAME}: ?datetime, {CASH_AMOUNT_FIELD_NAME}: ?datetime, + {CURRENCY_FIELD_NAME}: ?string, }} Where each row of the table is a record including the sid to identify the @@ -174,6 +182,7 @@ class BlazeDividendsByPayDateLoader(BlazeEventsLoader): SID_FIELD_NAME=SID_FIELD_NAME, PAY_DATE_FIELD_NAME=PAY_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME=CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME ) _expected_fields = frozenset({ @@ -181,6 +190,7 @@ class BlazeDividendsByPayDateLoader(BlazeEventsLoader): SID_FIELD_NAME, PAY_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, }) concrete_loader = DividendsByPayDateLoader diff --git a/zipline/pipeline/loaders/dividends.py b/zipline/pipeline/loaders/dividends.py index 339435c1..51723216 100644 --- a/zipline/pipeline/loaders/dividends.py +++ b/zipline/pipeline/loaders/dividends.py @@ -1,8 +1,9 @@ from zipline.pipeline.common import ( + ANNOUNCEMENT_FIELD_NAME, + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, EX_DATE_FIELD_NAME, PAY_DATE_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME, - ANNOUNCEMENT_FIELD_NAME ) from zipline.pipeline.loaders.events import EventsLoader from ..data import ( @@ -15,7 +16,8 @@ from zipline.utils.memoize import lazyval class DividendsByAnnouncementDateLoader(EventsLoader): expected_cols = frozenset([ANNOUNCEMENT_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME]) + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME]) event_date_col = ANNOUNCEMENT_FIELD_NAME @@ -39,10 +41,18 @@ class DividendsByAnnouncementDateLoader(EventsLoader): CASH_AMOUNT_FIELD_NAME ) + @lazyval + def previous_currency_loader(self): + return self._previous_event_value_loader( + self.dataset.previous_currency, + CURRENCY_FIELD_NAME + ) + class DividendsByPayDateLoader(EventsLoader): expected_cols = frozenset([PAY_DATE_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME]) + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME]) event_date_col = PAY_DATE_FIELD_NAME @@ -75,10 +85,25 @@ class DividendsByPayDateLoader(EventsLoader): CASH_AMOUNT_FIELD_NAME ) + @lazyval + def previous_currency_loader(self): + return self._previous_event_value_loader( + self.dataset.previous_currency, + CURRENCY_FIELD_NAME + ) + + @lazyval + def next_currency_loader(self): + return self._next_event_value_loader( + self.dataset.next_currency, + CURRENCY_FIELD_NAME + ) + class DividendsByExDateLoader(EventsLoader): expected_cols = frozenset([EX_DATE_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME]) + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME]) event_date_col = EX_DATE_FIELD_NAME @@ -110,3 +135,17 @@ class DividendsByExDateLoader(EventsLoader): self.dataset.previous_amount, CASH_AMOUNT_FIELD_NAME ) + + @lazyval + def previous_currency_loader(self): + return self._previous_event_value_loader( + self.dataset.previous_currency, + CURRENCY_FIELD_NAME + ) + + @lazyval + def next_currency_loader(self): + return self._next_event_value_loader( + self.dataset.next_currency, + CURRENCY_FIELD_NAME + ) From 3d0764a50c4871f18b80d7b8c844ce709c600d2d Mon Sep 17 00:00:00 2001 From: Maya Tydykov Date: Thu, 12 May 2016 16:08:54 -0400 Subject: [PATCH 3/4] ENH: add dividend type column BUG: add back constant --- tests/pipeline/test_dividends.py | 88 +++++++++++++++++---- tests/pipeline/test_earnings.py | 3 +- zipline/pipeline/common.py | 8 +- zipline/pipeline/data/dividends.py | 5 ++ zipline/pipeline/loaders/blaze/dividends.py | 14 +++- zipline/pipeline/loaders/dividends.py | 45 ++++++++++- 6 files changed, 137 insertions(+), 26 deletions(-) diff --git a/tests/pipeline/test_dividends.py b/tests/pipeline/test_dividends.py index c4e226ab..1b0c9791 100644 --- a/tests/pipeline/test_dividends.py +++ b/tests/pipeline/test_dividends.py @@ -8,23 +8,28 @@ from six import iteritems from zipline.pipeline.common import ( ANNOUNCEMENT_FIELD_NAME, + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, DAYS_SINCE_PREV_DIVIDEND_ANNOUNCEMENT, DAYS_SINCE_PREV_EX_DATE, DAYS_TO_NEXT_EX_DATE, + DIVIDEND_TYPE_FIELD_NAME, + EX_DATE_FIELD_NAME, NEXT_AMOUNT, + NEXT_CURRENCY_TYPE, + NEXT_DIVIDEND_TYPE, NEXT_EX_DATE, NEXT_PAY_DATE, + PAY_DATE_FIELD_NAME, + PREVIOUS_AMOUNT, PREVIOUS_ANNOUNCEMENT, PREVIOUS_CURRENCY_TYPE, + PREVIOUS_DIVIDEND_TYPE, PREVIOUS_EX_DATE, PREVIOUS_PAY_DATE, - PREVIOUS_AMOUNT, SID_FIELD_NAME, TS_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME, - EX_DATE_FIELD_NAME, - PAY_DATE_FIELD_NAME, - CURRENCY_FIELD_NAME, NEXT_CURRENCY_TYPE) +) from zipline.pipeline.data.dividends import ( DividendsByAnnouncementDate, DividendsByExDate, @@ -63,7 +68,8 @@ dividends_cases = [ PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-15', '2014-01-20']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-10']), ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-09']), - CURRENCY_FIELD_NAME: ["$", "EUR"] + CURRENCY_FIELD_NAME: ["$", "EUR"], + DIVIDEND_TYPE_FIELD_NAME: ["Stock", "Mixed"] }), # K1--K2--A2--A1. pd.DataFrame({ @@ -72,7 +78,8 @@ dividends_cases = [ PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-20', '2014-01-15']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-10']), ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-09']), - CURRENCY_FIELD_NAME: ["EUR", "$"] + CURRENCY_FIELD_NAME: ["EUR", "$"], + DIVIDEND_TYPE_FIELD_NAME: ["Mixed", "Stock"] }), # K1--A1--K2--A2. pd.DataFrame({ @@ -81,7 +88,8 @@ dividends_cases = [ PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-10', '2014-01-20']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-15']), ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-14']), - CURRENCY_FIELD_NAME: ["$", "EUR"] + CURRENCY_FIELD_NAME: ["$", "EUR"], + DIVIDEND_TYPE_FIELD_NAME: ["Stock", "Mixed"] }), # K1 == K2. pd.DataFrame({ @@ -90,7 +98,8 @@ dividends_cases = [ PAY_DATE_FIELD_NAME: pd.to_datetime(['2014-01-10', '2014-01-15']), TS_FIELD_NAME: pd.to_datetime(['2014-01-05'] * 2), ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04', '2014-01-04']), - CURRENCY_FIELD_NAME: ["$", "EUR"] + CURRENCY_FIELD_NAME: ["$", "EUR"], + DIVIDEND_TYPE_FIELD_NAME: ["Stock", "Mixed"] }), pd.DataFrame( columns=[CASH_AMOUNT_FIELD_NAME, @@ -98,7 +107,8 @@ dividends_cases = [ PAY_DATE_FIELD_NAME, TS_FIELD_NAME, ANNOUNCEMENT_FIELD_NAME, - CURRENCY_FIELD_NAME], + CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME], dtype='datetime64[ns]' ), ] @@ -174,6 +184,16 @@ next_currency_types = [[None, "$", "EUR", None], [None, "$", None, "EUR", None], [None, "$", "EUR", None]] +prev_dividend_types = [[None, "Stock", "Mixed"], + [None, "Stock", "Mixed"], + [None, "Stock", "Mixed"], + [None, "Stock", "Mixed"]] + +next_dividend_types = [[None, "Stock", "Mixed", None], + [None, "Mixed", "Stock", "Mixed", None], + [None, "Stock", None, "Mixed", None], + [None, "Stock", "Mixed", None]] + class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): @@ -188,6 +208,8 @@ class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, BusinessDaysSinceDividendAnnouncement(), PREVIOUS_CURRENCY_TYPE: DividendsByAnnouncementDate.previous_currency.latest, + PREVIOUS_DIVIDEND_TYPE: + DividendsByAnnouncementDate.previous_type.latest, } @classmethod @@ -223,8 +245,10 @@ class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, ['NaT', '2014-01-04', '2014-01-14'], ['NaT', '2014-01-04']] amounts = [['NaN', 1, 15], ['NaN', 7, 13], ['NaN', 3, 1], ['NaN', 23]] - currency_types = [[None, "$", "EUR"], [None, "$", "EUR"], - [None, "$", "EUR"]] + currency_types = [[None, "$", "EUR"], [None, "EUR", "$"], + [None, "$", "EUR"], [None, "EUR"]] + dividend_types = [[None, "Stock", "Mixed"], [None, "Mixed", "Stock"], + [None, "Stock", "Mixed"], [None, "Mixed"]] cols = { PREVIOUS_ANNOUNCEMENT: self.get_sids_to_frames( zip_with_dates, announcement_dates, date_intervals, dates, @@ -237,6 +261,10 @@ class DividendsByAnnouncementDateTestCase(WithPipelineEventDataLoader, zip_with_strs, currency_types, date_intervals, dates, 'category', None ), + PREVIOUS_DIVIDEND_TYPE: self.get_sids_to_frames( + zip_with_strs, dividend_types, date_intervals, dates, + 'category', None + ), } cols[ @@ -260,7 +288,9 @@ class BlazeDividendsByAnnouncementDateTestCase( ANNOUNCEMENT_FIELD_NAME: df[ANNOUNCEMENT_FIELD_NAME], TS_FIELD_NAME: df[TS_FIELD_NAME], SID_FIELD_NAME: sid, - CASH_AMOUNT_FIELD_NAME: df[CASH_AMOUNT_FIELD_NAME] + CASH_AMOUNT_FIELD_NAME: df[CASH_AMOUNT_FIELD_NAME], + CURRENCY_FIELD_NAME: df[CURRENCY_FIELD_NAME], + DIVIDEND_TYPE_FIELD_NAME: df[DIVIDEND_TYPE_FIELD_NAME], }) for sid, df in iteritems(mapping) ).reset_index(drop=True)),) @@ -290,6 +320,8 @@ class DividendsByExDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): PREVIOUS_AMOUNT: DividendsByExDate.previous_amount.latest, PREVIOUS_CURRENCY_TYPE: DividendsByExDate.previous_currency.latest, NEXT_CURRENCY_TYPE: DividendsByExDate.next_currency.latest, + PREVIOUS_DIVIDEND_TYPE: DividendsByExDate.previous_type.latest, + NEXT_DIVIDEND_TYPE: DividendsByExDate.next_type.latest, DAYS_TO_NEXT_EX_DATE: BusinessDaysUntilNextExDate(), DAYS_SINCE_PREV_EX_DATE: BusinessDaysSincePreviousExDate() } @@ -331,7 +363,15 @@ class DividendsByExDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): NEXT_CURRENCY_TYPE: self.get_sids_to_frames( zip_with_strs, next_currency_types, next_date_intervals, dates, 'category', None - ) + ), + PREVIOUS_DIVIDEND_TYPE: self.get_sids_to_frames( + zip_with_strs, prev_dividend_types, prev_date_intervals, dates, + 'category', None + ), + NEXT_DIVIDEND_TYPE: self.get_sids_to_frames( + zip_with_strs, next_dividend_types, next_date_intervals, dates, + 'category', None + ), } cols[DAYS_TO_NEXT_EX_DATE] = self._compute_busday_offsets( @@ -356,7 +396,9 @@ class BlazeDividendsByExDateLoaderTestCase(DividendsByExDateTestCase): EX_DATE_FIELD_NAME: df[EX_DATE_FIELD_NAME], TS_FIELD_NAME: df[TS_FIELD_NAME], SID_FIELD_NAME: sid, - CASH_AMOUNT_FIELD_NAME: df[CASH_AMOUNT_FIELD_NAME] + CASH_AMOUNT_FIELD_NAME: df[CASH_AMOUNT_FIELD_NAME], + CURRENCY_FIELD_NAME: df[CURRENCY_FIELD_NAME], + DIVIDEND_TYPE_FIELD_NAME: df[DIVIDEND_TYPE_FIELD_NAME], }) for sid, df in iteritems(mapping) ).reset_index(drop=True)),) @@ -386,6 +428,8 @@ class DividendsByPayDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): PREVIOUS_AMOUNT: DividendsByPayDate.previous_amount.latest, PREVIOUS_CURRENCY_TYPE: DividendsByPayDate.previous_currency.latest, NEXT_CURRENCY_TYPE: DividendsByPayDate.next_currency.latest, + PREVIOUS_DIVIDEND_TYPE: DividendsByPayDate.previous_type.latest, + NEXT_DIVIDEND_TYPE: DividendsByPayDate.next_type.latest, } @classmethod @@ -425,7 +469,15 @@ class DividendsByPayDateTestCase(WithPipelineEventDataLoader, ZiplineTestCase): NEXT_CURRENCY_TYPE: self.get_sids_to_frames( zip_with_strs, next_currency_types, next_date_intervals, dates, 'category', None - ) + ), + PREVIOUS_DIVIDEND_TYPE: self.get_sids_to_frames( + zip_with_strs, prev_dividend_types, prev_date_intervals, dates, + 'category', None + ), + NEXT_DIVIDEND_TYPE: self.get_sids_to_frames( + zip_with_strs, next_dividend_types, next_date_intervals, dates, + 'category', None + ), } @@ -442,7 +494,9 @@ class BlazeDividendsByPayDateLoaderTestCase(DividendsByPayDateTestCase): PAY_DATE_FIELD_NAME: df[PAY_DATE_FIELD_NAME], TS_FIELD_NAME: df[TS_FIELD_NAME], SID_FIELD_NAME: sid, - CASH_AMOUNT_FIELD_NAME: df[CASH_AMOUNT_FIELD_NAME] + CASH_AMOUNT_FIELD_NAME: df[CASH_AMOUNT_FIELD_NAME], + CURRENCY_FIELD_NAME: df[CURRENCY_FIELD_NAME], + DIVIDEND_TYPE_FIELD_NAME: df[DIVIDEND_TYPE_FIELD_NAME], }) for sid, df in iteritems(mapping) ).reset_index(drop=True)),) diff --git a/tests/pipeline/test_earnings.py b/tests/pipeline/test_earnings.py index f645edfa..74f58597 100644 --- a/tests/pipeline/test_earnings.py +++ b/tests/pipeline/test_earnings.py @@ -55,7 +55,8 @@ class EarningsCalendarLoaderTestCase(WithNextAndPreviousEventDataLoader, 'datetime64[ns]', 'NaN' ), NEXT_ANNOUNCEMENT: self.get_expected_next_event_dates( - dates, 'datetime64[ns]', 'NaN'), + dates, 'datetime64[ns]', 'NaN' + ), } cols[DAYS_TO_NEXT] = self._compute_busday_offsets( cols[NEXT_ANNOUNCEMENT] diff --git a/zipline/pipeline/common.py b/zipline/pipeline/common.py index d75ee558..d45a85f4 100644 --- a/zipline/pipeline/common.py +++ b/zipline/pipeline/common.py @@ -22,6 +22,7 @@ DAYS_SINCE_PREV_EX_DATE = 'days_since_prev_ex_date' DAYS_TO_NEXT = 'days_to_next' DAYS_TO_NEXT_EX_DATE = 'days_to_next_ex_date' DISCLOSURE_DATE = 'disclosure_date' +DIVIDEND_TYPE_FIELD_NAME = 'dividend_type' EX_DATE_FIELD_NAME = 'ex_date' FISCAL_QUARTER_FIELD_NAME = 'fiscal_quarter' FISCAL_YEAR_FIELD_NAME = 'fiscal_year' @@ -32,6 +33,7 @@ NEXT_AMOUNT = 'next_amount' NEXT_ANNOUNCEMENT = 'next_announcement' NEXT_COUNT = 'next_count' NEXT_CURRENCY_TYPE = 'next_currency_type' +NEXT_DIVIDEND_TYPE = 'next_dividend_type' NEXT_EX_DATE = 'next_ex_date' NEXT_FISCAL_QUARTER = 'next_fiscal_quarter' NEXT_FISCAL_YEAR = 'next_fiscal_year' @@ -51,12 +53,12 @@ PREVIOUS_BUYBACK_AMOUNT = 'previous_value' PREVIOUS_BUYBACK_ANNOUNCEMENT = 'previous_buyback_announcement' PREVIOUS_BUYBACK_CASH = 'previous_buyback_cash' PREVIOUS_BUYBACK_SHARE_COUNT = 'previous_buyback_share_count' -PREVIOUS_DISCLOSURE_DATE = 'previous_disclosure_date' PREVIOUS_COUNT = 'previous_count' PREVIOUS_BUYBACK_TYPE = 'previous_buyback_type' -PREVIOUS_VALUE = 'previous_value' -PREVIOUS_VALUE_TYPE = 'previous_value_type' +PREVIOUS_BUYBACK_UNIT = 'previous_buyback_unit' PREVIOUS_CURRENCY_TYPE = 'previous_currency_type' +PREVIOUS_DISCLOSURE_DATE = 'previous_disclosure_date' +PREVIOUS_DIVIDEND_TYPE = 'previous_dividend_type' PREVIOUS_EX_DATE = 'previous_ex_date' PREVIOUS_FISCAL_QUARTER = 'previous_fiscal_quarter' PREVIOUS_FISCAL_YEAR = 'previous_fiscal_year' diff --git a/zipline/pipeline/data/dividends.py b/zipline/pipeline/data/dividends.py index 1178ed9a..042e74e8 100644 --- a/zipline/pipeline/data/dividends.py +++ b/zipline/pipeline/data/dividends.py @@ -17,6 +17,8 @@ class DividendsByExDate(DataSet): previous_amount = Column(float64_dtype) next_currency = Column(categorical_dtype) previous_currency = Column(categorical_dtype) + previous_type = Column(categorical_dtype) + next_type = Column(categorical_dtype) class DividendsByPayDate(DataSet): @@ -26,9 +28,12 @@ class DividendsByPayDate(DataSet): previous_amount = Column(float64_dtype) next_currency = Column(categorical_dtype) previous_currency = Column(categorical_dtype) + previous_type = Column(categorical_dtype) + next_type = Column(categorical_dtype) class DividendsByAnnouncementDate(DataSet): previous_announcement_date = Column(datetime64ns_dtype) previous_amount = Column(float64_dtype) previous_currency = Column(categorical_dtype) + previous_type = Column(categorical_dtype) diff --git a/zipline/pipeline/loaders/blaze/dividends.py b/zipline/pipeline/loaders/blaze/dividends.py index e7b84058..081e84ed 100644 --- a/zipline/pipeline/loaders/blaze/dividends.py +++ b/zipline/pipeline/loaders/blaze/dividends.py @@ -2,6 +2,7 @@ from zipline.pipeline.common import ( ANNOUNCEMENT_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME, EX_DATE_FIELD_NAME, PAY_DATE_FIELD_NAME, SID_FIELD_NAME, @@ -49,6 +50,7 @@ class BlazeDividendsByAnnouncementDateLoader(BlazeEventsLoader): {CASH_AMOUNT_FIELD_NAME}: ?float64, {ANNOUNCEMENT_FIELD_NAME}: ?datetime, {CURRENCY_FIELD_NAME}: ?string, + {DIVIDEND_TYPE_FIELD_NAME}: ?string, }} Where each row of the table is a record including the sid to identify the @@ -65,6 +67,7 @@ class BlazeDividendsByAnnouncementDateLoader(BlazeEventsLoader): CASH_AMOUNT_FIELD_NAME=CASH_AMOUNT_FIELD_NAME, ANNOUNCEMENT_FIELD_NAME=ANNOUNCEMENT_FIELD_NAME, CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME=DIVIDEND_TYPE_FIELD_NAME, ) _expected_fields = frozenset({ @@ -72,7 +75,8 @@ class BlazeDividendsByAnnouncementDateLoader(BlazeEventsLoader): SID_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, CURRENCY_FIELD_NAME, - ANNOUNCEMENT_FIELD_NAME + ANNOUNCEMENT_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME }) concrete_loader = DividendsByAnnouncementDateLoader @@ -108,6 +112,7 @@ class BlazeDividendsByExDateLoader(BlazeEventsLoader): {EX_DATE_FIELD_NAME}: ?datetime, {CASH_AMOUNT_FIELD_NAME}: ?datetime, {CURRENCY_FIELD_NAME}: ?string, + {DIVIDEND_TYPE_FIELD_NAME}: ?string, }} Where each row of the table is a record including the sid to identify the @@ -124,6 +129,7 @@ class BlazeDividendsByExDateLoader(BlazeEventsLoader): EX_DATE_FIELD_NAME=EX_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME=CASH_AMOUNT_FIELD_NAME, CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME=DIVIDEND_TYPE_FIELD_NAME, ) _expected_fields = frozenset({ @@ -132,6 +138,7 @@ class BlazeDividendsByExDateLoader(BlazeEventsLoader): EX_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME, }) concrete_loader = DividendsByExDateLoader @@ -167,6 +174,7 @@ class BlazeDividendsByPayDateLoader(BlazeEventsLoader): {PAY_DATE_FIELD_NAME}: ?datetime, {CASH_AMOUNT_FIELD_NAME}: ?datetime, {CURRENCY_FIELD_NAME}: ?string, + {DIVIDEND_TYPE_FIELD_NAME}: ?string, }} Where each row of the table is a record including the sid to identify the @@ -182,7 +190,8 @@ class BlazeDividendsByPayDateLoader(BlazeEventsLoader): SID_FIELD_NAME=SID_FIELD_NAME, PAY_DATE_FIELD_NAME=PAY_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME=CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME + CURRENCY_FIELD_NAME=CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME=DIVIDEND_TYPE_FIELD_NAME ) _expected_fields = frozenset({ @@ -191,6 +200,7 @@ class BlazeDividendsByPayDateLoader(BlazeEventsLoader): PAY_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME, }) concrete_loader = DividendsByPayDateLoader diff --git a/zipline/pipeline/loaders/dividends.py b/zipline/pipeline/loaders/dividends.py index 51723216..5732c4cc 100644 --- a/zipline/pipeline/loaders/dividends.py +++ b/zipline/pipeline/loaders/dividends.py @@ -2,6 +2,7 @@ from zipline.pipeline.common import ( ANNOUNCEMENT_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME, EX_DATE_FIELD_NAME, PAY_DATE_FIELD_NAME, ) @@ -17,7 +18,8 @@ from zipline.utils.memoize import lazyval class DividendsByAnnouncementDateLoader(EventsLoader): expected_cols = frozenset([ANNOUNCEMENT_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME]) + CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME]) event_date_col = ANNOUNCEMENT_FIELD_NAME @@ -48,11 +50,19 @@ class DividendsByAnnouncementDateLoader(EventsLoader): CURRENCY_FIELD_NAME ) + @lazyval + def previous_type_loader(self): + return self._previous_event_value_loader( + self.dataset.previous_type, + DIVIDEND_TYPE_FIELD_NAME + ) + class DividendsByPayDateLoader(EventsLoader): expected_cols = frozenset([PAY_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME]) + CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME]) event_date_col = PAY_DATE_FIELD_NAME @@ -99,11 +109,26 @@ class DividendsByPayDateLoader(EventsLoader): CURRENCY_FIELD_NAME ) + @lazyval + def previous_type_loader(self): + return self._previous_event_value_loader( + self.dataset.previous_type, + DIVIDEND_TYPE_FIELD_NAME + ) + + @lazyval + def next_type_loader(self): + return self._next_event_value_loader( + self.dataset.next_type, + DIVIDEND_TYPE_FIELD_NAME + ) + class DividendsByExDateLoader(EventsLoader): expected_cols = frozenset([EX_DATE_FIELD_NAME, CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME]) + CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME]) event_date_col = EX_DATE_FIELD_NAME @@ -149,3 +174,17 @@ class DividendsByExDateLoader(EventsLoader): self.dataset.next_currency, CURRENCY_FIELD_NAME ) + + @lazyval + def previous_type_loader(self): + return self._previous_event_value_loader( + self.dataset.previous_type, + DIVIDEND_TYPE_FIELD_NAME + ) + + @lazyval + def next_type_loader(self): + return self._next_event_value_loader( + self.dataset.next_type, + DIVIDEND_TYPE_FIELD_NAME + ) From 751a08a8a1d204fbe374c5a59e23c80e8f967b47 Mon Sep 17 00:00:00 2001 From: Maya Tydykov Date: Tue, 17 May 2016 17:13:17 -0400 Subject: [PATCH 4/4] MAINT: move constants to appropriate files --- tests/pipeline/test_13d_filings.py | 20 +++--- tests/pipeline/test_buyback_auth.py | 23 ++++--- tests/pipeline/test_consensus_estimates.py | 44 +++++++------ tests/pipeline/test_dividends.py | 38 +++++------ zipline/pipeline/common.py | 64 ------------------- zipline/pipeline/data/dividends.py | 6 +- zipline/pipeline/loaders/_13d_filings.py | 10 +-- .../pipeline/loaders/blaze/_13d_filings.py | 12 ++-- .../pipeline/loaders/blaze/buyback_auth.py | 11 ++-- .../loaders/blaze/consensus_estimates.py | 13 ++-- zipline/pipeline/loaders/blaze/dividends.py | 12 ++-- zipline/pipeline/loaders/buyback_auth.py | 12 ++-- .../pipeline/loaders/consensus_estimates.py | 20 +++--- zipline/pipeline/loaders/dividends.py | 21 +++--- 14 files changed, 128 insertions(+), 178 deletions(-) diff --git a/tests/pipeline/test_13d_filings.py b/tests/pipeline/test_13d_filings.py index 7688ff22..9bf1964a 100644 --- a/tests/pipeline/test_13d_filings.py +++ b/tests/pipeline/test_13d_filings.py @@ -3,19 +3,15 @@ Tests for the reference loader for 13d filings. """ import pandas as pd -from zipline.pipeline.common import( - DAYS_SINCE_PREV_DISCLOSURE, +from zipline.pipeline.common import TS_FIELD_NAME +from zipline.pipeline.data import _13DFilings +from zipline.pipeline.factors.events import BusinessDaysSince13DFilingsDate +from zipline.pipeline.loaders._13d_filings import ( + _13DFilingsLoader, DISCLOSURE_DATE, NUM_SHARES, PERCENT_SHARES, - PREVIOUS_NUM_SHARES, - PREVIOUS_PERCENT_SHARES, - PREVIOUS_DISCLOSURE_DATE, - TS_FIELD_NAME, ) -from zipline.pipeline.data import _13DFilings -from zipline.pipeline.factors.events import BusinessDaysSince13DFilingsDate -from zipline.pipeline.loaders._13d_filings import _13DFilingsLoader from zipline.pipeline.loaders.utils import ( zip_with_floats, zip_with_dates @@ -23,6 +19,12 @@ from zipline.pipeline.loaders.utils import ( from zipline.testing.fixtures import WithPipelineEventDataLoader from zipline.testing.fixtures import ZiplineTestCase +DAYS_SINCE_PREV_DISCLOSURE = 'days_since_prev_disclosure' +PREVIOUS_DISCLOSURE_DATE = 'previous_disclosure_date' +PREVIOUS_NUM_SHARES = 'previous_number_shares' +PREVIOUS_PERCENT_SHARES = 'previous_percentage' + + date_intervals = [ [['2014-01-01', '2014-01-04'], ['2014-01-05', '2014-01-09'], diff --git a/tests/pipeline/test_buyback_auth.py b/tests/pipeline/test_buyback_auth.py index 4baee11a..debb24e1 100644 --- a/tests/pipeline/test_buyback_auth.py +++ b/tests/pipeline/test_buyback_auth.py @@ -7,21 +7,19 @@ import pandas as pd from six import iteritems from zipline.pipeline.common import( - BUYBACK_AMOUNT_FIELD_NAME, - BUYBACK_ANNOUNCEMENT_FIELD_NAME, - BUYBACK_TYPE_FIELD_NAME, - BUYBACK_UNIT_FIELD_NAME, DAYS_SINCE_PREV, - PREVIOUS_BUYBACK_AMOUNT, - PREVIOUS_BUYBACK_ANNOUNCEMENT, - PREVIOUS_BUYBACK_TYPE, - PREVIOUS_BUYBACK_UNIT, SID_FIELD_NAME, TS_FIELD_NAME, ) from zipline.pipeline.data import BuybackAuthorizations from zipline.pipeline.factors.events import BusinessDaysSinceBuybackAuth -from zipline.pipeline.loaders.buyback_auth import BuybackAuthorizationsLoader +from zipline.pipeline.loaders.buyback_auth import ( + BUYBACK_AMOUNT_FIELD_NAME, + BUYBACK_ANNOUNCEMENT_FIELD_NAME, + BUYBACK_TYPE_FIELD_NAME, + BUYBACK_UNIT_FIELD_NAME, + BuybackAuthorizationsLoader, +) from zipline.pipeline.loaders.blaze import BlazeBuybackAuthorizationsLoader from zipline.pipeline.loaders.utils import ( zip_with_dates, @@ -32,6 +30,13 @@ from zipline.testing.fixtures import ( WithPipelineEventDataLoader, ZiplineTestCase ) +PREVIOUS_BUYBACK_AMOUNT = 'previous_value' +PREVIOUS_BUYBACK_ANNOUNCEMENT = 'previous_buyback_announcement' +PREVIOUS_BUYBACK_CASH = 'previous_buyback_cash' +PREVIOUS_BUYBACK_SHARE_COUNT = 'previous_buyback_share_count' +PREVIOUS_BUYBACK_TYPE = 'previous_buyback_type' +PREVIOUS_BUYBACK_UNIT = 'previous_buyback_unit' + date_intervals = [ [['2014-01-01', '2014-01-04'], ['2014-01-05', '2014-01-09'], ['2014-01-10', '2014-01-31']] diff --git a/tests/pipeline/test_consensus_estimates.py b/tests/pipeline/test_consensus_estimates.py index d7aa88ac..9a3806ea 100644 --- a/tests/pipeline/test_consensus_estimates.py +++ b/tests/pipeline/test_consensus_estimates.py @@ -6,36 +6,19 @@ from blaze.compute.core import swap_resources_into_scope import pandas as pd from six import iteritems -from zipline.pipeline.common import ( +from zipline.pipeline.common import SID_FIELD_NAME +from zipline.pipeline.data import ConsensusEstimates +from zipline.pipeline.loaders.consensus_estimates import ( ACTUAL_VALUE_FIELD_NAME, + ConsensusEstimatesLoader, COUNT_FIELD_NAME, FISCAL_QUARTER_FIELD_NAME, FISCAL_YEAR_FIELD_NAME, HIGH_FIELD_NAME, LOW_FIELD_NAME, MEAN_FIELD_NAME, - NEXT_COUNT, - NEXT_FISCAL_QUARTER, - NEXT_FISCAL_YEAR, - NEXT_HIGH, - NEXT_LOW, - NEXT_RELEASE_DATE, - NEXT_STANDARD_DEVIATION, - PREVIOUS_ACTUAL_VALUE, - PREVIOUS_COUNT, - PREVIOUS_FISCAL_QUARTER, - PREVIOUS_FISCAL_YEAR, - PREVIOUS_HIGH, - PREVIOUS_LOW, - PREVIOUS_MEAN, NEXT_MEAN, - PREVIOUS_RELEASE_DATE, - PREVIOUS_STANDARD_DEVIATION, RELEASE_DATE_FIELD_NAME, STANDARD_DEVIATION_FIELD_NAME, - SID_FIELD_NAME) -from zipline.pipeline.data import ConsensusEstimates -from zipline.pipeline.loaders.consensus_estimates import ( - ConsensusEstimatesLoader ) from zipline.pipeline.loaders.blaze import BlazeConsensusEstimatesLoader from zipline.pipeline.loaders.utils import ( @@ -46,6 +29,25 @@ from zipline.testing.fixtures import ( WithNextAndPreviousEventDataLoader ) +NEXT_COUNT = 'next_count' +NEXT_FISCAL_QUARTER = 'next_fiscal_quarter' +NEXT_FISCAL_YEAR = 'next_fiscal_year' +NEXT_HIGH = 'next_high' +NEXT_LOW = 'next_low' +NEXT_MEAN = 'next_mean' +NEXT_RELEASE_DATE = 'next_release_date' +NEXT_STANDARD_DEVIATION = 'next_standard_deviation' +PREVIOUS_ACTUAL_VALUE = 'previous_actual_value' +PREVIOUS_COUNT = 'previous_count' +PREVIOUS_FISCAL_QUARTER = 'previous_fiscal_quarter' +PREVIOUS_FISCAL_YEAR = 'previous_fiscal_year' +PREVIOUS_HIGH = 'previous_high' +PREVIOUS_LOW = 'previous_low' +PREVIOUS_MEAN = 'previous_mean' +PREVIOUS_RELEASE_DATE = 'previous_release_date' +PREVIOUS_STANDARD_DEVIATION = 'previous_standard_deviation' + + consensus_estimates_cases = [ # K1--K2--A1--A2. pd.DataFrame({ diff --git a/tests/pipeline/test_dividends.py b/tests/pipeline/test_dividends.py index 1b0c9791..3e1864ce 100644 --- a/tests/pipeline/test_dividends.py +++ b/tests/pipeline/test_dividends.py @@ -8,25 +8,8 @@ from six import iteritems from zipline.pipeline.common import ( ANNOUNCEMENT_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME, - DAYS_SINCE_PREV_DIVIDEND_ANNOUNCEMENT, - DAYS_SINCE_PREV_EX_DATE, - DAYS_TO_NEXT_EX_DATE, - DIVIDEND_TYPE_FIELD_NAME, - EX_DATE_FIELD_NAME, - NEXT_AMOUNT, - NEXT_CURRENCY_TYPE, - NEXT_DIVIDEND_TYPE, - NEXT_EX_DATE, - NEXT_PAY_DATE, - PAY_DATE_FIELD_NAME, PREVIOUS_AMOUNT, PREVIOUS_ANNOUNCEMENT, - PREVIOUS_CURRENCY_TYPE, - PREVIOUS_DIVIDEND_TYPE, - PREVIOUS_EX_DATE, - PREVIOUS_PAY_DATE, SID_FIELD_NAME, TS_FIELD_NAME, ) @@ -46,9 +29,14 @@ from zipline.pipeline.loaders.blaze.dividends import ( BlazeDividendsByExDateLoader ) from zipline.pipeline.loaders.dividends import ( + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME, DividendsByAnnouncementDateLoader, DividendsByExDateLoader, - DividendsByPayDateLoader + DividendsByPayDateLoader, + EX_DATE_FIELD_NAME, + PAY_DATE_FIELD_NAME, ) from zipline.pipeline.loaders.utils import ( zip_with_dates, @@ -60,6 +48,20 @@ from zipline.testing.fixtures import ( ZiplineTestCase ) +DAYS_SINCE_PREV_DIVIDEND_ANNOUNCEMENT = 'days_since_prev_dividend_announcement' +DAYS_SINCE_PREV_EX_DATE = 'days_since_prev_ex_date' +DAYS_TO_NEXT_EX_DATE = 'days_to_next_ex_date' +NEXT_AMOUNT = 'next_amount' +NEXT_CURRENCY_TYPE = 'next_currency_type' +NEXT_DIVIDEND_TYPE = 'next_dividend_type' +NEXT_EX_DATE = 'next_ex_date' +NEXT_PAY_DATE = 'next_pay_date' +PREVIOUS_CURRENCY_TYPE = 'previous_currency_type' +PREVIOUS_DIVIDEND_TYPE = 'previous_dividend_type' +PREVIOUS_EX_DATE = 'previous_ex_date' +PREVIOUS_PAY_DATE = 'previous_pay_date' + + dividends_cases = [ # K1--K2--A1--A2. pd.DataFrame({ diff --git a/zipline/pipeline/common.py b/zipline/pipeline/common.py index d45a85f4..cfa08a71 100644 --- a/zipline/pipeline/common.py +++ b/zipline/pipeline/common.py @@ -1,77 +1,13 @@ """ Common constants for Pipeline. """ -ACTUAL_VALUE_FIELD_NAME = 'actual_value' AD_FIELD_NAME = 'asof_date' ANNOUNCEMENT_FIELD_NAME = 'announcement_date' -BUYBACK_AMOUNT_FIELD_NAME = 'buyback_amount' CASH_FIELD_NAME = 'cash' -CASH_AMOUNT_FIELD_NAME = 'cash_amount' -COUNT_FIELD_NAME = 'count' -CURRENCY_FIELD_NAME = 'currency_type' -BUYBACK_ANNOUNCEMENT_FIELD_NAME = 'buyback_date' -BUYBACK_TYPE_FIELD_NAME = 'buyback_type' -BUYBACK_UNIT_FIELD_NAME = 'buyback_unit' -CASH_AMOUNT_FIELD_NAME = 'cash_amount' -CASH_FIELD_NAME = 'cash' -COUNT_FIELD_NAME = 'count' DAYS_SINCE_PREV = 'days_since_prev' -DAYS_SINCE_PREV_DISCLOSURE = 'days_since_prev_disclosure' -DAYS_SINCE_PREV_DIVIDEND_ANNOUNCEMENT = 'days_since_prev_dividend_announcement' -DAYS_SINCE_PREV_EX_DATE = 'days_since_prev_ex_date' DAYS_TO_NEXT = 'days_to_next' -DAYS_TO_NEXT_EX_DATE = 'days_to_next_ex_date' -DISCLOSURE_DATE = 'disclosure_date' -DIVIDEND_TYPE_FIELD_NAME = 'dividend_type' -EX_DATE_FIELD_NAME = 'ex_date' -FISCAL_QUARTER_FIELD_NAME = 'fiscal_quarter' -FISCAL_YEAR_FIELD_NAME = 'fiscal_year' -HIGH_FIELD_NAME = 'high' -LOW_FIELD_NAME = 'low' -MEAN_FIELD_NAME = 'mean' -NEXT_AMOUNT = 'next_amount' NEXT_ANNOUNCEMENT = 'next_announcement' -NEXT_COUNT = 'next_count' -NEXT_CURRENCY_TYPE = 'next_currency_type' -NEXT_DIVIDEND_TYPE = 'next_dividend_type' -NEXT_EX_DATE = 'next_ex_date' -NEXT_FISCAL_QUARTER = 'next_fiscal_quarter' -NEXT_FISCAL_YEAR = 'next_fiscal_year' -NEXT_HIGH = 'next_high' -NEXT_LOW = 'next_low' -NEXT_MEAN = 'next_mean' -NEXT_PAY_DATE = 'next_pay_date' -NEXT_RELEASE_DATE = 'next_release_date' -NEXT_STANDARD_DEVIATION = 'next_standard_deviation' -NUM_SHARES = 'number_shares' -PAY_DATE_FIELD_NAME = 'pay_date' -PERCENT_SHARES = 'percent_shares' -PREVIOUS_ACTUAL_VALUE = 'previous_actual_value' PREVIOUS_AMOUNT = 'previous_amount' PREVIOUS_ANNOUNCEMENT = 'previous_announcement' -PREVIOUS_BUYBACK_AMOUNT = 'previous_value' -PREVIOUS_BUYBACK_ANNOUNCEMENT = 'previous_buyback_announcement' -PREVIOUS_BUYBACK_CASH = 'previous_buyback_cash' -PREVIOUS_BUYBACK_SHARE_COUNT = 'previous_buyback_share_count' -PREVIOUS_COUNT = 'previous_count' -PREVIOUS_BUYBACK_TYPE = 'previous_buyback_type' -PREVIOUS_BUYBACK_UNIT = 'previous_buyback_unit' -PREVIOUS_CURRENCY_TYPE = 'previous_currency_type' -PREVIOUS_DISCLOSURE_DATE = 'previous_disclosure_date' -PREVIOUS_DIVIDEND_TYPE = 'previous_dividend_type' -PREVIOUS_EX_DATE = 'previous_ex_date' -PREVIOUS_FISCAL_QUARTER = 'previous_fiscal_quarter' -PREVIOUS_FISCAL_YEAR = 'previous_fiscal_year' -PREVIOUS_HIGH = 'previous_high' -PREVIOUS_LOW = 'previous_low' -PREVIOUS_MEAN = 'previous_mean' -PREVIOUS_NUM_SHARES = 'previous_number_shares' -PREVIOUS_PAY_DATE = 'previous_pay_date' -PREVIOUS_PERCENT_SHARES = 'previous_percentage' -PREVIOUS_RELEASE_DATE = 'previous_release_date' -PREVIOUS_STANDARD_DEVIATION = 'previous_standard_deviation' -RELEASE_DATE_FIELD_NAME = 'release_date' -SHARE_COUNT_FIELD_NAME = 'share_count' SID_FIELD_NAME = 'sid' -STANDARD_DEVIATION_FIELD_NAME = 'standard_deviation' TS_FIELD_NAME = 'timestamp' diff --git a/zipline/pipeline/data/dividends.py b/zipline/pipeline/data/dividends.py index 042e74e8..b3975215 100644 --- a/zipline/pipeline/data/dividends.py +++ b/zipline/pipeline/data/dividends.py @@ -2,9 +2,9 @@ Dataset representing dates of upcoming dividends. """ from zipline.utils.numpy_utils import ( + categorical_dtype, datetime64ns_dtype, float64_dtype, - categorical_dtype ) from .dataset import Column, DataSet @@ -17,8 +17,8 @@ class DividendsByExDate(DataSet): previous_amount = Column(float64_dtype) next_currency = Column(categorical_dtype) previous_currency = Column(categorical_dtype) - previous_type = Column(categorical_dtype) next_type = Column(categorical_dtype) + previous_type = Column(categorical_dtype) class DividendsByPayDate(DataSet): @@ -28,8 +28,8 @@ class DividendsByPayDate(DataSet): previous_amount = Column(float64_dtype) next_currency = Column(categorical_dtype) previous_currency = Column(categorical_dtype) - previous_type = Column(categorical_dtype) next_type = Column(categorical_dtype) + previous_type = Column(categorical_dtype) class DividendsByAnnouncementDate(DataSet): diff --git a/zipline/pipeline/loaders/_13d_filings.py b/zipline/pipeline/loaders/_13d_filings.py index ad35bf77..4a45d879 100644 --- a/zipline/pipeline/loaders/_13d_filings.py +++ b/zipline/pipeline/loaders/_13d_filings.py @@ -2,16 +2,16 @@ Reference implementation for 13d filings loaders. """ -from zipline.pipeline.common import ( - DISCLOSURE_DATE, - PERCENT_SHARES, - NUM_SHARES -) from zipline.pipeline.data import _13DFilings from zipline.pipeline.loaders.events import EventsLoader from zipline.utils.memoize import lazyval +DISCLOSURE_DATE = 'disclosure_date' +NUM_SHARES = 'number_shares' +PERCENT_SHARES = 'percent_shares' + + class _13DFilingsLoader(EventsLoader): """ Reference loader for diff --git a/zipline/pipeline/loaders/blaze/_13d_filings.py b/zipline/pipeline/loaders/blaze/_13d_filings.py index d6502d64..592d847e 100644 --- a/zipline/pipeline/loaders/blaze/_13d_filings.py +++ b/zipline/pipeline/loaders/blaze/_13d_filings.py @@ -1,12 +1,12 @@ -from zipline.pipeline.common import ( - SID_FIELD_NAME, - TS_FIELD_NAME, - PERCENT_SHARES, - NUM_SHARES, - DISCLOSURE_DATE) +from zipline.pipeline.common import SID_FIELD_NAME, TS_FIELD_NAME from zipline.pipeline.data import _13DFilings from zipline.pipeline.loaders import _13DFilingsLoader from .events import BlazeEventsLoader +from zipline.pipeline.loaders._13d_filings import ( + DISCLOSURE_DATE, + NUM_SHARES, + PERCENT_SHARES, +) class Blaze_13DFilingsLoader(BlazeEventsLoader): diff --git a/zipline/pipeline/loaders/blaze/buyback_auth.py b/zipline/pipeline/loaders/blaze/buyback_auth.py index 39efcabe..db5cd3cc 100644 --- a/zipline/pipeline/loaders/blaze/buyback_auth.py +++ b/zipline/pipeline/loaders/blaze/buyback_auth.py @@ -2,15 +2,16 @@ from .core import ( SID_FIELD_NAME, TS_FIELD_NAME, ) -from zipline.pipeline.common import ( - BUYBACK_AMOUNT_FIELD_NAME, + +from zipline.pipeline.data import BuybackAuthorizations +from zipline.pipeline.loaders import BuybackAuthorizationsLoader +from .events import BlazeEventsLoader +from zipline.pipeline.loaders.buyback_auth import ( BUYBACK_ANNOUNCEMENT_FIELD_NAME, BUYBACK_TYPE_FIELD_NAME, BUYBACK_UNIT_FIELD_NAME, ) -from zipline.pipeline.data import BuybackAuthorizations -from zipline.pipeline.loaders import BuybackAuthorizationsLoader -from .events import BlazeEventsLoader +from zipline.pipeline.loaders.buyback_auth import BUYBACK_AMOUNT_FIELD_NAME class BlazeBuybackAuthorizationsLoader(BlazeEventsLoader): diff --git a/zipline/pipeline/loaders/blaze/consensus_estimates.py b/zipline/pipeline/loaders/blaze/consensus_estimates.py index 6e4ea31b..78686738 100644 --- a/zipline/pipeline/loaders/blaze/consensus_estimates.py +++ b/zipline/pipeline/loaders/blaze/consensus_estimates.py @@ -1,4 +1,9 @@ -from zipline.pipeline.common import ( +from .events import BlazeEventsLoader +from zipline.pipeline.common import SID_FIELD_NAME, TS_FIELD_NAME +from zipline.pipeline.data import ConsensusEstimates +from zipline.pipeline.loaders import ConsensusEstimatesLoader +from zipline.pipeline.loaders.consensus_estimates import ( + ACTUAL_VALUE_FIELD_NAME, COUNT_FIELD_NAME, FISCAL_QUARTER_FIELD_NAME, FISCAL_YEAR_FIELD_NAME, @@ -6,14 +11,8 @@ from zipline.pipeline.common import ( LOW_FIELD_NAME, MEAN_FIELD_NAME, RELEASE_DATE_FIELD_NAME, - SID_FIELD_NAME, STANDARD_DEVIATION_FIELD_NAME, - TS_FIELD_NAME, - ACTUAL_VALUE_FIELD_NAME ) -from zipline.pipeline.data import ConsensusEstimates -from zipline.pipeline.loaders import ConsensusEstimatesLoader -from .events import BlazeEventsLoader class BlazeConsensusEstimatesLoader(BlazeEventsLoader): diff --git a/zipline/pipeline/loaders/blaze/dividends.py b/zipline/pipeline/loaders/blaze/dividends.py index 081e84ed..6ee8b34e 100644 --- a/zipline/pipeline/loaders/blaze/dividends.py +++ b/zipline/pipeline/loaders/blaze/dividends.py @@ -1,10 +1,5 @@ from zipline.pipeline.common import ( ANNOUNCEMENT_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME, - DIVIDEND_TYPE_FIELD_NAME, - EX_DATE_FIELD_NAME, - PAY_DATE_FIELD_NAME, SID_FIELD_NAME, TS_FIELD_NAME, ) @@ -19,6 +14,13 @@ from zipline.pipeline.loaders import ( DividendsByExDateLoader ) from .events import BlazeEventsLoader +from zipline.pipeline.loaders.dividends import ( + CASH_AMOUNT_FIELD_NAME, + CURRENCY_FIELD_NAME, + DIVIDEND_TYPE_FIELD_NAME, + EX_DATE_FIELD_NAME, + PAY_DATE_FIELD_NAME, +) class BlazeDividendsByAnnouncementDateLoader(BlazeEventsLoader): diff --git a/zipline/pipeline/loaders/buyback_auth.py b/zipline/pipeline/loaders/buyback_auth.py index 3f796b0e..0cc55e04 100644 --- a/zipline/pipeline/loaders/buyback_auth.py +++ b/zipline/pipeline/loaders/buyback_auth.py @@ -4,14 +4,14 @@ Reference implementation for buyback auth loaders. from ..data import BuybackAuthorizations from .events import EventsLoader -from zipline.pipeline.common import ( - BUYBACK_AMOUNT_FIELD_NAME, - BUYBACK_ANNOUNCEMENT_FIELD_NAME, - BUYBACK_TYPE_FIELD_NAME, - BUYBACK_UNIT_FIELD_NAME -) + from zipline.utils.memoize import lazyval +BUYBACK_AMOUNT_FIELD_NAME = 'buyback_amount' +BUYBACK_ANNOUNCEMENT_FIELD_NAME = 'buyback_date' +BUYBACK_TYPE_FIELD_NAME = 'buyback_type' +BUYBACK_UNIT_FIELD_NAME = 'buyback_unit' + class BuybackAuthorizationsLoader(EventsLoader): """ diff --git a/zipline/pipeline/loaders/consensus_estimates.py b/zipline/pipeline/loaders/consensus_estimates.py index 9d8f20f8..e9eed4e9 100644 --- a/zipline/pipeline/loaders/consensus_estimates.py +++ b/zipline/pipeline/loaders/consensus_estimates.py @@ -4,18 +4,18 @@ Reference implementation for ConsensusEstimates loaders. from ..data import ConsensusEstimates from .events import EventsLoader -from zipline.pipeline.common import ( - COUNT_FIELD_NAME, - FISCAL_QUARTER_FIELD_NAME, - FISCAL_YEAR_FIELD_NAME, - HIGH_FIELD_NAME, - LOW_FIELD_NAME, - MEAN_FIELD_NAME, - RELEASE_DATE_FIELD_NAME, - STANDARD_DEVIATION_FIELD_NAME, - ACTUAL_VALUE_FIELD_NAME) from zipline.utils.memoize import lazyval +ACTUAL_VALUE_FIELD_NAME = 'actual_value' +COUNT_FIELD_NAME = 'count' +FISCAL_QUARTER_FIELD_NAME = 'fiscal_quarter' +FISCAL_YEAR_FIELD_NAME = 'fiscal_year' +HIGH_FIELD_NAME = 'high' +LOW_FIELD_NAME = 'low' +MEAN_FIELD_NAME = 'mean' +RELEASE_DATE_FIELD_NAME = 'release_date' +STANDARD_DEVIATION_FIELD_NAME = 'standard_deviation' + class ConsensusEstimatesLoader(EventsLoader): diff --git a/zipline/pipeline/loaders/dividends.py b/zipline/pipeline/loaders/dividends.py index 5732c4cc..c68d95b4 100644 --- a/zipline/pipeline/loaders/dividends.py +++ b/zipline/pipeline/loaders/dividends.py @@ -1,20 +1,21 @@ -from zipline.pipeline.common import ( - ANNOUNCEMENT_FIELD_NAME, - CASH_AMOUNT_FIELD_NAME, - CURRENCY_FIELD_NAME, - DIVIDEND_TYPE_FIELD_NAME, - EX_DATE_FIELD_NAME, - PAY_DATE_FIELD_NAME, -) +from zipline.pipeline.common import ANNOUNCEMENT_FIELD_NAME from zipline.pipeline.loaders.events import EventsLoader from ..data import ( - DividendsByExDate, DividendsByAnnouncementDate, - DividendsByPayDate + DividendsByExDate, + DividendsByPayDate, ) from zipline.utils.memoize import lazyval +CASH_AMOUNT_FIELD_NAME = 'cash_amount' +CASH_AMOUNT_FIELD_NAME = 'cash_amount' +CURRENCY_FIELD_NAME = 'currency_type' +DIVIDEND_TYPE_FIELD_NAME = 'dividend_type' +EX_DATE_FIELD_NAME = 'ex_date' +PAY_DATE_FIELD_NAME = 'pay_date' + + class DividendsByAnnouncementDateLoader(EventsLoader): expected_cols = frozenset([ANNOUNCEMENT_FIELD_NAME, CASH_AMOUNT_FIELD_NAME,