From 30a6e684a66956c5e715076244d9d15daab223a0 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 11 Jul 2018 07:18:52 +0200 Subject: [PATCH] update with new comments and new data for tc5 --- .../tests/optimize/test_backtest_detail.py | 68 +++++++++++++------ 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/freqtrade/tests/optimize/test_backtest_detail.py b/freqtrade/tests/optimize/test_backtest_detail.py index 5023f4b24..f8fe2cd16 100644 --- a/freqtrade/tests/optimize/test_backtest_detail.py +++ b/freqtrade/tests/optimize/test_backtest_detail.py @@ -21,7 +21,8 @@ class BTContainer(NamedTuple): roi: float trades: int profit_perc: float - sl: float + sl: bool + remains: bool columns = ['date', 'open', 'high', 'low', 'close', 'volume', 'buy', 'sell'] @@ -39,9 +40,9 @@ data_profit = DataFrame([ ], columns=columns) tc_profit1 = BTContainer(data=data_profit, stop_loss=-0.01, roi=1, trades=1, - profit_perc=0.10557, sl=False) # should be stoploss - drops 8% + profit_perc=0.10557, sl=False, remains=False) # should be stoploss - drops 8% tc_profit2 = BTContainer(data=data_profit, stop_loss=-0.10, roi=1, - trades=1, profit_perc=0.10557, sl=True) + trades=1, profit_perc=0.10557, sl=True, remains=False) tc_loss0 = BTContainer(data=DataFrame([ @@ -56,31 +57,37 @@ tc_loss0 = BTContainer(data=DataFrame([ [getdate('2018-07-08 22:00:00').datetime, 0.001000, 0.001011, 0.00098618, 0.00091618, 12345, 0, 0] ], columns=columns), - stop_loss=-0.05, roi=1, trades=1, profit_perc=-0.08839, sl=True) + stop_loss=-0.05, roi=1, trades=1, profit_perc=-0.08839, sl=True, remains=False) # Test 1 Minus 8% Close # Candle Data for test 1 – close at -8% (9200) # Test with Stop-loss at 1% +# TC1: Stop-Loss Triggered 1% loss tc1 = BTContainer(data=DataFrame([ [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], - [getdate('2018-06-10 09:00:00').datetime, 9975, 10025, 9925, 9950, 12345, 0, 0], + [getdate('2018-06-10 09:00:00').datetime, 9975, 10025, 9200, 9200, 12345, 0, 0], [getdate('2018-06-10 10:00:00').datetime, 9950, 10000, 9960, 9955, 12345, 0, 0], [getdate('2018-06-10 11:00:00').datetime, 9955, 9975, 9955, 9990, 12345, 0, 0], - [getdate('2018-06-10 12:00:00').datetime, 9990, 9990, 9200, 9200, 12345, 0, 0] + [getdate('2018-06-10 12:00:00').datetime, 9990, 9990, 9990, 9900, 12345, 0, 0] ], columns=columns), - stop_loss=-0.01, roi=1, trades=1, profit_perc=-0.07999, sl=True) + # stop_loss=-0.01, roi=1, trades=1, profit_perc=-0.01, sl=True, remains=False) # should be + stop_loss=-0.01, roi=1, trades=1, profit_perc=0.071, sl=False, remains=True) # + # Test 2 Minus 4% Low, minus 1% close # Candle Data for test 2 # Test with Stop-Loss at 3% +# TC2: Stop-Loss Triggered 3% Loss tc2 = BTContainer(data=DataFrame([ [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], [getdate('2018-06-10 09:00:00').datetime, 9975, 10025, 9925, 9950, 12345, 0, 0], [getdate('2018-06-10 10:00:00').datetime, 9950, 10000, 9600, 9925, 12345, 0, 0], [getdate('2018-06-10 11:00:00').datetime, 9925, 9975, 9875, 9900, 12345, 0, 0], [getdate('2018-06-10 12:00:00').datetime, 9900, 9950, 9850, 9900, 12345, 0, 0] -], columns=columns), stop_loss=-0.03, roi=1, trades=1, profit_perc=-0.00999, sl=False) # +], columns=columns), + # stop_loss=-0.03, roi=1, trades=1, profit_perc=-0.03, sl=True, remains=False) #should be + stop_loss=-0.03, roi=1, trades=1, profit_perc=-0.00999, sl=False, remains=True) # # Test 3 Candle drops 4%, Recovers 1%. @@ -88,19 +95,23 @@ tc2 = BTContainer(data=DataFrame([ # Candle drops 20% # Candle Data for test 3 # Test with Stop-Loss at 2% +# TC3: Trade-A: Stop-Loss Triggered 2% Loss +# Trade-B: Stop-Loss Triggered 2% Loss tc3 = BTContainer(data=DataFrame([ [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], [getdate('2018-06-10 09:00:00').datetime, 9975, 10025, 9600, 9950, 12345, 0, 0], [getdate('2018-06-10 10:00:00').datetime, 9950, 10000, 9900, 9925, 12345, 1, 0], [getdate('2018-06-10 11:00:00').datetime, 9925, 9975, 8000, 8000, 12345, 0, 0], [getdate('2018-06-10 12:00:00').datetime, 9900, 9950, 9950, 9900, 12345, 0, 0] -], columns=columns), stop_loss=-0.02, roi=1, trades=1, profit_perc=-0.19999, sl=True) # +], columns=columns), + # stop_loss=-0.02, roi=1, trades=2, profit_perc=-0.4, sl=True, remains=False) #should be + stop_loss=-0.02, roi=1, trades=1, profit_perc=-0.19999, sl=True, remains=False) # # Test 4 Minus 3% / recovery +15% # Candle Data for test 4 – Candle drops 3% Closed 15% up # Test with Stop-loss at 2% ROI 6% - +# TC4: Stop-Loss Triggered 2% Loss tc4 = BTContainer(data=DataFrame([ [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], [getdate('2018-06-10 09:00:00').datetime, 9975, 11500, 9700, 11500, 12345, 0, 0], @@ -108,49 +119,55 @@ tc4 = BTContainer(data=DataFrame([ [getdate('2018-06-10 11:00:00').datetime, 9925, 9975, 9875, 9900, 12345, 0, 0], [getdate('2018-06-10 12:00:00').datetime, 9900, 9950, 9850, 9900, 12345, 0, 0] ], columns=columns), - stop_loss=-0.02, roi=0.06, trades=1, profit_perc=-0.141, sl=True) + # stop_loss=-0.02, roi=0.06, trades=1, profit_perc=-0.02, sl=False, remains=False) #should be + stop_loss=-0.02, roi=0.06, trades=1, profit_perc=-0.141, sl=True, remains=False) # Test 5 / Drops 0.5% Closes +20% # Candle Data for test 5 # Set stop-loss at 1% ROI 3% +# TC5: ROI triggers 3% Gain tc5 = BTContainer(data=DataFrame([ - [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], - [getdate('2018-06-10 09:00:00').datetime, 9975, 12000, 9950, 12000, 12345, 0, 0], - [getdate('2018-06-10 10:00:00').datetime, 9950, 10000, 9900, 9925, 12345, 0, 0], + [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9960, 9975, 12345, 1, 0], + [getdate('2018-06-10 09:00:00').datetime, 9975, 10050, 9950, 9975, 12345, 0, 0], + [getdate('2018-06-10 10:00:00').datetime, 9950, 12000, 9950, 12000, 12345, 0, 0], [getdate('2018-06-10 11:00:00').datetime, 9925, 9975, 9945, 9900, 12345, 0, 0], [getdate('2018-06-10 12:00:00').datetime, 9900, 9950, 9850, 9900, 12345, 0, 0] ], columns=columns), - stop_loss=-0.01, roi=0.03, trades=1, profit_perc=-0.177, sl=True) + # stop_loss=-0.01, roi=0.03, trades=1, profit_perc=0.03, sl=False, remains=False) #should be + stop_loss=-0.01, roi=0.03, trades=1, profit_perc=0.197, sl=False, remains=False) # Test 6 / Drops 3% / Recovers 6% Positive / Closes 1% positve # Candle Data for test 6 # Set stop-loss at 2% ROI at 5% +# TC6: Stop-Loss triggers 2% Loss tc6 = BTContainer(data=DataFrame([ [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], [getdate('2018-06-10 09:00:00').datetime, 9975, 10600, 9700, 10100, 12345, 0, 0], [getdate('2018-06-10 10:00:00').datetime, 9950, 10000, 9900, 9925, 12345, 0, 0], [getdate('2018-06-10 11:00:00').datetime, 9925, 9975, 9945, 9900, 12345, 0, 0], [getdate('2018-06-10 12:00:00').datetime, 9900, 9950, 9850, 9900, 12345, 0, 0] -], columns=columns), stop_loss=-0.02, roi=0.05, - trades=1, profit_perc=-0.025, sl=False) +], columns=columns), + # stop_loss=-0.02, roi=0.05, trades=1, profit_perc=-0.02, sl=False, remains=False) #should be + stop_loss=-0.02, roi=0.05, trades=1, profit_perc=-0.025, sl=False, remains=True) # # Test 7 - 6% Positive / 1% Negative / Close 1% Positve # Candle Data for test 7 # Set stop-loss at 2% ROI at 3% - +# TC7: ROI Triggers 3% Gain tc7 = BTContainer(data=DataFrame([ [getdate('2018-06-10 08:00:00').datetime, 10000, 10050, 9950, 9975, 12345, 1, 0], [getdate('2018-06-10 09:00:00').datetime, 9975, 10600, 9900, 10100, 12345, 0, 0], [getdate('2018-06-10 10:00:00').datetime, 9950, 10000, 9900, 9925, 12345, 0, 0], [getdate('2018-06-10 11:00:00').datetime, 9925, 9975, 9945, 9900, 12345, 0, 0], [getdate('2018-06-10 12:00:00').datetime, 9900, 9950, 9850, 9900, 12345, 0, 0] -], columns=columns), stop_loss=-0.02, roi=0.03, - trades=1, profit_perc=-0.025, sl=False) +], columns=columns), + # stop_loss=-0.02, roi=0.03, trades=1, profit_perc=-0.03, sl=False, remains=False) #should be + stop_loss=-0.02, roi=0.03, trades=1, profit_perc=-0.025, sl=False, remains=True) # TESTS = [ # tc_profit1, # tc_profit2, - tc_loss0, + # tc_loss0, tc1, tc2, tc3, @@ -195,5 +212,12 @@ def test_backtest_results(default_conf, fee, mocker, caplog, data) -> None: if data.sl: assert log_has("Stop loss hit.", caplog.record_tuples) else: - assert not log_has("Stop loss hit.", caplog.record_tuples) + log_test = (f'Force_selling still open trade UNITTEST/BTC with ' + f'{results.iloc[-1].profit_percent} perc - {results.iloc[-1].profit_abs}') + if data.remains: + assert log_has(log_test, + caplog.record_tuples) + else: + assert not log_has(log_test, + caplog.record_tuples)