Use explicit merge without depending on library detail. Add no trades case.
This commit is contained in:
parent
e1d42ba78c
commit
03c5714399
@ -44,12 +44,17 @@ class PerformanceFilter(IPairList):
|
|||||||
:return: new whitelist
|
:return: new whitelist
|
||||||
"""
|
"""
|
||||||
# Get the trading performance for pairs from database
|
# Get the trading performance for pairs from database
|
||||||
perf = pd.DataFrame(Trade.get_overall_performance())
|
performance = pd.DataFrame(Trade.get_overall_performance())
|
||||||
|
|
||||||
|
# Skip performance-based sorting if no performance data is available
|
||||||
|
if len(performance) == 0:
|
||||||
|
return pairlist
|
||||||
|
|
||||||
# get pairlist from performance dataframe values
|
# get pairlist from performance dataframe values
|
||||||
list_df = pd.DataFrame({'pair': pairlist})
|
list_df = pd.DataFrame({'pair': pairlist})
|
||||||
# set initial value for pairs with no trades to 0
|
# set initial value for pairs with no trades to 0
|
||||||
# and sort the list using performance and count
|
# and sort the list using performance and count
|
||||||
sorted_df = list_df.join(perf.set_index('pair'), on='pair')\
|
sorted_df = list_df.merge(performance, on='pair', how='left')\
|
||||||
.fillna(0).sort_values(by=['profit', 'count'], ascending=False)
|
.fillna(0).sort_values(by=['profit', 'count'], ascending=False)
|
||||||
pairlist = sorted_df['pair'].tolist()
|
pairlist = sorted_df['pair'].tolist()
|
||||||
|
|
||||||
|
@ -383,8 +383,7 @@ def test_VolumePairList_whitelist_gen(mocker, whitelist_conf, shitcoinmarkets, t
|
|||||||
|
|
||||||
# Provide for PerformanceFilter's dependency
|
# Provide for PerformanceFilter's dependency
|
||||||
mocker.patch.multiple('freqtrade.persistence.Trade',
|
mocker.patch.multiple('freqtrade.persistence.Trade',
|
||||||
get_overall_performance=MagicMock(
|
get_overall_performance=MagicMock(return_value=[])
|
||||||
return_value=[{'pair': 'ETH/BTC', 'profit': 5, 'count': 3}]),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set whitelist_result to None if pairlist is invalid and should produce exception
|
# Set whitelist_result to None if pairlist is invalid and should produce exception
|
||||||
@ -729,7 +728,10 @@ def test_pairlistmanager_no_pairlist(mocker, whitelist_conf):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("pairlists,pair_allowlist,overall_performance,allowlist_result", [
|
@pytest.mark.parametrize("pairlists,pair_allowlist,overall_performance,allowlist_result", [
|
||||||
# Happy path, descending order, all values filled
|
# No trades yet
|
||||||
|
([{"method": "StaticPairList"}, {"method": "PerformanceFilter"}],
|
||||||
|
['ETH/BTC', 'TKN/BTC', 'LTC/BTC'], [], ['ETH/BTC', 'TKN/BTC', 'LTC/BTC']),
|
||||||
|
# Happy path: Descending order, all values filled
|
||||||
([{"method": "StaticPairList"}, {"method": "PerformanceFilter"}],
|
([{"method": "StaticPairList"}, {"method": "PerformanceFilter"}],
|
||||||
['ETH/BTC', 'TKN/BTC'],
|
['ETH/BTC', 'TKN/BTC'],
|
||||||
[{'pair': 'TKN/BTC', 'profit': 5, 'count': 3}, {'pair': 'ETH/BTC', 'profit': 4, 'count': 2}],
|
[{'pair': 'TKN/BTC', 'profit': 5, 'count': 3}, {'pair': 'ETH/BTC', 'profit': 4, 'count': 2}],
|
||||||
|
Loading…
Reference in New Issue
Block a user