Coverage for src / monte_neo / core / config.py: 100%

39 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-28 16:27 +0200

1"""Generator configuration module.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass, field 

6from typing import TYPE_CHECKING 

7 

8if TYPE_CHECKING: 

9 from monte_neo.indicators.base import BaseIndicator 

10 

11 

12@dataclass 

13class GeneratorConfig: 

14 """Generator configuration.""" 

15 

16 max_iterations: int = 1000000000 

17 target_metrics: dict[str, float] = field(default_factory=dict) 

18 indicator_types: list[str] = field( 

19 default_factory=lambda: ["sma", "rsi", "macd", "dynamic"] 

20 ) 

21 mc_iterations: int = 1000 

22 use_mc_shuffling: bool = True 

23 use_mc_noise: bool = True 

24 use_mc_sensitivity: bool = True 

25 use_mc_walk_forward: bool = True 

26 use_mc_block_bootstrap: bool = True 

27 use_sequential_mc: bool = False 

28 early_stopping: bool = True 

29 min_trades: int = 30 

30 population_size: int = 50 

31 generations: int = 20 

32 mutation_rate: float = 0.3 

33 crossover_rate: float = 0.7 

34 initial_capital: float = 100000.0 

35 leverage: float = 1.0 

36 

37 # Risk Management 

38 stop_loss_pct: float = 1.0 # Default 1% 

39 take_profit_pct: float = 2.0 # Default 2% (2:1 RR) 

40 use_sl_tp: bool = True 

41 

42 # Validation 

43 mc_pass_threshold: float = 0.80 # Default 80% for production 

44 

45 # Hardware Acceleration 

46 use_gpu: bool = True 

47 gpu_precision: str = "float32" 

48 metal_driver: str = "auto" # auto, cpp, objc, swift 

49 

50 

51@dataclass 

52class GeneratorResult: 

53 """Generator result.""" 

54 

55 success: bool 

56 indicator: BaseIndicator | None 

57 parameters: dict 

58 final_metrics: dict 

59 mc_pass_rate: float 

60 iterations_tried: int 

61 elapsed_time: float 

62 candidates_found: int 

63 mc_details: dict = field(default_factory=dict)