Scanner: expand default watchlist from 15 to 37 sector-diversified names

The previous default leaned heavily on mega-cap tech. EDGE setups
are rarer than that — you want a wider net across sectors to catch
the 1-3 setups per week that actually qualify. Curated to 37 names
that are all optionable mid+ cap with reasonable LEAPS liquidity:

  Indices/ETFs: SPY, QQQ, IWM, DIA, SMH, XLF, XLE, XLK
  Mega-cap tech: AAPL, MSFT, NVDA, GOOGL, META, AMZN
  Semis: AMD, INTC, TSM, AVGO, MU
  High-vol/event-driven: TSLA, NFLX, COIN, PLTR, SHOP, UBER, MARA
  Financials: JPM, BAC, GS, V
  Healthcare: LLY, JNJ, UNH
  Consumer/energy: XOM, WMT, DIS, MCD

Also bumped the per-scan cap from 30 to 100 so users can paste
custom lists up to 100 symbols (the previous 30-cap silently
truncated lists like the new 37-name default).

Full default scan completes in ~3.5s with zero errors and correctly
surfaces only the genuine EDGE setups (live test: NVDA / INTC / AAPL
flag, the other 34 do not).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ojy
2026-05-13 10:02:53 +00:00
parent d79b98baca
commit 74a727d0ae
2 changed files with 32 additions and 4 deletions

View File

@@ -526,15 +526,26 @@ optionsRouter.delete("/orders/:id", (c) => {
// HV30 and IV/HV ratio for each. Highlight spikes where IV >> HV. // HV30 and IV/HV ratio for each. Highlight spikes where IV >> HV.
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const DEFAULT_SCAN_SYMBOLS = [ const DEFAULT_SCAN_SYMBOLS = [
"SPY","QQQ","IWM","DIA", // Indices & sector ETFs (8) — vol-stable references
"SPY","QQQ","IWM","DIA","SMH","XLF","XLE","XLK",
// Mega-cap tech (6)
"AAPL","MSFT","NVDA","GOOGL","META","AMZN", "AAPL","MSFT","NVDA","GOOGL","META","AMZN",
"TSLA","AMD","NFLX","COIN","INTC", // Semiconductors (5) — frequent earnings & policy catalysts
"AMD","INTC","TSM","AVGO","MU",
// High-vol / event-driven (7)
"TSLA","NFLX","COIN","PLTR","SHOP","UBER","MARA",
// Financials (4)
"JPM","BAC","GS","V",
// Healthcare (3)
"LLY","JNJ","UNH",
// Consumer / energy (4)
"XOM","WMT","DIS","MCD",
]; ];
optionsRouter.get("/scan", async (c) => { optionsRouter.get("/scan", async (c) => {
const symsParam = c.req.query("symbols"); const symsParam = c.req.query("symbols");
const symbols = (symsParam ? symsParam.split(",") : DEFAULT_SCAN_SYMBOLS) const symbols = (symsParam ? symsParam.split(",") : DEFAULT_SCAN_SYMBOLS)
.map((s) => s.trim().toUpperCase()).filter(Boolean).slice(0, 30); .map((s) => s.trim().toUpperCase()).filter(Boolean).slice(0, 100);
if (symbols.length === 0) return c.json(fail("No symbols to scan"), 400); if (symbols.length === 0) return c.json(fail("No symbols to scan"), 400);

View File

@@ -216,7 +216,24 @@
<script src="/assets/alpine.min.js" defer></script> <script src="/assets/alpine.min.js" defer></script>
<script> <script>
const DEFAULT_SYMBOLS = ["SPY","QQQ","IWM","DIA","AAPL","MSFT","NVDA","GOOGL","META","AMZN","TSLA","AMD","NFLX","COIN","INTC"]; // Curated default watchlist (~37 names) — sector-diversified, all optionable mid+ cap.
// Backend caps custom lists at 100 symbols.
const DEFAULT_SYMBOLS = [
// Indices & sector ETFs
"SPY","QQQ","IWM","DIA","SMH","XLF","XLE","XLK",
// Mega-cap tech
"AAPL","MSFT","NVDA","GOOGL","META","AMZN",
// Semiconductors
"AMD","INTC","TSM","AVGO","MU",
// High-vol / event-driven
"TSLA","NFLX","COIN","PLTR","SHOP","UBER","MARA",
// Financials
"JPM","BAC","GS","V",
// Healthcare
"LLY","JNJ","UNH",
// Consumer / energy
"XOM","WMT","DIS","MCD",
];
function scannerApp() { function scannerApp() {
return { return {