""" 策略管理路由 处理策略的创建、初始化、启动、停止 """ from fastapi import APIRouter, Depends, HTTPException, status from typing import List import logging from ..models import ( StrategyInfo, StrategyCreateRequest, StrategyInitRequest, StrategyStartRequest, StrategyStopRequest, StrategyEditRequest ) from ..deps import get_current_user, get_vn_service logger = logging.getLogger(__name__) router = APIRouter() @router.get("/list", response_model=List[StrategyInfo]) async def list_strategies( current_user: dict = Depends(get_current_user), vn_service=Depends(get_vn_service) ): """ 获取所有策略信息 """ strategies = await vn_service.get_strategies() return [ StrategyInfo( strategy_name=s["strategy_name"], class_name=s["class_name"], status=s["status"], created_at=s["created_at"], variables=s.get("variables") ) for s in strategies ] @router.post("/create") async def create_strategy( request: StrategyCreateRequest, current_user: dict = Depends(get_current_user), vn_service=Depends(get_vn_service) ): """ 创建策略 - **strategy_name**: 策略名称 - **class_name**: 策略类名 - **setting**: 策略参数 """ # 占位实现 logger.info(f"Creating strategy: {request.strategy_name}") return { "success": True, "message": f"Strategy {request.strategy_name} created successfully" } @router.post("/init") async def init_strategy( request: StrategyInitRequest, current_user: dict = Depends(get_current_user), vn_service=Depends(get_vn_service) ): """ 初始化策略 - **strategy_name**: 策略名称 """ success = await vn_service.init_strategy(request.strategy_name) if success: return {"success": True, "message": "Strategy initialized successfully"} else: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to initialize strategy {request.strategy_name}" ) @router.post("/start") async def start_strategy( request: StrategyStartRequest, current_user: dict = Depends(get_current_user), vn_service=Depends(get_vn_service) ): """ 启动策略 - **strategy_name**: 策略名称 """ success = await vn_service.start_strategy(request.strategy_name) if success: return {"success": True, "message": "Strategy started successfully"} else: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to start strategy {request.strategy_name}" ) @router.post("/stop") async def stop_strategy( request: StrategyStopRequest, current_user: dict = Depends(get_current_user), vn_service=Depends(get_vn_service) ): """ 停止策略 - **strategy_name**: 策略名称 """ success = await vn_service.stop_strategy(request.strategy_name) if success: return {"success": True, "message": "Strategy stopped successfully"} else: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to stop strategy {request.strategy_name}" ) @router.post("/edit") async def edit_strategy( request: StrategyEditRequest, current_user: dict = Depends(get_current_user), vn_service=Depends(get_vn_service) ): """ 编辑策略参数 - **strategy_name**: 策略名称 - **setting**: 新的参数 """ logger.info(f"Editing strategy: {request.strategy_name}") return { "success": True, "message": "Strategy parameters updated successfully" }