# setup_smart_system.py - Setup script for smart trading system
import subprocess
import sys
from pathlib import Path
def install_package(package):
"""Install a package using pip."""
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
return True
except subprocess.CalledProcessError:
return False
def check_package(package_name, import_name=None):
"""Check if a package is installed and importable."""
if import_name is None:
import_name = package_name
try:
__import__(import_name)
return True
except ImportError:
return False
def main():
"""Setup the smart trading system."""
print("π SMART TRADING SYSTEM SETUP")
print("=" * 50)
# Required packages
required_packages = [
("yfinance", "yfinance"),
("pandas", "pandas"),
("numpy", "numpy"),
("scikit-learn", "sklearn"),
("matplotlib", "matplotlib"),
("seaborn", "seaborn"),
("arch", "arch"), # For ARIMA-GARCH
("statsmodels", "statsmodels") # For enhanced ARIMA
]
print("π¦ Checking dependencies...")
missing_packages = []
for package, import_name in required_packages:
if check_package(package, import_name):
print(f" β
{package}")
else:
print(f" β {package} - missing")
missing_packages.append(package)
if missing_packages:
print(f"\nπ§ Installing missing packages: {', '.join(missing_packages)}")
for package in missing_packages:
print(f" Installing {package}...")
if install_package(package):
print(f" β
{package} installed successfully")
else:
print(f" β Failed to install {package}")
else:
print("\nβ
All dependencies are already installed!")
# Check file structure
print(f"\nπ Checking file structure...")
required_dirs = [
"models",
"config",
"results",
"results/smart_trading"
]
for dir_path in required_dirs:
path = Path(dir_path)
if path.exists():
print(f" β
{dir_path}/")
else:
path.mkdir(parents=True, exist_ok=True)
print(f" π Created {dir_path}/")
# Check config file
config_file = Path("config/trading_config.json")
if config_file.exists():
print(f" β
config/trading_config.json")
else:
print(f" β οΈ config/trading_config.json not found")
print(f" Create this file with your portfolio configuration")
# Test imports
print(f"\nπ§ͺ Testing critical imports...")
try:
import yfinance as yf
print(" β
yfinance")
import pandas as pd
print(" β
pandas")
import numpy as np
print(" β
numpy")
from sklearn.ensemble import RandomForestRegressor
print(" β
scikit-learn")
try:
import arch
print(" β
arch (ARIMA-GARCH available)")
garch_available = True
except ImportError:
print(" β οΈ arch (ARIMA-GARCH not available)")
garch_available = False
try:
import statsmodels
print(" β
statsmodels")
except ImportError:
print(" β οΈ statsmodels (enhanced ARIMA not available)")
except ImportError as e:
print(f" β Import test failed: {e}")
return False
# Test basic functionality
print(f"\n㪠Testing basic functionality...")
try:
# Test data download
print(" Testing data download...")
data = yf.download("AAPL", period="5d", progress=False)
if not data.empty:
print(" β
Data download works")
else:
print(" β Data download failed")
except Exception as e:
print(f" β Data download test failed: {e}")
# Final status
print(f"\nπ― SETUP SUMMARY:")
print("=" * 50)
if garch_available:
print("β
Full ARIMA-GARCH functionality available")
print("π§ Smart model selection: ARIMA + ARIMA-GARCH")
else:
print("β οΈ Limited functionality - ARIMA only")
print("π‘ Install 'arch' package for full ARIMA-GARCH support")
print(f"\nπ READY TO USE:")
print(" python enhanced_main.py # Show portfolios")
print(" python enhanced_main.py lenny_golub # Smart analysis")
print(" python enhanced_main.py all # Analyze all stocks")
if not config_file.exists():
print(f"\nβ οΈ NEXT STEP: Create config/trading_config.json with your portfolios")
sample_config = {
"tickers": {
"example_portfolio": ["AAPL", "MSFT", "GOOGL"],
"lenny_golub": ["COIN", "GBTC", "HOOD", "MSTR", "PYPL"]
}
}
print(" Sample config:")
import json
print(json.dumps(sample_config, indent=2))
if __name__ == "__main__":
main()