ENH: Added new kwarg to batch_transform: create_panel.

This commit is contained in:
Thomas Wiecki
2012-12-30 17:04:01 -05:00
parent a63d4bca28
commit 52b099f6db
3 changed files with 30 additions and 4 deletions
+5
View File
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import deque
import pytz
import numpy as np
import pandas as pd
@@ -354,6 +356,9 @@ class TestBatchTransform(TestCase):
self.assertIn('price', data.items)
self.assertIn('ignore', data.items)
for data in algo.history_return_ticks[wl:]:
self.assertTrue(isinstance(data, deque))
# test overloaded class
for test_history in [algo.history_return_price_class,
algo.history_return_price_decorator]:
+11 -1
View File
@@ -72,6 +72,7 @@ The algorithm must expose methods:
"""
from copy import deepcopy
import numpy as np
from zipline.algorithm import TradingAlgorithm
from zipline.finance.slippage import FixedSlippage
@@ -271,6 +272,7 @@ class BatchTransformAlgorithm(TradingAlgorithm):
self.history_return_sid_filter = []
self.history_return_field_filter = []
self.history_return_field_no_filter = []
self.history_return_ticks = []
self.return_price_class = ReturnPriceBatchTransform(
refresh_period=self.refresh_period,
@@ -328,6 +330,13 @@ class BatchTransformAlgorithm(TradingAlgorithm):
clean_nans=True
)
self.return_ticks = return_data(
refresh_period=self.refresh_period,
window_length=self.window_length,
clean_nans=True,
create_panel=False
)
self.iter = 0
self.set_slippage(FixedSlippage())
@@ -340,6 +349,8 @@ class BatchTransformAlgorithm(TradingAlgorithm):
self.history_return_args.append(
self.return_args_batch.handle_data(
data, *self.args, **self.kwargs))
self.history_return_ticks.append(
self.return_ticks.handle_data(data))
new_data = deepcopy(data)
for sid in new_data:
@@ -354,7 +365,6 @@ class BatchTransformAlgorithm(TradingAlgorithm):
self.return_nan.handle_data(data))
else:
nan_data = deepcopy(data)
import numpy as np
for sid in nan_data.iterkeys():
nan_data[sid].price = np.nan
self.history_return_nan.append(
+14 -3
View File
@@ -345,7 +345,8 @@ class BatchTransform(EventWindow):
window_length=None,
clean_nans=True,
sids=None,
fields=None):
fields=None,
create_panel=True):
"""Instantiate new batch_transform object.
:Arguments:
@@ -367,6 +368,12 @@ class BatchTransform(EventWindow):
Which fields to include in the moving window
(e.g. 'price'). If not supplied, fields will be
extracted from incoming events.
create_panel : bool <default=True>
If False, will create a pandas panel every refresh
period and pass it to the user-defined function.
If True, will pass the underlying deque reference
directly to the function which will be significantly
faster.
"""
super(BatchTransform, self).__init__(True,
@@ -378,6 +385,7 @@ class BatchTransform(EventWindow):
self.compute_transform_value = self.get_value
self.clean_nans = clean_nans
self.create_panel = create_panel
self.sids = sids
if isinstance(self.sids, (str, int)):
@@ -528,8 +536,11 @@ class BatchTransform(EventWindow):
return None
if self.updated:
self.cached = self.compute_transform_value(self.get_data(),
*args, **kwargs)
# Either create new pandas panel or pass ticks dequeue
# directly
data = self.get_data() if self.create_panel else self.ticks
self.cached = self.compute_transform_value(data, *args,
**kwargs)
return self.cached