diff --git a/catalyst/data/loader.py b/catalyst/data/loader.py index 53409d23..ff3f34a8 100644 --- a/catalyst/data/loader.py +++ b/catalyst/data/loader.py @@ -149,13 +149,14 @@ def load_crypto_market_data(trading_day=None, trading_days=None, # exchange.get_history_window() already ensures that we have the right data # for the right dates - br = exchange.get_history_window( + br = exchange.get_history_window_with_bundle( assets=[benchmark_asset], end_dt=last_date, bar_count=pd.Timedelta(last_date - start_dt).days, frequency='1d', field='close', - data_frequency='daily') + data_frequency='daily', + force_auto_ingest=True) br.columns = ['close'] br = br.pct_change(1).iloc[1:] br.loc[start_dt] = 0 diff --git a/catalyst/examples/mean_reversion_simple.py b/catalyst/examples/mean_reversion_simple.py index d5efbea8..34d9c60c 100644 --- a/catalyst/examples/mean_reversion_simple.py +++ b/catalyst/examples/mean_reversion_simple.py @@ -27,7 +27,7 @@ def initialize(context): # parameters or values you're going to use. # In our example, we're looking at Ether in USD Tether. - context.neo_usd = symbol('neo_usd') + context.neo_usd = symbol('neo_btc') context.base_price = None context.current_day = None @@ -57,7 +57,7 @@ def handle_data(context, data): context.neo_usd, fields='close', bar_count=50, - frequency='15T' + frequency='30T' ) # Ta-lib calculates various technical indicator based on price and @@ -215,7 +215,7 @@ def analyze(context=None, perf=None): if __name__ == '__main__': # The execution mode: backtest or live - MODE = 'backtest' + MODE = 'live' if MODE == 'backtest': # catalyst run -f catalyst/examples/mean_reversion_simple.py -x poloniex -s 2017-10-1 -e 2017-11-10 -c usdt -n mean-reversion --data-frequency minute --capital-base 10000 @@ -237,9 +237,9 @@ if __name__ == '__main__': initialize=initialize, handle_data=handle_data, analyze=analyze, - exchange_name='bitfinex', + exchange_name='bittrex', live=True, algo_namespace=NAMESPACE, - base_currency='usd', - live_graph=True + base_currency='btc', + live_graph=False ) diff --git a/catalyst/exchange/exchange.py b/catalyst/exchange/exchange.py index f10bbaf0..bd9cca9d 100644 --- a/catalyst/exchange/exchange.py +++ b/catalyst/exchange/exchange.py @@ -468,15 +468,14 @@ class Exchange: return series - @deprecated - def get_history_window_direct(self, - assets, - end_dt, - bar_count, - frequency, - field, - data_frequency=None, - ffill=True): + def get_history_window(self, + assets, + end_dt, + bar_count, + frequency, + field, + data_frequency=None, + ffill=True): """ Public API method that returns a dataframe containing the requested @@ -514,35 +513,46 @@ class Exchange: A dataframe containing the requested data. """ - start_dt = get_start_dt(end_dt, bar_count, data_frequency) + freq, candle_size, unit, data_frequency = get_frequency( + frequency, data_frequency + ) + adj_bar_count = candle_size * bar_count + start_dt = get_start_dt(end_dt, adj_bar_count, data_frequency) # The get_history method supports multiple asset candles = self.get_candles( - data_frequency=frequency, + freq=freq, assets=assets, bar_count=bar_count, start_dt=start_dt, end_dt=end_dt ) - candle_series = self.get_series_from_candles( - candles=candles, - start_dt=start_dt, - end_dt=end_dt, - data_frequency=frequency, - field=field, - ) - df = pd.DataFrame(candle_series) + series = dict() + for asset in candles: + asset_series = self.get_series_from_candles( + candles=candles[asset], + start_dt=start_dt, + end_dt=end_dt, + data_frequency=frequency, + field=field, + ) + series[asset] = asset_series + + df = pd.DataFrame(series) + df.dropna(inplace=True) + return df - def get_history_window(self, - assets, - end_dt, - bar_count, - frequency, - field, - data_frequency=None, - ffill=True): + def get_history_window_with_bundle(self, + assets, + end_dt, + bar_count, + frequency, + field, + data_frequency=None, + ffill=True, + force_auto_ingest=False): """ Public API method that returns a dataframe containing the requested @@ -590,7 +600,8 @@ class Exchange: end_dt=end_dt, bar_count=adj_bar_count, field=field, - data_frequency=data_frequency + data_frequency=data_frequency, + force_auto_ingest=force_auto_ingest ) except (PricingDataNotLoadedError, NoDataAvailableOnExchange): series = dict() diff --git a/catalyst/exchange/exchange_bundle.py b/catalyst/exchange/exchange_bundle.py index d4ffffa0..23fa1737 100644 --- a/catalyst/exchange/exchange_bundle.py +++ b/catalyst/exchange/exchange_bundle.py @@ -684,7 +684,8 @@ class ExchangeBundle: field, data_frequency, algo_end_dt=None, - trailing_bar_count=None + trailing_bar_count=None, + force_auto_ingest=False ): """ Retrieve price data history, ingest missing data. @@ -703,7 +704,7 @@ class ExchangeBundle: Series """ - if AUTO_INGEST: + if AUTO_INGEST or force_auto_ingest: try: series = self.get_history_window_series( assets=assets, @@ -711,7 +712,7 @@ class ExchangeBundle: bar_count=bar_count, field=field, data_frequency=data_frequency, - trailing_bar_count=trailing_bar_count + trailing_bar_count=trailing_bar_count, ) return pd.DataFrame(series) @@ -740,7 +741,7 @@ class ExchangeBundle: field=field, data_frequency=data_frequency, reset_reader=True, - trailing_bar_count=trailing_bar_count + trailing_bar_count=trailing_bar_count, ) return series @@ -751,7 +752,7 @@ class ExchangeBundle: bar_count=bar_count, field=field, data_frequency=data_frequency, - trailing_bar_count=trailing_bar_count + trailing_bar_count=trailing_bar_count, ) return pd.DataFrame(series) diff --git a/catalyst/exchange/exchange_utils.py b/catalyst/exchange/exchange_utils.py index 43144a0d..d4119491 100644 --- a/catalyst/exchange/exchange_utils.py +++ b/catalyst/exchange/exchange_utils.py @@ -487,7 +487,6 @@ def resample_history_df(df, freq, field): DataFrame """ - print(df.tail(30)) if field == 'open': agg = 'first' elif field == 'high':