diff --git a/apps/web/app/(pages)/replay/page.tsx b/apps/web/app/(pages)/replay/page.tsx index bdd2d47..53bcf50 100644 --- a/apps/web/app/(pages)/replay/page.tsx +++ b/apps/web/app/(pages)/replay/page.tsx @@ -1,234 +1,17 @@ -import { api } from "@/lib/api"; -import { formatPct, formatScore } from "@/lib/format"; -import { Badge } from "@/components/shared/badge"; import { Card, CardHeader } from "@/components/shared/card"; - -function outcomeVariant(label: string): "ok" | "warn" | "danger" { - if (label === "강한 적중" || label === "양호") { - return "ok"; - } - if (label === "혼조") { - return "warn"; - } - return "danger"; -} - -function tierLabel(tier: string) { - return tier === "leader" ? "주도주" : "2등주"; -} - -export default async function ReplayPage() { - try { - const data = await api.weeklyReplay(); - - return ( -
Window
-{data.windowLabel}
-- 현재 운영 중인 추론 규칙을 같은 방식으로 과거 구간에 재적용한 결과입니다. -
-Hit Days
-- {data.aggregate.positiveHitDays} / {data.aggregate.daysAnalyzed} -
-- 상위 테마 주도주의 평균 종가 수익률이 양호 이상이었던 날짜 수입니다. -
-Avg Leader Return
-- {formatPct(data.aggregate.avgLeaderCloseReturnPct)} -
-- 전체 리플레이 기준 주도주 평균 종가 수익률입니다. -
-Replay Day
-- 추론 기준 시각 {day.asOfLabel} / evidence hash {day.evidencePackHash.slice(0, 12)} -
-KOSPI {formatPct(day.marketContext.kospiCloseReturnPct)}
-KOSDAQ {formatPct(day.marketContext.kosdaqCloseReturnPct)}
-{day.marketContext.summary}
-{day.summary}
-- {theme.rationale} -
-주도주 평균 {formatPct(theme.actualOutcome.avgLeaderCloseReturnPct)}
-- 최고 수익 {theme.actualOutcome.bestStockLabel ?? "-"} - {theme.actualOutcome.bestCloseReturnPct !== null - ? ` / ${formatPct(theme.actualOutcome.bestCloseReturnPct)}` - : ""} -
-예상 주도주 / 2등주
-- 주도주: {theme.leaders.map((item) => `${item.ticker} ${item.name}`).join(", ") || "-"} -
-- 2등주: {theme.secondTier.map((item) => `${item.ticker} ${item.name}`).join(", ") || "-"} -
-- 무효화 조건: {theme.invalidationCondition} -
-실제 종목 반응
-- {stock.ticker} {stock.name} -
-- 시가 갭 {formatPct(stock.openGapPct)} / 종가 수익률 {formatPct(stock.closeReturnPct)} / 장중 변화{" "} - {formatPct(stock.intradayMovePct)} -
-- 실제 종목 데이터를 불러오지 못했습니다. -
- )} -근거 이벤트
-- {item.categoryLabel} -
-{item.title}
-- {item.summary} -
-- {item.sourceName} / {item.publishedAtLabel} -
- - 원문 보기 - -오류 메시지
-{message}
-Loading
++ 리플레이 데이터를 불러오는 중입니다. 최근 7거래일 미국 이벤트와 한국장 결과를 정리하고 있습니다. +
+리플레이 데이터를 불러오지 못했습니다
++ {error ?? "알 수 없는 오류"} +
+Window
+{data.windowLabel}
++ 현재 운영 중인 추론 규칙과 동일한 방식으로 과거 구간을 재구성한 결과입니다. +
+Hit Days
++ {data.aggregate.positiveHitDays} / {data.aggregate.daysAnalyzed} +
++ 상위 테마 주도주의 평균 종가 수익률이 양호 이상이었던 날짜 비중입니다. +
+Avg Leader Return
++ {formatPct(data.aggregate.avgLeaderCloseReturnPct)} +
++ 전체 리플레이 기준 주도주의 평균 종가 수익률입니다. +
+Replay Day
++ 추론 기준 시각 {day.asOfLabel} / evidence hash {day.evidencePackHash.slice(0, 12)} +
+KOSPI {formatPct(day.marketContext.kospiCloseReturnPct)}
+KOSDAQ {formatPct(day.marketContext.kosdaqCloseReturnPct)}
+{day.marketContext.summary}
+{day.summary}
++ {theme.rationale} +
+주도주 평균 {formatPct(theme.actualOutcome.avgLeaderCloseReturnPct)}
++ 최고 수익 {theme.actualOutcome.bestStockLabel ?? "-"} + {theme.actualOutcome.bestCloseReturnPct !== null + ? ` / ${formatPct(theme.actualOutcome.bestCloseReturnPct)}` + : ""} +
+예상 주도주 / 2등주
++ 주도주: {theme.leaders.map((item) => `${item.ticker} ${item.name}`).join(", ") || "-"} +
++ 2등주: {theme.secondTier.map((item) => `${item.ticker} ${item.name}`).join(", ") || "-"} +
++ 무효화 조건: {theme.invalidationCondition} +
+실제 종목 반응
++ {stock.ticker} {stock.name} +
++ 시가 갭 {formatPct(stock.openGapPct)} / 종가 수익률 {formatPct(stock.closeReturnPct)} / 장중 변화{" "} + {formatPct(stock.intradayMovePct)} +
++ 실제 종목 데이터를 불러오지 못했습니다. +
+ )} +근거 이벤트
++ {item.categoryLabel} +
+{item.title}
++ {item.summary} +
++ {item.sourceName} / {item.publishedAtLabel} +
+ + 원문 보기 + +