← back to Stock Vshape Viewer

public/data.js

49 lines

/* data.js — seed watchlist + filter defaults. The analysis engine lives in
 * screen.js (window.SCREEN), shared with the server. Here we just bridge it. */

window.SEED = [
  { ticker: 'NVDA', name: 'NVIDIA',           cls: 'Mega-cap',      marketCap: '~$5.45T', sector: 'Semiconductors' },
  { ticker: 'PLTR', name: 'Palantir',         cls: 'Large-cap',     marketCap: '~$0.4T',  sector: 'Software / AI' },
  { ticker: 'ORCL', name: 'Oracle',           cls: 'Large-cap',     marketCap: '~$404B',  sector: 'Enterprise Software' },
  { ticker: 'NFLX', name: 'Netflix',          cls: 'Large-cap',     marketCap: '~$0.5T',  sector: 'Streaming / Media' },
  { ticker: 'RNG',  name: 'RingCentral',      cls: 'Small/Mid-cap', marketCap: '~$5.7B',  sector: 'Cloud Comms' },
  { ticker: 'ABLV', name: 'Able View Global', cls: 'Micro-cap',     marketCap: '~$47M',   sector: 'Consumer / Beauty' },
];

// Every screen rule (adjustable in the ☰ panel). minPrice 8 = "tradeable" floor.
window.DEFAULT_FILTERS = {
  weeksAgo: 6, weeksTol: 3, minDip: 10, maxFromHigh: 60, minPrice: 8,
  reqNewHigh: true, dipTo50: false, dipTo200: false, below50: false, below200: false,
  // cheap far-dated options finder (premium $/share, months to expiry)
  optMin: 0.05, optMax: 0.15, optMinMonths: 3, optType: 'both',
};

// 10 preloaded strategy presets — one-click screens. Each sets the filters + timeframe.
window.PRESETS = [
  { name: 'Deep V-Recovery', desc: 'Deep 20%+ correction fully reclaimed to a new high (MRNA-style).',
    tfN: 252, filters: { minDip: 20, reqNewHigh: true, weeksAgo: 8, weeksTol: 5, maxFromHigh: 15 } },
  { name: 'Classic V (10% dip)', desc: 'The core screen — ~6-week-old high, 10% dip, fresh new high.',
    tfN: 126, filters: { minDip: 10, reqNewHigh: true, weeksAgo: 6, weeksTol: 3, maxFromHigh: 60 } },
  { name: '50-DMA Pullback Buy', desc: 'Uptrend pulling back to touch the 50-day — buy-the-dip setup.',
    tfN: 126, filters: { minDip: 5, reqNewHigh: false, dipTo50: true, maxFromHigh: 20 } },
  { name: '200-DMA Deep Value', desc: 'Testing the 200-day average — deep-value entry zone.',
    tfN: 252, filters: { minDip: 15, dipTo200: true, reqNewHigh: false, maxFromHigh: 35 } },
  { name: 'Fresh Breakout', desc: 'At new highs right now (within 3% of its recent high).',
    tfN: 126, filters: { minDip: 8, reqNewHigh: true, maxFromHigh: 3, weeksAgo: 6 } },
  { name: 'Below 50 — Reversal Watch', desc: 'Broke under the 50-day after a 12%+ dip — watch for a turn.',
    tfN: 126, filters: { minDip: 12, below50: true, reqNewHigh: false, maxFromHigh: 40 } },
  { name: 'Momentum Leaders', desc: 'Strong names hugging their highs (shallow dip, close to high).',
    tfN: 63, filters: { minDip: 5, reqNewHigh: true, maxFromHigh: 6, weeksAgo: 4, weeksTol: 2 } },
  { name: 'Big-Dip Bottom Fishing', desc: 'Down 25%+ and not recovered yet — deep-dip candidates.',
    tfN: 252, filters: { minDip: 25, reqNewHigh: false, maxFromHigh: 60 } },
  { name: 'Coiled Consolidation', desc: 'Recent high, shallow pullback, tightening — pre-breakout coil.',
    tfN: 63, filters: { minDip: 8, maxFromHigh: 8, weeksAgo: 4, weeksTol: 2, reqNewHigh: false } },
  { name: 'Yearly Base Reversal', desc: '2-year base, deep dip, currently under the 200-day.',
    tfN: 504, filters: { minDip: 20, dipTo200: true, below200: true, reqNewHigh: false } },
];

// bridge the shared engine so existing calls (window.sma / window.analyze) work
window.sma = window.SCREEN.sma;
window.analyze = window.SCREEN.analyze;
window.passFilterOf = window.SCREEN.passFilter;