From 020ec502587bd75fd895bdb6713b24aa4d36f402 Mon Sep 17 00:00:00 2001 From: Frederic Fortier Date: Fri, 12 Jan 2018 17:39:49 -0500 Subject: [PATCH] BUG: for issue #159, improved frequency validation in live mode --- catalyst/exchange/ccxt/ccxt_exchange.py | 11 ++++++++++- catalyst/exchange/exchange_data_portal.py | 1 + catalyst/exchange/exchange_errors.py | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/catalyst/exchange/ccxt/ccxt_exchange.py b/catalyst/exchange/ccxt/ccxt_exchange.py index 959daa27..26edbd26 100644 --- a/catalyst/exchange/ccxt/ccxt_exchange.py +++ b/catalyst/exchange/ccxt/ccxt_exchange.py @@ -18,7 +18,8 @@ from catalyst.exchange.exchange import Exchange from catalyst.exchange.exchange_bundle import ExchangeBundle from catalyst.exchange.exchange_errors import InvalidHistoryFrequencyError, \ ExchangeSymbolsNotFound, ExchangeRequestError, InvalidOrderStyle, \ - ExchangeNotFoundError, CreateOrderError, InvalidHistoryTimeframeError + ExchangeNotFoundError, CreateOrderError, InvalidHistoryTimeframeError, \ + UnsupportedHistoryFrequencyError from catalyst.exchange.exchange_execution import ExchangeLimitOrder from catalyst.exchange.utils.exchange_utils import mixin_market_params, \ from_ms_timestamp, get_epoch, get_exchange_folder, get_catalyst_symbol, \ @@ -378,6 +379,14 @@ class CCXT(Exchange): symbols = self.get_symbols(assets) timeframe = CCXT.get_timeframe(freq) + if timeframe not in self.api.timeframes: + freqs = [CCXT.get_frequency(t) for t in self.api.timeframes] + raise UnsupportedHistoryFrequencyError( + exchange=self.name, + freq=freq, + freqs=freqs, + ) + ms = None if start_dt is not None: delta = start_dt - get_epoch() diff --git a/catalyst/exchange/exchange_data_portal.py b/catalyst/exchange/exchange_data_portal.py index 6f57b7e7..4f73079e 100644 --- a/catalyst/exchange/exchange_data_portal.py +++ b/catalyst/exchange/exchange_data_portal.py @@ -291,6 +291,7 @@ class DataPortalExchangeBacktest(DataPortalExchangeBase): DataFrame """ + # TODO: verify that the exchange supports the timeframe bundle = self.exchange_bundles[exchange_name] # type: ExchangeBundle freq, candle_size, unit, adj_data_frequency = get_frequency( diff --git a/catalyst/exchange/exchange_errors.py b/catalyst/exchange/exchange_errors.py index 0e22868f..d5af87c4 100644 --- a/catalyst/exchange/exchange_errors.py +++ b/catalyst/exchange/exchange_errors.py @@ -100,6 +100,13 @@ class InvalidHistoryFrequencyError(ZiplineError): ).strip() +class UnsupportedHistoryFrequencyError(ZiplineError): + msg = ( + '{exchange} does not support candle frequency {freq}, please choose ' + 'from: {freqs}.' + ).strip() + + class InvalidHistoryTimeframeError(ZiplineError): msg = ( 'CCXT timeframe {timeframe} not supported by the exchange.'