diff --git a/catalyst/exchange/exchange.py b/catalyst/exchange/exchange.py index 23681723..e5bea0fe 100644 --- a/catalyst/exchange/exchange.py +++ b/catalyst/exchange/exchange.py @@ -13,7 +13,6 @@ from catalyst.exchange.exchange_errors import MismatchingBaseCurrencies, \ PricingDataNotLoadedError, \ NoDataAvailableOnExchange, NoValueForField, \ NoCandlesReceivedFromExchange, \ - InvalidHistoryFrequencyAlias, \ TickerNotFoundError, NotEnoughCashError from catalyst.exchange.utils.datetime_utils import get_delta, \ get_periods_range, \ @@ -612,7 +611,7 @@ class Exchange: # TODO: this function needs some work, # we're currently using it just for benchmark data freq, candle_size, unit, data_frequency = get_frequency( - frequency, data_frequency + frequency, data_frequency, supported_freqs=['T', 'D'] ) adj_bar_count = candle_size * bar_count try: diff --git a/catalyst/exchange/exchange_data_portal.py b/catalyst/exchange/exchange_data_portal.py index cd694f51..d2dab705 100644 --- a/catalyst/exchange/exchange_data_portal.py +++ b/catalyst/exchange/exchange_data_portal.py @@ -296,7 +296,7 @@ class DataPortalExchangeBacktest(DataPortalExchangeBase): bundle = self.exchange_bundles[exchange_name] # type: ExchangeBundle freq, candle_size, unit, adj_data_frequency = get_frequency( - frequency, data_frequency + frequency, data_frequency, supported_freqs=['T', 'D'] ) adj_bar_count = candle_size * bar_count diff --git a/catalyst/exchange/utils/datetime_utils.py b/catalyst/exchange/utils/datetime_utils.py index 5b8d1b10..38269947 100644 --- a/catalyst/exchange/utils/datetime_utils.py +++ b/catalyst/exchange/utils/datetime_utils.py @@ -309,15 +309,14 @@ def get_frequency(freq, data_frequency=None, supported_freqs=['D', 'H', 'T']): data_frequency = 'minute' elif unit.lower() == 'h': + data_frequency = 'minute' + if 'H' in supported_freqs: unit = 'H' alias = '{}H'.format(candle_size) - data_frequency = 'hourly' - else: candle_size = candle_size * 60 alias = '{}T'.format(candle_size) - data_frequency = 'minute' else: raise InvalidHistoryFrequencyAlias(freq=freq) diff --git a/catalyst/support/issue_227.py b/catalyst/support/issue_227.py new file mode 100644 index 00000000..09392f81 --- /dev/null +++ b/catalyst/support/issue_227.py @@ -0,0 +1,49 @@ +import pytz +from datetime import datetime +from catalyst.api import symbol +from catalyst.utils.run_algo import run_algorithm + +coin = 'btc' +base_currency = 'usd' +n_candles = 5 + + +def initialize(context): + context.symbol = symbol('%s_%s' % (coin, base_currency)) + + +def handle_data_polo_partial_candles(context, data): + history = data.history(symbol('btc_usdt'), ['volume'], + bar_count=10, + frequency='4H') + print('\nnow: %s\n%s' % (data.current_dt, history)) + if not hasattr(context, 'i'): + context.i = 0 + context.i += 1 + if context.i > 5: + raise Exception('stop') + + +live = False + +if live: + run_algorithm(initialize=lambda ctx: True, + handle_data=handle_data_polo_partial_candles, + exchange_name='poloniex', + base_currency='usdt', + algo_namespace='ns', + live=True, + data_frequency='minute', + capital_base=3000) +else: + run_algorithm(initialize=lambda ctx: True, + handle_data=handle_data_polo_partial_candles, + exchange_name='poloniex', + base_currency='usdt', + algo_namespace='ns', + live=False, + data_frequency='minute', + capital_base=3000, + start=datetime(2018, 2, 2, 0, 0, 0, 0, pytz.utc), + end=datetime(2018, 2, 20, 0, 0, 0, 0, pytz.utc) + )