feat: add strategy API endpoints

- POST /api/strategy/multi-factor
- POST /api/strategy/quality
- POST /api/strategy/value-momentum

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
zephyrdark 2026-02-03 09:01:10 +09:00
parent 3f8ef7e108
commit 6a6ccc9c57
3 changed files with 67 additions and 2 deletions

View File

@ -1,5 +1,6 @@
from app.api.auth import router as auth_router
from app.api.admin import router as admin_router
from app.api.portfolio import router as portfolio_router
from app.api.strategy import router as strategy_router
__all__ = ["auth_router", "admin_router", "portfolio_router"]
__all__ = ["auth_router", "admin_router", "portfolio_router", "strategy_router"]

View File

@ -0,0 +1,63 @@
"""
Quant strategy API endpoints.
"""
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.api.deps import CurrentUser
from app.schemas.strategy import (
MultiFactorRequest, QualityRequest, ValueMomentumRequest, StrategyResult,
)
from app.services.strategy import MultiFactorStrategy, QualityStrategy, ValueMomentumStrategy
router = APIRouter(prefix="/api/strategy", tags=["strategy"])
@router.post("/multi-factor", response_model=StrategyResult)
async def run_multi_factor(
request: MultiFactorRequest,
current_user: CurrentUser,
db: Session = Depends(get_db),
):
"""Run multi-factor strategy."""
strategy = MultiFactorStrategy(db)
return strategy.run(
universe_filter=request.universe,
top_n=request.top_n,
base_date=request.base_date,
weights=request.weights,
)
@router.post("/quality", response_model=StrategyResult)
async def run_quality(
request: QualityRequest,
current_user: CurrentUser,
db: Session = Depends(get_db),
):
"""Run super quality strategy."""
strategy = QualityStrategy(db)
return strategy.run(
universe_filter=request.universe,
top_n=request.top_n,
base_date=request.base_date,
min_fscore=request.min_fscore,
)
@router.post("/value-momentum", response_model=StrategyResult)
async def run_value_momentum(
request: ValueMomentumRequest,
current_user: CurrentUser,
db: Session = Depends(get_db),
):
"""Run value-momentum strategy."""
strategy = ValueMomentumStrategy(db)
return strategy.run(
universe_filter=request.universe,
top_n=request.top_n,
base_date=request.base_date,
value_weight=request.value_weight,
momentum_weight=request.momentum_weight,
)

View File

@ -4,7 +4,7 @@ Galaxy-PO Backend API
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api import auth_router, admin_router, portfolio_router
from app.api import auth_router, admin_router, portfolio_router, strategy_router
app = FastAPI(
title="Galaxy-PO API",
@ -24,6 +24,7 @@ app.add_middleware(
app.include_router(auth_router)
app.include_router(admin_router)
app.include_router(portfolio_router)
app.include_router(strategy_router)
@app.get("/health")