diff --git a/catalyst/examples/simple_loop.py b/catalyst/examples/simple_loop.py index 0de91d3d..c95726fa 100644 --- a/catalyst/examples/simple_loop.py +++ b/catalyst/examples/simple_loop.py @@ -26,7 +26,7 @@ def handle_data(context, data): context.asset, fields='price', bar_count=20, - frequency='30T' + frequency='1H' ) last_traded = prices.index[-1] log.info('last candle date: {}'.format(last_traded)) @@ -114,7 +114,7 @@ def analyze(context, perf): if __name__ == '__main__': - mode = 'backtest' + mode = 'live' if mode == 'backtest': run_algorithm( diff --git a/catalyst/exchange/exchange.py b/catalyst/exchange/exchange.py index f32d9a2b..c1b64f7c 100644 --- a/catalyst/exchange/exchange.py +++ b/catalyst/exchange/exchange.py @@ -502,7 +502,7 @@ class Exchange: """ freq, candle_size, unit, data_frequency = get_frequency( - frequency, data_frequency + frequency, data_frequency, supported_freqs=['T', 'D', 'H'] ) # The get_history method supports multiple asset candles = self.get_candles( @@ -523,8 +523,9 @@ class Exchange: field=field, ) + delta_candle_size = candle_size * 60 if unit == 'H' else candle_size # Checking to make sure that the dates match - delta = get_delta(candle_size, data_frequency) + delta = get_delta(delta_candle_size, data_frequency) adj_end_dt = end_dt - delta last_traded = asset_series.index[-1] diff --git a/catalyst/exchange/utils/datetime_utils.py b/catalyst/exchange/utils/datetime_utils.py index 5f3a2e04..c34b0c69 100644 --- a/catalyst/exchange/utils/datetime_utils.py +++ b/catalyst/exchange/utils/datetime_utils.py @@ -92,7 +92,7 @@ def get_periods_range(freq, start_dt=None, end_dt=None, periods=None): adj_periods = periods * unit_periods # TODO: standardize time aliases to avoid any mapping - unit = 'd' if unit == 'D' else 'm' + unit = 'd' if unit == 'D' else 'h' if unit == 'H' else 'm' delta = pd.Timedelta(adj_periods, unit) if start_dt is not None: @@ -248,7 +248,7 @@ def get_year_start_end(dt, first_day=None, last_day=None): return year_start, year_end -def get_frequency(freq, data_frequency=None): +def get_frequency(freq, data_frequency=None, supported_freqs=['D', 'T']): """ Get the frequency parameters. @@ -305,9 +305,14 @@ def get_frequency(freq, data_frequency=None): data_frequency = 'minute' elif unit.lower() == 'h': - candle_size = candle_size * 60 - alias = '{}T'.format(candle_size) - data_frequency = 'minute' + if 'H' in supported_freqs: + unit = 'H' + alias = '{}H'.format(candle_size) + + else: + candle_size = candle_size * 60 + alias = '{}T'.format(candle_size) + data_frequency = 'minute' else: raise InvalidHistoryFrequencyAlias(freq=freq)