MAINT: Add comments and rename methods in PerformanceTracker.

The function that handles a market close for daily frequency changed from
`handle_market_close` to `handle_market_close_daily`.

The function that is called at on the closing minute each day when running
minutely changed from `handle_intraday_close` to
`handle_intraday_market_close`.
This commit is contained in:
Scott Sanderson
2014-07-18 15:04:20 -04:00
parent 0176279404
commit a8431944aa
3 changed files with 28 additions and 9 deletions
+2 -2
View File
@@ -88,7 +88,7 @@ def calculate_results(host, events):
if event.type == DATASOURCE_TYPE.BENCHMARK:
bm_updated = True
if bm_updated:
msg = perf_tracker.handle_market_close()
msg = perf_tracker.handle_market_close_daily()
results.append(msg)
bm_updated = False
return results
@@ -1259,7 +1259,7 @@ class TestPerformanceTracker(unittest.TestCase):
for date, group in grouped_events:
for event in group:
perf_tracker.process_event(event)
msg = perf_tracker.handle_market_close()
msg = perf_tracker.handle_market_close_daily()
perf_messages.append(msg)
self.assertEqual(perf_tracker.txn_count, len(txns))
+16 -2
View File
@@ -305,7 +305,17 @@ class PerformanceTracker(object):
if dt == self.market_close:
self.returns[todays_date] = self.todays_performance.returns
def handle_intraday_close(self, new_mkt_open, new_mkt_close):
def handle_intraday_market_close(self, new_mkt_open, new_mkt_close):
"""
Function called at market close only when emitting at minutely
frequency.
TODO_SS: Why dont' we call this if we're emitting at daily frequency
but running with a minutely datasource? Is that just not a
valid combination? If so, why do we draw a distinction between
emission rate and data frequency?
"""
# update_performance should have been called in handle_minute_close
# so it is not repeated here.
self.intraday_risk_metrics = \
@@ -315,7 +325,11 @@ class PerformanceTracker(object):
self.market_open = new_mkt_open
self.market_close = new_mkt_close
def handle_market_close(self):
def handle_market_close_daily(self):
"""
Function called after handle_data when running with daily emission
rate.
"""
self.update_performance()
# add the return results from today to the returns series
todays_date = normalize_date(self.market_close)
+10 -5
View File
@@ -153,8 +153,10 @@ class AlgorithmSimulator(object):
# If at the end of backtest history,
# skip advancing market close.
pass
self.algo.perf_tracker.handle_intraday_close(
mkt_open, mkt_close)
self.algo.perf_tracker\
.handle_intraday_market_close(
mkt_open,
mkt_close)
self.algo.portfolio_needs_update = True
@@ -236,16 +238,19 @@ class AlgorithmSimulator(object):
self.algo.blotter.new_orders = []
return orders
def get_message(self, date):
def get_message(self, dt):
"""
Get a perf message for the given datetime.
"""
rvars = self.algo.recorded_vars
if self.algo.perf_tracker.emission_rate == 'daily':
perf_message = \
self.algo.perf_tracker.handle_market_close()
self.algo.perf_tracker.handle_market_close_daily()
perf_message['daily_perf']['recorded_vars'] = rvars
return perf_message
elif self.algo.perf_tracker.emission_rate == 'minute':
self.algo.perf_tracker.handle_minute_close(date)
self.algo.perf_tracker.handle_minute_close(dt)
perf_message = self.algo.perf_tracker.to_dict()
perf_message['minute_perf']['recorded_vars'] = rvars
return perf_message