MAINT: Use pd.Series for benchmarks and algorithm returns in risk.

Instead of lists, use pd.Series, so that memory is preallocated.
This commit is contained in:
Eddie Hebert
2013-04-15 11:37:21 -04:00
parent 2dbafd5162
commit 6210467bec
5 changed files with 81 additions and 41 deletions
-3
View File
@@ -1019,9 +1019,6 @@ class TestPerformanceTracker(unittest.TestCase):
expected_size = len(txns) / 2 * -25
self.assertEqual(cumulative_pos.amount, expected_size)
self.assertEqual(perf_tracker.last_close,
perf_tracker.cumulative_risk_metrics.end_date)
self.assertEqual(len(perf_messages),
sim_params.days_in_period)
+4 -4
View File
@@ -135,9 +135,9 @@ class TestRisk(unittest.TestCase):
def test_trading_days_06(self):
returns = factory.create_returns_from_range(self.sim_params)
metrics = risk.RiskReport(returns, self.sim_params)
self.assertEqual([x.trading_days for x in metrics.year_periods],
self.assertEqual([x.num_trading_days for x in metrics.year_periods],
[251])
self.assertEqual([x.trading_days for x in metrics.month_periods],
self.assertEqual([x.num_trading_days for x in metrics.month_periods],
[20, 19, 23, 19, 22, 22, 20, 23, 20, 22, 21, 20])
def test_benchmark_volatility_06(self):
@@ -625,10 +625,10 @@ class TestRisk(unittest.TestCase):
def test_trading_days_08(self):
returns = factory.create_returns_from_range(self.sim_params08)
metrics = risk.RiskReport(returns, self.sim_params08)
self.assertEqual([x.trading_days for x in metrics.year_periods],
self.assertEqual([x.num_trading_days for x in metrics.year_periods],
[253])
self.assertEqual([x.trading_days for x in metrics.month_periods],
self.assertEqual([x.num_trading_days for x in metrics.month_periods],
[21, 20, 20, 22, 21, 21, 22, 21, 21, 23, 19, 22])
def test_benchmark_volatility_08(self):
+22 -4
View File
@@ -19,6 +19,7 @@ import datetime
import pytz
import numpy as np
import pandas as pd
import zipline.finance.risk as risk
import zipline.finance.trading as trading
@@ -52,7 +53,17 @@ class RiskCompareIterativeToBatch(unittest.TestCase):
else:
start_date = trading.environment.next_trading_day(self.start_date)
risk_metrics_refactor = risk.RiskMetricsIterative(start_date)
self.all_benchmark_returns = pd.Series({
x.date: x.returns
for x in trading.environment.benchmark_returns
if x.date >= self.start_date
})
start_index = trading.environment.trading_days.searchsorted(start_date)
end_date = trading.environment.trading_days[
start_index + len(RETURNS)]
risk_metrics_refactor = risk.RiskMetricsIterative(start_date, end_date)
todays_date = start_date
cur_returns = []
@@ -77,17 +88,24 @@ class RiskCompareIterativeToBatch(unittest.TestCase):
#assert that when original raises exception, same
#exception is raised by risk_metrics_refactor
np.testing.assert_raises(
type(e), risk_metrics_refactor.update, todays_date, ret)
type(e),
risk_metrics_refactor.update,
todays_date,
self.all_benchmark_returns[todays_return_obj.date]
)
continue
risk_metrics_refactor.update(todays_date, ret)
risk_metrics_refactor.update(
todays_date,
ret,
self.all_benchmark_returns[todays_return_obj.date])
self.assertEqual(
risk_metrics_original.start_date,
risk_metrics_refactor.start_date)
self.assertEqual(
risk_metrics_original.end_date,
risk_metrics_refactor.end_date)
risk_metrics_refactor.algorithm_returns.index[-1])
self.assertEqual(
risk_metrics_original.treasury_period_return,
risk_metrics_refactor.treasury_period_return)