vW7 CP3405 · Design Thinking III
TR3 2026
Starts Monday 19 Oct — dashboard checkpoint Wednesday 21 Oct 12:00 — prediction locks Wednesday 21 Oct 23:59 SGT — everything else due Saturday 24 Oct 23:59 SGT — presented live Monday 26 Oct

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.

Correction (20 Oct): build the gold page as ui/gold.html. Do not overwrite ui/index.html: it stays your team dashboard (roles, commit history, FigJam) and must link to gold.html.
This sprint has one deliverable: 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.
Why this sprint exists. In Sprint 6, dashboards were not shown, numbers could not be checked against Investing.com, and the formulas behind them could not be found. This sprint fixes that. If it cannot be checked during your presentation, it scores zero. The five rules below are pass or fail.

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.

Investing.com gold technical page: timeframe tiles and Summary gauge Investing.com gold technical page: Technical Indicators and Moving Averages gauges

Screenshots taken by Prof Tan, 19 Oct 2026, 15:39 SGT.

2. Exactly what your page must show, top to bottom

#PartExactly what it shows
1Price line“Gold”, the last close, and the change and % change from the previous daily close, in green if up and red if down.
2Timeframe tilesOne 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.
3Bar timeUnder 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.
4Summary gaugeHalf-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.
5Technical IndicatorsThe 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).
6Moving AveragesThe 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.

Tileyfinance intervalperiodHow
1 Min1m7dAs downloaded
5 Min5m30dAs downloaded
15 Min15m60dAs downloaded
30 Min30m60dAs downloaded
Hourly60m60dAs downloaded
4 Hours60m730dCombine 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.
Daily60m730dCombine 1-hour bars into one bar per trading session, starting 22:00 UTC.
The data is about 10 minutes delayed. Yahoo marks gold futures as a delayed quote. That is fine for this sprint: a delay does not change whether RSI or MA200 is calculated correctly. It does mean the 30 Min tile may differ slightly from Investing.com. Hourly and Daily are the strict checks. Do not use this page to trade.

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.

IndicatorCalculationAction
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 %KBuy 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) × 100Buy > 50, Sell < 50, Neutral above 80 or below 20
MACD(12,26)EMA12 − EMA26; signal = 9-bar EMA of MACDBuy if MACD > signal, else Sell
ADX(14)Wilder’s +DI, −DI and ADX over 14 barsIf 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) × −100Buy > −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)/3Buy > 0, Sell < 0, Neutral beyond ±200
ATR(14)Wilder’s 14-bar average of the true rangeNo vote. “High Volatility” if above its own 14-bar average, else “Less Volatility”
Highs/Lows(14)close − midpoint of the 14-bar high and lowBuy > 0, Sell < 0. Check Investing.com’s definition (R3).
Ultimate Oscillator100 × (4·A7 + 2·A14 + A28)/7, where An = sum of buying pressure ÷ sum of true range over n barsBuy > 50, Sell < 50, Neutral above 70 or below 30
ROC(12)(close ÷ close 12 bars ago − 1) × 100Buy > 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

6. The five pass-or-fail rules

1Show the working. Tapping any indicator row opens its inputs and calculation, for example: avg gain 1.82, avg loss 2.23 → RSI = 44.98 → Sell. A value with no working scores zero for that row.
2Verify and commit the proof. 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.
3Midweek checkpoint. By Wednesday 21 Oct, 12:00, ui/gold.html on main shows the seven tiles and at least one working timeframe. Prof Tan will check GitHub, not ask you.
4Everything in the repo. The page reads only from code and data committed to your repo. If it is not on main by Saturday 23:59, it does not exist.
5Live test on Monday. No slides or screenshots in place of the page (section 9).

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

R1Lock the calls, keep the board real. File 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.
R2Your weekly call and the price line. Make your weekly call as in Sprint 6, then build part 1 (the price line) and check it against Investing.com.
R3The indicators. Compare the indicator list with Investing.com (section 4). Write all 12 indicators and the working text that rule 1 needs.
R4The verification. Build docs/verify.md (rule 2). You are the team’s internal auditor: find the mismatches before Prof Tan does.
R5The page. Build ui/gold.html to match section 2 and the screenshots: tiles, gauges, pills, tables, colours.
R6The data and the moving averages. Write 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

  1. R6 starts the data script and the local server in front of Prof Tan. The bar time must be from today.
  2. Prof Tan names a timeframe. R5 clicks the tile. Prof Tan opens the same timeframe on Investing.com on his phone and compares.
  3. Prof Tan picks any indicator row. Any team member taps it and explains the working.
  4. 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.
  5. R4 opens docs/verify.md and explains the biggest mismatch.
  6. 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.

CP3405 Design Thinking III · TR3 2026 · Sprint 7 — Unlock the Paywall