Files
catalyst/zipline/data/data_portal.py
T
Eddie Hebert 8c1e52385f MAINT: Raise NotImplementedError in data_portal
The patch that added data_portal intended for NotImplementedError to be
raised if one of the functions was invoked, but the raise was omitted.
2015-12-15 17:08:19 -05:00

190 lines
5.5 KiB
Python

#
# Copyright 2015 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 logbook import Logger
log = Logger('DataPortal')
BASE_FIELDS = {
'open': 'open',
'open_price': 'open',
'high': 'high',
'low': 'low',
'close': 'close',
'close_price': 'close',
'volume': 'volume',
'price': 'close'
}
class DataPortal(object):
def __init__(self,
env,
equity_daily_reader=None,
equity_minute_reader=None,
future_daily_reader=None,
future_minute_reader=None,
adjustment_reader=None):
self._adjustment_reader = adjustment_reader
self._equity_daily_reader = equity_daily_reader
self._equity_minute_reader = equity_minute_reader
self._future_daily_reader = future_daily_reader
self._future_minute_reader = future_minute_reader
def get_previous_value(self, asset, field, dt, data_frequency):
"""
Given an asset and a column and a dt, returns the previous value for
the same asset/column pair. If this data portal is in minute mode,
it's the previous minute value, otherwise it's the previous day's
value.
Parameters
---------
asset : Asset
The asset whose data is desired.
field: string
The desired field of the asset. Valid values are "open",
"open_price", "high", "low", "close", "close_price", "volume", and
"price".
dt: pd.Timestamp
The timestamp from which to go back in time one slot.
data_frequency: string
The frequency of the data to query; i.e. whether the data is
'daily' or 'minute' bars
Returns
-------
The value of the desired field at the desired time.
"""
raise NotImplementedError
def get_spot_value(self, asset, field, dt, data_frequency):
"""
Public API method that returns a scalar value representing the value
of the desired asset's field at either the given dt.
Parameters
---------
asset : Asset
The asset whose data is desired.gith
field: string
The desired field of the asset. Valid values are "open",
"open_price", "high", "low", "close", "close_price", "volume", and
"price".
dt: pd.Timestamp
The timestamp for the desired value.
data_frequency: string
The frequency of the data to query; i.e. whether the data is
'daily' or 'minute' bars
Returns
-------
The value of the desired field at the desired time.
"""
raise NotImplementedError
def get_history_window(self, assets, end_dt, bar_count, frequency, field,
ffill=True):
"""
Public API method that returns a dataframe containing the requested
history window. Data is fully adjusted.
Parameters
---------
assets : list of zipline.data.Asset objects
The assets whose data is desired.
bar_count: int
The number of bars desired.
frequency: string
"1d" or "1m"
field: string
The desired field of the asset.
ffill: boolean
Forward-fill missing values. Only has effect if field
is 'price'.
Returns
-------
A dataframe containing the requested data.
"""
raise NotImplementedError
def get_splits(self, sids, dt):
"""
Returns any splits for the given sids and the given dt.
Parameters
----------
sids : list
Sids for which we want splits.
dt: pd.Timestamp
The date for which we are checking for splits. Note: this is
expected to be midnight UTC.
Returns
-------
list: List of splits, where each split is a (sid, ratio) tuple.
"""
raise NotImplementedError
def get_stock_dividends(self, sid, trading_days):
"""
Returns all the stock dividends for a specific sid that occur
in the given trading range.
Parameters
----------
sid: int
The asset whose stock dividends should be returned.
trading_days: pd.DatetimeIndex
The trading range.
Returns
-------
list: A list of objects with all relevant attributes populated.
All timestamp fields are converted to pd.Timestamps.
"""
raise NotImplementedError
def get_fetcher_assets(self, day):
"""
Returns a list of assets for the current date, as defined by the
fetcher data.
Notes
-----
Data is forward-filled. If there is no fetcher data defined for day
N, we use day N-1's data (if available, otherwise we keep going back).
Returns
-------
list: a list of Asset objects.
"""
raise NotImplementedError