import type { Metadata } from "next"; import Link from "next/link"; import { InstrumentTable } from "@/components/market/instrument-table"; import { Page, PageHeader, Section, Stat } from "@/components/ui/section"; import { api } from "@/lib/api"; import type { MarketsOverview } from "@/lib/types"; export const metadata: Metadata = { title: "Markets overview", description: "Indices, equities, crypto, forex, rates and commodities — one canonical, multi-source view.", alternates: { canonical: "/markets" } }; export const dynamic = "force-dynamic"; export default async function MarketsPage() { const m = await api("/v1/markets"); const open = m.exchanges.filter((e) => e.status.state === "OPEN"); const b = m.breadth; return (
e.name.split(" ")[0]).join(", ") || "none trading"} /> b.decliners ? "pos" : b.decliners > b.advancers ? "neg" : undefined} />

Prices are aggregations of independent observations. Read the methodology and the data rights page for what each status means.

); }