Support for '1m' History Frequency. #345
Conversation
Hrm. It looks like Github is ordering my commits by time rather than by the actual commit sequence. (I reordered the last two commits during rebase.) |
Is this up for review? I checked it out locally but getting some test failures:
|
@twiecki interesting. Looks like Travis has the same failures as well, but the tests are passing locally for me. It looks like a numpy/pandas versioning mismatch, because the issue is that I'm using a pandas testing utility to check that two dataframes are equal, and in your version that method is treating NaNs as unequal, whereas in mine it's treating them as equal. I get the following in my Zipline virtualenv:
|
I stepped into the failing test and it seems it's a datetime index issue. I'll post the index soon. |
@twiecki I upgraded my pandas from 0.12.0 to 0.14.0 and I'm now seeing the failure locally. Looking at the Travis log, I think we're just installing the lastest Pandas there as well. |
So, there's a date error in the expected results for test_daily_open_close, but fixing that still yields this error, because the testing method I'm using actually only checks the values of the underlying numpy arrays, ignoring the indices. The underlying failure is still that NaN is being treated as unequal to NaN inside |
Yeah, that's quite annoying. I just discovered On Wed, Jun 4, 2014 at 5:06 PM, Scott Sanderson notifications@github.com
Thomas Wiecki |
Yeah, i'm going to switch over to using On Wed, Jun 4, 2014 at 11:09 AM, Thomas Wiecki notifications@github.com
|
Updated the last commit with test fixes. |
Adds a suite of new functions for querying data from the trading calendar. These include: `previous_trading_day` `minutes_for_days_in_range` (minutely version of `days_in_range`) `previous_open_and_close` (inverse of `next_open_and_close`) `next_market_minute` `previous_market_minute` `open_close_window` (get a range of opens/closes with slicing semantics) `market_minute_window` (get a range of minutes with slicing semantics) Also refactors `test_finance` to move `TradingEnvironment` tests into their own TestCase.
Overhauls `HistoryContainer` in prep for support of more than one frequency. Major changes: - Methods/variables referring to "day" have been renamed/generalized. - `current_day_panel` became `buffer_panel`, which is now a `RollingPanel` - `prior_day_panel` became a dictionary mapping `Frequency` objects to "digest panels", which are instances of `RollingPanel`. - Hard-coded daily rollover replaced with a notion of a "current window" for each unique frequency managed by the panel. - When the end of the current window is reached for a given frequency, we compute an aggregate bar (code refers to this as a "digest"), which is appended to a panel associated with that frequency. - Window rollover dates are managed by a pair of dictionaries, `cur_window_starts` and `cur_window_closes`. The `Frequency` class is responsible for computing window bounds based on the open/close of the previous window. - Semantic change to the `open_price` field: `open_price` now always contains the price of the first trade occurring in the given window. Previously it contained the price of the first minute in the window, returning NaN it the security happened not to trade in the first minute.
Fixes an issue where, if `ffill=False`, `get_history` would return nans for every entry in the history frame except the last one.
Updates `HistoryContainer.roll` to handle cases where no data is present for the period being rolled. We now only forward-fill the `price` field when `ffill` is specified.
Also adds a length-1 HistorySpec to the test.
Overhauls
HistoryContainer
in prep to support '1m' frequency.Major changes:
current_day_panel
becamebuffer_panel
, which is now aRollingPanel
prior_day_panel
became a dictionary mappingFrequency
objects to"digest panels", which are instances of
RollingPanel
.each unique frequency managed by the panel.
compute an aggregate bar (code refers to this as a "digest"), which is
appended to a panel associated with that frequency.
cur_window_starts
andcur_window_closes
. TheFrequency
class isresponsible for computing window bounds based on the open/close of the
previous window.
open_price
field:open_price
now alwayscontains the price of the first trade occurring in the given window.
Previously it contained the price of the first minute in the window,
returning NaN it the security happened not to trade in the first minute.
price
is now the only field that can be forward-filled.