Coverage for src / monte_neo / cli / menu / metrics.py: 0%
22 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-28 16:27 +0200
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-28 16:27 +0200
1"""Metrics configuration workflow."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
7import questionary
8from rich.console import Console
10from monte_neo.cli.styles import CUSTOM_STYLE
12if TYPE_CHECKING:
13 from monte_neo.cli.menu.main import InteractiveMenu
15console = Console()
18def set_metrics_workflow(menu: InteractiveMenu) -> None:
19 """Set target metrics workflow."""
20 console.print("\n[bold cyan]🎯 Set Target Metrics[/]\n")
22 metrics_choices = [
23 {"name": "📈 Profit Factor (> 2.0)", "value": "profit_factor", "checked": "profit_factor" in menu._target_metrics},
24 {"name": "📊 Sharpe Ratio (> 1.0)", "value": "sharpe_ratio", "checked": "sharpe_ratio" in menu._target_metrics},
25 {"name": "📉 Max Drawdown (< 20%)", "value": "max_drawdown", "checked": "max_drawdown" in menu._target_metrics},
26 {"name": "🎯 Winrate (> 45%)", "value": "winrate", "checked": "winrate" in menu._target_metrics},
27 {"name": "💹 Sortino Ratio (> 1.5)", "value": "sortino_ratio", "checked": "sortino_ratio" in menu._target_metrics},
28 {"name": "🔄 Recovery Factor (> 2.0)", "value": "recovery_factor", "checked": "recovery_factor" in menu._target_metrics},
29 {"name": "📆 Calmar Ratio (> 0.5)", "value": "calmar_ratio", "checked": "calmar_ratio" in menu._target_metrics},
30 ]
32 selected = questionary.checkbox(
33 "Select metrics to target:",
34 choices=metrics_choices,
35 style=CUSTOM_STYLE,
36 ).ask()
38 if not selected:
39 return
41 # Get values for selected metrics
42 menu._target_metrics = {}
43 defaults = {
44 "profit_factor": 2.0, "sharpe_ratio": 1.0, "max_drawdown": 0.20,
45 "winrate": 0.45, "sortino_ratio": 1.5, "recovery_factor": 2.0,
46 "calmar_ratio": 0.5,
47 }
49 for metric in selected:
50 value = questionary.text(
51 f"{metric}:",
52 default=str(defaults.get(metric, 1.0)),
53 style=CUSTOM_STYLE,
54 ).ask()
56 if value:
57 menu._target_metrics[metric] = float(value)
59 # Show summary
60 console.print("\n[green]✓ Target metrics set:[/]")
61 for k, v in menu._target_metrics.items():
62 console.print(f" • {k}: {v}")
63 console.print()