Improve resiliance when showing older backtest results
This commit is contained in:
@@ -198,7 +198,7 @@ def calculate_expectancy(trades: pd.DataFrame) -> Tuple[float, float]:
|
|||||||
"""
|
"""
|
||||||
Calculate expectancy
|
Calculate expectancy
|
||||||
:param trades: DataFrame containing trades (requires columns close_date and profit_abs)
|
:param trades: DataFrame containing trades (requires columns close_date and profit_abs)
|
||||||
:return: expectancy
|
:return: expectancy, expectancy_ratio
|
||||||
"""
|
"""
|
||||||
|
|
||||||
expectancy = 0
|
expectancy = 0
|
||||||
|
|||||||
@@ -233,8 +233,9 @@ def text_table_add_metrics(strat_results: Dict) -> str:
|
|||||||
('Calmar', f"{strat_results['calmar']:.2f}" if 'calmar' in strat_results else 'N/A'),
|
('Calmar', f"{strat_results['calmar']:.2f}" if 'calmar' in strat_results else 'N/A'),
|
||||||
('Profit factor', f'{strat_results["profit_factor"]:.2f}' if 'profit_factor'
|
('Profit factor', f'{strat_results["profit_factor"]:.2f}' if 'profit_factor'
|
||||||
in strat_results else 'N/A'),
|
in strat_results else 'N/A'),
|
||||||
('Expectancy (Ratio)', f"{strat_results['expectancy']:.2f} "
|
('Expectancy (Ratio)', (
|
||||||
f"({strat_results['expectancy_ratio']:.2f})"),
|
f"{strat_results['expectancy']:.2f} ({strat_results['expectancy_ratio']:.2f})" if
|
||||||
|
'expectancy_ratio' in strat_results else 'N/A')),
|
||||||
('Trades per day', strat_results['trades_per_day']),
|
('Trades per day', strat_results['trades_per_day']),
|
||||||
('Avg. daily profit %',
|
('Avg. daily profit %',
|
||||||
f"{(strat_results['profit_total'] / strat_results['backtest_days']):.2%}"),
|
f"{(strat_results['profit_total'] / strat_results['backtest_days']):.2%}"),
|
||||||
|
|||||||
@@ -353,6 +353,15 @@ def test_calculate_expectancy(testdatadir):
|
|||||||
assert pytest.approx(expectancy) == 5.820687070932315e-06
|
assert pytest.approx(expectancy) == 5.820687070932315e-06
|
||||||
assert pytest.approx(expectancy_ratio) == 0.07151374226574791
|
assert pytest.approx(expectancy_ratio) == 0.07151374226574791
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'profit_abs': [100, 200, 50, -150, 300, -100, 80, -30]
|
||||||
|
}
|
||||||
|
df = DataFrame(data)
|
||||||
|
expectancy, expectancy_ratio = calculate_expectancy(df)
|
||||||
|
|
||||||
|
assert pytest.approx(expectancy) == 56.25
|
||||||
|
assert pytest.approx(expectancy_ratio) == 0.60267857
|
||||||
|
|
||||||
|
|
||||||
def test_calculate_sortino(testdatadir):
|
def test_calculate_sortino(testdatadir):
|
||||||
filename = testdatadir / "backtest_results/backtest-result.json"
|
filename = testdatadir / "backtest_results/backtest-result.json"
|
||||||
|
|||||||
Reference in New Issue
Block a user