BLD: fix bundles last partial candle for minute mode - as reported in issue #266

This commit is contained in:
lenak25
2018-03-29 18:46:15 +03:00
parent 4eaec97614
commit af7b211035
+19 -4
View File
@@ -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,