Remove Zero duration Trades
after the recent backtesting fixes, this metric no longer makes sense, as it can't really be 0 any longer.
This commit is contained in:
parent
a4096318e0
commit
77293b1f1e
@ -302,7 +302,6 @@ A backtesting result will look like that:
|
|||||||
| Days win/draw/lose | 12 / 82 / 25 |
|
| Days win/draw/lose | 12 / 82 / 25 |
|
||||||
| Avg. Duration Winners | 4:23:00 |
|
| Avg. Duration Winners | 4:23:00 |
|
||||||
| Avg. Duration Loser | 6:55:00 |
|
| Avg. Duration Loser | 6:55:00 |
|
||||||
| Zero Duration Trades | 4.6% (20) |
|
|
||||||
| Rejected Buy signals | 3089 |
|
| Rejected Buy signals | 3089 |
|
||||||
| | |
|
| | |
|
||||||
| Min balance | 0.00945123 BTC |
|
| Min balance | 0.00945123 BTC |
|
||||||
@ -390,7 +389,6 @@ It contains some useful key metrics about performance of your strategy on backte
|
|||||||
| Days win/draw/lose | 12 / 82 / 25 |
|
| Days win/draw/lose | 12 / 82 / 25 |
|
||||||
| Avg. Duration Winners | 4:23:00 |
|
| Avg. Duration Winners | 4:23:00 |
|
||||||
| Avg. Duration Loser | 6:55:00 |
|
| Avg. Duration Loser | 6:55:00 |
|
||||||
| Zero Duration Trades | 4.6% (20) |
|
|
||||||
| Rejected Buy signals | 3089 |
|
| Rejected Buy signals | 3089 |
|
||||||
| | |
|
| | |
|
||||||
| Min balance | 0.00945123 BTC |
|
| Min balance | 0.00945123 BTC |
|
||||||
@ -420,7 +418,6 @@ It contains some useful key metrics about performance of your strategy on backte
|
|||||||
- `Best day` / `Worst day`: Best and worst day based on daily profit.
|
- `Best day` / `Worst day`: Best and worst day based on daily profit.
|
||||||
- `Days win/draw/lose`: Winning / Losing days (draws are usually days without closed trade).
|
- `Days win/draw/lose`: Winning / Losing days (draws are usually days without closed trade).
|
||||||
- `Avg. Duration Winners` / `Avg. Duration Loser`: Average durations for winning and losing trades.
|
- `Avg. Duration Winners` / `Avg. Duration Loser`: Average durations for winning and losing trades.
|
||||||
- `Zero Duration Trades`: A number of trades that completed within same candle as they opened and had `trailing_stop_loss` sell reason. A significant amount of such trades may indicate that strategy is exploiting trailing stoploss behavior in backtesting and produces unrealistic results.
|
|
||||||
- `Rejected Buy signals`: Buy signals that could not be acted upon due to max_open_trades being reached.
|
- `Rejected Buy signals`: Buy signals that could not be acted upon due to max_open_trades being reached.
|
||||||
- `Min balance` / `Max balance`: Lowest and Highest Wallet balance during the backtest period.
|
- `Min balance` / `Max balance`: Lowest and Highest Wallet balance during the backtest period.
|
||||||
- `Drawdown`: Maximum drawdown experienced. For example, the value of 50% means that from highest to subsequent lowest point, a 50% drop was experienced).
|
- `Drawdown`: Maximum drawdown experienced. For example, the value of 50% means that from highest to subsequent lowest point, a 50% drop was experienced).
|
||||||
|
@ -229,8 +229,6 @@ def generate_trading_stats(results: DataFrame) -> Dict[str, Any]:
|
|||||||
winning_trades = results.loc[results['profit_ratio'] > 0]
|
winning_trades = results.loc[results['profit_ratio'] > 0]
|
||||||
draw_trades = results.loc[results['profit_ratio'] == 0]
|
draw_trades = results.loc[results['profit_ratio'] == 0]
|
||||||
losing_trades = results.loc[results['profit_ratio'] < 0]
|
losing_trades = results.loc[results['profit_ratio'] < 0]
|
||||||
zero_duration_trades = len(results.loc[(results['trade_duration'] == 0) &
|
|
||||||
(results['sell_reason'] == 'trailing_stop_loss')])
|
|
||||||
|
|
||||||
holding_avg = (timedelta(minutes=round(results['trade_duration'].mean()))
|
holding_avg = (timedelta(minutes=round(results['trade_duration'].mean()))
|
||||||
if not results.empty else timedelta())
|
if not results.empty else timedelta())
|
||||||
@ -249,7 +247,6 @@ def generate_trading_stats(results: DataFrame) -> Dict[str, Any]:
|
|||||||
'winner_holding_avg_s': winner_holding_avg.total_seconds(),
|
'winner_holding_avg_s': winner_holding_avg.total_seconds(),
|
||||||
'loser_holding_avg': loser_holding_avg,
|
'loser_holding_avg': loser_holding_avg,
|
||||||
'loser_holding_avg_s': loser_holding_avg.total_seconds(),
|
'loser_holding_avg_s': loser_holding_avg.total_seconds(),
|
||||||
'zero_duration_trades': zero_duration_trades,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -542,14 +539,6 @@ def text_table_add_metrics(strat_results: Dict) -> str:
|
|||||||
# Newly added fields should be ignored if they are missing in strat_results. hyperopt-show
|
# Newly added fields should be ignored if they are missing in strat_results. hyperopt-show
|
||||||
# command stores these results and newer version of freqtrade must be able to handle old
|
# command stores these results and newer version of freqtrade must be able to handle old
|
||||||
# results with missing new fields.
|
# results with missing new fields.
|
||||||
zero_duration_trades = '--'
|
|
||||||
|
|
||||||
if 'zero_duration_trades' in strat_results:
|
|
||||||
zero_duration_trades_per = \
|
|
||||||
100.0 / strat_results['total_trades'] * strat_results['zero_duration_trades']
|
|
||||||
zero_duration_trades = f'{zero_duration_trades_per:.2f}% ' \
|
|
||||||
f'({strat_results["zero_duration_trades"]})'
|
|
||||||
|
|
||||||
metrics = [
|
metrics = [
|
||||||
('Backtesting from', strat_results['backtest_start']),
|
('Backtesting from', strat_results['backtest_start']),
|
||||||
('Backtesting to', strat_results['backtest_end']),
|
('Backtesting to', strat_results['backtest_end']),
|
||||||
@ -585,7 +574,6 @@ def text_table_add_metrics(strat_results: Dict) -> str:
|
|||||||
f"{strat_results['draw_days']} / {strat_results['losing_days']}"),
|
f"{strat_results['draw_days']} / {strat_results['losing_days']}"),
|
||||||
('Avg. Duration Winners', f"{strat_results['winner_holding_avg']}"),
|
('Avg. Duration Winners', f"{strat_results['winner_holding_avg']}"),
|
||||||
('Avg. Duration Loser', f"{strat_results['loser_holding_avg']}"),
|
('Avg. Duration Loser', f"{strat_results['loser_holding_avg']}"),
|
||||||
('Zero Duration Trades', zero_duration_trades),
|
|
||||||
('Rejected Buy signals', strat_results.get('rejected_signals', 'N/A')),
|
('Rejected Buy signals', strat_results.get('rejected_signals', 'N/A')),
|
||||||
('', ''), # Empty line to improve readability
|
('', ''), # Empty line to improve readability
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user