Merge pull request #284 from jblestang/fix_issue_283
fixing the sorting issue in MarketSummary when using --dynamic-whitelist (issue #283)
This commit is contained in:
		| @@ -27,23 +27,27 @@ _CONF = {} | ||||
| def refresh_whitelist(whitelist: List[str]) -> List[str]: | ||||
|     """ | ||||
|     Check wallet health and remove pair from whitelist if necessary | ||||
|     :param whitelist: the pair the user might want to trade | ||||
|     :param whitelist: the sorted list (based on BaseVolume) of pairs the user might want to trade | ||||
|     :return: the list of pairs the user wants to trade without the one unavailable or black_listed | ||||
|     """ | ||||
|     sanitized_whitelist = [] | ||||
|     sanitized_whitelist = whitelist | ||||
|     health = exchange.get_wallet_health() | ||||
|     known_pairs = set() | ||||
|     for status in health: | ||||
|         pair = '{}_{}'.format(_CONF['stake_currency'], status['Currency']) | ||||
|         known_pairs.add(pair) | ||||
|         if pair not in whitelist or pair in _CONF['exchange'].get('pair_blacklist', []): | ||||
|             continue | ||||
|         if status['IsActive']: | ||||
|             sanitized_whitelist.append(pair) | ||||
|         else: | ||||
|         if not status['IsActive']: | ||||
|             sanitized_whitelist.remove(pair) | ||||
|             logger.info( | ||||
|                 'Ignoring %s from whitelist (reason: %s).', | ||||
|                 pair, status.get('Notice') or 'wallet is not active' | ||||
|             ) | ||||
|     return sanitized_whitelist | ||||
|  | ||||
|     # We need to remove pairs that are unknown | ||||
|     final_list = [x for x in sanitized_whitelist if x in known_pairs] | ||||
|     return final_list | ||||
|  | ||||
|  | ||||
| def _process(nb_assets: Optional[int] = 0) -> bool: | ||||
|   | ||||
| @@ -16,24 +16,43 @@ def whitelist_conf(): | ||||
|                 "BTC_SWT", | ||||
|                 "BTC_BCC" | ||||
|             ], | ||||
|             "pair_blacklist": [ | ||||
|                 "BTC_BLK" | ||||
|             ], | ||||
|         }, | ||||
|     } | ||||
|  | ||||
|  | ||||
| def get_health(): | ||||
|     return [{'Currency': 'ETH', | ||||
|              'IsActive': True | ||||
|              'IsActive': True, | ||||
|              'BaseVolume': 42 | ||||
|              }, | ||||
|             {'Currency': 'TKN', | ||||
|              'IsActive': True | ||||
|              }] | ||||
|              'IsActive': True, | ||||
|              'BaseVolume': 1664 | ||||
|              }, | ||||
|             {'Currency': 'BLK', | ||||
|              'IsActive': True, | ||||
|              'BaseVolume': 4096 | ||||
|              } | ||||
|             ] | ||||
|  | ||||
|  | ||||
| def get_health_empty(): | ||||
|     return [] | ||||
|  | ||||
| # below three test could be merged into a single | ||||
| # test that ran randomlly generated health lists | ||||
|  | ||||
| def test_refresh_market_pair_not_in_whitelist(mocker): | ||||
|     conf = whitelist_conf() | ||||
|     mocker.patch.dict('freqtrade.main._CONF', conf) | ||||
|     mocker.patch.multiple('freqtrade.main.exchange', | ||||
|                           get_wallet_health=get_health) | ||||
|     refreshedwhitelist = refresh_whitelist(conf['exchange']['pair_whitelist'] + ['BTC_XXX']) | ||||
|     # List ordered by BaseVolume | ||||
|     whitelist = ['BTC_ETH', 'BTC_TKN'] | ||||
|     # Ensure all except those in whitelist are removed | ||||
|     assert whitelist == refreshedwhitelist | ||||
|  | ||||
|  | ||||
| def test_refresh_whitelist(mocker): | ||||
| @@ -42,9 +61,10 @@ def test_refresh_whitelist(mocker): | ||||
|     mocker.patch.multiple('freqtrade.main.exchange', | ||||
|                           get_wallet_health=get_health) | ||||
|     refreshedwhitelist = refresh_whitelist(conf['exchange']['pair_whitelist']) | ||||
|     # List ordered by BaseVolume | ||||
|     whitelist = ['BTC_ETH', 'BTC_TKN'] | ||||
|     # Ensure all except those in whitelist are removed | ||||
|     assert set(whitelist) == set(refreshedwhitelist) | ||||
|     assert whitelist == refreshedwhitelist | ||||
|  | ||||
|  | ||||
| def test_refresh_whitelist_dynamic(mocker): | ||||
| @@ -53,9 +73,9 @@ def test_refresh_whitelist_dynamic(mocker): | ||||
|     mocker.patch.multiple('freqtrade.main.exchange', | ||||
|                           get_wallet_health=get_health) | ||||
|     # argument: use the whitelist dynamically by exchange-volume | ||||
|     whitelist = ['BTC_ETH', 'BTC_TKN'] | ||||
|     whitelist = ['BTC_TKN', 'BTC_ETH'] | ||||
|     refreshedwhitelist = refresh_whitelist(whitelist) | ||||
|     assert set(whitelist) == set(refreshedwhitelist) | ||||
|     assert whitelist == refreshedwhitelist | ||||
|  | ||||
|  | ||||
| def test_refresh_whitelist_dynamic_empty(mocker): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user