Improve and parametrize pairlist tests

This commit is contained in:
Matthias
2024-02-24 14:56:42 +01:00
parent e82d9e2f55
commit 67152ad48a
3 changed files with 28 additions and 9 deletions
@@ -3,7 +3,6 @@ Volatility pairlist filter
""" """
import logging import logging
import sys import sys
from copy import deepcopy
from datetime import timedelta from datetime import timedelta
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
@@ -44,6 +44,7 @@ class RangeStabilityFilter(IPairList):
if self._sort_direction not in [None, 'asc', 'desc']: if self._sort_direction not in [None, 'asc', 'desc']:
raise OperationalException("RangeStabilityFilter requires sort_direction to be " raise OperationalException("RangeStabilityFilter requires sort_direction to be "
"either None (undefined), 'asc' or 'desc'") "either None (undefined), 'asc' or 'desc'")
@property @property
def needstickers(self) -> bool: def needstickers(self) -> bool:
""" """
+27 -8
View File
@@ -774,12 +774,34 @@ def test_VolatilityFilter_error(mocker, whitelist_conf) -> None:
PairListManager(exchange_mock, whitelist_conf, MagicMock()) PairListManager(exchange_mock, whitelist_conf, MagicMock())
@pytest.mark.parametrize('sort_direction', ['asc', 'desc']) @pytest.mark.parametrize('pairlist,expected_pairlist', [
def test_VolatilityFilter_sort( ({"method": "VolatilityFilter", "sort_direction": "asc"},
mocker, whitelist_conf, tickers, time_machine, sort_direction) -> None: ['XRP/BTC', 'ETH/BTC', 'LTC/BTC', 'TKN/BTC']),
({"method": "VolatilityFilter", "sort_direction": "desc"},
['TKN/BTC', 'LTC/BTC', 'ETH/BTC', 'XRP/BTC']),
({"method": "VolatilityFilter", "sort_direction": "desc", 'min_volatility': 0.4},
['TKN/BTC', 'LTC/BTC', 'ETH/BTC']),
({"method": "VolatilityFilter", "sort_direction": "asc", 'min_volatility': 0.4},
['ETH/BTC', 'LTC/BTC', 'TKN/BTC']),
({"method": "VolatilityFilter", "sort_direction": "desc", 'max_volatility': 0.5},
['LTC/BTC', 'ETH/BTC', 'XRP/BTC']),
({"method": "VolatilityFilter", "sort_direction": "asc", 'max_volatility': 0.5},
['XRP/BTC', 'ETH/BTC', 'LTC/BTC']),
({"method": "RangeStabilityFilter", "sort_direction": "asc"},
['ETH/BTC', 'XRP/BTC', 'LTC/BTC', 'TKN/BTC']),
({"method": "RangeStabilityFilter", "sort_direction": "desc"},
['TKN/BTC', 'LTC/BTC', 'XRP/BTC', 'ETH/BTC']),
({"method": "RangeStabilityFilter", "sort_direction": "asc", 'min_rate_of_change': 0.4},
['XRP/BTC', 'LTC/BTC', 'TKN/BTC']),
({"method": "RangeStabilityFilter", "sort_direction": "desc", 'min_rate_of_change': 0.4},
['TKN/BTC', 'LTC/BTC', 'XRP/BTC']),
])
def test_VolatilityFilter_RangeStabilityFilter_sort(
mocker, whitelist_conf, tickers, time_machine, pairlist, expected_pairlist) -> None:
whitelist_conf['pairlists'] = [ whitelist_conf['pairlists'] = [
{'method': 'VolumePairList', 'number_assets': 10}, {'method': 'VolumePairList', 'number_assets': 10},
{"method": "VolatilityFilter", "sort_direction": sort_direction}] pairlist
]
df1 = generate_test_data('1d', 10, '2022-01-05 00:00:00+00:00', random_seed=42) df1 = generate_test_data('1d', 10, '2022-01-05 00:00:00+00:00', random_seed=42)
df2 = generate_test_data('1d', 10, '2022-01-05 00:00:00+00:00', random_seed=2) df2 = generate_test_data('1d', 10, '2022-01-05 00:00:00+00:00', random_seed=2)
@@ -817,10 +839,7 @@ def test_VolatilityFilter_sort(
plm.refresh_pairlist() plm.refresh_pairlist()
assert ohlcv_mock.call_count == 1 assert ohlcv_mock.call_count == 1
assert exchange.ohlcv_candle_limit.call_count == 2 assert exchange.ohlcv_candle_limit.call_count == 2
assert plm.whitelist == ( assert plm.whitelist == expected_pairlist
['XRP/BTC', 'ETH/BTC', 'LTC/BTC', 'TKN/BTC'] if sort_direction == 'asc'
else ['TKN/BTC', 'LTC/BTC', 'ETH/BTC', 'XRP/BTC']
)
plm.refresh_pairlist() plm.refresh_pairlist()
assert exchange.ohlcv_candle_limit.call_count == 2 assert exchange.ohlcv_candle_limit.call_count == 2