From fce87015d2a859d728c6727c122cc85533ef72fd Mon Sep 17 00:00:00 2001 From: John Ricklefs Date: Fri, 19 Aug 2016 14:43:51 -0400 Subject: [PATCH 1/3] ENH: Expose exchange_full on Equity objects --- zipline/assets/_assets.pyx | 58 +++++++++++++++++++++++++++++++++++-- zipline/assets/synthetic.py | 4 +++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/zipline/assets/_assets.pyx b/zipline/assets/_assets.pyx index 1a7a3d25..4befac72 100644 --- a/zipline/assets/_assets.pyx +++ b/zipline/assets/_assets.pyx @@ -164,7 +164,7 @@ cdef class Asset: self.start_date, self.end_date, self.first_traded, - self.auto_close_date,)) + self.auto_close_date)) cpdef to_dict(self): """ @@ -226,9 +226,63 @@ cdef class Asset: cdef class Equity(Asset): + cdef readonly object exchange_full + + _kwargnames = frozenset({ + 'sid', + 'symbol', + 'asset_name', + 'start_date', + 'end_date', + 'first_traded', + 'auto_close_date', + 'exchange', + 'exchange_full', + }) + + def __init__(self, + int sid, # sid is required + object exchange, # exchange is required + object symbol="", + object asset_name="", + object start_date=None, + object end_date=None, + object first_traded=None, + object auto_close_date=None, + object exchange_full=None): + super().__init__( + sid, + exchange, + symbol=symbol, + asset_name=asset_name, + start_date=start_date, + end_date=end_date, + first_traded=first_traded, + auto_close_date=auto_close_date, + ) + + self.exchange_full = exchange_full + + cpdef to_dict(self): + """ + Convert to a python dict. + """ + return { + 'sid': self.sid, + 'symbol': self.symbol, + 'asset_name': self.asset_name, + 'start_date': self.start_date, + 'end_date': self.end_date, + 'first_traded': self.first_traded, + 'auto_close_date': self.auto_close_date, + 'exchange': self.exchange, + 'exchange_full': self.exchange_full, + } + def __repr__(self): attrs = ('symbol', 'asset_name', 'exchange', - 'start_date', 'end_date', 'first_traded', 'auto_close_date') + 'start_date', 'end_date', 'first_traded', 'auto_close_date', + 'exchange_full') tuples = ((attr, repr(getattr(self, attr, None))) for attr in attrs) strings = ('%s=%s' % (t[0], t[1]) for t in tuples) diff --git a/zipline/assets/synthetic.py b/zipline/assets/synthetic.py index c3f173dd..26079829 100644 --- a/zipline/assets/synthetic.py +++ b/zipline/assets/synthetic.py @@ -51,6 +51,7 @@ def make_rotating_equity_info(num_assets, periods=num_assets, ), 'exchange': 'TEST', + 'exchange_full': 'TEST FULL', }, index=range(num_assets), ) @@ -87,6 +88,7 @@ def make_simple_equity_info(sids, 'start_date': pd.to_datetime([start_date] * num_assets), 'end_date': pd.to_datetime([end_date] * num_assets), 'exchange': 'TEST', + 'exchange_full': 'TEST FULL', }, index=sids, columns=( @@ -94,6 +96,7 @@ def make_simple_equity_info(sids, 'end_date', 'symbol', 'exchange', + 'exchange_full', ), ) @@ -137,6 +140,7 @@ def make_jagged_equity_info(num_assets, periods=num_assets, ), 'exchange': 'TEST', + 'exchange_full': 'TEST FULL', }, index=range(num_assets), ) From ccde5cbf56097d8bdb7faf4e9b7b47a8bf9222da Mon Sep 17 00:00:00 2001 From: John Ricklefs Date: Fri, 19 Aug 2016 16:38:50 -0400 Subject: [PATCH 2/3] ENH: Add exchange_full to all Assets, incl. Futures. --- zipline/assets/_assets.pyx | 75 ++++++++----------------------------- zipline/assets/synthetic.py | 1 + 2 files changed, 17 insertions(+), 59 deletions(-) diff --git a/zipline/assets/_assets.pyx b/zipline/assets/_assets.pyx index 4befac72..acd6c03a 100644 --- a/zipline/assets/_assets.pyx +++ b/zipline/assets/_assets.pyx @@ -40,7 +40,7 @@ from zipline.utils.calendars import get_calendar # IMPORTANT NOTE: You must change this template if you change # Asset.__reduce__, or else we'll attempt to unpickle an old version of this # class -CACHE_FILE_TEMPLATE = '/tmp/.%s-%s.v6.cache' +CACHE_FILE_TEMPLATE = '/tmp/.%s-%s.v7.cache' cdef class Asset: @@ -58,6 +58,7 @@ cdef class Asset: cdef readonly object auto_close_date cdef readonly object exchange + cdef readonly object exchange_full _kwargnames = frozenset({ 'sid', @@ -68,6 +69,7 @@ cdef class Asset: 'first_traded', 'auto_close_date', 'exchange', + 'exchange_full', }) def __init__(self, @@ -78,13 +80,15 @@ cdef class Asset: object start_date=None, object end_date=None, object first_traded=None, - object auto_close_date=None): + object auto_close_date=None, + object exchange_full=None): self.sid = sid self.sid_hash = hash(sid) self.symbol = symbol self.asset_name = asset_name self.exchange = exchange + self.exchange_full = exchange_full self.start_date = start_date self.end_date = end_date self.first_traded = first_traded @@ -164,7 +168,8 @@ cdef class Asset: self.start_date, self.end_date, self.first_traded, - self.auto_close_date)) + self.auto_close_date, + self.exchange_full)) cpdef to_dict(self): """ @@ -179,6 +184,7 @@ cdef class Asset: 'first_traded': self.first_traded, 'auto_close_date': self.auto_close_date, 'exchange': self.exchange, + 'exchange_full': self.exchange_full, } @classmethod @@ -226,59 +232,6 @@ cdef class Asset: cdef class Equity(Asset): - cdef readonly object exchange_full - - _kwargnames = frozenset({ - 'sid', - 'symbol', - 'asset_name', - 'start_date', - 'end_date', - 'first_traded', - 'auto_close_date', - 'exchange', - 'exchange_full', - }) - - def __init__(self, - int sid, # sid is required - object exchange, # exchange is required - object symbol="", - object asset_name="", - object start_date=None, - object end_date=None, - object first_traded=None, - object auto_close_date=None, - object exchange_full=None): - super().__init__( - sid, - exchange, - symbol=symbol, - asset_name=asset_name, - start_date=start_date, - end_date=end_date, - first_traded=first_traded, - auto_close_date=auto_close_date, - ) - - self.exchange_full = exchange_full - - cpdef to_dict(self): - """ - Convert to a python dict. - """ - return { - 'sid': self.sid, - 'symbol': self.symbol, - 'asset_name': self.asset_name, - 'start_date': self.start_date, - 'end_date': self.end_date, - 'first_traded': self.first_traded, - 'auto_close_date': self.auto_close_date, - 'exchange': self.exchange, - 'exchange_full': self.exchange_full, - } - def __repr__(self): attrs = ('symbol', 'asset_name', 'exchange', 'start_date', 'end_date', 'first_traded', 'auto_close_date', @@ -345,6 +298,7 @@ cdef class Future(Asset): 'exchange', 'tick_size', 'multiplier', + 'exchange_full', }) def __init__(self, @@ -360,7 +314,8 @@ cdef class Future(Asset): object auto_close_date=None, object first_traded=None, object tick_size="", - float multiplier=1.0): + float multiplier=1.0, + object exchange_full=None): super().__init__( sid, @@ -371,6 +326,7 @@ cdef class Future(Asset): end_date=end_date, first_traded=first_traded, auto_close_date=auto_close_date, + exchange_full=exchange_full, ) self.root_symbol = root_symbol self.notice_date = notice_date @@ -390,7 +346,7 @@ cdef class Future(Asset): attrs = ('symbol', 'root_symbol', 'asset_name', 'exchange', 'start_date', 'end_date', 'first_traded', 'notice_date', 'expiration_date', 'auto_close_date', 'tick_size', - 'multiplier') + 'multiplier', 'exchange_full') tuples = ((attr, repr(getattr(self, attr, None))) for attr in attrs) strings = ('%s=%s' % (t[0], t[1]) for t in tuples) @@ -416,7 +372,8 @@ cdef class Future(Asset): self.auto_close_date, self.first_traded, self.tick_size, - self.multiplier,)) + self.multiplier, + self.exchange_full)) cpdef to_dict(self): """ diff --git a/zipline/assets/synthetic.py b/zipline/assets/synthetic.py index 26079829..3e594b2e 100644 --- a/zipline/assets/synthetic.py +++ b/zipline/assets/synthetic.py @@ -222,6 +222,7 @@ def make_future_info(first_sid, 'expiration_date': notice_date_func(month_begin), 'multiplier': 500, 'exchange': "TEST", + 'exchange_full': 'TEST FULL', }) return pd.DataFrame.from_records(contracts, index='sid').convert_objects() From 8e3cc484dbacab17ed4014bcddde37731ef5f746 Mon Sep 17 00:00:00 2001 From: John Ricklefs Date: Fri, 19 Aug 2016 16:42:28 -0400 Subject: [PATCH 3/3] ENH: If no exchange_full provided, use exchange --- zipline/assets/_assets.pyx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zipline/assets/_assets.pyx b/zipline/assets/_assets.pyx index acd6c03a..40d84997 100644 --- a/zipline/assets/_assets.pyx +++ b/zipline/assets/_assets.pyx @@ -88,7 +88,8 @@ cdef class Asset: self.symbol = symbol self.asset_name = asset_name self.exchange = exchange - self.exchange_full = exchange_full + self.exchange_full = (exchange_full if exchange_full is not None + else exchange) self.start_date = start_date self.end_date = end_date self.first_traded = first_traded