Implement EMOS scan terminal with REST-only market data
This commit is contained in:
@@ -3,17 +3,9 @@
|
||||
import React from "react";
|
||||
import { TrendingUp, BarChart3, Radio, DollarSign, Target } from "lucide-react";
|
||||
import { useI18n } from "@/hooks/useI18n";
|
||||
import type { ScanTerminalResponse } from "@/lib/dashboard-types";
|
||||
|
||||
interface KPIData {
|
||||
recommendedCount: number;
|
||||
recommendedDelta?: number;
|
||||
avgEdge: number | null;
|
||||
avgEdgeDelta?: number | null;
|
||||
totalWinRate: number | null;
|
||||
tradableMarkets: number;
|
||||
filteredTotal: number;
|
||||
totalVolume: number;
|
||||
}
|
||||
type KPIData = ScanTerminalResponse["summary"];
|
||||
|
||||
function formatVolume(value: number): string {
|
||||
if (value >= 1_000_000) return `$${(value / 1_000_000).toFixed(1)}M`;
|
||||
@@ -29,42 +21,41 @@ export function ScanKPIBar({ data }: { data: KPIData }) {
|
||||
{
|
||||
icon: Target,
|
||||
label: isEn ? "Recommended" : "推荐机会",
|
||||
value: String(data.recommendedCount),
|
||||
delta:
|
||||
data.recommendedDelta != null
|
||||
? `${isEn ? "vs last" : "较上次"} ${data.recommendedDelta > 0 ? "+" : ""}${data.recommendedDelta}`
|
||||
: null,
|
||||
value: String(data.recommended_count),
|
||||
delta: `${isEn ? "Showing" : "当前展示"} ${data.visible_count}`,
|
||||
accent: "green" as const,
|
||||
},
|
||||
{
|
||||
icon: TrendingUp,
|
||||
label: isEn ? "Avg Edge" : "平均边际优势",
|
||||
value: data.avgEdge != null ? `+${data.avgEdge.toFixed(1)}%` : "--",
|
||||
delta:
|
||||
data.avgEdgeDelta != null
|
||||
? `${isEn ? "vs last" : "较上次"} ${data.avgEdgeDelta > 0 ? "+" : ""}${data.avgEdgeDelta.toFixed(1)}%`
|
||||
: null,
|
||||
value:
|
||||
data.avg_edge_percent != null
|
||||
? `+${data.avg_edge_percent.toFixed(1)}%`
|
||||
: "--",
|
||||
delta: `${isEn ? "Candidates" : "候选总数"} ${data.candidate_total}`,
|
||||
accent: "green" as const,
|
||||
},
|
||||
{
|
||||
icon: BarChart3,
|
||||
label: isEn ? "Total Win Rate" : "总胜率预测",
|
||||
label: isEn ? "Avg Confidence" : "平均主信号置信度",
|
||||
value:
|
||||
data.totalWinRate != null ? `+${data.totalWinRate.toFixed(1)}%` : "--",
|
||||
delta: isEn ? "Model confidence" : "模型全分配",
|
||||
data.avg_primary_confidence != null
|
||||
? `${data.avg_primary_confidence.toFixed(0)}`
|
||||
: "--",
|
||||
delta: isEn ? "Main signal score" : "主信号评分",
|
||||
accent: "green" as const,
|
||||
},
|
||||
{
|
||||
icon: Radio,
|
||||
label: isEn ? "Tradable Markets" : "可交易市场",
|
||||
value: String(data.tradableMarkets),
|
||||
delta: `${isEn ? "Filtered" : "过滤后"} / ${data.filteredTotal}`,
|
||||
value: String(data.tradable_market_count),
|
||||
delta: data.resolved_market_type || "maxtemp",
|
||||
accent: "purple" as const,
|
||||
},
|
||||
{
|
||||
icon: DollarSign,
|
||||
label: isEn ? "Total Volume" : "总成交量",
|
||||
value: formatVolume(data.totalVolume),
|
||||
value: formatVolume(data.total_volume),
|
||||
delta: isEn ? "Past 24h" : "过去 24 小时",
|
||||
accent: "purple" as const,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user