mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-10 07:46:26 +08:00
8c1e52385f
The patch that added data_portal intended for NotImplementedError to be raised if one of the functions was invoked, but the raise was omitted.
190 lines
5.5 KiB
Python
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
|