From af7b21103588f618ea716a0ae2eb23ca5f1aa167 Mon Sep 17 00:00:00 2001 From: lenak25 Date: Thu, 29 Mar 2018 18:46:15 +0300 Subject: [PATCH] BLD: fix bundles last partial candle for minute mode - as reported in issue #266 --- catalyst/exchange/exchange_data_portal.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/catalyst/exchange/exchange_data_portal.py b/catalyst/exchange/exchange_data_portal.py index d2dab705..1cc5f61a 100644 --- a/catalyst/exchange/exchange_data_portal.py +++ b/catalyst/exchange/exchange_data_portal.py @@ -1,4 +1,5 @@ import abc +import datetime import numpy as np import pandas as pd @@ -300,20 +301,34 @@ class DataPortalExchangeBacktest(DataPortalExchangeBase): ) adj_bar_count = candle_size * bar_count - if data_frequency == 'minute' and adj_data_frequency == 'daily': - end_dt = end_dt.floor('1D') + if data_frequency == "minute": + # for minute frequency always request data until the + # current minute (do not include the current minute) + last_dt_for_series = end_dt - datetime.timedelta(minutes=1) + + # read the minute bundles for daily frequency to + # support last partial candle + # TODO: optimize this by applying this logic only for the last day + if adj_data_frequency == 'daily': + adj_data_frequency = 'minute' + adj_bar_count = adj_bar_count * 1440 + + else: # data_frequency == "daily": + last_dt_for_series = end_dt series = bundle.get_history_window_series_and_load( assets=assets, - end_dt=end_dt, + end_dt=last_dt_for_series, bar_count=adj_bar_count, field=field, data_frequency=adj_data_frequency, algo_end_dt=self._last_available_session, ) - start_dt = get_start_dt(end_dt, adj_bar_count, adj_data_frequency) + start_dt = get_start_dt(last_dt_for_series, adj_bar_count, + adj_data_frequency, False) df = resample_history_df(pd.DataFrame(series), freq, field, start_dt) + return df def get_exchange_spot_value(self,