Skip to content
← Engine v1

AI adjusting the portfolios

1.3 · 4–17 Aug · AI adjusting the portfolios · see 1.8, the latest update

Update 1.3 was my first attempt at putting a language model in the trading loop, and the most useful thing it produced was a reason to take it out. The model sat beside five portfolios, could only veto entries or move parameters inside bounds written down in advance, and each of those portfolios ran next to a twin that never changed.

Figure 01 · 1.3 · 4–17 August 2026

A model beside five portfolios, inside written bounds

The model could only veto, shrink or retune inside a written test plan. Retired on 18 August.

  • Data
  • Proposal
  • Next-open fill
  • Score

RSS headlines11 feeds, titlesYahoodaily barsNasdaq Tradersymbol list1test plansfrozen boundsDUCKDB · ONE WRITERpricesYahoo dailyuniversedaily snapshotpaper ledgerAI and twinsnews analyst11:00 brief2veto agents ×221:40 · vetotuning agents ×3Sun · paramsvalidatorbounds from the test plan3NO FILE = PLAIN RULESpaper portfolios22:30 · 25 in totalAI portfolio vs twinsame rules, frozen4scoreboard26-week spreadRETIRED 18 AUGSOURCESSTOREDECIDEPROVE
fig. 1 — 1.3. ① RSS headline titles feed a morning news brief. ② Two veto agents read it and may veto or shrink the day's entries; three tuning agents may move parameters on Sundays. ③ A validator reads its bounds from each portfolio's frozen test plan and rejects anything outside them; with no veto file the portfolio trades its plain rules. ④ Each AI portfolio is compared with its untouched twin, and only the spread at 26 weeks was going to count.

What the model was allowed to do

A veto agent could block or shrink an entry but never add one, and it could touch at most half of a day's candidates. A tuning agent could change at most two parameters in a run, by no more than a quarter each, and never beyond half either side of the value written down in advance. The validator read those limits from each portfolio's written test plan and threw out a tuning proposal whole if any part of it failed. The model also sat outside the nightly path: the strategy used a veto file if one existed and traded its own rules if it did not.

What actually happened

On 4 August the analyst wrote one brief from 133 headlines, and one veto agent produced one file: eight candidates, all marked unclear, no vetoes. Three manual tuning runs that day declined to change anything. From 5 August every scheduled run failed because the login they depended on had expired. The failures went into TODO: lines in a log nobody read, and the layer stayed dead for thirteen days before anyone noticed.

Why I retired it

I agree with the log's own verdict: “The defect was not the failure, it was the silence.” The model acted in one run out of about fifteen, so any spread against the twins was noise, and calling it an AI result would have been dishonest. The more lasting lesson was about where a model belongs. Frequent, low-stakes calls that a rule could make are the worst use of one, and anything a grid can decide should be decided by a grid. The five portfolios and the two twins created for them were retired, not deleted, and the paper portfolios went from 25 to 18.

Update 1.4 replaced the model with a parameter grid and a stricter walk-forward. The twin idea stayed. Every agent result the engine reports today sits next to a paired control.

dates
4–17 August 2026
AI portfolios
5, each paired with a frozen twin
model call
one turn, no tools, JSON out · about 18 a week
schedule (UTC)
news 11:00 · veto agents 21:40 weekdays · tuning agents Sunday 10:30
veto agent limits
veto or scale 0.25–1.00 · never add · at most half the candidates
tuning agent limits
≤ 2 parameters a run · ≤ 25 % a move · within ±50 % of the original
judged at
26 weeks, AI minus twin, net of costs (2027-02-01)
output
1 veto file · 1 news brief · 0 scheduled tuning changes
retired
18 August · 25 → 18 portfolios

Ong Jun Xiong

SOFTWARE ENGINEER · SINGAPORE

ContactHobbiesArchiveNotesUI PackGitHubLinkedInSource

© 2026 Ong Jun Xiong