# scripts/setup_environment.py - Fixed version
import os
import sys
import subprocess
from pathlib import Path
def create_directories():
"""Create necessary directories."""
dirs = [
'results/trading_signals',
'results/performance_reports',
'results/charts',
'results/logs',
'data/raw',
'data/processed',
'data/external',
'src/data',
'src/analysis',
'src/trading',
'src/utils',
'tests',
'config',
'notebooks',
'docs'
]
for dir_path in dirs:
Path(dir_path).mkdir(parents=True, exist_ok=True)
print(f"✅ Created directory: {dir_path}")
def check_dependencies():
"""Check if all dependencies are installed with correct import names."""
# Package name -> import name mapping
packages = {
'yfinance': 'yfinance',
'pandas': 'pandas',
'numpy': 'numpy',
'scikit-learn': 'sklearn', # This is the correct import name!
'xgboost': 'xgboost',
'statsmodels': 'statsmodels',
'matplotlib': 'matplotlib',
'seaborn': 'seaborn'
}
missing = []
available = []
for package_name, import_name in packages.items():
try:
__import__(import_name)
print(f"✅ {package_name}: Available")
available.append(package_name)
except ImportError:
print(f"❌ {package_name}: Missing")
missing.append(package_name)
return missing, available
def test_core_functionality():
"""Test that the core trading system works."""
print("\n🧪 Testing Core Functionality...")
try:
# Test basic imports
import pandas as pd
import numpy as np
import yfinance as yf
import xgboost as xgb
from sklearn.metrics import mean_squared_error
print("✅ Core imports successful")
# Test data download
try:
df = yf.download('AAPL', period='5d', progress=False)
if len(df) > 0:
print("✅ Data download working")
else:
print("⚠️ Data download returned empty DataFrame")
except Exception as e:
print(f"❌ Data download failed: {e}")
# Test XGBoost
try:
X = np.random.random((100, 3))
y = np.random.random(100)
model = xgb.XGBRegressor(n_estimators=10, verbosity=0)
model.fit(X, y)
pred = model.predict(X[:1])
print("✅ XGBoost functionality working")
except Exception as e:
print(f"❌ XGBoost test failed: {e}")
# Test ARIMA (statsmodels)
try:
from statsmodels.tsa.arima.model import ARIMA
data = np.random.random(50) + np.arange(50) * 0.1 # Trending data
model = ARIMA(data, order=(1, 1, 1))
fitted = model.fit()
forecast = fitted.forecast(steps=1)
print("✅ ARIMA functionality working")
except Exception as e:
print(f"❌ ARIMA test failed: {e}")
return True
except Exception as e:
print(f"❌ Core functionality test failed: {e}")
return False
def create_init_files():
"""Create __init__.py files for Python packages."""
init_files = [
'models/__init__.py',
'src/__init__.py',
'src/data/__init__.py',
'src/analysis/__init__.py',
'src/trading/__init__.py',
'src/utils/__init__.py',
'tests/__init__.py',
'config/__init__.py'
]
for init_file in init_files:
Path(init_file).parent.mkdir(parents=True, exist_ok=True)
if not Path(init_file).exists():
with open(init_file, 'w') as f:
f.write(f'# {Path(init_file).parent.name} package\n')
print(f"✅ Created: {init_file}")
def create_config_files():
"""Create basic configuration files."""
# Trading configuration
trading_config = {
"tickers": {
"default": ["AAPL", "MSFT", "GOOGL", "AMZN", "TSLA", "NVDA", "META", "NFLX"],
"tech_focus": ["AAPL", "MSFT", "GOOGL", "NVDA", "META"],
"large_cap": ["AAPL", "MSFT", "GOOGL", "AMZN"]
},
"trading_parameters": {
"buy_threshold": 0.02,
"sell_threshold": -0.02,
"confidence_threshold": 0.6
},
"data_parameters": {
"lookback_period": "1y",
"update_frequency": "daily"
},
"model_parameters": {
"arima_orders": [[1,1,1], [1,1,2], [2,1,1], [2,1,2]],
"xgboost": {
"n_estimators": 150,
"max_depth": 4,
"learning_rate": 0.1,
"n_lags": 5
}
}
}
config_file = Path('config/trading_config.json')
if not config_file.exists():
import json
with open(config_file, 'w') as f:
json.dump(trading_config, f, indent=2)
print(f"✅ Created: {config_file}")
def install_dependencies():
"""Install missing dependencies."""
try:
subprocess.check_call([
sys.executable, '-m', 'pip', 'install',
'scikit-learn', '--upgrade'
])
print("✅ Dependencies installed successfully")
return True
except subprocess.CalledProcessError as e:
print(f"❌ Failed to install dependencies: {e}")
return False
def check_existing_models():
"""Check if the working models exist."""
model_files = [
'models/arima_model.py',
'models/hybrid_model.py',
'models/__init__.py'
]
print("\n📁 Checking Existing Model Files...")
for model_file in model_files:
if Path(model_file).exists():
print(f"✅ Found: {model_file}")
else:
print(f"❌ Missing: {model_file}")
def main():
"""Set up the environment."""
print("🚀 Setting up Enhanced Trading System Environment")
print("=" * 60)
# Create directories
print("\n📁 Creating Directory Structure...")
create_directories()
# Create __init__.py files
print("\n📦 Creating Package Files...")
create_init_files()
# Create configuration files
print("\n⚙️ Creating Configuration Files...")
create_config_files()
# Check dependencies with correct import names
print("\n📦 Checking Dependencies...")
missing, available = check_dependencies()
if missing:
print(f"\n⚠️ Missing packages: {', '.join(missing)}")
# Special handling for scikit-learn
if 'scikit-learn' in missing:
print("Note: scikit-learn might be installed with a different name.")
print("Trying to install/upgrade scikit-learn...")
install_dependencies()
# Recheck after installation
print("\n🔄 Rechecking dependencies...")
missing, available = check_dependencies()
# Test core functionality
if not missing:
core_working = test_core_functionality()
else:
print("\n⚠️ Skipping functionality test due to missing dependencies")
core_working = False
# Check existing models
check_existing_models()
# Final status
print("\n" + "=" * 60)
print("🎯 SETUP SUMMARY")
print("=" * 60)
if not missing and core_working:
print("✅ Environment setup complete!")
print("✅ All dependencies available")
print("✅ Core functionality working")
print("\n🚀 Your system is ready!")
print("\nNext steps:")
print("1. Ensure your model files are in models/")
print("2. Run: python main.py")
print("3. Or test with: python scripts/quick_test.py")
else:
print("⚠️ Setup completed with some issues:")
if missing:
print(f" Missing packages: {', '.join(missing)}")
if not core_working:
print(" Core functionality needs attention")
print("\n🔧 To fix:")
print("1. Install missing packages: pip install scikit-learn")
print("2. Verify your model files exist")
print("3. Re-run this setup script")
if __name__ == "__main__":
main()