refactor: move is_new_pair logic to Binance.get_historic_ohlcv
This commit is contained in:
@@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
Reference in New Issue
Block a user