screener.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """
  2. 智能股票分析助手 — 智能选股API路由
  3. 提供条件选股、可用选股条件查询接口。
  4. """
  5. from fastapi import APIRouter, Query
  6. from app.services import screener_service
  7. from app.utils.mx_http import mx_result_to_http
  8. from app.utils.response import success_response, error_response
  9. router = APIRouter(prefix="/screener", tags=["智能选股"])
  10. @router.get("/conditions")
  11. async def get_screener_conditions():
  12. """获取可用的选股条件参考
  13. 返回选股维度分类和示例条件,供前端展示和用户参考。
  14. """
  15. result = screener_service.get_available_conditions()
  16. if not result.get("success"):
  17. return error_response(code=500, message=result.get("error", "获取条件失败"))
  18. return success_response(data=result)
  19. @router.post("/search")
  20. async def screen_stocks(
  21. query: str = Query(..., description="自然语言选股条件"),
  22. ):
  23. """条件选股
  24. 根据自然语言描述的选股条件,筛选符合条件的股票。
  25. - **query**: 自然语言选股条件,如:
  26. - "市盈率小于20且ROE大于15%的A股"
  27. - "新能源板块涨幅大于1%的股票"
  28. - "沪深300成分股中分红率最高的10只"
  29. - "价格小于20元 市盈率小于20 涨幅大于1%"
  30. """
  31. if not query or not query.strip():
  32. return error_response(code=400, message="请输入选股条件")
  33. result = screener_service.screen_stocks(query.strip())
  34. return mx_result_to_http(result)