Fixes under-incrementation of risk report.

We were only incrementing the risk report by one day, and never
checking to see if that day we incremented into was a trading day
or not.

We now increment by day until we are on a trading day.

With an assist from @twiecki on:

Adapted test_risk_compare_batch_iterative to work with fixed
iterative risk class.
This commit is contained in:
Eddie Hebert
2012-11-15 13:18:46 -05:00
committed by Eddie Hebert
parent 4c3554042e
commit d5697cdf0a
4 changed files with 19 additions and 8 deletions
+4
View File
@@ -591,3 +591,7 @@ shares in position"
cumulative_pos = perf_tracker.cumulative_performance.positions[sid]
expected_size = txn_count / 2 * -25
self.assertEqual(cumulative_pos.amount, expected_size)
self.assertEqual(perf_tracker.period_end.
replace(hour=0, minute=0, second=0),
perf_tracker.cumulative_risk_metrics.end_date)
+8 -5
View File
@@ -71,10 +71,15 @@ class RiskCompareIterativeToBatch(unittest.TestCase):
cur_returns.append(todays_return_obj)
# Move forward day counter to next trading day
todays_date += self.oneday
while not self.trading_env.is_trading_day(todays_date):
todays_date += self.oneday
try:
risk_metrics_original = risk.RiskMetricsBatch(
start_date=self.start_date,
end_date=todays_date + self.oneday,
end_date=todays_date,
returns=cur_returns,
trading_environment=self.trading_env
)
@@ -82,12 +87,10 @@ 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, ret, self.oneday)
type(e), risk_metrics_refactor.update, ret)
continue
risk_metrics_refactor.update(ret, self.oneday)
todays_date += self.oneday
risk_metrics_refactor.update(ret)
self.assertEqual(
risk_metrics_original.start_date,
+1 -1
View File
@@ -277,7 +277,7 @@ class PerformanceTracker(object):
#update risk metrics for cumulative performance
self.cumulative_risk_metrics.update(
self.todays_performance.returns, datetime.timedelta(days=1))
self.todays_performance.returns)
# increment the day counter before we move markers forward.
self.day_count += 1.0
+6 -2
View File
@@ -386,7 +386,7 @@ class RiskMetricsIterative(RiskMetricsBase):
if x.date >= self.start_date
]
def update(self, returns_in_period, dt):
def update(self, returns_in_period):
if self.trading_environment.is_trading_day(self.end_date):
self.algorithm_returns.append(returns_in_period)
self.benchmark_returns.append(
@@ -394,7 +394,11 @@ class RiskMetricsIterative(RiskMetricsBase):
self.trading_days += 1
self.update_compounded_log_returns()
self.end_date += dt
self.end_date += datetime.timedelta(hours=24)
while not self.trading_environment.is_trading_day(self.end_date):
self.end_date += datetime.timedelta(hours=24)
self.end_date = self.end_date.replace(hour=0, minute=0, second=0)
self.algorithm_period_returns.append(