mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-30 04:50:33 +08:00
f1919dc3af
This allows us to catch and handle all three of these exceptions in `calc_dividend_ratios`.
139 lines
3.8 KiB
Python
139 lines
3.8 KiB
Python
# Copyright 2016 Quantopian, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
from abc import ABCMeta, abstractmethod, abstractproperty
|
|
from six import with_metaclass
|
|
|
|
|
|
class NoDataOnDate(Exception):
|
|
"""
|
|
Raised when a spot price cannot be found for the sid and date.
|
|
"""
|
|
pass
|
|
|
|
|
|
class NoDataBeforeDate(NoDataOnDate):
|
|
pass
|
|
|
|
|
|
class NoDataAfterDate(NoDataOnDate):
|
|
pass
|
|
|
|
|
|
class BarReader(with_metaclass(ABCMeta, object)):
|
|
@abstractproperty
|
|
def data_frequency(self):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def load_raw_arrays(self, columns, start_date, end_date, assets):
|
|
"""
|
|
Parameters
|
|
----------
|
|
fields : list of str
|
|
'open', 'high', 'low', 'close', or 'volume'
|
|
start_dt: Timestamp
|
|
Beginning of the window range.
|
|
end_dt: Timestamp
|
|
End of the window range.
|
|
sids : list of int
|
|
The asset identifiers in the window.
|
|
|
|
Returns
|
|
-------
|
|
list of np.ndarray
|
|
A list with an entry per field of ndarrays with shape
|
|
(minutes in range, sids) with a dtype of float64, containing the
|
|
values for the respective field over start and end dt range.
|
|
"""
|
|
pass
|
|
|
|
@abstractproperty
|
|
def last_available_dt(self):
|
|
"""
|
|
Returns
|
|
-------
|
|
dt : pd.Timestamp
|
|
The last session for which the reader can provide data.
|
|
"""
|
|
pass
|
|
|
|
@abstractproperty
|
|
def trading_calendar(self):
|
|
"""
|
|
Returns the zipline.utils.calendar.trading_calendar used to read
|
|
the data. Can be None (if the writer didn't specify it).
|
|
"""
|
|
pass
|
|
|
|
@abstractproperty
|
|
def first_trading_day(self):
|
|
"""
|
|
Returns
|
|
-------
|
|
dt : pd.Timestamp
|
|
The first trading day (session) for which the reader can provide
|
|
data.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_value(self, sid, dt, field):
|
|
"""
|
|
Retrieve the value at the given coordinates.
|
|
|
|
Parameters
|
|
----------
|
|
sid : int
|
|
The asset identifier.
|
|
dt : pd.Timestamp
|
|
The timestamp for the desired data point.
|
|
field : string
|
|
The OHLVC name for the desired data point.
|
|
|
|
Returns
|
|
-------
|
|
value : float|int
|
|
The value at the given coordinates, ``float`` for OHLC, ``int``
|
|
for 'volume'.
|
|
|
|
Raises
|
|
------
|
|
NoDataOnDate
|
|
If the given dt is not a valid market minute (in minute mode) or
|
|
session (in daily mode) according to this reader's tradingcalendar.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_last_traded_dt(self, asset, dt):
|
|
"""
|
|
Get the latest minute on or before ``dt`` in which ``asset`` traded.
|
|
|
|
If there are no trades on or before ``dt``, returns ``pd.NaT``.
|
|
|
|
Parameters
|
|
----------
|
|
asset : zipline.asset.Asset
|
|
The asset for which to get the last traded minute.
|
|
dt : pd.Timestamp
|
|
The minute at which to start searching for the last traded minute.
|
|
|
|
Returns
|
|
-------
|
|
last_traded : pd.Timestamp
|
|
The dt of the last trade for the given asset, using the input
|
|
dt as a vantage point.
|
|
"""
|
|
pass
|