Recommendations
0 to acquire · 2 to dispose
| Ticker | Name | Close | Action | Action Price Where to act — a buy-limit on a pullback or a buy-stop above resistance, not the current price. Sanity-check vs Close: on a held name, an action price stranded above the close means the queued level was set when the stock was higher — stale, awaiting reprice. | Stop The risk-defined exit, set below the entry for a long (~1.2–1.8×ATR). A held long whose Stop sits at/above the Close is already below its stop — a stale box awaiting reprice. | 1wk Model estimate of the likely price at this horizon — a forward projection, not a guarantee, and separate from the trade's Action Price or Stop. Where the ML estimator is enabled these are per-ticker calibrated forecasts (~80% coverage band) that are refreshed periodically and can drift between refreshes; otherwise they're interpolated from the signal's swing target. Confirm against the settled close. | 4wk Model estimate of the likely price at this horizon — a forward projection, not a guarantee, and separate from the trade's Action Price or Stop. Where the ML estimator is enabled these are per-ticker calibrated forecasts (~80% coverage band) that are refreshed periodically and can drift between refreshes; otherwise they're interpolated from the signal's swing target. Confirm against the settled close. | 12wk Model estimate of the likely price at this horizon — a forward projection, not a guarantee, and separate from the trade's Action Price or Stop. Where the ML estimator is enabled these are per-ticker calibrated forecasts (~80% coverage band) that are refreshed periodically and can drift between refreshes; otherwise they're interpolated from the signal's swing target. Confirm against the settled close. | Rationale |
|---|---|---|---|---|---|---|---|---|---|
| Z74 | Singtel | 4.54 | SELL 50% | 4.54 | 4.50 | 4.56 (+0.4%) | 4.70 (+3.5%) | 4.60 (+1.3%) | Singtel has arrived at the model's three-month destination without moving - the stock sits at 98.7% of its own 12-week target with only 1.3% of forward room left, while the buy signal that got us in has faded two sessions running from conviction. We are banking half the position at the target rather than holding a full-size bet on a forecast that has already been met, and keeping the other half for the FTSE ST index review on 21 September. ADR-0012 profit-take: ARMED (PROFIT_ARMED printed, T12_Progress_Pct 98.70 >= 90) + 2 TICKS FIRED - tick (b) conviction -20 exactly, label BUY -> HOLD) and tick (c) dead forward view (Target_12Week 4.60 < 1.02 x 4.54 = 4.6308, marginal). 2 ticks -> profit_take_2 = 50%. G1 unavailable (not a BreakoutUp/MomentumContinuation at cv >= 80); G2/G3 govern the valuation-elevate path only, which is not used - valuation is inert here (MoS -0.61, neither <= -3 nor UNDERVALUED, no tier change, size x1.0). Catalyst-aware hold NOT triggered: only horizon touch is the FTSE ST review effective 09-21, 9 sessions out, stance none. Counter-argument recorded: Z74 is still technically healthy (above EMA20 4.468 / EMA50 4.426 / EMA200 4.396, Trend Bullish, RSI 59.7) and the position is one session old (bought 09-07 @4.52, +0.44%), so the trimmed half realizes only ~+Sagainst a ~Sround-trip slippage cost - net cost-negative in cash, taken because the fire rule is mandatory and the forward view is exhausted. Scorecard: FailedBreakdown_Up_20D|buy is 0-for-4 at both 1wk and 4wk (n=4, report-only, not applied, reinforces L1's discount on this family). Retain 30,900 on a HELD 4.50 stop (chandelier 4.38 and row Stop_Price 4.38 both below the watermark; trails never fall). Note the intraday low 4.46 pierced 4.50 - L4 makes the settled close 4.54 authoritative, so no stop-out is recorded. L8: executes at the 2026-09-09 open; reprice if the open gaps >~1.5%. · news |
| J36 | Jardine Matheson | 58.71 | SELL 30% | 58.71 | 56.74 | n/a | n/a | 46.64 (-20.6%) | The counter-trend value catch we took a week ago has not turned - Jardine is now trading below its 20-, 50- and 200-day averages with the model projecting roughly 21% lower over three months, and the signal has printed AVOID for two straight sessions. The valuation case is genuinely good (it is the cheapest name in the book on margin of safety after C07), which is why this is a 30% scale-back on a defined line rather than an exit; we keep and the original 56.74 stop. ADR-0012 profit-take: ARMED (PROFIT_ARMED printed, T12_Progress_Pct 125.88) + 1 TICK FIRED - tick (c) dead forward view, Target_12Week 46.64 < 1.02 x 58.71 = 59.88, a -20.6% projection. Tick (b) NOT fired: conviction is -18, two points short of the -20 bar, and the trim does not depend on it. 1 tick -> profit_take_1 = 30%. INDEPENDENT trend-based basis (CLAUDE.md section 9 'valid exits still fire'): close 58.71 is below EMA200 63.67, EMA50 61.72 and EMA20 60.07 with a negative 12wk - a named correct sell basis unaffected by the G1/G2/G3 trim-discipline gates (this is the MSFT-06-17 pattern, not the NBIS trim error). Regime Ranging, Trend/Momentum Neutral_Bearish_Context, RSI 37.4, Exit_Strategy immediate. NOT a full exit: L2 is unmet, the close is 3.5% ABOVE the recorded 56.74 stop, and valuation argues the tier DOWN (UNDERVALUED, MoS +0.4205, Quality_Pass True -> 'selling cheap, trim the minimum'; 30% is already the minimum tier so the argue-down has nowhere to go). A profit-take can never be 100% on its own. 30% of 4,800 = 1,440 rounded down to the SG 100-share board lot = 1,400 (effective 29.2%). Retained exposure falls from S (14.0% of NAV) to S (9.9%). Estimates: 1wk and 4wk are n/a because the bearish FailedBreakout_Down_20D family emits no Target_Price, so the f-interpolation has no input - stated rather than invented; 12wk 46.64 = -20.6% is the downside the trimmed 30% steps out of. Scorecard: FailedBreakout_Down_20D|sell is 4-for-4 at both horizons (n=4, report-only, one grade from actionable - warned, NOT applied; OTR-1 flags this family as the book's historically most reliable exit). Horizon: nothing on J36 in the entire 10-day window. Stop on the retained 3,400 HELD at 56.74 - the row prints Stop_Price 61.36, which is 4.5% ABOVE the close, the degenerate FailedBreakout_Down_20D artifact; REJECTED, writing it to state would manufacture an instant stop-out. L8: executes at the 2026-09-09 open; reprice if the open gaps >~1.5%. · news |
| O39 | OCBC Bank | 31.70 | HOLD | 31.35 | 31.11 | 31.94 (+1.9%) | 33.11 (+5.6%) | 40.26 (+28.4%) | OCBC is the one position in the book that is genuinely working - up 10.7% on cost with the model still projecting 27% higher over three months - so we are tightening the risk line rather than taking money off the table. ADR-0012: ARMED but ZERO ticks fired, for the second consecutive session. Armed legitimately - PROFIT_ARMED printed, Gain_ATR 5.78 (>> 3.0) AND T12_Progress_Pct 78.74 on a NON-inverted span (target 40.26 sits well above the 28.63 cost), the only genuinely-armed winner in the book. Every tick negative: (a) no other Exit_Warning code, RSI_DIV clear for two sessions; (b) conviction ROSE (+7), the opposite of the -20 bar; (c) Target_12Week 40.26 vs the 32.33 bar, forward view alive at +27.0%; (d) Action is HOLD, not NO TRADE. Armed-but-not-fired is a mandatory trail-raise, never a trim - and no raise is available: the 2.0x ATR chandelier (31.70 - 2 x 0.5314 = 30.64) and the row Stop_Price (30.29) are BOTH below the recorded 31.11, and trails never fall, so the stop is HELD at 31.11, 1.86% under the close. Valuation is amplify-only and inert (OVERVALUED_VS_RI, MoS -0.796: neither <= -3 for a tier bump nor UNDERVALUED for an argue-down); SGO-3 voids the Quality_Pass=False and suppresses the 32.21 DCF annotation on this IsFinancial row. Horizon: US August CPI 09-11 and FOMC 09-16 both touch the bank leg but both carry stance hold-through, so no catalyst-aware action. Position = S0.47% of NAV. · news |
| D05 | DBS Group Holdings | 78.10 | HOLD | 76.68 | 77.93 | 78.30 (+2.1%) | 79.56 (+3.8%) | 92.44 (+20.6%) | DBS remains the book's core holding and is working quietly - above every moving average with the model projecting 18% higher over three months - so it is held in full, but the protective stop now sits uncomfortably close to the price and that is the single largest unforced risk in the book tonight. No sell case: not armed (Gain_ATR 2.23 < 3.0, T12_Progress_Pct 84.49 < 90, so no ADR-0012 path opens), no Exit_Warning code, above EMA20 76.53 / EMA50 73.24 / EMA200 62.56, Target_12Week 92.44 = +18.4%. No buy case either: conviction 54, and after val_adj -3 (OVERVALUED_VS_RI, MoS -0.68) and the ACTIONABLE PullbackBuy_VWAP|buy bias of -3 (n=5, hit_1w.333) the adjusted 48 sits 17 points below the 65 floor - and the position is cap-blocked regardless at S / NAV S = 60.05% vs max_position_pct 60.0, headroom -SSGO-3 voids the Quality_Pass=False and the broken 57.01 DCF anchor on this IsFinancial row. STOP CAVEAT, now with evidence: 77.93 sits 0.22% under the 78.10 close on a S position (60% of NAV), and today's intraday LOW was 78.00 - seven cents of headroom. Trails never fall so it is not loosened here, but this is a stop-placement artifact rather than a market view: if 77.93 trips on noise rather than a genuine trend break, treat re-entry as live rather than accepting the exit as a signal. Horizon: US August CPI 09-11 and FOMC 09-16 touch the bank leg, both stance hold-through. · news |
| BN4 | Keppel | 11.88 | WATCH | 11.80 | 11.13 | 11.98 (+1.5%) | 13.14 (+11.4%) | 12.32 (+4.4%) | Keppel was the only name in the book to print a genuine buy signal tonight and it is the strongest technical setup we have seen in weeks - second consecutive BUY at rank 1, breaking out above all three moving averages with the only positive three-month projection among the buy candidates - but it fails the fundamental quality screen, so no shares are bought. BreakoutUp_20D, conviction 73, Buy_Rank #1, close 11.88 (+0.8%), Entry_Price 11.80, RSI 66.06, above EMA20 11.50 / EMA50 11.36 / EMA200 10.80, Target_Price 13.14 (+10.6%), Target_12Week 12.32 (+3.7%, ALIVE - the only buy candidate in weeks with a positive forward view). Scorecard: BreakoutUp_20D|buy is ACTIONABLE and flipped positive this session, bias +2 (n=5, hit_1w 0.60, hit_4w 0.00). Valuation GROWTH_PRICED_IN, MoS_FV -3.0620 -> val_adj = clamp(round(-3.062 x 5), -10, 0) = -10, the maximum drag. Adjusted conviction = 73 - 10 + 2 = 65, EXACTLY at the floor, and it clears. BLOCKED by the hard quality gate: Quality_Pass False (generic F-Score/FCF screen) with IsFinancial False, so SGO-3's financials carve-out does NOT apply and the gate is binding on a new entry. Recorded for honesty: had it passed, Entry_Distance_ATR -0.38 (<= -0.25) with the close near the day's high would have made it a QUEUED order at 11.80 rather than a market buy, and the MoS <= -3 band would have halved the size to 0.5x. RE-ARM: a Quality_Pass flip to True on the next fairvalue refresh with conviction still >= 65. Ledgered as a non-action so the counterfactual grader prices what not buying cost or saved - relevant because no_chase_queue already reads n=29, median withheld +9.55% at 4wk [cost]. |
Outcome & track record
Accuracy at the time of this record.
45 Graded decisions Past recommendations old enough to score against what actually happened (target hit / stopped out / closed). This is the evidence base — the bigger the number, the more history behind the calls. Click to inspect every one. See the decisions →
0.137 1-week calibration How much of the eventual 4-week move typically shows up in the first week (0 = almost none, 1 = most of it). Use it to read the 1-week estimates: a low number means prices drift toward the target slowly, so don't over-read a soft week-1.
50 Published records How many dated end-of-day verdicts exist for this book — the length of the public track record you can browse in the Archive below.