Coverage for api/v1/endpoints/strategies.py: 58.70%
46 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 18:58 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 18:58 +0000
1"""
2策略管理API端点
3"""
5from typing import Any, Dict, List
7from fastapi import APIRouter, Depends, HTTPException
8from pydantic import BaseModel
10from core.middleware.auth_middleware import get_current_user
11from core.models.user import User
12from core.trading.strategies.strategy_factory import (
13 get_available_strategies, get_strategy_parameters,
14 get_strategy_recommended_risk_config, get_strategy_template,
15 validate_strategy_config)
17router = APIRouter()
20class StrategyConfigRequest(BaseModel):
21 """策略配置请求"""
23 strategy_name: str
24 config: Dict[str, Any]
27class StrategyConfigResponse(BaseModel):
28 """策略配置响应"""
30 valid: bool
31 errors: List[str] = []
32 warnings: List[str] = []
33 config: Dict[str, Any] = {}
36@router.get("/", response_model=Dict[str, Any])
37async def get_available_strategies_list(current_user: User = Depends(get_current_user)):
38 """获取可用策略列表"""
39 return get_available_strategies()
42@router.get("/{strategy_name}")
43async def get_strategy_info(
44 strategy_name: str, current_user: User = Depends(get_current_user)
45):
46 """获取策略详情"""
47 available_strategies = get_available_strategies()
49 if strategy_name not in available_strategies:
50 raise HTTPException(status_code=404, detail="策略不存在")
52 return available_strategies[strategy_name]
55@router.post("/validate", response_model=StrategyConfigResponse)
56async def validate_strategy_configuration(
57 request: StrategyConfigRequest, current_user: User = Depends(get_current_user)
58):
59 """验证策略配置"""
60 result = validate_strategy_config(request.strategy_name, request.config)
62 return StrategyConfigResponse(
63 valid=result["valid"],
64 errors=result["errors"],
65 warnings=result["warnings"],
66 config=result.get("config", {}),
67 )
70@router.get("/{strategy_name}/risk-config")
71async def get_strategy_recommended_risk_configuration(
72 strategy_name: str, current_user: User = Depends(get_current_user)
73):
74 """获取策略推荐的风险配置"""
75 risk_config = get_strategy_recommended_risk_config(strategy_name)
77 if not risk_config:
78 raise HTTPException(status_code=404, detail="策略不存在")
80 return {"strategy_name": strategy_name, "recommended_risk_config": risk_config}
83@router.get("/{strategy_name}/parameters")
84async def get_strategy_parameters_list(
85 strategy_name: str, current_user: User = Depends(get_current_user)
86):
87 """获取策略参数定义"""
88 parameters = get_strategy_parameters(strategy_name)
90 if not parameters:
91 raise HTTPException(status_code=404, detail="策略不存在")
93 return {"strategy_name": strategy_name, "parameters": parameters}
96@router.get("/{strategy_name}/template")
97async def get_strategy_template_info(
98 strategy_name: str, current_user: User = Depends(get_current_user)
99):
100 """获取策略配置模板"""
101 template = get_strategy_template(strategy_name)
103 if not template:
104 raise HTTPException(status_code=404, detail="策略不存在")
106 return template