Sprint 7 — vW7 — Unlock the Paywall
Build Investing.com’s gold technical page yourselves, including the 1, 5 and 15-minute views that Investing.com locks behind a subscription.
ui/gold.html. Do not overwrite ui/index.html: it stays your team dashboard (roles, commit history, FigJam) and must link to gold.html.ui/gold.html, a working copy of Investing.com’s gold technical page. Same layout, same three gauges, same tables, for seven timeframes. Every number on it must show how it was calculated. It is a study week, so nothing else new is asked of you: lock your weekly calls as in Sprint 6, and spend the rest of the week on this page.1. What you are copying
Open Investing.com’s gold technical page on your phone. This is what it looks like. The orange “P” and “Unlock” on 1, 5 and 15 Min mean those views are paid. On your page they must work.
Screenshots taken by Prof Tan, 19 Oct 2026, 15:39 SGT.
2. Exactly what your page must show, top to bottom
| # | Part | Exactly what it shows |
|---|---|---|
| 1 | Price line | “Gold”, the last close, and the change and % change from the previous daily close, in green if up and red if down. |
| 2 | Timeframe tiles | One row of seven tiles: 1 Min, 5 Min, 15 Min, 30 Min, Hourly, 4 Hours, Daily. Each tile shows its timeframe’s Summary rating in colour. Clicking a tile selects it (blue outline) and updates everything below. No lock icons. |
| 3 | Bar time | Under the tiles: “Bar time: YYYY-MM-DD HH:MM SGT” for the last bar of the selected timeframe, and its close. Without this, nobody can check your numbers. |
| 4 | Summary gauge | Half-circle gauge with five coloured bands, a needle, the labels Strong Sell, Sell, Neutral, Buy, Strong Buy around it, and a filled pill with the rating underneath. Below it: the Buy, Neutral and Sell counts and the score. |
| 5 | Technical Indicators | The heading “Technical Indicators ›”, a gauge, a pale pill and the counts. Tapping the heading opens a table: Name · Value · Action, one row for each of the 12 indicators in section 4. Tapping a row opens its working (rule 1). |
| 6 | Moving Averages | The heading “Moving Averages ›”, a gauge, a pale pill and the counts. Tapping it opens a table: Period · Simple (value and Buy/Sell) · Exponential (value and Buy/Sell) for MA5, 10, 20, 50, 100 and 200. |
Colours: Buy and Strong Buy green, Sell and Strong Sell red, Neutral grey, as on Investing.com.
3. Where the data comes from
Use Yahoo Finance through yfinance, as in Sprint 6. Symbol GCZ26.CMX (gold futures, December 2026). If Yahoo returns fewer than 30 bars for it, use GC=F for that timeframe and show “(GC=F)” next to the bar time. Fetch at least 260 bars per timeframe, because MA200 needs 200.
| Tile | yfinance interval | period | How |
|---|---|---|---|
| 1 Min | 1m | 7d | As downloaded |
| 5 Min | 5m | 30d | As downloaded |
| 15 Min | 15m | 60d | As downloaded |
| 30 Min | 30m | 60d | As downloaded |
| Hourly | 60m | 60d | As downloaded |
| 4 Hours | 60m | 730d | Combine four 1-hour bars, starting 00:00, 04:00, 08:00, 12:00, 16:00 and 20:00 UTC: open of the first, highest high, lowest low, close of the last, summed volume. |
| Daily | 60m | 730d | Combine 1-hour bars into one bar per trading session, starting 22:00 UTC. |
4. The 12 indicators and their rules
Your first task (R3) is to open Technical Indicators › on Investing.com, compare its list and settings with this table, and record any difference in docs/verify.md. Where Investing.com differs, follow Investing.com and note it.
| Indicator | Calculation | Action |
|---|---|---|
| RSI(14) | Wilder’s 14-bar average gain and loss. RSI = 100 − 100/(1 + avg gain/avg loss) | Buy > 50, Sell < 50, Neutral above 70 or below 30 |
| STOCH(9,6) | %K = (close − 9-bar low)/(9-bar high − 9-bar low) × 100; %D = 6-bar average of %K | Buy if %K > %D and %K < 80; Sell if %K < %D and %K > 20; else Neutral |
| STOCHRSI(14) | (RSI − lowest RSI of 14 bars)/(highest − lowest) × 100 | Buy > 50, Sell < 50, Neutral above 80 or below 20 |
| MACD(12,26) | EMA12 − EMA26; signal = 9-bar EMA of MACD | Buy if MACD > signal, else Sell |
| ADX(14) | Wilder’s +DI, −DI and ADX over 14 bars | If ADX > 20: Buy when +DI > −DI, Sell when −DI > +DI. Otherwise Neutral |
| Williams %R(14) | (14-bar high − close)/(14-bar high − 14-bar low) × −100 | Buy > −50, Sell < −50, Neutral above −20 or below −80 |
| CCI(14) | (typical price − its 14-bar average)/(0.015 × mean deviation); typical price = (H + L + C)/3 | Buy > 0, Sell < 0, Neutral beyond ±200 |
| ATR(14) | Wilder’s 14-bar average of the true range | No vote. “High Volatility” if above its own 14-bar average, else “Less Volatility” |
| Highs/Lows(14) | close − midpoint of the 14-bar high and low | Buy > 0, Sell < 0. Check Investing.com’s definition (R3). |
| Ultimate Oscillator | 100 × (4·A7 + 2·A14 + A28)/7, where An = sum of buying pressure ÷ sum of true range over n bars | Buy > 50, Sell < 50, Neutral above 70 or below 30 |
| ROC(12) | (close ÷ close 12 bars ago − 1) × 100 | Buy > 0, Sell < 0 |
| Bull/Bear Power(13) | (high − EMA13) + (low − EMA13) | Buy > 0, Sell < 0 |
Moving averages (12 votes)
For n = 5, 10, 20, 50, 100 and 200: the simple (SMA) and exponential (EMA) moving average of the close. Buy if the last close is above it, Sell if below.
Ratings (our rule, the same for every team)
score = (number of Buys − number of Sells) ÷ number of votes. Strong Buy ≥ 0.5 · Buy ≥ 0.1 · Neutral between −0.1 and 0.1 · Sell ≤ −0.1 · Strong Sell ≤ −0.5.
Technical Indicators gauge: the 11 voting indicators. Moving Averages gauge: the 12 MA votes. Summary: all 23 votes together. The needle points at the score, from −1 (far left) to +1 (far right). Write this rule on your page.
5. How to run it (and why)
The page is not hosted anywhere. It runs on your laptop.
python engine/dashboard_data.py --loop 60 # refreshes ui/data.json every 60 s cd ui && python -m http.server 8000 # then open http://localhost:8000/gold.html
- Open it through the local server, not by double-clicking the file. Browsers usually block a page opened as a file from reading
data.json; that is the classic “it works on my machine” failure. - Do not use GitHub Actions’ schedule to refresh data. Its short-interval timing is unreliable; it has stalled for hours.
- The only workflow allowed in your repo is still
.github/workflows/predict.yml. No Netlify, no Pages, no public hosting.
6. The five pass-or-fail rules
avg gain 1.82, avg loss 2.23 → RSI = 44.98 → Sell. A value with no working scores zero for that row.docs/verify.md lists Investing.com’s values next to yours for 30 Min, Hourly and Daily, row by row, at the same bar time, with a screenshot of each. Every mismatch is explained, never deleted.ui/gold.html on main shows the seven tiles and at least one working timeframe. Prof Tan will check GitHub, not ask you.main by Saturday 23:59, it does not exist.7. Files and deadlines
engine/ ├── tech_summary.py R3 + R6 · the 12 indicators + 12 MAs, Wed 12:00 ├── dashboard_data.py R6 · all seven timeframes → ui/data.json, Wed 12:00 ui/ ├── index.html team dashboard (keep it; add a link to gold.html) ├── gold.html R5 · checkpoint Wed 12:00, final Sat 23:59 ├── data.json R6 · committed snapshot, Sat 23:59 docs/ ├── verify.md R4 · Sat 23:59 predictions/vW7.json R1 · Wed 23:59 (same format as vW6) checkin/wednesday.md R1 · Wed 12:00
8. Roles
predictions/vW7.json as in Sprint 6 by Wednesday 23:59. FigJam: one card per section of part 2, each with a Definition of Done and a link to its commit. Compile the Wednesday check-in.docs/verify.md (rule 2). You are the team’s internal auditor: find the mismatches before Prof Tan does.ui/gold.html to match section 2 and the screenshots: tiles, gauges, pills, tables, colours.dashboard_data.py for all seven timeframes, including the 4 Hours and Daily bars built from 1-hour bars, and the 12 MA votes. Keep predict.yml the only workflow.9. Monday 26 Oct: the live test
- R6 starts the data script and the local server in front of Prof Tan. The bar time must be from today.
- Prof Tan names a timeframe. R5 clicks the tile. Prof Tan opens the same timeframe on Investing.com on his phone and compares.
- Prof Tan picks any indicator row. Any team member taps it and explains the working.
- Prof Tan clicks 1, 5 and 15 Min. Those are the views you unlocked; they are trusted because the same code passed on Hourly and Daily.
- R4 opens
docs/verify.mdand explains the biggest mismatch. - Then the four weekly calls, as in Sprint 6.
Coming in Sprint 8
A chart of how each rating moved over time, drawn as smooth lines across shaded Strong Sell to Strong Buy bands, and a volume panel. Together they turn this page into a scalping tool. Sprint 8 is built on Sprint 7’s numbers, so they need to be right.