918bbed0fc
- 修复 deps.py 中 get_vn_service 的引用错误 (vn_service.vn_service -> vn_service) - 移除登录页面上的明文密码提示 - 改进前端错误处理,避免数据加载失败导致登录显示错误
146 lines
3.7 KiB
Python
146 lines
3.7 KiB
Python
"""
|
|
策略管理路由
|
|
处理策略的创建、初始化、启动、停止
|
|
"""
|
|
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"
|
|
}
|