Files
trader-ml/tests/conftest.py
Tika da30ef19ed Initial commit — Trading AI Secure project complet
Architecture Docker (8 services), FastAPI, TimescaleDB, Redis, Streamlit.
Stratégies : scalping, intraday, swing. MLEngine + RegimeDetector (HMM).
BacktestEngine + WalkForwardAnalyzer + Optuna optimizer.
Routes API complètes dont /optimize async.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 17:38:09 +00:00

97 lines
2.7 KiB
Python

"""
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