Merge pull request #3616 from freqtrade/fix/pairfilter
Fix pairfilter crash
This commit is contained in:
		| @@ -56,7 +56,7 @@ class PriceFilter(IPairList): | ||||
|         :param ticker: ticker dict as returned from ccxt.load_markets() | ||||
|         :return: True if the pair can stay, false if it should be removed | ||||
|         """ | ||||
|         if ticker['last'] is None: | ||||
|         if ticker['last'] is None or ticker['last'] == 0: | ||||
|             self.log_on_refresh(logger.info, | ||||
|                                 f"Removed {ticker['symbol']} from whitelist, because " | ||||
|                                 "ticker['last'] is empty (Usually no trade in the last 24h).") | ||||
|   | ||||
| @@ -661,7 +661,8 @@ def shitcoinmarkets(markets): | ||||
|     Fixture with shitcoin markets - used to test filters in pairlists | ||||
|     """ | ||||
|     shitmarkets = deepcopy(markets) | ||||
|     shitmarkets.update({'HOT/BTC': { | ||||
|     shitmarkets.update({ | ||||
|         'HOT/BTC': { | ||||
|             'id': 'HOTBTC', | ||||
|             'symbol': 'HOT/BTC', | ||||
|             'base': 'HOT', | ||||
| @@ -767,6 +768,31 @@ def shitcoinmarkets(markets): | ||||
|             "future": False, | ||||
|             "active": True | ||||
|         }, | ||||
|         'ADADOUBLE/USDT': { | ||||
|             "percentage": True, | ||||
|             "tierBased": False, | ||||
|             "taker": 0.001, | ||||
|             "maker": 0.001, | ||||
|             "precision": { | ||||
|                 "base": 8, | ||||
|                 "quote": 8, | ||||
|                 "amount": 2, | ||||
|                 "price": 4 | ||||
|             }, | ||||
|             "limits": { | ||||
|             }, | ||||
|             "id": "ADADOUBLEUSDT", | ||||
|             "symbol": "ADADOUBLE/USDT", | ||||
|             "base": "ADADOUBLE", | ||||
|             "quote": "USDT", | ||||
|             "baseId": "ADADOUBLE", | ||||
|             "quoteId": "USDT", | ||||
|             "info": {}, | ||||
|             "type": "spot", | ||||
|             "spot": True, | ||||
|             "future": False, | ||||
|             "active": True | ||||
|         }, | ||||
|         }) | ||||
|     return shitmarkets | ||||
|  | ||||
| @@ -1388,6 +1414,28 @@ def tickers(): | ||||
|             "quoteVolume": 0.0, | ||||
|             "info": {} | ||||
|         }, | ||||
|         "ADADOUBLE/USDT": { | ||||
|             "symbol": "ADADOUBLE/USDT", | ||||
|             "timestamp": 1580469388244, | ||||
|             "datetime": "2020-01-31T11:16:28.244Z", | ||||
|             "high": None, | ||||
|             "low": None, | ||||
|             "bid": 0.7305, | ||||
|             "bidVolume": None, | ||||
|             "ask": 0.7342, | ||||
|             "askVolume": None, | ||||
|             "vwap": None, | ||||
|             "open": None, | ||||
|             "close": None, | ||||
|             "last": 0, | ||||
|             "previousClose": None, | ||||
|             "change": None, | ||||
|             "percentage": 2.628, | ||||
|             "average": None, | ||||
|             "baseVolume": 0.0, | ||||
|             "quoteVolume": 0.0, | ||||
|             "info": {} | ||||
|         }, | ||||
|     }) | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -235,7 +235,7 @@ def test_VolumePairList_refresh_empty(mocker, markets_empty, whitelist_conf): | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "bidVolume"}], | ||||
|      "BTC",  ['HOT/BTC', 'FUEL/BTC', 'XRP/BTC', 'LTC/BTC', 'TKN/BTC']), | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "quoteVolume"}], | ||||
|      "USDT", ['ETH/USDT', 'NANO/USDT', 'ADAHALF/USDT']), | ||||
|      "USDT", ['ETH/USDT', 'NANO/USDT', 'ADAHALF/USDT', 'ADADOUBLE/USDT']), | ||||
|     # No pair for ETH, VolumePairList | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "quoteVolume"}], | ||||
|      "ETH", []), | ||||
| @@ -303,11 +303,11 @@ def test_VolumePairList_refresh_empty(mocker, markets_empty, whitelist_conf): | ||||
|     # ShuffleFilter | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "quoteVolume"}, | ||||
|       {"method": "ShuffleFilter", "seed": 77}], | ||||
|      "USDT", ['ETH/USDT', 'ADAHALF/USDT', 'NANO/USDT']), | ||||
|      "USDT", ['ADADOUBLE/USDT', 'ETH/USDT', 'NANO/USDT', 'ADAHALF/USDT']), | ||||
|     # ShuffleFilter, other seed | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "quoteVolume"}, | ||||
|       {"method": "ShuffleFilter", "seed": 42}], | ||||
|      "USDT", ['NANO/USDT', 'ETH/USDT', 'ADAHALF/USDT']), | ||||
|      "USDT", ['ADAHALF/USDT', 'NANO/USDT', 'ADADOUBLE/USDT', 'ETH/USDT']), | ||||
|     # ShuffleFilter, no seed | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "quoteVolume"}, | ||||
|       {"method": "ShuffleFilter"}], | ||||
| @@ -347,6 +347,9 @@ def test_VolumePairList_refresh_empty(mocker, markets_empty, whitelist_conf): | ||||
|     ([{"method": "VolumePairList", "number_assets": 5, "sort_key": "bidVolume"}, | ||||
|       {"method": "StaticPairList"}], | ||||
|      "BTC", 'static_in_the_middle'), | ||||
|     ([{"method": "VolumePairList", "number_assets": 20, "sort_key": "quoteVolume"}, | ||||
|       {"method": "PriceFilter", "low_price_ratio": 0.02}], | ||||
|         "USDT", ['ETH/USDT', 'NANO/USDT']), | ||||
| ]) | ||||
| def test_VolumePairList_whitelist_gen(mocker, whitelist_conf, shitcoinmarkets, tickers, | ||||
|                                       ohlcv_history_list, pairlists, base_currency, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user