From 5b2cb9082a8c381da44c0bb206236e48a4288780 Mon Sep 17 00:00:00 2001 From: paisley <8197966+su8su@users.noreply.github.com> Date: Fri, 5 Dec 2025 10:34:43 +0800 Subject: [PATCH] remove unused code --- python/valuecell/server/api/app.py | 14 --- .../valuecell/server/api/routers/trading.py | 108 ------------------ 2 files changed, 122 deletions(-) delete mode 100644 python/valuecell/server/api/routers/trading.py diff --git a/python/valuecell/server/api/app.py b/python/valuecell/server/api/app.py index 6852271f2..a35523d4a 100644 --- a/python/valuecell/server/api/app.py +++ b/python/valuecell/server/api/app.py @@ -24,17 +24,11 @@ from .routers.conversation import create_conversation_router from .routers.i18n import create_i18n_router from .routers.models import create_models_router - -# from .routers.strategy_alias import create_strategy_alias_router from .routers.strategy_api import create_strategy_api_router - -# from .routers.strategy_agent import create_strategy_agent_router from .routers.system import create_system_router from .routers.task import create_task_router from .routers.user_profile import create_user_profile_router from .routers.watchlist import create_watchlist_router - -# from .routers.strategy import create_strategy_router from .schemas import AppInfoData, SuccessResponse @@ -242,14 +236,6 @@ async def health_check(): # Include task router app.include_router(create_task_router(), prefix=API_PREFIX) - # Include trading router - try: - from .routers.trading import create_trading_router - - app.include_router(create_trading_router(), prefix=API_PREFIX) - except Exception as e: - logger.info(f"Skip trading router because of import error: {e}") - # For uvicorn app = create_app() diff --git a/python/valuecell/server/api/routers/trading.py b/python/valuecell/server/api/routers/trading.py deleted file mode 100644 index 099dda31f..000000000 --- a/python/valuecell/server/api/routers/trading.py +++ /dev/null @@ -1,108 +0,0 @@ -"""Trading-related API routes: positions, balances, etc.""" - -from __future__ import annotations - -import os -from typing import Dict, List, Optional - -from fastapi import APIRouter, HTTPException, Query - -from valuecell.agents.auto_trading_agent.exchanges.okx_exchange import ( - OKXExchange, -) -from valuecell.server.api.schemas.base import SuccessResponse -from valuecell.server.api.schemas.trading import ( - OpenPositionsData, - OpenPositionsResponse, - PositionItem, -) - - -def create_trading_router() -> APIRouter: - """Create trading router with endpoints for positions and balances.""" - - router = APIRouter(prefix="/trading", tags=["Trading"]) - - @router.get( - "/positions", - response_model=OpenPositionsResponse, - summary="Get open positions", - description="Fetch current open positions and unrealized P&L from the configured exchange", - ) - async def get_open_positions( - exchange: Optional[str] = Query(None, description="Exchange name"), - network: Optional[str] = Query( - None, description="Network/environment, e.g. testnet|mainnet|paper" - ), - ) -> OpenPositionsResponse: - try: - # Resolve target exchange: query > env > default - resolved_exchange = ( - exchange or os.getenv("AUTO_TRADING_EXCHANGE", "paper") - ).lower() - - items: List[PositionItem] = [] - - if resolved_exchange == "okx": - api_key = os.getenv("OKX_API_KEY", "").strip() - api_secret = os.getenv("OKX_API_SECRET", "").strip() - passphrase = os.getenv("OKX_API_PASSPHRASE", "").strip() - (os.getenv("OKX_ALLOW_LIVE_TRADING", "false").lower() == "true") - resolved_network = ( - network or os.getenv("OKX_NETWORK", "paper") - ).lower() - - okx = OKXExchange( - api_key=api_key, - api_secret=api_secret, - passphrase=passphrase, - network=resolved_network, - # default to contracts; margin_mode/inst_type internal defaults - ) - await okx.connect() - raw_positions: Dict[ - str, Dict[str, float] - ] = await okx.get_open_positions() - - for symbol, pos in raw_positions.items(): - qty = float(pos.get("quantity", 0.0) or 0.0) - entry_px = float(pos.get("entry_price", 0.0) or 0.0) - try: - current_px = await okx.get_current_price(symbol) - except Exception: - current_px = None - unreal_pnl = float(pos.get("unrealized_pnl", 0.0) or 0.0) - notional = abs(qty) * entry_px if entry_px else 0.0 - pnl_pct = (unreal_pnl / notional * 100.0) if notional else None - items.append( - PositionItem( - symbol=symbol, - quantity=qty, - entry_price=entry_px, - current_price=current_px, - unrealized_pnl=unreal_pnl, - pnl_percent=pnl_pct, - ) - ) - data = OpenPositionsData( - exchange="okx", network=resolved_network, positions=items - ) - return SuccessResponse.create(data=data, msg="Retrieved open positions") - - # Paper / unsupported exchange: return empty set gracefully - resolved_network = network or os.getenv("OKX_NETWORK") or "paper" - data = OpenPositionsData( - exchange=resolved_exchange, network=resolved_network, positions=[] - ) - return SuccessResponse.create( - data=data, msg="No positions for selected exchange" - ) - - except HTTPException: - raise - except Exception as e: # pragma: no cover - generic server error wrapper - raise HTTPException( - status_code=500, detail=f"Failed to fetch positions: {str(e)}" - ) - - return router