Spaces:
Running
Running
| <html lang="en" class="dark inter_48bf155c-module__tUfyVa__variable jetbrains_mono_39c8d23b-module__WK7_cq__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/3ccb3s36a-ev0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1kbvvjb8xiuz5.js"/><script src="/_next/static/chunks/27jktro2p5rq9.js" async=""></script><script src="/_next/static/chunks/2ne35xpb2gco9.js" async=""></script><script src="/_next/static/chunks/3rxl-jt3pdxgx.js" async=""></script><script src="/_next/static/chunks/turbopack-2w-hlngzk4qal.js" async=""></script><script src="/_next/static/chunks/1e176kr40-yyy.js" async=""></script><script src="/_next/static/chunks/0ce9zjk5_q3eu.js" async=""></script><script src="/_next/static/chunks/07arni_h-ml32.js" async=""></script><script src="/_next/static/chunks/1-8s9_t85wwr4.js" async=""></script><meta name="next-size-adjust" content=""/><title>Jolash</title><meta name="description" content="Jolash trading AI — team dashboard"/><link rel="icon" href="/favicon.ico?favicon.2vob68tjqpejf.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="min-h-screen bg-app-gradient text-foreground md:flex md:flex-row"><div hidden=""><!--$--><!--/$--></div><div class="sticky top-0 h-screen px-3 py-4 hidden md:flex md:flex-col bg-neutral-100 dark:bg-neutral-800 w-[228px] flex-shrink-0 justify-between gap-10 !bg-[oklch(0.155_0_0)]"><div class="flex flex-1 flex-col overflow-x-hidden overflow-y-auto"><a class="flex items-center gap-2 py-1" href="/"><div class="flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-neutral-200 text-sm font-semibold text-neutral-900">J</div><span class="whitespace-pre text-sm font-medium tracking-tight text-neutral-100">Jolash</span></a><div class="mt-6 flex flex-col"><div><div class="overflow-hidden px-2.5 pt-4 pb-1 first:pt-0"><span class="whitespace-pre text-[10px] font-medium uppercase tracking-wider text-neutral-600">Research</span></div><div class="flex flex-col gap-0.5"><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Overview</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/hypotheses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-flask-conical h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"></path><path d="M6.453 15h11.094"></path><path d="M8.5 2h7"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Hypotheses</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/backtests"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-line h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M3 3v16a2 2 0 0 0 2 2h16"></path><path d="m19 9-5 5-4-4-3 3"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Backtest Results</span></a></div></div><div><div class="overflow-hidden px-2.5 pt-4 pb-1 first:pt-0"><span class="whitespace-pre text-[10px] font-medium uppercase tracking-wider text-neutral-600">Risk & Execution</span></div><div class="flex flex-col gap-0.5"><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 bg-white/[0.07] text-neutral-100 shadow-[inset_0_1px_0_rgba(255,255,255,0.04)]" href="/risk"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-alert h-4 w-4 shrink-0 transition-colors text-neutral-100" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="M12 8v4"></path><path d="M12 16h.01"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Risk Dashboard</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/execution"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Live Execution</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/decay"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-down h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M16 17h6v-6"></path><path d="m22 17-8.5-8.5-5 5L2 7"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Decay Tracking</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/live"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-radio h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M16.247 7.761a6 6 0 0 1 0 8.478"></path><path d="M19.075 4.933a10 10 0 0 1 0 14.134"></path><path d="M4.925 19.067a10 10 0 0 1 0-14.134"></path><path d="M7.753 16.239a6 6 0 0 1 0-8.478"></path><circle cx="12" cy="12" r="2"></circle></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Live Market Data</span></a></div></div><div><div class="overflow-hidden px-2.5 pt-4 pb-1 first:pt-0"><span class="whitespace-pre text-[10px] font-medium uppercase tracking-wider text-neutral-600">Infrastructure</span></div><div class="flex flex-col gap-0.5"><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/datasets"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Datasets & Models</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/data-health"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hard-drive h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M10 16h.01"></path><path d="M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path><path d="M21.946 12.013H2.054"></path><path d="M6 16h.01"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Data Health</span></a><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/agents"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Team & Agents</span></a></div></div><div><div class="overflow-hidden px-2.5 pt-4 pb-1 first:pt-0"><span class="whitespace-pre text-[10px] font-medium uppercase tracking-wider text-neutral-600">Compliance</span></div><div class="flex flex-col gap-0.5"><a class="flex items-center justify-start gap-2 group/sidebar rounded-lg px-2.5 py-1.5 -mx-0.5 text-[13px] font-normal transition-all duration-150 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" href="/compliance"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clipboard-list h-4 w-4 shrink-0 transition-colors text-neutral-500" aria-hidden="true"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"></rect><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><path d="M12 11h4"></path><path d="M12 16h4"></path><path d="M8 11h.01"></path><path d="M8 16h.01"></path></svg><span class="text-neutral-700 dark:text-neutral-200 text-sm group-hover/sidebar:translate-x-1 transition duration-150 whitespace-pre inline-block !p-0 !m-0">Audit Trail</span></a></div></div></div></div></div><div class="h-10 px-4 py-4 flex flex-row md:hidden items-center justify-between bg-neutral-100 dark:bg-neutral-800 w-full"><div class="flex justify-end z-20 w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu text-neutral-800 dark:text-neutral-200 cursor-pointer" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></div></div><main class="flex-1 overflow-x-hidden md:m-2 md:rounded-2xl md:border md:border-white/[0.08] bg-[oklch(0.185_0_0)] md:min-h-[calc(100vh-1rem)]"><div class="mx-auto w-full max-w-6xl px-6 py-8 md:px-10"><div><div class="mb-8"><h1 class="text-2xl font-medium tracking-tight text-foreground">Risk Dashboard</h1><p class="mt-1.5 text-sm font-normal leading-relaxed text-muted-foreground">Vol-target position sizing and a drawdown guard — the sizing/risk layer from CLAUDE.md's 'Elements of a profitable strategy' framework, now live on the USDCHF paper-trading model.</p></div><div class="mb-6 flex items-start gap-3 rounded-xl border border-white/[0.08] bg-white/[0.02] px-4 py-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check mt-0.5 h-4 w-4 shrink-0 text-primary/70" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg><p class="text-sm leading-relaxed text-muted-foreground">Both pieces only ever <span class="text-foreground/90">scale a model's raw ±1 signal down</span>toward 0 — they never flip its sign or add leverage beyond the unscaled position. Validated impact on the confirmed USDCHF (1h, h=4) model: Sharpe 0.83 → 1.09 and max drawdown -5.2% → -3.0% on the 2024-25 test window; Sharpe 1.98 → 2.16 and drawdown -4.0% → -3.6% on the 2021-22 robustness window. This is one strategy — the roadmap's multi-strategy portfolio-combination layer doesn't exist yet.</p></div><div class="grid grid-cols-1 gap-4 lg:grid-cols-2"><div data-slot="card" data-size="default" class="group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl glass-panel"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing) border-b border-white/[0.06] pb-4"><div data-slot="card-title" class="font-heading font-medium group-data-[size=sm]/card:text-sm text-base">Vol-target sizing</div><p class="text-sm text-muted-foreground">position_sizing.py — vol_target_scale()</p></div><div data-slot="card-content" class="px-(--card-spacing) pt-6"><p class="text-sm leading-relaxed text-muted-foreground">Shrinks position size when recent realized volatility is above a 10% annualized target, grows it (capped at 1.0×, so it never levers past the unscaled signal) when vol is below target. Warm-up or zero-vol periods scale to 0 (flat).</p><div class="mt-5 flex items-end justify-between"><div><p class="font-data text-[10px] uppercase tracking-wider text-muted-foreground/60">Current scale</p><p class="font-data mt-1.5 text-2xl font-semibold">100%</p></div><svg width="140" height="36" viewBox="0 0 140 36" class="text-primary/70" preserveAspectRatio="none"><path d="M0.00,35.25 L46.67,35.25 L93.33,35.25 L140.00,35.25 L140,36 L0,36 Z" fill="currentColor" fill-opacity="0.12" stroke="none"></path><path d="M0.00,35.25 L46.67,35.25 L93.33,35.25 L140.00,35.25" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"></path></svg></div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl glass-panel"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing) border-b border-white/[0.06] pb-4"><div data-slot="card-title" class="font-heading font-medium group-data-[size=sm]/card:text-sm text-base">Drawdown guard</div><p class="text-sm text-muted-foreground">position_sizing.py — DrawdownGuard</p></div><div data-slot="card-content" class="px-(--card-spacing) pt-6"><p class="text-sm leading-relaxed text-muted-foreground">Forces flat once peak-to-trough equity drawdown breaches 10% from the running peak NAV; stays flat until drawdown recovers to 5% (hysteresis, so it doesn't flap at the boundary). Ground truth comes from the OANDA account's actual NAV, not a reconstruction from the local log.</p><div class="mt-5"><p class="font-data text-[10px] uppercase tracking-wider text-muted-foreground/60">Current state</p><p class="font-data mt-1.5 text-2xl font-semibold text-emerald-400">Armed — not tripped</p></div></div></div></div></div><!--$--><!--/$--></div></main><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/1kbvvjb8xiuz5.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85625,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"AppSidebar\"]\n3:I[39756,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"default\"]\n4:I[37457,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"default\"]\n5:I[13354,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"Toaster\"]\n7:I[97367,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/3ccb3s36a-ev0.css\",\"style\"]\n:HL[\"/_next/static/media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"risk\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"risk\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3ccb3s36a-ev0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1e176kr40-yyy.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/07arni_h-ml32.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/1-8s9_t85wwr4.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark inter_48bf155c-module__tUfyVa__variable jetbrains_mono_39c8d23b-module__WK7_cq__variable h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-app-gradient text-foreground md:flex md:flex-row\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-x-hidden md:m-2 md:rounded-2xl md:border md:border-white/[0.08] bg-[oklch(0.185_0_0)] md:min-h-[calc(100vh-1rem)]\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-6xl px-6 py-8 md:px-10\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$L5\",null,{}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L6\",null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3ccb3s36a-ev0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"DyyPHCjuwlEd_g9CqKoD8\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[27201,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"IconMark\"]\n9:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"Jolash\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Jolash trading AI — team dashboard\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.2vob68tjqpejf.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L11\",\"3\",{}]]\n"])</script><script>self.__next_f.push([1,"12:I[5014,[\"/_next/static/chunks/1e176kr40-yyy.js\",\"/_next/static/chunks/0ce9zjk5_q3eu.js\",\"/_next/static/chunks/07arni_h-ml32.js\",\"/_next/static/chunks/1-8s9_t85wwr4.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[null,[\"$\",\"h1\",null,{\"className\":\"text-2xl font-medium tracking-tight text-foreground\",\"children\":\"Risk Dashboard\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-sm font-normal leading-relaxed text-muted-foreground\",\"children\":\"Vol-target position sizing and a drawdown guard — the sizing/risk layer from CLAUDE.md's 'Elements of a profitable strategy' framework, now live on the USDCHF paper-trading model.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6 flex items-start gap-3 rounded-xl border border-white/[0.08] bg-white/[0.02] px-4 py-3\",\"children\":[[\"$\",\"$L12\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\"key\":\"oel41y\"}],[\"path\",{\"d\":\"m9 12 2 2 4-4\",\"key\":\"dzmm74\"}]],\"className\":\"lucide-shield-check mt-0.5 h-4 w-4 shrink-0 text-primary/70\"}],[\"$\",\"p\",null,{\"className\":\"text-sm leading-relaxed text-muted-foreground\",\"children\":[\"Both pieces only ever \",[\"$\",\"span\",null,{\"className\":\"text-foreground/90\",\"children\":\"scale a model's raw ±1 signal down\"}],\"toward 0 — they never flip its sign or add leverage beyond the unscaled position. Validated impact on the confirmed USDCHF (1h, h=4) model: Sharpe 0.83 → 1.09 and max drawdown -5.2% → -3.0% on the 2024-25 test window; Sharpe 1.98 → 2.16 and drawdown -4.0% → -3.6% on the 2021-22 robustness window. This is one strategy — the roadmap's multi-strategy portfolio-combination layer doesn't exist yet.\"]}]]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-4 lg:grid-cols-2\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl glass-panel\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing) border-b border-white/[0.06] pb-4\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading font-medium group-data-[size=sm]/card:text-sm text-base\",\"children\":\"Vol-target sizing\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground\",\"children\":\"position_sizing.py — vol_target_scale()\"}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-(--card-spacing) pt-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm leading-relaxed text-muted-foreground\",\"children\":\"Shrinks position size when recent realized volatility is above a 10% annualized target, grows it (capped at 1.0×, so it never levers past the unscaled signal) when vol is below target. Warm-up or zero-vol periods scale to 0 (flat).\"}],[\"$\",\"div\",null,{\"className\":\"mt-5 flex items-end justify-between\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-data text-[10px] uppercase tracking-wider text-muted-foreground/60\",\"children\":\"Current scale\"}],[\"$\",\"p\",null,{\"className\":\"font-data mt-1.5 text-2xl font-semibold\",\"children\":\"100%\"}]]}],[\"$\",\"svg\",null,{\"width\":140,\"height\":36,\"viewBox\":\"0 0 140 36\",\"className\":\"text-primary/70\",\"preserveAspectRatio\":\"none\",\"children\":[false,[\"$\",\"path\",null,{\"d\":\"M0.00,35.25 L46.67,35.25 L93.33,35.25 L140.00,35.25 L140,36 L0,36 Z\",\"fill\":\"currentColor\",\"fillOpacity\":0.12,\"stroke\":\"none\"}],\"$L13\"]}]]}]]}]]}],\"$L14\"]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"path\",null,{\"d\":\"M0.00,35.25 L46.67,35.25 L93.33,35.25 L140.00,35.25\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":1.5,\"strokeLinejoin\":\"round\",\"strokeLinecap\":\"round\"}]\n"])</script><script>self.__next_f.push([1,"14:[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl glass-panel\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing) border-b border-white/[0.06] pb-4\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading font-medium group-data-[size=sm]/card:text-sm text-base\",\"children\":\"Drawdown guard\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground\",\"children\":\"position_sizing.py — DrawdownGuard\"}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-(--card-spacing) pt-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm leading-relaxed text-muted-foreground\",\"children\":\"Forces flat once peak-to-trough equity drawdown breaches 10% from the running peak NAV; stays flat until drawdown recovers to 5% (hysteresis, so it doesn't flap at the boundary). Ground truth comes from the OANDA account's actual NAV, not a reconstruction from the local log.\"}],[\"$\",\"div\",null,{\"className\":\"mt-5\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-data text-[10px] uppercase tracking-wider text-muted-foreground/60\",\"children\":\"Current state\"}],[\"$\",\"p\",null,{\"className\":\"font-data mt-1.5 text-2xl font-semibold text-emerald-400\",\"children\":\"Armed — not tripped\"}]]}]]}]]}]\n"])</script></body></html> |