diff --git a/frontend/src/app/agent/components/strategy-items/trade-strategy-group.tsx b/frontend/src/app/agent/components/strategy-items/trade-strategy-group.tsx index 24b8c6fd7..3e7072af5 100644 --- a/frontend/src/app/agent/components/strategy-items/trade-strategy-group.tsx +++ b/frontend/src/app/agent/components/strategy-items/trade-strategy-group.tsx @@ -79,6 +79,9 @@ const TradeStrategyCard: FC = ({

{strategy.trading_mode === "live" ? "Live" : "Virtual"}

+

+ {strategy.decide_interval ?? 60}s +

{/* Model and Exchange Info */} diff --git a/frontend/src/app/rank/board.tsx b/frontend/src/app/rank/board.tsx index 793c9ed60..57a27512b 100644 --- a/frontend/src/app/rank/board.tsx +++ b/frontend/src/app/rank/board.tsx @@ -213,6 +213,21 @@ export default function RankBoard() {

Max Leverage

{strategyDetail.max_leverage}x +

Decision Interval

+ + {`${Number( + strategyDetail.decide_interval ?? + ("decideInterval" in strategyDetail + ? ( + strategyDetail as unknown as { + decideInterval?: number; + } + ).decideInterval + : undefined) ?? + 60, + )}s`} + +

Trading Symbols

{strategyDetail.symbols.join(", ")} diff --git a/frontend/src/types/strategy.ts b/frontend/src/types/strategy.ts index e070be6d0..9622e1716 100644 --- a/frontend/src/types/strategy.ts +++ b/frontend/src/types/strategy.ts @@ -12,6 +12,7 @@ export interface Strategy { created_at: string; exchange_id: string; model_id: string; + decide_interval?: number; } // Strategy Performance types diff --git a/frontend/src/types/system.ts b/frontend/src/types/system.ts index 1db398301..9234febcc 100644 --- a/frontend/src/types/system.ts +++ b/frontend/src/types/system.ts @@ -35,6 +35,7 @@ export interface StrategyDetail { llm_model_id: string; max_leverage: number; initial_capital: number; + decide_interval?: number; prompt: string; } diff --git a/python/valuecell/server/api/routers/strategy.py b/python/valuecell/server/api/routers/strategy.py index 001c63ea9..408300726 100644 --- a/python/valuecell/server/api/routers/strategy.py +++ b/python/valuecell/server/api/routers/strategy.py @@ -150,6 +150,7 @@ def normalize_strategy_type( for s in strategies: meta = s.strategy_metadata or {} cfg = s.config or {} + tr = cfg.get("trading_config") or {} status = map_status(s.status) stop_reason_display = "" if status == "stopped": @@ -189,6 +190,11 @@ def normalize_strategy_type( or cfg.get("model_id") or cfg.get("llm_model_id") ), + decide_interval=( + int(tr.get("decide_interval")) + if tr.get("decide_interval") is not None + else None + ), ) strategy_data_list.append(item) diff --git a/python/valuecell/server/api/schemas/strategy.py b/python/valuecell/server/api/schemas/strategy.py index 5ba53d5b6..702eff62a 100644 --- a/python/valuecell/server/api/schemas/strategy.py +++ b/python/valuecell/server/api/schemas/strategy.py @@ -39,6 +39,9 @@ class StrategySummaryData(BaseModel): None, description="Associated exchange identifier" ) model_id: Optional[str] = Field(None, description="Associated model identifier") + decide_interval: Optional[int] = Field( + None, description="Decision interval in seconds" + ) class StrategyListData(BaseModel):