""" Pytest Configuration - Fixtures Globales. Ce fichier contient les fixtures pytest partagées par tous les tests. """ import pytest import pandas as pd import numpy as np from datetime import datetime, timedelta from typing import Dict from src.core.risk_manager import RiskManager from src.core.strategy_engine import StrategyEngine @pytest.fixture def sample_config() -> Dict: """ Fixture de configuration de test. Returns: Configuration complète pour tests """ return { 'risk_limits': { 'initial_capital': 10000.0, 'global_limits': { 'max_portfolio_risk': 0.05, 'max_position_size': 0.10, 'max_drawdown': 0.15, 'max_daily_loss': 0.03, 'max_correlation': 0.7, }, 'strategy_limits': { 'scalping': { 'risk_per_trade': 0.01, 'max_trades_per_day': 50, }, 'intraday': { 'risk_per_trade': 0.02, 'max_trades_per_day': 20, }, } }, 'strategy_params': { 'scalping_strategy': { 'name': 'scalping', 'timeframe': '5m', 'risk_per_trade': 0.01, 'max_holding_time': 1800, 'max_trades_per_day': 50, 'adaptive_params': { 'bb_period': 20, 'rsi_period': 14, 'min_confidence': 0.65, } } } } @pytest.fixture def risk_manager(sample_config) -> RiskManager: """Fixture RiskManager initialisé.""" rm = RiskManager() rm.initialize(sample_config['risk_limits']) return rm @pytest.fixture def sample_ohlcv_data() -> pd.DataFrame: """Fixture de données OHLCV pour tests.""" dates = pd.date_range(start='2024-01-01', periods=100, freq='1H') np.random.seed(42) base_price = 1.1000 returns = np.random.normal(0.0001, 0.01, 100) prices = base_price * np.exp(np.cumsum(returns)) df = pd.DataFrame(index=dates) df['close'] = prices df['open'] = df['close'].shift(1).fillna(df['close'].iloc[0]) df['high'] = df[['open', 'close']].max(axis=1) * (1 + np.random.uniform(0, 0.001, 100)) df['low'] = df[['open', 'close']].min(axis=1) * (1 - np.random.uniform(0, 0.001, 100)) df['volume'] = np.random.randint(1000, 10000, 100) return df @pytest.fixture(autouse=True) def reset_singletons(): """Reset les singletons entre chaque test.""" RiskManager._instance = None yield RiskManager._instance = None