| """Smoke test for trading-ready infrastructure.""" |
| import sys |
|
|
| def test_enhanced_features(): |
| from ai.enhanced_features import engineer_enhanced_features, ENHANCED_FEATURES |
| import pandas as pd |
| import numpy as np |
|
|
| print(f"Enhanced features count: {len(ENHANCED_FEATURES)}") |
|
|
| dates = pd.date_range("2023-01-01", periods=200, freq="B") |
| df = pd.DataFrame({ |
| "Open": np.random.uniform(90, 110, 200), |
| "High": np.random.uniform(95, 115, 200), |
| "Low": np.random.uniform(85, 105, 200), |
| "Close": np.random.uniform(90, 110, 200), |
| "Volume": np.random.uniform(1e6, 5e6, 200), |
| }, index=dates) |
| df["High"] = df[["Open", "Close"]].max(axis=1) + np.abs(np.random.normal(0, 2, 200)) |
| df["Low"] = df[["Open", "Close"]].min(axis=1) - np.abs(np.random.normal(0, 2, 200)) |
|
|
| result = engineer_enhanced_features(df) |
| missing = [f for f in ENHANCED_FEATURES if f not in result.columns] |
| assert not missing, f"Missing features: {missing}" |
| nans = result[ENHANCED_FEATURES].iloc[-1].isna().sum() |
| print(f"Result shape: {result.shape}, NaN in last row: {nans}/{len(ENHANCED_FEATURES)}") |
| print("OK: enhanced_features") |
|
|
|
|
| def test_backtest_import(): |
| from analysis.walk_forward_backtest import walk_forward_backtest, FEATURES |
| print(f"Backtest uses {len(FEATURES)} features") |
| assert len(FEATURES) > 20, "Should use enhanced feature set" |
| print("OK: backtest imports") |
|
|
|
|
| def test_portfolio_import(): |
| from analysis.portfolio_backtest import portfolio_backtest |
| print("OK: portfolio_backtest imports") |
|
|
|
|
| def test_daily_signals_import(): |
| from trading.daily_signals import generate_signals |
| print("OK: daily_signals imports") |
|
|
|
|
| def test_paper_tracker_import(): |
| from trading.paper_tracker import record_signals, check_status, update_outcomes, generate_report |
| print("OK: paper_tracker imports") |
|
|
|
|
| if __name__ == "__main__": |
| tests = [ |
| test_enhanced_features, |
| test_backtest_import, |
| test_portfolio_import, |
| test_daily_signals_import, |
| test_paper_tracker_import, |
| ] |
| failed = 0 |
| for t in tests: |
| try: |
| t() |
| except Exception as e: |
| print(f"FAIL: {t.__name__}: {e}") |
| failed += 1 |
| print(f"\n{'ALL PASSED' if failed == 0 else f'{failed} FAILED'}") |
| sys.exit(failed) |
|
|