Merge pull request #3847 from freqtrade/edge_fix_nan
Implement division/0 checks for win and loss columns in edge
This commit is contained in:
commit
62859455f7
@ -310,8 +310,10 @@ class Edge:
|
|||||||
|
|
||||||
# Calculating number of losing trades, average win and average loss
|
# Calculating number of losing trades, average win and average loss
|
||||||
df['nb_loss_trades'] = df['nb_trades'] - df['nb_win_trades']
|
df['nb_loss_trades'] = df['nb_trades'] - df['nb_win_trades']
|
||||||
df['average_win'] = df['profit_sum'] / df['nb_win_trades']
|
df['average_win'] = np.where(df['nb_win_trades'] == 0, 0.0,
|
||||||
df['average_loss'] = df['loss_sum'] / df['nb_loss_trades']
|
df['profit_sum'] / df['nb_win_trades'])
|
||||||
|
df['average_loss'] = np.where(df['nb_loss_trades'] == 0, 0.0,
|
||||||
|
df['loss_sum'] / df['nb_loss_trades'])
|
||||||
|
|
||||||
# Win rate = number of profitable trades / number of trades
|
# Win rate = number of profitable trades / number of trades
|
||||||
df['winrate'] = df['nb_win_trades'] / df['nb_trades']
|
df['winrate'] = df['nb_win_trades'] / df['nb_trades']
|
||||||
|
@ -499,3 +499,61 @@ def test_process_expectancy_remove_pumps(mocker, edge_conf, fee,):
|
|||||||
assert final['TEST/BTC'].stoploss == -0.9
|
assert final['TEST/BTC'].stoploss == -0.9
|
||||||
assert final['TEST/BTC'].nb_trades == len(trades_df) - 1
|
assert final['TEST/BTC'].nb_trades == len(trades_df) - 1
|
||||||
assert round(final['TEST/BTC'].winrate, 10) == 0.0
|
assert round(final['TEST/BTC'].winrate, 10) == 0.0
|
||||||
|
|
||||||
|
|
||||||
|
def test_process_expectancy_only_wins(mocker, edge_conf, fee,):
|
||||||
|
edge_conf['edge']['min_trade_number'] = 2
|
||||||
|
freqtrade = get_patched_freqtradebot(mocker, edge_conf)
|
||||||
|
|
||||||
|
freqtrade.exchange.get_fee = fee
|
||||||
|
edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy)
|
||||||
|
|
||||||
|
trades = [
|
||||||
|
{'pair': 'TEST/BTC',
|
||||||
|
'stoploss': -0.9,
|
||||||
|
'profit_percent': '',
|
||||||
|
'profit_abs': '',
|
||||||
|
'open_date': np.datetime64('2018-10-03T00:05:00.000000000'),
|
||||||
|
'close_date': np.datetime64('2018-10-03T00:10:00.000000000'),
|
||||||
|
'open_index': 1,
|
||||||
|
'close_index': 1,
|
||||||
|
'trade_duration': '',
|
||||||
|
'open_rate': 15,
|
||||||
|
'close_rate': 17,
|
||||||
|
'exit_type': 'sell_signal'},
|
||||||
|
{'pair': 'TEST/BTC',
|
||||||
|
'stoploss': -0.9,
|
||||||
|
'profit_percent': '',
|
||||||
|
'profit_abs': '',
|
||||||
|
'open_date': np.datetime64('2018-10-03T00:20:00.000000000'),
|
||||||
|
'close_date': np.datetime64('2018-10-03T00:25:00.000000000'),
|
||||||
|
'open_index': 4,
|
||||||
|
'close_index': 4,
|
||||||
|
'trade_duration': '',
|
||||||
|
'open_rate': 10,
|
||||||
|
'close_rate': 20,
|
||||||
|
'exit_type': 'sell_signal'},
|
||||||
|
{'pair': 'TEST/BTC',
|
||||||
|
'stoploss': -0.9,
|
||||||
|
'profit_percent': '',
|
||||||
|
'profit_abs': '',
|
||||||
|
'open_date': np.datetime64('2018-10-03T00:30:00.000000000'),
|
||||||
|
'close_date': np.datetime64('2018-10-03T00:40:00.000000000'),
|
||||||
|
'open_index': 6,
|
||||||
|
'close_index': 7,
|
||||||
|
'trade_duration': '',
|
||||||
|
'open_rate': 26,
|
||||||
|
'close_rate': 134,
|
||||||
|
'exit_type': 'sell_signal'}
|
||||||
|
]
|
||||||
|
|
||||||
|
trades_df = DataFrame(trades)
|
||||||
|
trades_df = edge._fill_calculable_fields(trades_df)
|
||||||
|
final = edge._process_expectancy(trades_df)
|
||||||
|
|
||||||
|
assert 'TEST/BTC' in final
|
||||||
|
assert final['TEST/BTC'].stoploss == -0.9
|
||||||
|
assert final['TEST/BTC'].nb_trades == len(trades_df)
|
||||||
|
assert round(final['TEST/BTC'].winrate, 10) == 1.0
|
||||||
|
assert round(final['TEST/BTC'].risk_reward_ratio, 10) == float('inf')
|
||||||
|
assert round(final['TEST/BTC'].expectancy, 10) == float('inf')
|
||||||
|
Loading…
Reference in New Issue
Block a user