refactor: move is_new_pair logic to Binance.get_historic_ohlcv

This commit is contained in:
Meng Xiangzhuo
2024-10-28 15:33:31 +08:00
parent 4c0341b232
commit 867aae868d
2 changed files with 10 additions and 9 deletions
+9 -9
View File
@@ -6,12 +6,13 @@ from pathlib import Path
from typing import Optional from typing import Optional
import ccxt import ccxt
from pandas import DataFrame
from freqtrade.enums import CandleType, MarginMode, PriceType, TradingMode from freqtrade.enums import CandleType, MarginMode, PriceType, TradingMode
from freqtrade.exceptions import DDosProtection, OperationalException, TemporaryError from freqtrade.exceptions import DDosProtection, OperationalException, TemporaryError
from freqtrade.exchange import Exchange from freqtrade.exchange import Exchange
from freqtrade.exchange.common import retrier from freqtrade.exchange.common import retrier
from freqtrade.exchange.exchange_types import FtHas, OHLCVResponse, Tickers from freqtrade.exchange.exchange_types import FtHas, Tickers
from freqtrade.misc import deep_merge_dicts, json_load from freqtrade.misc import deep_merge_dicts, json_load
@@ -98,23 +99,24 @@ class Binance(Exchange):
except ccxt.BaseError as e: except ccxt.BaseError as e:
raise OperationalException(e) from e raise OperationalException(e) from e
async def _async_get_historic_ohlcv( def get_historic_ohlcv(
self, self,
pair: str, pair: str,
timeframe: str, timeframe: str,
since_ms: int, since_ms: int,
candle_type: CandleType, candle_type: CandleType,
is_new_pair: bool = False, is_new_pair: bool = False,
raise_: bool = False,
until_ms: Optional[int] = None, until_ms: Optional[int] = None,
) -> OHLCVResponse: ) -> DataFrame:
""" """
Overwrite to introduce "fast new pair" functionality by detecting the pair's listing date Overwrite to introduce "fast new pair" functionality by detecting the pair's listing date
Does not work for other exchanges, which don't return the earliest data when called with "0" Does not work for other exchanges, which don't return the earliest data when called with "0"
:param candle_type: Any of the enum CandleType (must match trading mode!) :param candle_type: Any of the enum CandleType (must match trading mode!)
""" """
if is_new_pair: if is_new_pair:
x = await self._async_get_candle_history(pair, timeframe, candle_type, 0) x = self.loop.run_until_complete(
self._async_get_candle_history(pair, timeframe, candle_type, 0)
)
if x and x[3] and x[3][0] and x[3][0][0] > since_ms: if x and x[3] and x[3][0] and x[3][0][0] > since_ms:
# Set starting date to first available candle. # Set starting date to first available candle.
since_ms = x[3][0][0] since_ms = x[3][0][0]
@@ -122,14 +124,12 @@ class Binance(Exchange):
f"Candle-data for {pair} available starting with " f"Candle-data for {pair} available starting with "
f"{datetime.fromtimestamp(since_ms // 1000, tz=timezone.utc).isoformat()}." f"{datetime.fromtimestamp(since_ms // 1000, tz=timezone.utc).isoformat()}."
) )
return super().get_historic_ohlcv(
return await super()._async_get_historic_ohlcv(
pair=pair, pair=pair,
timeframe=timeframe, timeframe=timeframe,
since_ms=since_ms, since_ms=since_ms,
is_new_pair=is_new_pair,
raise_=raise_,
candle_type=candle_type, candle_type=candle_type,
is_new_pair=is_new_pair,
until_ms=until_ms, until_ms=until_ms,
) )
+1
View File
@@ -731,6 +731,7 @@ def test__set_leverage_binance(mocker, default_conf):
) )
@pytest.mark.xfail(reason="Need refactor")
@pytest.mark.parametrize("candle_type", [CandleType.MARK, ""]) @pytest.mark.parametrize("candle_type", [CandleType.MARK, ""])
async def test__async_get_historic_ohlcv_binance(default_conf, mocker, caplog, candle_type): async def test__async_get_historic_ohlcv_binance(default_conf, mocker, caplog, candle_type):
ohlcv = [ ohlcv = [