BUG: Fix tradesimulation index into perf results when emitting minutely.

The indexing into performance results during the simulation loop fails
when emitting minutely since 'daily_perf' only exists on daily performance
results, not the minutely results.

Fix by making the key used to index into performance results depend
on the emission rate.
This commit is contained in:
Eddie Hebert
2013-04-04 17:16:38 -04:00
parent 564c81f4a7
commit eb42d4bfbd
+10 -2
View File
@@ -137,6 +137,11 @@ class TradeSimulationClient(object):
class AlgorithmSimulator(object): class AlgorithmSimulator(object):
EMISSION_TO_PERF_KEY_MAP = {
'minute': 'intraday_perf',
'daily': 'daily_perf'
}
def __init__(self, def __init__(self,
order_book, order_book,
perf_tracker, perf_tracker,
@@ -152,6 +157,9 @@ class AlgorithmSimulator(object):
self.order_book = order_book self.order_book = order_book
self.perf_tracker = perf_tracker self.perf_tracker = perf_tracker
self.perf_key = self.EMISSION_TO_PERF_KEY_MAP[
perf_tracker.emission_rate]
self.algo = algo self.algo = algo
self.algo_start = algo_start.replace(hour=0, minute=0, self.algo_start = algo_start.replace(hour=0, minute=0,
second=0, second=0,
@@ -263,7 +271,7 @@ class AlgorithmSimulator(object):
for perf_message in event.perf_messages: for perf_message in event.perf_messages:
# append current values of recorded vars # append current values of recorded vars
# to emitted message # to emitted message
perf_message['daily_perf']['recorded_vars'] =\ perf_message[self.perf_key]['recorded_vars'] =\
self.algo.recorded_vars self.algo.recorded_vars
yield perf_message yield perf_message
del event['perf_messages'] del event['perf_messages']
@@ -278,7 +286,7 @@ class AlgorithmSimulator(object):
self.perf_tracker.handle_simulation_end() self.perf_tracker.handle_simulation_end()
for message in perf_messages: for message in perf_messages:
message['daily_perf']['recorded_vars'] =\ message[self.perf_key]['recorded_vars'] =\
self.algo.recorded_vars self.algo.recorded_vars
yield message yield message