FreeLattice · Celeste reading home

Public, free to read, reuse, and adapt — Kirk Patrick Miller's notice for this edition. Not a patent grant.

GROK_NEXT_TEMPERATURE_GAUGE_v0.1_2026-10-02.txt · c05

91d95bab4c · words 555 · characters 43419–47522

Previous section · Next section

Exact section text · Full source · Source index

Archive pages whose extracted text matched this section: 1772. Unmatched pages stay on the source record with the checked page method. They are not guessed into a section.

No topic tag was earned for this page under the recorded evidence rule.

-async function fetchYahooData(symbol, interval) {
+// before v-temperature-gauge-v0.1: async function fetchYahooData(symbol, interval) {
+// v-temperature-gauge-v0.1: optional rangeOverride (warm history for the moving averages,
+// and a 5-day look when a 5m day is still too short). Same feed, same sources.
+async function fetchYahooData(symbol, interval, rangeOverride) {
   // Map interval to Yahoo Finance range/interval
   const ivMap = {
     '5m': { range: '1d', interval: '5m' },
@@ -1726,7 +1781,10 @@ async function fetchYahooData(symbol, interval) {
     '1d': { range: '1y', interval: '1d' },
     '1wk': { range: '5y', interval: '1wk' }
   };
-  const { range, interval: yInterval } = ivMap[interval] || ivMap['1d'];
+  const _tgIv = ivMap[interval] || ivMap['1d'];
+  const range = rangeOverride || _tgIv.range;
+  const yInterval = _tgIv.interval;
+  // before v-temperature-gauge-v0.1: const { range, interval: yInterval } = ivMap[interval] || ivMap['1d'];
   const url = `https://query1.finance.yahoo.com/v8/finance/chart/${encodeURIComponent(symbol)}?range=${range}&interval=${yInterval}&includePrePost=false`;
 
   // Multiple CORS proxies — try each until one works
@@ -3191,10 +3249,13 @@ function renderChart(candles, a) {
       if (existing) existing.destroy();
     }
   });
+  // before v-temperature-gauge-v0.1: 1W showed clock times, intraday showed no day.
+  // const labels = candles.map(c => { const d = new Date(c.t); return currentInterval === '1d' ? d.toLocaleDateString(...) : d.toLocaleTimeString(...); });
   const labels = candles.map(c => {
     const d = new Date(c.t);
-    return currentInterval === '1d' ? d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) :
-           d.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
+    if (currentInterval === '1d') return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
+    if (currentInterval === '1wk') return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: '2-digit' });
+    return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) + ' ' + d.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
   });
   const closes = candles.map(c => c.c);
 
@@ -3212,10 +3273,14 @@ function renderChart(candles, a) {
   const ctx = document.getElementById('mainChart').getContext('2d');
   // Standardized MAs: 8/12/24 + 50
   var EP_RC = getEmaPeriods();
-  const ema8 = ema(closes, EP_RC[0]);
-  const ema12 = ema(closes, EP_RC[1]);
-  const ema24 = ema(closes, EP_RC[2]);
-  const ema50 = ema(closes, EP_RC[3]);
+  // before v-temperature-gauge-v0.1: const ema8 = ema(closes, EP_RC[0]); (and 12, 24, 50 the same way)
+  // v-temperature-gauge-v0.1: when warm history for this symbol and timeframe is in, the lines
+  // use it, so EMA 50 and EMA 200 start at the left edge. Signals still use the loaded window.
+  var _tgWarm = (typeof tgWarmEmas === 'function') ? tgWarmEmas(candles, EP_RC) : null;
+  const ema8 = _tgWarm ? _tgWarm[0] : ema(closes, EP_RC[0]);
+  const ema12 = _tgWarm ? _tgWarm[1] : ema(closes, EP_RC[1]);
+  const ema24 = _tgWarm ? _tgWarm[2] : ema(closes, EP_RC[2]);
+  const ema50 = _tgWarm ? _tgWarm[3] : ema(closes, EP_RC[3]);
 
   // ═══ Layered Signal Architecture ═══
   // Layer 1 (Temperature): ALWAYS required — zone transition is the trigger
@@ -3274,8 +3339,11 @@ function renderChart(candles, a) {
   }
 
   // EMA 200 (structural — only meaningful on 1D/1W)
-  var ema200 = ema(closes, getEmaPeriods()[4]);
-  var show200 = (currentInterval === '1d' || currentInterval === '1wk') && ema200[closes.length - 1] != null;
+  // before v-temperature-gauge-v0.1: var ema200 = ema(closes, getEmaPeriods()[4]);
+  // before v-temperature-gauge-v0.1: var show200 = (currentInterval === '1d' || currentInterval === '1wk') && ema200[closes.length - 1] != null;
+  // v-temperature-gauge-v0.1: the fifth line shows on every timeframe that has enough bars for it.
+  var ema200 = _tgWarm ? _tgWarm[4] : ema(closes, getEmaPeriods()[4]);
+  var show200 = ema200[closes.length - 1] != null;