code/
├── backend/ # FastAPI backend
│ ├── auth/ # Authentication utilities
│ ├── core/ # App factory, config, database
│ ├── domain/ # SQLAlchemy models & Pydantic schemas
│ ├── endpoints/ # API route handlers
│ ├── middleware/ # CORS, auth, logging, error handling
│ ├── services/ # Business logic layer
│ ├── workers/ # Celery background tasks
│ ├── tests/ # Test suite
│ └── requirements.txt
│
└── quant_ml/ # ML & Quantitative Finance package (renamed from ml/)
├── data/
│ ├── features/ # Feast feature store integration
│ └── process_data.py # Data engine + financial feature engineering
├── models/
│ ├── hyperparameter_tuning/ # Optuna optimisation
│ ├── model_serving/ # MLflow pyfunc serving
│ ├── train_model.py # TFT + LSTM training
│ ├── mlflow_tracking.py # Experiment tracking
│ └── aws_deploy.py # S3 + SageMaker deployment
├── monitoring/
│ └── metrics_collector.py # CloudWatch metrics
└── quant/ # ★ Advanced Quantitative Finance (new)
├── risk_metrics.py # VaR, CVaR, Sharpe, Sortino, drawdown, alpha/beta
├── portfolio_optimizer.py # Mean-Variance, Risk Parity, Black-Litterman
├── alpha_signals.py # Momentum, value, quality, stat-arb signals
├── backtester.py # Vectorised backtester + walk-forward validation
├── regime_detection.py # HMM, GARCH, rolling-zscore regime classifiers
└── execution_model.py # Almgren-Chriss impact, TWAP/VWAP scheduling
cd backend
pip install -r requirements.txt
# Optional quant_ml extras
pip install hmmlearn arch scipy # for regime detection
pip install feast # for feature store
pip install optuna # for hyperparameter tuning
pip install mlflow # for experiment trackingcd backend
uvicorn core.app:app --host 0.0.0.0 --port 8000 --reloadThe backend starts successfully when you see:
INFO: Database initialized successfully
INFO: Uvicorn running on http://0.0.0.0:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- Health Check: http://localhost:8000/health
- Prometheus Metrics: http://localhost:8000/metrics
Copy .env.example to .env and configure:
SECRET_KEY=your-secret-key-change-in-production
JWT_SECRET=your-jwt-secret-change-in-production
# Database (defaults to SQLite)
DATABASE_URL=sqlite:///./quantis.db
# Redis (optional — enables Celery background tasks)
REDIS_URL=redis://localhost:6379/0
CELERY_BROKER_URL=redis://localhost:6379/0
# Email (optional)
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=[email protected]
SMTP_PASSWORD=your-password# From project root
pytest backend/tests/ -v
# Run specific test module
pytest backend/tests/test_model.py -vfrom quant_ml.quant import (
risk_report,
MeanVarianceOptimizer,
RiskParityOptimizer,
BlackLittermanOptimizer,
VectorisedBacktester,
BacktestConfig,
WalkForwardValidator,
HMMRegimeDetector,
RollingZScoreRegimeDetector,
momentum,
low_volatility,
combine_signals,
AlmgrenChrissModel,
ExecutionParams,
)
# Risk metrics
import numpy as np
returns = np.random.randn(252) * 0.01
report = risk_report(returns)
print(report)
# Portfolio optimisation (Mean-Variance)
import pandas as pd
prices = pd.DataFrame(np.random.randn(500, 5).cumsum(axis=0) + 100,
columns=list("ABCDE"))
ret_df = prices.pct_change().dropna()
mvo = MeanVarianceOptimizer(ret_df)
result = mvo.max_sharpe()
print(result["weights"])
# Vectorised backtesting
config = BacktestConfig(commission_bps=5, rebalance_freq="W")
bt = VectorisedBacktester(config)
signals = momentum(prices)
bt_result = bt.run(prices, signals)
print(bt_result.performance)
# Regime detection (no extra deps)
from quant_ml.quant import RollingZScoreRegimeDetector
detector = RollingZScoreRegimeDetector(window=63)
regimes = detector.fit_predict(ret_df.iloc[:, 0])
# Execution cost estimation
params = ExecutionParams(
symbol="AAPL", avg_daily_volume=5_000_000, price=180.0
)
ac = AlmgrenChrissModel(params)
estimate = ac.pre_trade_estimate(order_shares=10_000, horizon_days=5)
print(estimate)