N @creator Weather LIVE · DAY 67 ★ Rank #2 · 30d

Tail-Vol Weather Reversion

Fades extreme overnight moves on temperature & snowfall threshold markets in the eight hours before settlement, when liquidity thins and retail bias amplifies tail probabilities.
kalshi temp_thresh snow_thresh 8h_to_close flat_size
30-DAY SIMULATED P&L
+$4,218.40
▲ 18.6% vs prior 30d  ·  $22.92 avg/trade
Win rate
67.1%
123W · 60L · 1 open
Sharpe (annualised)
3.42
vs market 1.18
Max drawdown
−$412
9.8% of peak
Avg trade
+$22.92
$5 flat sizing
Sample n
184
Trades since live
Days live
67
OOS passed day 14
Markets traded
38
8 active right now

Cumulative P&L

Live trading since Mar 16, 2026 · paper
Cumulative P&L (paper)
Drawdown band
peak: +$4,580 · trough: -$412
Time (UTC) Market Plat Side Entry Exit P&L Outcome
Showing last 20 of 184 trades View all trades →

Strategy rules

Entry · Exit · Sizing · Market filter
Locked
ENTRY IF yes_ask < 28¢ AND vol_24h > $5,000 AND minutes_to_close < 480
ENTRY AND category = "weather" AND market_class IN ("temp_threshold","snow_threshold")
EXIT CLOSE at expiry OR IF yes_bid > 78¢ (take profit)
SIZING flat $5 per trade, max 4 concurrent positions
FILTER EXCLUDE if market.daily_range < 6¢ (low vol skip)
Unlock to see how this works
Get the full entry & exit logic, market filter, and sizing rule. One-time payment, yours forever — including any future revisions the creator ships.
unlocks · subscribers · ★ 4.8 creator rating
/* __RULES_WIRE__ */ (() => { const S = window.__STRATEGY__; if (!S || !S.config) return; const cfg = S.config; const locked = document.querySelector('.locked-content'); const overlay = document.querySelector('.lock-overlay'); if (!locked) return; function fmtCents(v) { if (v == null) return ''; return Math.round(v * 100) + '¢'; } function fmtVol(v) { return '$' + Number(v).toLocaleString(); } // Build ENTRY rows const entryParts = []; const e = cfg.entry || {}; if (e.yes_ask_min != null) entryParts.push(`yes_ask ≥ ${fmtCents(e.yes_ask_min)}`); if (e.yes_ask_max != null) entryParts.push(`yes_ask ≤ ${fmtCents(e.yes_ask_max)}`); if (e.yes_bid_min != null) entryParts.push(`yes_bid ≥ ${fmtCents(e.yes_bid_min)}`); if (e.yes_bid_max != null) entryParts.push(`yes_bid ≤ ${fmtCents(e.yes_bid_max)}`); if (e.vol_24h_min != null) entryParts.push(`vol_24h ≥ ${fmtVol(e.vol_24h_min)}`); if (e.open_interest_min != null) entryParts.push(`open_interest ≥ ${e.open_interest_min}`); if (e.hours_to_close_min != null) entryParts.push(`hours_to_close ≥ ${e.hours_to_close_min}h`); if (e.hours_to_close_max != null) entryParts.push(`hours_to_close ≤ ${e.hours_to_close_max}h`); if (e.title_contains && e.title_contains.length) { entryParts.push(`title contains [${e.title_contains.map(s => `"${s}"`).join(', ')}]`); } const entryRow = entryParts.length ? `IF ${entryParts.join(' AND ')}` : 'IF (no entry filters — always-on)'; // Sizing const sz = cfg.sizing || {}; const sizingRow = sz.type === 'flat' ? `flat $${((sz.amount_cents || 0) / 100).toFixed(2)} per trade · YES side` : JSON.stringify(sz); // Filter const plats = (cfg.platforms || []).join(', ') || 'any'; const cats = (cfg.categories || []).length ? cfg.categories.join(', ') : 'any'; const filterRow = `platform IN [${plats}] AND category IN [${cats}]`; // Exit const exitRow = (cfg.exit && cfg.exit.at === 'expiry') ? 'CLOSE at market expiry (settlement)' : JSON.stringify(cfg.exit || {at:'expiry'}); locked.innerHTML = `
ENTRY${entryRow}
EXIT${exitRow}
SIZING${sizingRow}
FILTER${filterRow}
JSON ${JSON.stringify(cfg).replace(/
`; // Hide the lock overlay if (overlay) overlay.style.display = 'none'; // Update the "Locked" indicator in the panel head to show unlocked status const lockTag = document.querySelector('.panel-head > div[style*="Locked"]') || [...document.querySelectorAll('.panel-head > div')].find(d => d.textContent.trim().endsWith('Locked')); if (lockTag) { lockTag.innerHTML = ' ' + (S.is_house ? 'House strategy · open' : 'Unlocked'); lockTag.style.color = '#22c55e'; } })(); /* __UNLOCKED_BANNER__ */ (() => { const S = window.__STRATEGY__; if (!S || !S.user_unlocked) return; if (document.getElementById('unlockedBanner')) return; const main = document.querySelector('main.page') || document.body; const banner = document.createElement('div'); banner.id = 'unlockedBanner'; banner.style.cssText = 'display:flex;gap:12px;align-items:center;background:rgba(34,197,94,0.10);border:1px solid rgba(34,197,94,0.30);color:#86efac;border-radius:8px;padding:10px 14px;margin:0 0 14px;font-size:13px'; banner.innerHTML = `
Unlocked. You own the rules to this strategy. Saved to My Library.
`; const crumb = main.querySelector('.breadcrumb'); if (crumb && crumb.nextSibling) { main.insertBefore(banner, crumb.nextSibling); } else { main.insertBefore(banner, main.firstChild); } })(); /* __HANDLE_LINKS__ */ (() => { const S = window.__STRATEGY__; if (!S) return; const h = S.creator_handle || 'tinycorp'; document.querySelectorAll('a.handle, .hero-meta .handle, .userref').forEach(a => { if (a.tagName === 'A') { a.setAttribute('href', '/creators/' + h); } else { // Wrap text-only handle in an anchor const wrap = document.createElement('a'); wrap.href = '/creators/' + h; wrap.className = a.className; wrap.textContent = a.textContent; a.replaceWith(wrap); } }); })(); /* __REAL_CHART__ */ (async () => { const S = window.__STRATEGY__; if (!S) return; try { const r = await fetch(`/api/quants/strategies/${S.slug}/pnl`, {cache: 'no-store'}); if (!r.ok) return; const d = await r.json(); if (!d.points || d.points.length < 2) return; // not enough data, keep seeded chart const svg = document.getElementById('chartSvg'); if (!svg) return; const W = svg.clientWidth || 720, H = svg.clientHeight || 280; svg.setAttribute('viewBox', `0 0 ${W} ${H}`); const vals = d.points.map(p => p.pnl_cents / 100.0); const labels = d.points.map(p => (p.ts || '').slice(0, 10)); const N = vals.length; const minV = Math.min(...vals, 0); const maxV = Math.max(...vals, 0); const pad = { l: 56, r: 14, t: 14, b: 30 }; const innerW = W - pad.l - pad.r; const innerH = H - pad.t - pad.b; const x = i => pad.l + (i / Math.max(1, N - 1)) * innerW; const y = v => pad.t + (1 - (v - minV) / Math.max(0.001, maxV - minV)) * innerH; let grid = ''; for (let i = 0; i <= 4; i++) { const v = minV + (maxV - minV) * i / 4; const yy = y(v); grid += ``; grid += `${v >= 0 ? '+' : ''}$${v.toFixed(2)}`; } const zy = y(0); const zeroLine = ``; const pathLine = vals.map((v, i) => `${i === 0 ? 'M' : 'L'}${x(i).toFixed(2)},${y(v).toFixed(2)}`).join(' '); const pathFill = pathLine + ` L${x(N - 1)},${zy} L${x(0)},${zy} Z`; const isPos = vals[vals.length - 1] >= 0; const color = isPos ? '#22c55e' : '#ef4444'; const fillColor = isPos ? 'rgba(34,197,94,0.18)' : 'rgba(239,68,68,0.18)'; const lastX = x(N - 1), lastY = y(vals[vals.length - 1]); // X-axis tick labels (first, middle, last) — dates const xticks = N <= 1 ? [0] : (N <= 4 ? [...Array(N).keys()] : [0, Math.floor(N/2), N-1]); const xLab = xticks.map(i => `${labels[i].slice(5)}` ).join(''); svg.innerHTML = ` ${grid} ${xLab} ${zeroLine} `; // Update the chart-legend caption to reflect real data const legend = document.querySelector('.chart-legend .item:last-child'); if (legend) { legend.innerHTML = `${N - 1} closed trades · realized cumulative P&L`; } } catch (e) { console.warn('real chart wire failed:', e); } })(); /* __FORK_BUTTON__ */ (() => { const S = window.__STRATEGY__; if (!S) return; // Show fork only when user can access config (which means they're entitled). if (!S.config) return; // Hide for the strategy owner — they can already edit it in /builder directly. if (S.is_owner) return; // Need a logged-in user. Probe via /api/quants/strategies//unlock GET // (returns {auth: false} when not logged in). fetch(`/api/quants/strategies/${S.slug}/unlock`, {credentials:'same-origin', cache:'no-store'}) .then(r => r.json()) .then(d => { if (!d.auth) return; // not logged in if (document.getElementById('forkBtn')) return; const btn = document.createElement('button'); btn.id = 'forkBtn'; btn.style.cssText = 'display:inline-flex;gap:6px;align-items:center;height:32px;padding:0 12px;background:var(--surface-2);border:1px solid var(--line);color:var(--text);border-radius:6px;font-size:13px;cursor:pointer;font-weight:500'; btn.innerHTML = ` Fork to draft `; btn.title = 'Clone this strategy\'s rules into a new draft you can edit in the Builder'; btn.addEventListener('mouseover', () => { btn.style.borderColor = 'var(--teal-2)'; btn.style.color = 'var(--teal-2)'; }); btn.addEventListener('mouseout', () => { btn.style.borderColor = 'var(--line)'; btn.style.color = 'var(--text)'; }); btn.addEventListener('click', async () => { if (!confirm(`Fork "${S.name}" into a new draft? You can rename and tune it in the Builder before publishing.`)) return; btn.disabled = true; btn.textContent = 'Forking...'; try { const r = await fetch(`/api/quants/strategies/${S.slug}/fork`, { method: 'POST', credentials: 'same-origin' }); if (r.status === 401) { window.location.href = '/login'; return; } if (!r.ok) { const err = await r.json().catch(() => ({})); alert('Fork failed: ' + (err.detail || err.error || r.status)); btn.disabled = false; btn.textContent = 'Fork to draft'; return; } const j = await r.json(); window.location.href = j.edit_url || ('/builder?slug=' + j.slug); } catch (e) { alert('Network error: ' + e.message); btn.disabled = false; btn.textContent = 'Fork to draft'; } }); // Slot the button into the hero-actions container next to the unlock button const actions = document.querySelector('.hero-actions'); if (actions) { // Insert at the start so it sits left of the unlock-state button actions.insertBefore(btn, actions.firstChild); } else { // Fallback: drop it under the page-head area const ph = document.querySelector('.breadcrumb'); if (ph && ph.parentNode) ph.parentNode.insertBefore(btn, ph.nextSibling); } }) .catch(() => {}); })(); /* __MARKETS_TAB_V2__ */ (() => { const S = window.__STRATEGY__; if (!S) return; // Find the Markets panel created by the existing tabs wire const marketsPanel = document.querySelector('[data-tab="markets"]'); if (!marketsPanel) return; // Replace its onLoad handler: when the user clicks Markets tab, fetch // from /candidates (signal-aware) instead of /api/predictive/markets. const tabs = [...document.querySelectorAll('.tabbar .tab')]; const marketsBtn = tabs.find(b => b.textContent.trim().toLowerCase().startsWith('markets')); if (!marketsBtn) return; let loaded = false; async function loadServerSide() { if (loaded) return; loaded = true; try { marketsPanel.innerHTML = '
Asking the engine which markets match all rules right now…
'; const r = await fetch(`/api/quants/strategies/${S.slug}/candidates`, {cache: 'no-store'}); if (!r.ok) { marketsPanel.innerHTML = '
Could not load engine candidates.
'; return; } const d = await r.json(); const all = d.candidates || []; const total = d.total || 0; const sigs = (d.signals_used || []); const sigBadge = sigs.length ? ` · signals: ${sigs.join(', ')}` : ''; const head = `
Engine evaluation · ${total} market${total !== 1 ? 's' : ''} match all entry rules right now${sigBadge}
`; if (!total) { marketsPanel.innerHTML = head + `
No markets currently match. The strategy will fill on the next match. ${sigs.length ? '

Time-window signals (' + sigs.join(', ') + ') need recent snapshot history — most matches happen during active trading hours.' : ''}
`; return; } const rows = all.map(m => ` ${m.ticker} ${(m.title || '').replace(/[<>]/g,'')} ${m.plat} ${m.yes_ask_c}¢ ${m.vol_24h ? '$' + (m.vol_24h >= 1000 ? (m.vol_24h/1000).toFixed(1) + 'k' : m.vol_24h.toFixed(0)) : '—'} ${m.hours_to_close ? m.hours_to_close.toFixed(1) + 'h' : '—'} `).join(''); marketsPanel.innerHTML = head + ` ${rows}
Ticker Market Plat YES ask 24h vol Closes
${total > 50 ? `
Showing top 50 of ${total} matches.
` : ''}`; } catch (e) { marketsPanel.innerHTML = `
Error: ${e.message}
`; } } // Hijack the markets-tab button: when clicked, our handler runs (and the // existing one too, but we set marketsPanel.dataset.loaded to skip the old). marketsBtn.addEventListener('click', () => { marketsPanel.dataset.loaded = '1'; // tell the existing handler to skip loadServerSide(); }, true); })(); /* __SIGNAL_BADGES__ */ (() => { const S = window.__STRATEGY__; if (!S || !S.config || !S.config.entry) return; const e = S.config.entry; if (document.getElementById('signalBadges')) return; const badges = []; if (e.ya_change_max_cents != null) { badges.push({ text: `▼ ${Math.abs(e.ya_change_max_cents)}¢ in ${e.ya_change_window_min || '?'}m`, color: '#f59e0b' }); } if (e.ya_change_min_cents != null) { badges.push({ text: `▲ ${e.ya_change_min_cents}¢ in ${e.ya_change_window_min || '?'}m`, color: '#22c55e' }); } if (e.vol_spike_ratio_min != null) { badges.push({ text: `vol ${e.vol_spike_ratio_min}x spike`, color: '#0fb5ba' }); } if (e.hour_of_day_min != null || e.hour_of_day_max != null) { const lo = e.hour_of_day_min ?? 0; const hi = e.hour_of_day_max ?? 23; badges.push({ text: `UTC ${String(lo).padStart(2,'0')}-${String(hi).padStart(2,'0')}`, color: '#a78bfa' }); } if (e.day_of_week_in) { const names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']; const days = e.day_of_week_in.map(d => names[d]).join('/'); badges.push({ text: days, color: '#a78bfa' }); } if (e.title_contains && e.title_contains.length) { badges.push({ text: `title∋"${e.title_contains[0]}"`, color: '#60a5fa' }); } if (e.open_interest_min != null) { badges.push({ text: `OI ≥ ${e.open_interest_min}`, color: '#5b6068' }); } if (!badges.length) return; const wrap = document.createElement('div'); wrap.id = 'signalBadges'; wrap.style.cssText = 'display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;align-items:center'; wrap.innerHTML = `signals` + badges.map(b => `${b.text}`).join(''); // Insert under .hero-tags if present, else under .hero-meta const target = document.querySelector('.hero-tags') || document.querySelector('.hero-meta'); if (target && target.parentNode) { target.parentNode.insertBefore(wrap, target.nextSibling); } })(); /* __EV_PANEL__ */ (() => { const S = window.__STRATEGY__; if (!S) return; if (document.getElementById('evPanel')) return; // Fetch the full strategy via API to get avg_win/avg_loss (page Jinja only has subset) fetch(`/api/quants/strategies/${S.slug}`, {cache:'no-store'}) .then(r => r.ok ? r.json() : null) .then(d => { if (!d || d.n_closed < 3) return; // not enough data const aw = d.avg_win_dollars; const al = d.avg_loss_dollars; const wr = d.win_rate; if (aw == null || al == null || wr == null) return; const ratio = Math.abs(aw / al); const ev = wr * aw + (1 - wr) * al; const evColor = ev >= 0 ? '#22c55e' : '#ef4444'; const evSign = ev >= 0 ? '+' : '-'; const panel = document.createElement('section'); panel.id = 'evPanel'; panel.className = 'panel'; panel.style.cssText = 'margin-bottom:14px;background:var(--surface);border:1px solid var(--line);border-radius:8px'; panel.innerHTML = `
Trade economics avg-win vs avg-loss · n=${d.n_closed} closed
Avg win
+$${aw.toFixed(2)}
Avg loss
${al >= 0 ? '+' : '-'}$${Math.abs(al).toFixed(2)}
Win/loss ratio
${ratio.toFixed(2)}
EV / trade @ ${(wr*100).toFixed(0)}% WR
${evSign}$${Math.abs(ev).toFixed(2)}
${ev < 0 ? `
Fade-asymmetry warning: wins are small relative to losses, so even at ${(wr*100).toFixed(0)}% win rate the expected value per trade is negative. To break even at this WR, average win would need to be at least $${(Math.abs(al) * (1 - wr) / wr).toFixed(2)}.
` : ''} `; // Insert after .stats grid const stats = document.querySelector('.stats'); if (stats && stats.parentNode) { stats.parentNode.insertBefore(panel, stats.nextSibling); } else { const main = document.querySelector('main.page'); if (main) main.insertBefore(panel, main.firstChild); } }) .catch(()=>{}); })();