BUG: fixed issue #80 but updated performance stats immediately after registering transactions in live mode

This commit is contained in:
fredfortier
2017-11-22 21:11:16 -05:00
parent 32523d474d
commit 7dddc0a85f
+15 -11
View File
@@ -288,7 +288,7 @@ class ExchangeTradingAlgorithmLive(ExchangeTradingAlgorithmBase):
self.live_graph = kwargs.pop('live_graph', None)
self._clock = None
self.minute_stats = deque(maxlen=60)
self.frame_stats = deque(maxlen=60)
self.pnl_stats = get_algo_df(self.algo_namespace, 'pnl_stats')
@@ -557,8 +557,9 @@ class ExchangeTradingAlgorithmLive(ExchangeTradingAlgorithmBase):
)
self.exposure_stats = pd.concat([self.exposure_stats, df])
save_algo_df(self.algo_namespace, 'exposure_stats',
self.exposure_stats)
save_algo_df(
self.algo_namespace, 'exposure_stats', self.exposure_stats
)
def handle_data(self, data):
"""
@@ -575,8 +576,11 @@ class ExchangeTradingAlgorithmLive(ExchangeTradingAlgorithmBase):
self._synchronize_portfolio()
transactions = self._check_open_orders()
for transaction in transactions:
self.perf_tracker.process_transaction(transaction)
if len(transactions) > 0:
for transaction in transactions:
self.perf_tracker.process_transaction(transaction)
self.perf_tracker.update_performance()
if self._handle_data:
self._handle_data(self, data)
@@ -591,22 +595,22 @@ class ExchangeTradingAlgorithmLive(ExchangeTradingAlgorithmBase):
# Performance tracker and keep only minute and cumulative
self.perf_tracker.update_performance()
minute_stats = self.prepare_period_stats(
frame_stats = self.prepare_period_stats(
data.current_dt, data.current_dt + timedelta(minutes=1))
# Saving the last hour in memory
self.minute_stats.append(minute_stats)
self.frame_stats.append(frame_stats)
self.add_pnl_stats(minute_stats)
self.add_pnl_stats(frame_stats)
if self.recorded_vars:
self.add_custom_signals_stats(minute_stats)
self.add_custom_signals_stats(frame_stats)
recorded_cols = list(self.recorded_vars.keys())
else:
recorded_cols = None
self.add_exposure_stats(minute_stats)
self.add_exposure_stats(frame_stats)
print_df = pd.DataFrame(list(self.minute_stats))
print_df = pd.DataFrame(list(self.frame_stats))
log.info(
'statistics for the last {stats_minutes} minutes:\n{stats}'.format(
stats_minutes=self.stats_minutes,