quanthedge / backend /app /routers /quant.py
jashdoshi77's picture
QuantHedge: Full deployment with Docker + nginx + uvicorn
9d29748
Raw
History Blame Contribute Delete
2.02 kB
"""
Factors & Signals Router.
Endpoints for factor analysis, signal generation, and quantitative research.
"""
from __future__ import annotations
from fastapi import APIRouter, Depends
from app.dependencies import get_current_user
from app.schemas.backtest import (
FactorAnalysisRequest,
FactorAnalysisResponse,
SignalGenerateRequest,
SignalResponse,
)
from app.services.factors.engine import factor_engine
from app.services.signals.engine import signal_engine
router = APIRouter(prefix="/quant", tags=["Quantitative Analysis"])
# ── Factors ──────────────────────────────────────────────────────────────
@router.post("/factors/analyze")
async def analyze_factors(request: FactorAnalysisRequest):
"""Compute multi-factor exposures for a universe of tickers."""
result = await factor_engine.compute_factor_exposures(
tickers=request.tickers,
factors=request.factors,
period=request.period,
)
return result
@router.get("/factors/definitions")
async def get_factor_definitions():
"""Get metadata for all supported factors."""
return factor_engine.get_factor_definitions()
# ── Signals ──────────────────────────────────────────────────────────────
@router.post("/signals/generate")
async def generate_signals(request: SignalGenerateRequest):
"""Generate quantitative trading signals for tickers."""
results = await signal_engine.generate_signals(
tickers=request.tickers,
signal_types=request.signal_types,
period=request.period,
)
return {
"results": [
{"ticker": ticker, "signals": signals}
for ticker, signals in results.items()
],
"total_signals": sum(len(s) for s in results.values()),
}