File size: 224,554 Bytes
3d749f4
09756df
 
f914615
 
 
09756df
 
f914615
 
 
09756df
 
f914615
 
 
09756df
 
f914615
 
 
09756df
 
f914615
 
 
93ff4fc
 
f914615
 
 
93ff4fc
 
f914615
 
 
93ff4fc
 
f914615
 
3d749f4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html><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><script src="/_next/static/chunks/24x1ykb_tgpb8.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 bg-white/[0.07] text-neutral-100 shadow-[inset_0_1px_0_rgba(255,255,255,0.04)]" 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-100" 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 &amp; 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 text-neutral-400 hover:bg-white/[0.035] hover:text-neutral-200" 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-500" 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 &amp; 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 &amp; 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"><p class="font-data mb-1.5 text-[10px] font-medium uppercase tracking-[0.2em] text-muted-foreground/60">Research · Hypothesis Log</p><h1 class="text-2xl font-medium tracking-tight text-foreground">Hypotheses</h1><p class="mt-1.5 text-sm font-normal leading-relaxed text-muted-foreground">Specific, testable trading ideas — proposed by hand for now, by the Research Agent once it&#x27;s built.</p></div><div class="font-data mb-6 flex flex-wrap gap-2 text-[11px]"><span class="rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80">Promising<!-- --> <span class="text-foreground/90">1</span></span><span class="rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80">Testing<!-- --> <span class="text-foreground/90">8</span></span><span class="rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80">Proposed<!-- --> <span class="text-foreground/90">1</span></span><span class="rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80">No edge found<!-- --> <span class="text-foreground/90">19</span></span></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-[&gt;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 mb-6"><div data-slot="card-content" class="px-(--card-spacing) pt-6"><div class="mb-3 flex items-center gap-2"><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-book-open h-4 w-4 text-primary/70" aria-hidden="true"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg><h3 class="text-sm font-medium text-foreground">What these numbers actually mean</h3></div><div class="grid grid-cols-1 gap-4 text-sm leading-relaxed text-muted-foreground sm:grid-cols-2"><div><p class="font-medium text-foreground/90">Information Coefficient (IC)</p><p class="mt-1">Does this feature actually line up with what happens next? 0 means no relationship at all (useless). A real edge is usually<!-- --> <em>small</em>— 0.02 to 0.05 is considered notable in real finance. If a number looks huge, that&#x27;s a reason for more suspicion, not less.</p></div><div><p class="font-medium text-foreground/90">Quick model accuracy (AUC)</p><p class="mt-1">0.50 = a coin flip, no better than guessing. 1.00 = perfect. Anything meaningfully above 0.50 (even 0.55) can be a real signal in finance — markets are hard. At or below 0.50 means no signal was found.</p></div><div><p class="font-medium text-foreground/90">Promote vs. reject</p><p class="mt-1">&quot;Promote&quot; just means an idea cleared a low, cheap first-pass bar — it is <em>not</em>a confirmed edge, only a candidate worth the expensive full test. &quot;Reject&quot; means it didn&#x27;t even clear that low bar, so we skip the expensive test and save the time.</p></div><div><p class="font-medium text-foreground/90">Cheap screen vs. full validation</p><p class="mt-1">The cheap screen (seconds) kills obviously-dead ideas fast. The full pipeline (on the Backtest Results page) is the real, slow, honest test — real holdout data, real trading costs, real Sharpe/drawdown. Only trust a hypothesis once it&#x27;s survived that step.</p></div></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-[&gt;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 mb-6"><div data-slot="card-content" class="px-(--card-spacing) pt-6"><button class="flex w-full items-center justify-between text-left"><div class="flex items-center gap-2"><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-code-xml h-4 w-4 text-primary/70" aria-hidden="true"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg><h3 class="text-sm font-medium text-foreground">The actual code every hypothesis below uses</h3></div><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-chevron-down h-4 w-4 text-muted-foreground transition-transform" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><p class="mt-3 text-xs leading-relaxed text-muted-foreground">Every hypothesis on this page uses this exact feature set (only pair, timeframe, and horizon change between them) — from<!-- --> <code class="rounded bg-white/[0.06] px-1 py-0.5">scripts/build_signal_features.py</code>. All features are computed only from data at-or-before time t; the label is the only thing allowed to look forward.</p></div></div><div class="space-y-8"><div><div class="mb-2.5 flex items-center gap-2"><span class="font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60">Promising</span><span class="h-px flex-1 bg-white/[0.06]"></span><span class="font-data text-[10px] text-muted-foreground/40">1</span></div><div class="space-y-2"><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-emerald-400/70"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCHF 4h-ahead direction (cheap screen)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->USDCHF<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->4<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Full validation (corrected v2 backtest, 2026-07-10): Sharpe 0.83 on 2024-25 (+8.2% vs buy-hold&#x27;s -5.5%, max DD -5.2%), and re-tested on a separate 2021-22 window: Sharpe 1.98 (+22.7% vs buy-hold&#x27;s +4.9%, max DD -4.0%). Beat buy-and-hold both times on two non-overlapping periods -- the one real candidate so far. Expectation to quote going forward: Sharpe ~0.8-1.0, not the flashier second-window number.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCHF</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (train_signal_model.py + backtest_signal_model.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-emerald-300"><span class="status-dot text-emerald-400 status-dot-live" style="background-color:currentColor"></span>Promising</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">-0.0390</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:40.25%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs font-semibold text-emerald-400">0.5237</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:36.85000000000002%"></div></div></div></div></div></div></div></div></div><div><div class="mb-2.5 flex items-center gap-2"><span class="font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60">Testing</span><span class="h-px flex-1 bg-white/[0.06]"></span><span class="font-data text-[10px] text-muted-foreground/40">8</span></div><div class="space-y-2"><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">EURUSD 4h horizon=12 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->EURUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->12<!-- --> <!-- -->4h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Captures the London/New York session overlap, which often brings increased volatility and clearer directional moves. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">EURUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->12 4h bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">-0.0578</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:35.550000000000004%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.4674</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:8.699999999999985%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair EURUSD --csv-root data/raw/forex/extracted --timeframe 4h --horizon 12 --out-dir data/validated/EURUSD_4h_12 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/EURUSD_4h_12 --out data/validated/EURUSD_4h_12/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/EURUSD_4h_12 --model data/validated/EURUSD_4h_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair EURUSD --timeframe 4h --horizon 12 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDJPY 1D horizon=24 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->USDJPY<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->24<!-- --> <!-- -->1D<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Daily timeframe integrates macroeconomic factors and risk-sentiment shifts influencing USD/JPY over a broader horizon. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDJPY</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->24 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">+<!-- -->0.0839</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:70.97500000000001%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs font-semibold text-emerald-400">0.5439</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:46.95000000000002%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair USDJPY --csv-root data/raw/forex/extracted --timeframe 1D --horizon 24 --out-dir data/validated/USDJPY_1D_24 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/USDJPY_1D_24 --out data/validated/USDJPY_1D_24/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/USDJPY_1D_24 --model data/validated/USDJPY_1D_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair USDJPY --timeframe 1D --horizon 24 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">AUDUSD 4h horizon=12 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->AUDUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->12<!-- --> <!-- -->4h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Aligns with Asia-Pacific trading hours, capturing market reaction to Australian economic data releases. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">AUDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->12 4h bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">-0.0307</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:42.325%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.5019</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:25.95%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair AUDUSD --csv-root data/raw/forex/extracted --timeframe 4h --horizon 12 --out-dir data/validated/AUDUSD_4h_12 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/AUDUSD_4h_12 --out data/validated/AUDUSD_4h_12/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/AUDUSD_4h_12 --model data/validated/AUDUSD_4h_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair AUDUSD --timeframe 4h --horizon 12 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCAD 1D horizon=24 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->USDCAD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->24<!-- --> <!-- -->1D<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Daily timeframe aligns with oil price movements and U.S. economic indicators that significantly impact USD/CAD. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCAD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->24 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">-0.1086</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:22.85%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs font-semibold text-emerald-400">0.6223</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:86.14999999999998%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair USDCAD --csv-root data/raw/forex/extracted --timeframe 1D --horizon 24 --out-dir data/validated/USDCAD_1D_24 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/USDCAD_1D_24 --out data/validated/USDCAD_1D_24/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/USDCAD_1D_24 --model data/validated/USDCAD_1D_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair USDCAD --timeframe 1D --horizon 24 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">GBPUSD 1D horizon=24 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->GBPUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->24<!-- --> <!-- -->1D<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Daily analysis captures broader market sentiment from significant UK/US economic data releases over a longer horizon. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">GBPUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->24 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">+<!-- -->0.1535</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:88.375%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.4680</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:9.000000000000007%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair GBPUSD --csv-root data/raw/forex/extracted --timeframe 1D --horizon 24 --out-dir data/validated/GBPUSD_1D_24 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/GBPUSD_1D_24 --out data/validated/GBPUSD_1D_24/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/GBPUSD_1D_24 --model data/validated/GBPUSD_1D_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair GBPUSD --timeframe 1D --horizon 24 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">EURUSD 1h horizon=12 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->EURUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->12<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">The 1-hour timeframe with a 12-bar horizon can capitalize on intraday price swings during the overlapping London and New York sessions, where liquidity and volatility peak. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">EURUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->12 1h bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">+<!-- -->0.0310</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:57.75%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs font-semibold text-emerald-400">0.5250</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:37.50000000000001%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair EURUSD --csv-root data/raw/forex/extracted --timeframe 1h --horizon 12 --out-dir data/validated/EURUSD_1h_12 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/EURUSD_1h_12 --out data/validated/EURUSD_1h_12/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/EURUSD_1h_12 --model data/validated/EURUSD_1h_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair EURUSD --timeframe 1h --horizon 12 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCHF 4h horizon=24 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->USDCHF<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->24<!-- --> <!-- -->4h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">The 4-hour timeframe allows for capturing momentum driven by Swiss economic releases and US market shifts -- a second, independent USDCHF signal worth checking given USDCHF is already our one confirmed candidate. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCHF</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->24 4h bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">+<!-- -->0.0888</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:72.2%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.4726</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:11.300000000000004%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair USDCHF --csv-root data/raw/forex/extracted --timeframe 4h --horizon 24 --out-dir data/validated/USDCHF_4h_24 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/USDCHF_4h_24 --out data/validated/USDCHF_4h_24/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/USDCHF_4h_24 --model data/validated/USDCHF_4h_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair USDCHF --timeframe 4h --horizon 24 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">AUDUSD 1D horizon=12 (Research Agent)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->AUDUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->12<!-- --> <!-- -->1D<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">A daily timeframe for AUD/USD can incorporate longer-term trends influenced by commodity prices and Australian economic indicators. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">AUDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->12 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (OpenRouter gpt-4o-mini)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300"><span class="status-dot text-amber-400 status-dot-live" style="background-color:currentColor"></span>Testing</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">+<!-- -->0.1150</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:78.75%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.4940</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:21.999999999999993%"></div></div></div></div></div></div><div class="mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3"><div class="mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300"><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-clipboard-check h-3.5 w-3.5" 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="m9 14 2 2 4-4"></path></svg>Josh&#x27;s job: run the real test on this one</div><p class="mb-2 text-xs leading-relaxed text-muted-foreground">Copy this, paste it in your terminal, hit enter. It&#x27;ll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.</p><div class="flex items-start justify-between gap-3 rounded-lg border border-white/[0.08] bg-black/30 px-4 py-3"><code class="whitespace-pre-wrap break-all font-mono text-[13px] leading-relaxed text-neutral-300">source .venv/bin/activate &amp;&amp; \
python scripts/build_signal_features.py --pair AUDUSD --csv-root data/raw/forex/extracted --timeframe 1D --horizon 12 --out-dir data/validated/AUDUSD_1D_12 &amp;&amp; \
python scripts/train_signal_model.py --data-dir data/validated/AUDUSD_1D_12 --out data/validated/AUDUSD_1D_12/model.joblib &amp;&amp; \
python scripts/backtest_signal_model.py --data-dir data/validated/AUDUSD_1D_12 --model data/validated/AUDUSD_1D_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \
  --pair AUDUSD --timeframe 1D --horizon 12 \
  --hf-results-repo KUTech/trading-llm-validation-results</code><button class="flex shrink-0 items-center gap-1.5 rounded-md border border-white/[0.1] px-2.5 py-1.5 text-xs text-neutral-300 transition-colors hover:bg-white/[0.06]"><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-copy h-3.5 w-3.5" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div></div></div><div><div class="mb-2.5 flex items-center gap-2"><span class="font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60">Proposed</span><span class="h-px flex-1 bg-white/[0.06]"></span><span class="font-data text-[10px] text-muted-foreground/40">1</span></div><div class="space-y-2"><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-sky-400/50"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">Triple-barrier labeled setups (profit target / stop-loss)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Relabel EURUSD using a profit-target/stop-loss barrier instead of a fixed time horizon, to reduce label noise before testing for a directional edge.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">EURUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->variable (barrier hit)</span><span class="text-muted-foreground/30">·</span><span class="truncate">Research Agent (not yet built)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-sky-300"><span class="status-dot text-sky-400" style="background-color:currentColor"></span>Proposed</span></div></div></div></div></div><div><div class="mb-2.5 flex items-center gap-2"><span class="font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60">No edge found</span><span class="h-px flex-1 bg-white/[0.06]"></span><span class="font-data text-[10px] text-muted-foreground/40">19</span></div><div class="space-y-2"><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">EURUSD 4h-ahead direction from basic technical indicators</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Predict the sign of EURUSD&#x27;s return 4 hours ahead using SMA trend, momentum, rolling volatility, RSI, and recent high/low range as features, on hourly candles.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">EURUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Manual (v0 pipeline)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">AUDUSD 4h-ahead direction (cheap screen)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->AUDUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->4<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Full validation (corrected v2 backtest): Sharpe -1.43, -13.8% return vs buy-hold&#x27;s -2.0%, 53.3% episode win rate. The cheap-screen promotion was a false positive -- doesn&#x27;t hold up under real testing.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">AUDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (train_signal_model.py + backtest_signal_model.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">-0.0317</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:42.075%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.5085</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:29.24999999999997%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">NZDUSD 4h-ahead direction (cheap screen)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->NZDUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->4<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Below the cheap-screen bar -- rejected before spending the expensive full validation budget.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">NZDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Batch cheap-screen (screen_hypothesis.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs text-neutral-500">-0.0269</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:43.275%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.5087</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:29.350000000000016%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCAD 4h-ahead direction (cheap screen)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->USDCAD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->4<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Below the cheap-screen bar -- rejected before spending the expensive full validation budget.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCAD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Batch cheap-screen (screen_hypothesis.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs text-neutral-500">-0.0257</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:43.575%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.5064</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:28.199999999999974%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">GBPUSD 4h-ahead direction (cheap screen)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->GBPUSD<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->4<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Full validation (corrected v2 backtest): Sharpe -0.71, -3.1% return, buy-and-hold did better (+5.7%). Pre-correction this read as technically positive (Sharpe 0.29) -- the fix clears up the ambiguity into a clean rejection.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">GBPUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (train_signal_model.py + backtest_signal_model.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs text-neutral-500">-0.0194</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:45.15%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs font-semibold text-emerald-400">0.5215</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:35.74999999999998%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDJPY 4h-ahead direction (cheap screen)</h3><p class="mt-1.5 text-[13px] leading-relaxed text-muted-foreground/90">Tests whether <!-- -->USDJPY<!-- -->&#x27;s recent momentum, volatility, RSI, and distance from its 20-period high/low can predict which direction price moves over the next <!-- -->4<!-- --> <!-- -->1h<!-- --> bars.</p><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Below the cheap-screen bar -- rejected before spending the expensive full validation budget.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDJPY</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4h</span><span class="text-muted-foreground/30">·</span><span class="truncate">Batch cheap-screen (screen_hypothesis.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs text-neutral-500">-0.0188</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:45.3%"></div></div></div><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs text-neutral-500">0.4974</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400" style="left:23.7%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCHF 1D horizon=20, central-bank sentiment (LLM-scored Fed/SNB statements)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">LLM-scored hawkish/dovish stance from Fed and SNB policy statements (cbank_sentiment_diff, cbank_sentiment_diff_chg_63d) on the same USDCHF/1D/h=20 combo as the rejected carry features below. Full validation: Sharpe 0.44 on 2024-25 (+6.1% vs buy-hold&#x27;s -5.3%, 100% bars in-market, 5 trade episodes) but Sharpe -0.66 on the 2021-22 robustness window (-7.8% vs buy-hold&#x27;s +4.9%) -- failed robustness, same pattern as every 1D/h=20 carry candidate below. The one place an LLM has a real comparative advantage in this pipeline (reading text), tested the same way as everything else -- and still didn&#x27;t hold up.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCHF</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (fetch_cbank_sentiment.py + train_signal_model.py + backtest_signal_model_v2.py)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCHF 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Backtest shows Sharpe 0.32 (+4.5% vs buy-hold -5.3%), but the model took exactly 1 trade episode for the entire 500-bar test window (in-market 100% of the time, one static position held throughout). Not a timing strategy -- a single directional bet that happened to be right. The &#x27;100% win rate&#x27; is trivially true with n=1 and should never be quoted as a real result.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCHF</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">NZDUSD 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Promising on 2024-25 (Sharpe 0.77, +13.6% vs buy-hold&#x27;s -8.4%, 60 episodes) but did not replicate on 2021-22: val AUC 0.31 (far worse than random, majority-class baseline 0.65), Sharpe -0.002 (flat), max DD -17.9%. Same lucky-window pattern as AUDUSD (1D, h=12) on 2026-07-10.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">NZDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12 -- failed robustness)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">GBPUSD 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">The strongest cheap-screen hit of the whole carry batch -- rate_diff_chg_63d cleared the IC bar easily (+0.13). Full model didn&#x27;t replicate it: val AUC 0.513 (barely above chance), backtest Sharpe -0.70 (-8.7% vs buy-hold +4.7%, max DD -14.2%, in-market 92% of bars). A clean example of a cheap-screen promote not being a confirmed edge, even with a mechanistically plausible feature.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">GBPUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">+<!-- -->0.1300</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:82.5%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDJPY 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">rate_diff_chg_63d was the best feature here too (IC -0.14), but val AUC came back 0.454 -- worse than random. Backtest Sharpe -0.04 (-1.7% vs buy-hold +9.5%, max DD -12.2%, in-market 95% of bars).</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDJPY</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">IC</span><span class="font-data text-xs font-semibold text-emerald-400">-0.1400</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:42.5%;width:14.999999999999993%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:50%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:15%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">EURUSD 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Underperforms buy-hold with weak Sharpe: 0.18 (+1.8% vs buy-hold +6.1%). Doesn&#x27;t beat a coin flip in any meaningful sense.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">EURUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCAD 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Negative Sharpe -0.19 (-2.1% vs buy-hold +5.1%).</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCAD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">AUDUSD 1D horizon=20, carry (rate_diff) features</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Sharpe 0.14 (+1.6% vs buy-hold -3.2%) -- only ahead because buy-hold itself was negative that window, not a real edge.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">AUDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->20 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (carry features, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCHF 4h horizon=24 (technical indicators)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Old (v1, overlapping-return) backtest showed Sharpe 1.39 / +118% -- entirely an artifact of the overlap bug (val AUC 0.44, worse than random). Corrected v2 backtest: Sharpe -0.13 (2024-25) and -0.42 (2021-22). A second, independent USDCHF timeframe that did NOT replicate the confirmed 1h/h=4 edge.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCHF</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->24 4h bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (rejected 2026-07-10)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">AUDUSD 1D horizon=12 (technical indicators)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Promising on 2024-25 (Sharpe 1.09, val AUC 0.63) but did not replicate on 2021-22 (Sharpe -0.46, val AUC 0.46). Likely a lucky window -- the same failure mode later seen in the 1D/h=20 carry batch.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">AUDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->12 1D bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Full validation (rejected 2026-07-10 -- failed robustness)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span><div class="w-44 space-y-2"><div><div class="flex items-baseline justify-between"><span class="text-[10px] uppercase tracking-wider text-muted-foreground/70">AUC</span><span class="font-data text-xs font-semibold text-emerald-400">0.6300</span></div><div class="relative mt-1 h-1 w-full rounded-full bg-white/[0.06]"><div class="absolute h-full rounded-full bg-white/[0.04]" style="left:24.999999999999993%;width:10.000000000000007%"></div><div class="absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600" style="left:24.999999999999993%"></div><div class="absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400" style="left:89.99999999999999%"></div></div></div></div></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">USDCHF 1h h=4: exclude NY session hours (16-21 UTC)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">A session breakdown of the confirmed model showed it both trading most (64% in-market vs. its usual ~35%) and losing money during NY hours specifically. Excluding NY hours looked great on 2024-25 (Sharpe 0.83 -&gt; 1.68, +8.2% -&gt; +14.9%) but failed robustness on 2021-22 (Sharpe 1.98 -&gt; 0.54, +22.7% -&gt; +5.0%, max DD got worse -4.0% -&gt; -5.1%). The session pattern was specific to one window, not persistent -- this filter is NOT applied to the live model.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">USDCHF</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->4 1h bars, session filter test</span><span class="text-muted-foreground/30">·</span><span class="truncate">Robustness check (backtest_signal_model_v2.py --exclude-utc-hours, rejected 2026-07-13)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">Liquidity sweep-and-reject fade (cross-pair)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">&quot;Everyone does X, so X should reverse&quot; is a pattern, not a mechanism -- rejected at the cheap-screen stage before spending full-validation budget. 185 sweep events at 4h (excess return vs. baseline t=0.78, not significant) and 51 events at 1D (t=-1.33, wrong sign). See scripts/scan_sweep_reversal.py.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">Multi-pair</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->event-based (4h / 1D)</span><span class="text-muted-foreground/30">·</span><span class="truncate">Cheap screen (scan_sweep_reversal.py, rejected 2026-07-12)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></div><div class="border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100"><div class="flex items-start justify-between gap-6"><div class="min-w-0 flex-1"><h3 class="text-sm font-medium leading-snug text-foreground">NZDUSD 4h horizon=12 (technical indicators)</h3><p class="mt-1 text-sm leading-relaxed text-muted-foreground">Rejected at the cheap-screen stage -- never reached full validation.</p><div class="font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70"><span class="rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300">NZDUSD</span><span class="text-muted-foreground/30">·</span><span>horizon <!-- -->12 4h bars</span><span class="text-muted-foreground/30">·</span><span class="truncate">Batch cheap-screen (screen_hypothesis.py, rejected)</span></div></div><div class="flex shrink-0 flex-col items-end gap-3"><span class="inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400"><span class="status-dot text-neutral-500" style="background-color:currentColor"></span>No edge found</span></div></div></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\":[\"\",\"hypotheses\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"hypotheses\",{\"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\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/24x1ykb_tgpb8.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$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,"11: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\",\"/_next/static/chunks/24x1ykb_tgpb8.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-data mb-1.5 text-[10px] font-medium uppercase tracking-[0.2em] text-muted-foreground/60\",\"children\":\"Research · Hypothesis Log\"}],[\"$\",\"h1\",null,{\"className\":\"text-2xl font-medium tracking-tight text-foreground\",\"children\":\"Hypotheses\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-sm font-normal leading-relaxed text-muted-foreground\",\"children\":\"Specific, testable trading ideas — proposed by hand for now, by the Research Agent once it's built.\"}]]}],[\"$\",\"div\",null,{\"className\":\"font-data mb-6 flex flex-wrap gap-2 text-[11px]\",\"children\":[[\"$\",\"span\",\"promising\",{\"className\":\"rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80\",\"children\":[\"Promising\",\" \",[\"$\",\"span\",null,{\"className\":\"text-foreground/90\",\"children\":1}]]}],[\"$\",\"span\",\"testing\",{\"className\":\"rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80\",\"children\":[\"Testing\",\" \",[\"$\",\"span\",null,{\"className\":\"text-foreground/90\",\"children\":8}]]}],[\"$\",\"span\",\"proposed\",{\"className\":\"rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80\",\"children\":[\"Proposed\",\" \",[\"$\",\"span\",null,{\"className\":\"text-foreground/90\",\"children\":1}]]}],[\"$\",\"span\",\"confirmed_no_edge\",{\"className\":\"rounded-full border border-white/[0.08] bg-white/[0.02] px-2.5 py-1 text-muted-foreground/80\",\"children\":[\"No edge found\",\" \",[\"$\",\"span\",null,{\"className\":\"text-foreground/90\",\"children\":19}]]}]]}],[\"$\",\"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 mb-6\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-(--card-spacing) pt-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-3 flex items-center gap-2\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M12 7v14\",\"key\":\"1akyts\"}],[\"path\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\"key\":\"ruj8y\"}]],\"className\":\"lucide-book-open h-4 w-4 text-primary/70\"}],[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium text-foreground\",\"children\":\"What these numbers actually mean\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-4 text-sm leading-relaxed text-muted-foreground sm:grid-cols-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground/90\",\"children\":\"Information Coefficient (IC)\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":[\"Does this feature actually line up with what happens next? 0 means no relationship at all (useless). A real edge is usually\",\" \",[\"$\",\"em\",null,{\"children\":\"small\"}],\"— 0.02 to 0.05 is considered notable in real finance. If a number looks huge, that's a reason for more suspicion, not less.\"]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground/90\",\"children\":\"Quick model accuracy (AUC)\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"0.50 = a coin flip, no better than guessing. 1.00 = perfect. Anything meaningfully above 0.50 (even 0.55) can be a real signal in finance — markets are hard. At or below 0.50 means no signal was found.\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground/90\",\"children\":\"Promote vs. reject\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":[\"\\\"Promote\\\" just means an idea cleared a low, cheap first-pass bar — it is \",\"$L12\",\"a confirmed edge, only a candidate worth the expensive full test. \\\"Reject\\\" means it didn't even clear that low bar, so we skip the expensive test and save the time.\"]}]]}],\"$L13\"]}]]}]}],\"$L14\",\"$L15\"]}]\n"])</script><script>self.__next_f.push([1,"16:I[39605,[\"/_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\",\"/_next/static/chunks/24x1ykb_tgpb8.js\"],\"SharedFeatureCode\"]\n17:I[39605,[\"/_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\",\"/_next/static/chunks/24x1ykb_tgpb8.js\"],\"HypothesisSummary\"]\n12:[\"$\",\"em\",null,{\"children\":\"not\"}]\n13:[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium text-foreground/90\",\"children\":\"Cheap screen vs. full validation\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"The cheap screen (seconds) kills obviously-dead ideas fast. The full pipeline (on the Backtest Results page) is the real, slow, honest test — real holdout data, real trading costs, real Sharpe/drawdown. Only trust a hypothesis once it's survived that step.\"}]]}]\n14:[\"$\",\"$L16\",null,{}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"div\",null,{\"className\":\"space-y-8\",\"children\":[[\"$\",\"div\",\"promising\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2.5 flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60\",\"children\":\"Promising\"}],[\"$\",\"span\",null,{\"className\":\"h-px flex-1 bg-white/[0.06]\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] text-muted-foreground/40\",\"children\":1}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"div\",\"hyp-screen-usdchf\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-emerald-400/70\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCHF 4h-ahead direction (cheap screen)\"}],[\"$\",\"$L17\",null,{\"pair\":\"USDCHF\",\"timeframe\":\"1h\",\"horizonBars\":4}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Full validation (corrected v2 backtest, 2026-07-10): Sharpe 0.83 on 2024-25 (+8.2% vs buy-hold's -5.5%, max DD -5.2%), and re-tested on a separate 2021-22 window: Sharpe 1.98 (+22.7% vs buy-hold's +4.9%, max DD -4.0%). Beat buy-and-hold both times on two non-overlapping periods -- the one real candidate so far. Expectation to quote going forward: Sharpe ~0.8-1.0, not the flashier second-window number.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCHF\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (train_signal_model.py + backtest_signal_model.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-emerald-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-emerald-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Promising\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"\",\"-0.0390\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"40.25%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":\"0.5237\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],\"$L18\"]}]]}]]}]]}]]}],false]}]]}]]}],\"$L19\",\"$L1a\",\"$L1b\"]}]\n"])</script><script>self.__next_f.push([1,"18:[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"36.85000000000002%\"}}]\n"])</script><script>self.__next_f.push([1,"19:[\"$\",\"div\",\"testing\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2.5 flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60\",\"children\":\"Testing\"}],[\"$\",\"span\",null,{\"className\":\"h-px flex-1 bg-white/[0.06]\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] text-muted-foreground/40\",\"children\":8}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"div\",\"hyp-agent-eurusd-4h-12\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"EURUSD 4h horizon=12 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"EURUSD\",\"timeframe\":\"4h\",\"horizonBars\":12}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Captures the London/New York session overlap, which often brings increased volatility and clearer directional moves. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"EURUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"12 4h bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"\",\"-0.0578\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"35.550000000000004%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.4674\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"8.699999999999985%\"}}]]}]]}]]}]]}]]}],\"$L1c\"]}],\"$L1d\",\"$L1e\",\"$L1f\",\"$L20\",\"$L21\",\"$L22\",\"$L23\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"div\",\"proposed\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2.5 flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60\",\"children\":\"Proposed\"}],[\"$\",\"span\",null,{\"className\":\"h-px flex-1 bg-white/[0.06]\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] text-muted-foreground/40\",\"children\":1}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"div\",\"hyp-002\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-sky-400/50\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"Triple-barrier labeled setups (profit target / stop-loss)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Relabel EURUSD using a profit-target/stop-loss barrier instead of a fixed time horizon, to reduce label noise before testing for a directional edge.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"EURUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"variable (barrier hit)\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (not yet built)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-sky-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-sky-400\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Proposed\"]}],false]}]]}],false]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"div\",\"confirmed_no_edge\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2.5 flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/60\",\"children\":\"No edge found\"}],[\"$\",\"span\",null,{\"className\":\"h-px flex-1 bg-white/[0.06]\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-[10px] text-muted-foreground/40\",\"children\":19}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"div\",\"hyp-001\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"EURUSD 4h-ahead direction from basic technical indicators\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Predict the sign of EURUSD's return 4 hours ahead using SMA trend, momentum, rolling volatility, RSI, and recent high/low range as features, on hourly candles.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"EURUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Manual (v0 pipeline)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}],[\"$\",\"div\",\"hyp-screen-audusd\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"AUDUSD 4h-ahead direction (cheap screen)\"}],[\"$\",\"$L17\",null,{\"pair\":\"AUDUSD\",\"timeframe\":\"1h\",\"horizonBars\":4}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Full validation (corrected v2 backtest): Sharpe -1.43, -13.8% return vs buy-hold's -2.0%, 53.3% episode win rate. The cheap-screen promotion was a false positive -- doesn't hold up under real testing.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"AUDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (train_signal_model.py + backtest_signal_model.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],\"$L24\"]}]]}],false]}],\"$L25\",\"$L26\",\"$L27\",\"$L28\",\"$L29\",\"$L2a\",\"$L2b\",\"$L2c\",\"$L2d\",\"$L2e\",\"$L2f\",\"$L30\",\"$L31\",\"$L32\",\"$L33\",\"$L34\",\"$L35\"]}]]}]\n"])</script><script>self.__next_f.push([1,"36:I[27396,[\"/_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\",\"/_next/static/chunks/24x1ykb_tgpb8.js\"],\"CopyCommand\"]\n"])</script><script>self.__next_f.push([1,"1c:[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"8\",\"height\":\"4\",\"x\":\"8\",\"y\":\"2\",\"rx\":\"1\",\"ry\":\"1\",\"key\":\"tgr4d6\"}],[\"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\",\"key\":\"116196\"}],[\"path\",{\"d\":\"m9 14 2 2 4-4\",\"key\":\"df797q\"}]],\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}],[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair EURUSD --csv-root data/raw/forex/extracted --timeframe 4h --horizon 12 --out-dir data/validated/EURUSD_4h_12 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/EURUSD_4h_12 --out data/validated/EURUSD_4h_12/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/EURUSD_4h_12 --model data/validated/EURUSD_4h_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair EURUSD --timeframe 4h --horizon 12 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]]}]\n"])</script><script>self.__next_f.push([1,"1d:[\"$\",\"div\",\"hyp-agent-usdjpy-1D-24\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDJPY 1D horizon=24 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"USDJPY\",\"timeframe\":\"1D\",\"horizonBars\":24}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Daily timeframe integrates macroeconomic factors and risk-sentiment shifts influencing USD/JPY over a broader horizon. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDJPY\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"24 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"+\",\"0.0839\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"70.97500000000001%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":\"0.5439\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"46.95000000000002%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}],\"$L37\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"div\",\"hyp-agent-audusd-4h-12\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"AUDUSD 4h horizon=12 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"AUDUSD\",\"timeframe\":\"4h\",\"horizonBars\":12}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Aligns with Asia-Pacific trading hours, capturing market reaction to Australian economic data releases. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"AUDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"12 4h bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"\",\"-0.0307\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"42.325%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.5019\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"25.95%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}],\"$L38\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"div\",\"hyp-agent-usdcad-1D-24\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCAD 1D horizon=24 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"USDCAD\",\"timeframe\":\"1D\",\"horizonBars\":24}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Daily timeframe aligns with oil price movements and U.S. economic indicators that significantly impact USD/CAD. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCAD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"24 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"\",\"-0.1086\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"22.85%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":\"0.6223\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"86.14999999999998%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}],\"$L39\"]}]]}]\n"])</script><script>self.__next_f.push([1,"20:[\"$\",\"div\",\"hyp-agent-gbpusd-1D-24\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"GBPUSD 1D horizon=24 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"GBPUSD\",\"timeframe\":\"1D\",\"horizonBars\":24}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Daily analysis captures broader market sentiment from significant UK/US economic data releases over a longer horizon. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"GBPUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"24 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"+\",\"0.1535\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"88.375%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.4680\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"9.000000000000007%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}],\"$L3a\"]}]]}]\n"])</script><script>self.__next_f.push([1,"21:[\"$\",\"div\",\"hyp-agent-eurusd-1h-12\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"EURUSD 1h horizon=12 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"EURUSD\",\"timeframe\":\"1h\",\"horizonBars\":12}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"The 1-hour timeframe with a 12-bar horizon can capitalize on intraday price swings during the overlapping London and New York sessions, where liquidity and volatility peak. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"EURUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"12 1h bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"+\",\"0.0310\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"57.75%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":\"0.5250\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"37.50000000000001%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],\"$L3b\",\"$L3c\"]}]]}]\n"])</script><script>self.__next_f.push([1,"22:[\"$\",\"div\",\"hyp-agent-usdchf-4h-24\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCHF 4h horizon=24 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"USDCHF\",\"timeframe\":\"4h\",\"horizonBars\":24}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"The 4-hour timeframe allows for capturing momentum driven by Swiss economic releases and US market shifts -- a second, independent USDCHF signal worth checking given USDCHF is already our one confirmed candidate. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCHF\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"24 4h bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"+\",\"0.0888\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"72.2%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.4726\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"11.300000000000004%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],\"$L3d\",\"$L3e\"]}]]}]\n"])</script><script>self.__next_f.push([1,"23:[\"$\",\"div\",\"hyp-agent-audusd-1D-12\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-amber-400/60\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"AUDUSD 1D horizon=12 (Research Agent)\"}],[\"$\",\"$L17\",null,{\"pair\":\"AUDUSD\",\"timeframe\":\"1D\",\"horizonBars\":12}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"A daily timeframe for AUD/USD can incorporate longer-term trends influenced by commodity prices and Australian economic indicators. Cleared the cheap-screen bar -- queued for full walk-forward validation, not yet confirmed. Small sample size at this timeframe means real skepticism is warranted.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"AUDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"12 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Research Agent (OpenRouter gpt-4o-mini)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-amber-400 status-dot-live\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"Testing\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"+\",\"0.1150\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"78.75%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.4940\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"21.999999999999993%\"}}]]}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-3 rounded-lg border border-amber-400/20 bg-amber-400/[0.03] p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2 flex items-center gap-1.5 text-[11px] font-medium text-amber-300\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-clipboard-check h-3.5 w-3.5\"}],\"Josh's job: run the real test on this one\"]}],[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}],\"$L3f\"]}]]}]\n"])</script><script>self.__next_f.push([1,"24:[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"\",\"-0.0317\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"42.075%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.5085\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"29.24999999999997%\"}}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"25:[\"$\",\"div\",\"hyp-screen-nzdusd\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"NZDUSD 4h-ahead direction (cheap screen)\"}],[\"$\",\"$L17\",null,{\"pair\":\"NZDUSD\",\"timeframe\":\"1h\",\"horizonBars\":4}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Below the cheap-screen bar -- rejected before spending the expensive full validation budget.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"NZDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Batch cheap-screen (screen_hypothesis.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":[\"\",\"-0.0269\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"43.275%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.5087\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"29.350000000000016%\"}}]]}]]}]]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"div\",\"hyp-screen-usdcad\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCAD 4h-ahead direction (cheap screen)\"}],[\"$\",\"$L17\",null,{\"pair\":\"USDCAD\",\"timeframe\":\"1h\",\"horizonBars\":4}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Below the cheap-screen bar -- rejected before spending the expensive full validation budget.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCAD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Batch cheap-screen (screen_hypothesis.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":[\"\",\"-0.0257\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"43.575%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.5064\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"28.199999999999974%\"}}]]}]]}]]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"27:[\"$\",\"div\",\"hyp-screen-gbpusd\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"GBPUSD 4h-ahead direction (cheap screen)\"}],[\"$\",\"$L17\",null,{\"pair\":\"GBPUSD\",\"timeframe\":\"1h\",\"horizonBars\":4}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Full validation (corrected v2 backtest): Sharpe -0.71, -3.1% return, buy-and-hold did better (+5.7%). Pre-correction this read as technically positive (Sharpe 0.29) -- the fix clears up the ambiguity into a clean rejection.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"GBPUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (train_signal_model.py + backtest_signal_model.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":[\"\",\"-0.0194\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"45.15%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":\"0.5215\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"35.74999999999998%\"}}]]}]]}]]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"28:[\"$\",\"div\",\"hyp-screen-usdjpy\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDJPY 4h-ahead direction (cheap screen)\"}],[\"$\",\"$L17\",null,{\"pair\":\"USDJPY\",\"timeframe\":\"1h\",\"horizonBars\":4}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Below the cheap-screen bar -- rejected before spending the expensive full validation budget.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDJPY\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4h\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Batch cheap-screen (screen_hypothesis.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":[\"\",\"-0.0188\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"45.3%\"}}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs text-neutral-500\",\"children\":\"0.4974\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-neutral-400\",\"style\":{\"left\":\"23.7%\"}}]]}]]}]]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"29:[\"$\",\"div\",\"hyp-usdchf-1d20-sentiment\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCHF 1D horizon=20, central-bank sentiment (LLM-scored Fed/SNB statements)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"LLM-scored hawkish/dovish stance from Fed and SNB policy statements (cbank_sentiment_diff, cbank_sentiment_diff_chg_63d) on the same USDCHF/1D/h=20 combo as the rejected carry features below. Full validation: Sharpe 0.44 on 2024-25 (+6.1% vs buy-hold's -5.3%, 100% bars in-market, 5 trade episodes) but Sharpe -0.66 on the 2021-22 robustness window (-7.8% vs buy-hold's +4.9%) -- failed robustness, same pattern as every 1D/h=20 carry candidate below. The one place an LLM has a real comparative advantage in this pipeline (reading text), tested the same way as everything else -- and still didn't hold up.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCHF\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (fetch_cbank_sentiment.py + train_signal_model.py + backtest_signal_model_v2.py)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"2a:[\"$\",\"div\",\"hyp-usdchf-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCHF 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Backtest shows Sharpe 0.32 (+4.5% vs buy-hold -5.3%), but the model took exactly 1 trade episode for the entire 500-bar test window (in-market 100% of the time, one static position held throughout). Not a timing strategy -- a single directional bet that happened to be right. The '100% win rate' is trivially true with n=1 and should never be quoted as a real result.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCHF\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"div\",\"hyp-nzdusd-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"NZDUSD 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Promising on 2024-25 (Sharpe 0.77, +13.6% vs buy-hold's -8.4%, 60 episodes) but did not replicate on 2021-22: val AUC 0.31 (far worse than random, majority-class baseline 0.65), Sharpe -0.002 (flat), max DD -17.9%. Same lucky-window pattern as AUDUSD (1D, h=12) on 2026-07-10.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"NZDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12 -- failed robustness)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"div\",\"hyp-gbpusd-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"GBPUSD 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"The strongest cheap-screen hit of the whole carry batch -- rate_diff_chg_63d cleared the IC bar easily (+0.13). Full model didn't replicate it: val AUC 0.513 (barely above chance), backtest Sharpe -0.70 (-8.7% vs buy-hold +4.7%, max DD -14.2%, in-market 92% of bars). A clean example of a cheap-screen promote not being a confirmed edge, even with a mechanistically plausible feature.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"GBPUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"+\",\"0.1300\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"82.5%\"}}]]}]]}],false]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"2d:[\"$\",\"div\",\"hyp-usdjpy-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDJPY 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"rate_diff_chg_63d was the best feature here too (IC -0.14), but val AUC came back 0.454 -- worse than random. Backtest Sharpe -0.04 (-1.7% vs buy-hold +9.5%, max DD -12.2%, in-market 95% of bars).\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDJPY\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"IC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":[\"\",\"-0.1400\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"42.5%\",\"width\":\"14.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"50%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"15%\"}}]]}]]}],false]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"2e:[\"$\",\"div\",\"hyp-eurusd-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"EURUSD 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Underperforms buy-hold with weak Sharpe: 0.18 (+1.8% vs buy-hold +6.1%). Doesn't beat a coin flip in any meaningful sense.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"EURUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"2f:[\"$\",\"div\",\"hyp-usdcad-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCAD 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Negative Sharpe -0.19 (-2.1% vs buy-hold +5.1%).\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCAD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"30:[\"$\",\"div\",\"hyp-audusd-1d20-carry\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"AUDUSD 1D horizon=20, carry (rate_diff) features\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Sharpe 0.14 (+1.6% vs buy-hold -3.2%) -- only ahead because buy-hold itself was negative that window, not a real edge.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"AUDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"20 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (carry features, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"div\",\"hyp-usdchf-4h24\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCHF 4h horizon=24 (technical indicators)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Old (v1, overlapping-return) backtest showed Sharpe 1.39 / +118% -- entirely an artifact of the overlap bug (val AUC 0.44, worse than random). Corrected v2 backtest: Sharpe -0.13 (2024-25) and -0.42 (2021-22). A second, independent USDCHF timeframe that did NOT replicate the confirmed 1h/h=4 edge.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCHF\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"24 4h bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (rejected 2026-07-10)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"32:[\"$\",\"div\",\"hyp-audusd-1d12\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"AUDUSD 1D horizon=12 (technical indicators)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Promising on 2024-25 (Sharpe 1.09, val AUC 0.63) but did not replicate on 2021-22 (Sharpe -0.46, val AUC 0.46). Likely a lucky window -- the same failure mode later seen in the 1D/h=20 carry batch.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"AUDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"12 1D bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Full validation (rejected 2026-07-10 -- failed robustness)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],[\"$\",\"div\",null,{\"className\":\"w-44 space-y-2\",\"children\":[false,[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[10px] uppercase tracking-wider text-muted-foreground/70\",\"children\":\"AUC\"}],[\"$\",\"span\",null,{\"className\":\"font-data text-xs font-semibold text-emerald-400\",\"children\":\"0.6300\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-1 h-1 w-full rounded-full bg-white/[0.06]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute h-full rounded-full bg-white/[0.04]\",\"style\":{\"left\":\"24.999999999999993%\",\"width\":\"10.000000000000007%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-px -translate-y-1/2 bg-neutral-600\",\"style\":{\"left\":\"24.999999999999993%\"}}],[\"$\",\"div\",null,{\"className\":\"absolute top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-emerald-400\",\"style\":{\"left\":\"89.99999999999999%\"}}]]}]]}]]}]]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"33:[\"$\",\"div\",\"hyp-usdchf-1h4-ny-hours-filter\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"USDCHF 1h h=4: exclude NY session hours (16-21 UTC)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"A session breakdown of the confirmed model showed it both trading most (64% in-market vs. its usual ~35%) and losing money during NY hours specifically. Excluding NY hours looked great on 2024-25 (Sharpe 0.83 -\u003e 1.68, +8.2% -\u003e +14.9%) but failed robustness on 2021-22 (Sharpe 1.98 -\u003e 0.54, +22.7% -\u003e +5.0%, max DD got worse -4.0% -\u003e -5.1%). The session pattern was specific to one window, not persistent -- this filter is NOT applied to the live model.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"USDCHF\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"4 1h bars, session filter test\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Robustness check (backtest_signal_model_v2.py --exclude-utc-hours, rejected 2026-07-13)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"34:[\"$\",\"div\",\"hyp-liquidity-sweep-fade\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"Liquidity sweep-and-reject fade (cross-pair)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"\\\"Everyone does X, so X should reverse\\\" is a pattern, not a mechanism -- rejected at the cheap-screen stage before spending full-validation budget. 185 sweep events at 4h (excess return vs. baseline t=0.78, not significant) and 51 events at 1D (t=-1.33, wrong sign). See scripts/scan_sweep_reversal.py.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"Multi-pair\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"event-based (4h / 1D)\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Cheap screen (scan_sweep_reversal.py, rejected 2026-07-12)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"35:[\"$\",\"div\",\"hyp-nzdusd-4h12\",{\"className\":\"border-l-2 rounded-r-lg bg-white/[0.015] px-4 py-3 transition-colors hover:bg-white/[0.03] border-l-neutral-600/40 opacity-70 hover:opacity-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-sm font-medium leading-snug text-foreground\",\"children\":\"NZDUSD 4h horizon=12 (technical indicators)\"}],\"$undefined\",[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm leading-relaxed text-muted-foreground\",\"children\":\"Rejected at the cheap-screen stage -- never reached full validation.\"}],[\"$\",\"div\",null,{\"className\":\"font-data mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-[11px] text-muted-foreground/70\",\"children\":[[\"$\",\"span\",null,{\"className\":\"rounded bg-white/[0.05] px-1.5 py-0.5 text-neutral-300\",\"children\":\"NZDUSD\"}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[\"horizon \",\"12 4h bars\"]}],[\"$\",\"span\",null,{\"className\":\"text-muted-foreground/30\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"Batch cheap-screen (screen_hypothesis.py, rejected)\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 flex-col items-end gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border border-white/[0.08] bg-white/[0.03] px-2 py-0.5 text-[11px] font-medium text-neutral-400\",\"children\":[[\"$\",\"span\",null,{\"className\":\"status-dot text-neutral-500\",\"style\":{\"backgroundColor\":\"currentColor\"}}],\"No edge found\"]}],false]}]]}],false]}]\n"])</script><script>self.__next_f.push([1,"37:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair USDJPY --csv-root data/raw/forex/extracted --timeframe 1D --horizon 24 --out-dir data/validated/USDJPY_1D_24 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/USDJPY_1D_24 --out data/validated/USDJPY_1D_24/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/USDJPY_1D_24 --model data/validated/USDJPY_1D_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair USDJPY --timeframe 1D --horizon 24 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\n38:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair AUDUSD --csv-root data/raw/forex/extracted --timeframe 4h --horizon 12 --out-dir data/validated/AUDUSD_4h_12 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/AUDUSD_4h_12 --out data/validated/AUDUSD_4h_12/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/AUDUSD_4h_12 --model data/validated/AUDUSD_4h_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair AUDUSD --timeframe 4h --horizon 12 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\n39:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair USDCAD --csv-root data/raw/forex/extracted --timeframe 1D --horizon 24 --out-dir data/validated/USDCAD_1D_24 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/USDCAD_1D_24 --out data/validated/USDCAD_1D_24/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/USDCAD_1D_24 --model data/validated/USDCAD_1D_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair USDCAD --timeframe 1D --horizon 24 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\n3a:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair GBPUSD --csv-root data/raw/forex/extracted --timeframe 1D --horizon 24 --out-dir data/validated/GBPUSD_1D_24 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/GBPUSD_1D_24 --out data/validated/GBPUSD_1D_24/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/GBPUSD_1D_24 --model data/validated/GBPUSD_1D_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair GBPUSD --timeframe 1D --horizon 24 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\n3b:[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}]\n3c:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair EURUSD --csv-root data/raw/forex/extracted --timeframe 1h --horizon 12 --out-dir data/validated/EURUSD_1h_12 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/EURUSD_1h_12 --out data/validated/EURUSD_1h_12/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/EURUSD_1h_12 --model data/validated/EURUSD_1h_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair EURUSD --timeframe 1h --horizon 12 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\n3d:[\"$\",\"p\",null,{\"className\":\"mb-2 text-xs leading-relaxed text-muted-foreground\",\"children\":\"Copy this, paste it in your terminal, hit enter. It'll ask for an optional one-line note at the end, then push the real result straight to the Backtest Results page — no screenshot needed.\"}]\n3e:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair USDCHF --csv-root data/raw/forex/extracted --timeframe 4h --horizon 24 --out-dir data/validated/USDCHF_4h_24 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/US"])</script><script>self.__next_f.push([1,"DCHF_4h_24 --out data/validated/USDCHF_4h_24/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/USDCHF_4h_24 --model data/validated/USDCHF_4h_24/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair USDCHF --timeframe 4h --horizon 24 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\n3f:[\"$\",\"$L36\",null,{\"command\":\"source .venv/bin/activate \u0026\u0026 \\\\\\npython scripts/build_signal_features.py --pair AUDUSD --csv-root data/raw/forex/extracted --timeframe 1D --horizon 12 --out-dir data/validated/AUDUSD_1D_12 \u0026\u0026 \\\\\\npython scripts/train_signal_model.py --data-dir data/validated/AUDUSD_1D_12 --out data/validated/AUDUSD_1D_12/model.joblib \u0026\u0026 \\\\\\npython scripts/backtest_signal_model.py --data-dir data/validated/AUDUSD_1D_12 --model data/validated/AUDUSD_1D_12/model.joblib --spread-pips 1.0 --confidence-threshold 0.55 \\\\\\n  --pair AUDUSD --timeframe 1D --horizon 12 \\\\\\n  --hf-results-repo KUTech/trading-llm-validation-results\"}]\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,"40: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\"}],[\"$\",\"$L40\",\"3\",{}]]\n"])</script></body></html>