Add explicit test and document behavior
This commit is contained in:
parent
bb1b283d95
commit
5767d652bf
@ -630,7 +630,8 @@ class Exchange:
|
|||||||
if required_candle_call_count > 5:
|
if required_candle_call_count > 5:
|
||||||
# Only allow 5 calls per pair to somewhat limit the impact
|
# Only allow 5 calls per pair to somewhat limit the impact
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
f"This strategy requires {startup_candles} candles to start, which is more than 5x "
|
f"This strategy requires {startup_candles} candles to start, "
|
||||||
|
"which is more than 5x "
|
||||||
f"the amount of candles {self.name} provides for {timeframe}.")
|
f"the amount of candles {self.name} provides for {timeframe}.")
|
||||||
elif required_candle_call_count > 1:
|
elif required_candle_call_count > 1:
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
|
@ -41,11 +41,13 @@ class Okx(Exchange):
|
|||||||
net_only = True
|
net_only = True
|
||||||
|
|
||||||
def ohlcv_candle_limit(
|
def ohlcv_candle_limit(
|
||||||
self, timeframe: str, candle_type: CandleType, since_ms: Optional[int] = None) -> int:
|
self, timeframe: str, candle_type: CandleType, since_ms: Optional[int] = None) -> int:
|
||||||
"""
|
"""
|
||||||
Exchange ohlcv candle limit
|
Exchange ohlcv candle limit
|
||||||
Uses ohlcv_candle_limit_per_timeframe if the exchange has different limits
|
OKX has the following behaviour:
|
||||||
per timeframe (e.g. bittrex), otherwise falls back to ohlcv_candle_limit
|
* 300 candles for uptodate data
|
||||||
|
* 100 candles for historic data
|
||||||
|
* 100 candles for additional candles (not futures or spot).
|
||||||
:param timeframe: Timeframe to check
|
:param timeframe: Timeframe to check
|
||||||
:param candle_type: Candle-type
|
:param candle_type: Candle-type
|
||||||
:param since_ms: Candle-type
|
:param since_ms: Candle-type
|
||||||
|
@ -1,12 +1,39 @@
|
|||||||
|
from datetime import datetime, timedelta, timezone
|
||||||
from unittest.mock import MagicMock, PropertyMock
|
from unittest.mock import MagicMock, PropertyMock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from freqtrade.enums import MarginMode, TradingMode
|
from freqtrade.enums import MarginMode, TradingMode
|
||||||
|
from freqtrade.enums.candletype import CandleType
|
||||||
|
from freqtrade.exchange.exchange import timeframe_to_minutes
|
||||||
from tests.conftest import get_patched_exchange
|
from tests.conftest import get_patched_exchange
|
||||||
from tests.exchange.test_exchange import ccxt_exceptionhandlers
|
from tests.exchange.test_exchange import ccxt_exceptionhandlers
|
||||||
|
|
||||||
|
|
||||||
|
def test_okx_ohlcv_candle_limit(default_conf, mocker):
|
||||||
|
exchange = get_patched_exchange(mocker, default_conf, id='okx')
|
||||||
|
timeframes = ('1m', '5m', '1h')
|
||||||
|
start_time = int(datetime(2021, 1, 1, tzinfo=timezone.utc).timestamp() * 1000)
|
||||||
|
|
||||||
|
for timeframe in timeframes:
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.SPOT) == 300
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.FUTURES) == 300
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.MARK) == 100
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.FUNDING_RATE) == 100
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.SPOT, start_time) == 100
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.FUTURES, start_time) == 100
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.MARK, start_time) == 100
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.FUNDING_RATE, start_time) == 100
|
||||||
|
one_call = int((datetime.now(timezone.utc) - timedelta(
|
||||||
|
minutes=290 * timeframe_to_minutes(timeframe))).timestamp() * 1000)
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.SPOT, one_call) == 300
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.FUTURES, one_call) == 300
|
||||||
|
one_call = int((datetime.now(timezone.utc) - timedelta(
|
||||||
|
minutes=320 * timeframe_to_minutes(timeframe))).timestamp() * 1000)
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.SPOT, one_call) == 100
|
||||||
|
assert exchange.ohlcv_candle_limit(timeframe, CandleType.FUTURES, one_call) == 100
|
||||||
|
|
||||||
|
|
||||||
def test_get_maintenance_ratio_and_amt_okx(
|
def test_get_maintenance_ratio_and_amt_okx(
|
||||||
default_conf,
|
default_conf,
|
||||||
mocker,
|
mocker,
|
||||||
|
Loading…
Reference in New Issue
Block a user