Skip to content

Commit 49aa32e

Browse files
committed
ENH: Name heatmap values by the maximized parameter
Fixes #101 (comment)
1 parent e11efb7 commit 49aa32e

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

backtesting/backtesting.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1157,8 +1157,9 @@ def optimize(self,
11571157
if not kwargs:
11581158
raise ValueError('Need some strategy parameters to optimize')
11591159

1160+
maximize_key = None
11601161
if isinstance(maximize, str):
1161-
1162+
maximize_key = str(maximize)
11621163
stats = self._results if self._results is not None else self.run()
11631164
if maximize not in stats:
11641165
raise ValueError('`maximize`, if str, must match a key in pd.Series '
@@ -1202,6 +1203,7 @@ def __getattr__(self, item):
12021203
stacklevel=2)
12031204

12041205
heatmap = pd.Series(np.nan,
1206+
name=maximize_key,
12051207
index=pd.MultiIndex.from_tuples([p.values() for p in param_combos],
12061208
names=next(iter(param_combos)).keys()))
12071209

backtesting/test/_test.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import inspect
12
import os
23
import sys
34
import time
@@ -400,14 +401,16 @@ def test_optimize(self):
400401
res = bt.optimize(**OPT_PARAMS)
401402
self.assertIsInstance(res, pd.Series)
402403

403-
res2 = bt.optimize(**OPT_PARAMS, maximize=lambda s: s['SQN'])
404+
default_maximize = inspect.signature(Backtest.optimize).parameters['maximize'].default
405+
res2 = bt.optimize(**OPT_PARAMS, maximize=lambda s: s[default_maximize])
404406
self.assertDictEqual(res.filter(regex='^[^_]').fillna(-1).to_dict(),
405407
res2.filter(regex='^[^_]').fillna(-1).to_dict())
406408

407409
res3, heatmap = bt.optimize(**OPT_PARAMS, return_heatmap=True,
408410
constraint=lambda d: d.slow > 2 * d.fast)
409411
self.assertIsInstance(heatmap, pd.Series)
410412
self.assertEqual(len(heatmap), 4)
413+
self.assertEqual(heatmap.name, default_maximize)
411414

412415
with _tempfile() as f:
413416
bt.plot(filename=f, open_browser=False)

0 commit comments

Comments
 (0)