import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; async function getTrades() { const DB = "/home/fzq1228/polyscout/data/polyscout.db"; const { execSync } = await import("child_process"); const py = `import sqlite3,json; conn=sqlite3.connect('${DB}'); c=conn.cursor(); c.execute("""SELECT market_id, question, bet_direction, entry_price, bet_amount, end_date, status, pnl, created_at FROM paper_trades ORDER BY created_at DESC LIMIT 50"""); print(json.dumps(c.fetchall(), ensure_ascii=False, default=str)); conn.close()`; try { return JSON.parse(execSync(`python3 -c ${JSON.stringify(py)}`, { encoding: "utf8" })); } catch { return []; } } async function getStats() { const DB = "/home/fzq1228/polyscout/data/polyscout.db"; const { execSync } = await import("child_process"); const py = `import sqlite3,json; conn=sqlite3.connect('${DB}'); c=conn.cursor(); c.execute("SELECT status, COUNT(*) FROM paper_trades GROUP BY status"); print(json.dumps(c.fetchall(), ensure_ascii=False)); conn.close()`; try { return JSON.parse(execSync(`python3 -c ${JSON.stringify(py)}`, { encoding: "utf8" })); } catch { return []; } } const statusMap: Record = { open: "进行中", won: "盈利 ✅", lost: "亏损 ❌" }; const statusVariant: Record = { open: "secondary", won: "default", lost: "destructive" }; export default async function TradesPage() { const [rows, stats] = await Promise.all([getTrades(), getStats()]); const statsMap = Object.fromEntries(stats.map((s: any[]) => [s[0], s[1]])); const totalPnl = rows.reduce((sum: number, r: any[]) => sum + (r[7] || 0), 0); return (

模拟交易

信号验证 — 模拟下注记录(每注 $1)

总注单
{rows.length}
进行中
{statsMap['open'] || 0}
已盈利
{statsMap['won'] || 0}
模拟总盈亏
= 0 ? 'text-green-400' : 'text-red-400'}`}> {totalPnl >= 0 ? '+' : ''}{totalPnl.toFixed(2)}
{rows.length === 0 ? ( ) : rows.map((r: any[], i: number) => ( ))}
市场 方向 入场价 到期日 状态 盈亏
暂无模拟交易
{String(r[0]).slice(0, 8)}
{r[1]}
{r[2]} {(Number(r[3]) * 100).toFixed(1)}¢ {String(r[5]).slice(0, 10)} {statusMap[r[6]] ?? r[6]} {r[7] != null ? ( = 0 ? 'text-green-400' : 'text-red-400'}> {r[7] >= 0 ? '+' : ''}{Number(r[7]).toFixed(2)} ) : -}
); }