import { createResource, For, Show } from "solid-js"; import { api } from "../lib/api"; import { Term, IstilahStrip } from "../components/Awam"; import { Bar } from "solid-chartjs"; import { Chart, registerables } from "chart.js"; import { PageHead } from "../components/ui"; import { Badge } from "../components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../components/ui/card"; import { Skeleton } from "../components/ui/skeleton"; Chart.register(...registerables); function PortfolioInner() { const [risk] = createResource(() => api.risk()); const conc = () => risk()?.concentration || []; const betaN = () => Number(risk()?.beta ?? 1); const betaArti = () => { const b = betaN(); if (b > 1.2) return "bergerak lebih liar dari pasar — naik lebih kencang, turun lebih dalam."; if (b < 0.8) return "lebih kalem dari pasar — cocok buat yang tidak suka deg-degan."; return "geraknya seirama pasar — tidak terlalu liar, tidak terlalu kalem."; }; const saran = () => { const c = conc(); if (!c.length) return ""; // Sektor dulu (risiko sistemik) baru bobot single-ticker. const perSek: Record = {}; for (const x of c) perSek[x.sector] = (perSek[x.sector] || 0) + x.weight; const [sekTop, wSek] = Object.entries(perSek).sort((a, b) => b[1] - a[1])[0]; if (wSek > 0.4) return `Sektor ${sekTop} porsinya ${(wSek * 100).toFixed(0)}% — kalau sektor itu jatuh, semua ikut. Coba lirik sektor lain.`; const top = c[0]; if (top.weight > 0.4) return `${top.ticker} porsinya ${(top.weight * 100).toFixed(0)}% — kebanyakan telur di satu keranjang. Pertimbangkan tambah saham beda sektor.`; return "Sebarannya sudah lumayan — tidak numpuk di satu tempat. Pertahankan. 👍"; }; const chartData = () => ({ labels: conc().map((c) => c.ticker), datasets: [{ label: "Porsi %", data: conc().map((c) => +(c.weight * 100).toFixed(1)) }], }); return (
}> Saran 1 kalimat 💡

{saran() || "Tambah saham ke watchlist dulu biar bisa dinilai."}

Porsi tiap sahamSiapa yang paling dominan di -mu. Tambah saham ke watchlist dulu.

}>
{(w) =>

⚠️ {w}

}
Kelakuan vs pasarSkor beta = {betaN().toFixed(2)}

Portofolio kamu {betaArti()}

: {[...new Set(conc().map((x) => x.sector))].length} sektor
); } import { Gate } from "../index"; export default function Portfolio() { return {PortfolioInner()}; }