# test_fixed_system.py - Test the completely fixed system
def test_fixed_xgboost():
"""Test the fixed XGBoost implementation."""
print("š§ TESTING FIXED XGBOOST SYSTEM")
print("=" * 50)
try:
from models.arima_model import get_arima_forecast
from models.hybrid_model import train_xgboost_on_residuals, HybridARIMAXGBoost
ticker = 'AAPL'
print(f"Testing {ticker}...")
# Get ARIMA forecast
arima_forecast, residuals, df = get_arima_forecast(ticker)
print(f"ā
ARIMA forecast: ${float(arima_forecast):.2f}")
# Test enhanced XGBoost
print(f"\nš¬ Testing Enhanced XGBoost:")
xgb_model, latest_features = train_xgboost_on_residuals(residuals, df)
# Make prediction
residual_correction = float(xgb_model.predict(latest_features)[0])
hybrid_forecast = float(arima_forecast) + residual_correction
last_price = float(df['Close'].iloc[-1])
change = (hybrid_forecast - last_price) / last_price
print(f"\nš RESULTS:")
print(f"ā
Last price: ${last_price:.2f}")
print(f"ā
ARIMA forecast: ${float(arima_forecast):.2f}")
print(f"ā
Residual correction: {residual_correction:.4f}")
print(f"ā
Hybrid forecast: ${hybrid_forecast:.2f}")
print(f"ā
Expected change: {change:+.2%}")
# Test the class-based approach
print(f"\nšļø Testing HybridARIMAXGBoost Class:")
hybrid_class = HybridARIMAXGBoost(n_lags=5)
results = hybrid_class.train_model(residuals, df, verbose=True)
if results:
class_prediction = hybrid_class.predict_residual(results['last_features'])
class_hybrid = float(arima_forecast) + class_prediction
print(f"ā
Class-based prediction: ${class_hybrid:.2f}")
print(f"ā
Feature importance top 3:")
if 'feature_importance' in results:
top_features = results['feature_importance'].head(3)
for _, row in top_features.iterrows():
print(f" {row['feature']}: {row['importance']:.4f}")
# Signal generation
if change > 0.02:
signal = "š¢ BUY"
elif change < -0.02:
signal = "š“ SELL"
else:
signal = "š” HOLD"
print(f"\nšÆ Trading Signal: {signal}")
print(f"\nš FIXED SYSTEM TEST PASSED!")
return True
except Exception as e:
print(f"ā Test failed: {e}")
import traceback
traceback.print_exc()
return False
def test_multiple_tickers_fixed():
"""Test the fixed system on multiple tickers."""
print(f"\nš TESTING MULTIPLE TICKERS")
print("-" * 50)
tickers = ['AAPL', 'MSFT', 'GOOGL']
results = []
for ticker in tickers:
try:
print(f"\nš {ticker}:")
from models.arima_model import get_arima_forecast
from models.hybrid_model import train_xgboost_on_residuals
arima_forecast, residuals, df = get_arima_forecast(ticker)
xgb_model, latest_features = train_xgboost_on_residuals(residuals, df)
residual_correction = float(xgb_model.predict(latest_features)[0])
hybrid_forecast = float(arima_forecast) + residual_correction
last_price = float(df['Close'].iloc[-1])
change = (hybrid_forecast - last_price) / last_price
signal = "BUY" if change > 0.02 else "SELL" if change < -0.02 else "HOLD"
emoji = "š¢" if signal == "BUY" else "š“" if signal == "SELL" else "š”"
results.append({
'ticker': ticker,
'signal': signal,
'change': change,
'price': last_price,
'forecast': hybrid_forecast
})
print(f" {emoji} {signal}: {change:+.2%}")
except Exception as e:
print(f" ā {ticker} failed: {e}")
print(f"\nš PORTFOLIO SUMMARY:")
print("-" * 30)
for result in results:
emoji = "š¢" if result['signal'] == "BUY" else "š“" if result['signal'] == "SELL" else "š”"
print(f"{emoji} {result['ticker']}: {result['signal']} ({result['change']:+.2%})")
buy_signals = len([r for r in results if r['signal'] == 'BUY'])
sell_signals = len([r for r in results if r['signal'] == 'SELL'])
hold_signals = len([r for r in results if r['signal'] == 'HOLD'])
print(f"\nSignal Distribution:")
print(f"š¢ BUY: {buy_signals}")
print(f"š“ SELL: {sell_signals}")
print(f"š” HOLD: {hold_signals}")
return len(results) == len(tickers)
if __name__ == "__main__":
print("š§ COMPREHENSIVE FIXED SYSTEM TEST")
print("=" * 60)
# Test single stock
success1 = test_fixed_xgboost()
if success1:
# Test multiple stocks
success2 = test_multiple_tickers_fixed()
if success2:
print(f"\nš ALL TESTS PASSED!")
print("ā
Enhanced XGBoost is now working properly")
print("ā
Volume features are handled safely")
print("ā
Error handling is comprehensive")
print("ā
System is production-ready")
print(f"\nš Ready for full portfolio analysis!")
else:
print(f"\nā ļø Single stock works, some multi-stock issues")
else:
print(f"\nā Core system still has issues")