diff --git a/freqtrade/rpc/api_server/api_ws.py b/freqtrade/rpc/api_server/api_ws.py index 118d70d78..785773b39 100644 --- a/freqtrade/rpc/api_server/api_ws.py +++ b/freqtrade/rpc/api_server/api_ws.py @@ -84,11 +84,8 @@ async def _process_consumer_request( # Limit the amount of candles per dataframe to 'limit' or 1500 limit = max(data.get('limit', 1500), 1500) - # They requested the full historical analyzed dataframes - analyzed_df = rpc._ws_request_analyzed_df(limit) - - # For every dataframe, send as a separate message - for _, message in analyzed_df.items(): + # For every pair in the generator, send a separate message + for message in rpc._ws_request_analyzed_df(limit): response = WSAnalyzedDFMessage(data=message) await channel_manager.send_direct(channel, response.dict(exclude_none=True)) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 143b11911..55bb5a34b 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -5,7 +5,7 @@ import logging from abc import abstractmethod from datetime import date, datetime, timedelta, timezone from math import isnan -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Dict, Generator, List, Optional, Tuple, Union import arrow import psutil @@ -1063,23 +1063,20 @@ class RPC: self, pairlist: List[str], limit: Optional[int] - ) -> Dict[str, Any]: + ) -> Generator[Dict[str, Any], None, None]: """ Get the analysed dataframes of each pair in the pairlist """ timeframe = self._freqtrade.config['timeframe'] candle_type = self._freqtrade.config.get('candle_type_def', CandleType.SPOT) - _data = {} for pair in pairlist: dataframe, last_analyzed = self.__rpc_analysed_dataframe_raw(pair, timeframe, limit) - _data[pair] = { + yield { "key": (pair, timeframe, candle_type), "df": dataframe, "la": last_analyzed } - return _data - def _ws_request_analyzed_df(self, limit: Optional[int]): """ Historical Analyzed Dataframes for WebSocket """ whitelist = self._freqtrade.active_pair_whitelist