Every portfolio of Expert Advisors eventually raises the same question, and it is not "is this profitable". It is narrower and more useful:
Is this system still doing what it did in the backtest, or has it left that envelope?
The question matters because the answer changes what you do. A system inside its envelope, having a bad month, deserves patience. A system outside it deserves attention. Without a line drawn somewhere, the two look identical on an equity curve, and you end up either turning everything off in a drawdown or turning nothing off ever.
I built the envelope idea into Portfolio Command Desk. What follows are the three things that turned out to be harder than expected. All three are the kind of detail that only shows up once you try to make it work on a live account.
1. Watching the wrong drawdown makes recovery impossible
The obvious implementation is: take the system's maximum drawdown, compare it to the backtest maximum drawdown, raise a flag when it is too large.
That implementation is broken, and it took writing a test to see why.
Maximum drawdown is a record. Records do not come down. A system that dipped badly once in March and has been at new highs ever since still carries that March number forever. Flag it, and it stays flagged until you restart the terminal. You would build a monitor that can enter the alarm state but never leave it.
What you actually want is the current drawdown: the distance from the system's own peak to where it stands right now. That number recovers. A system that falls 2x its reference and climbs back turns green again, which is the entire point of a traffic light.
Same for losing streaks. The longest streak in history is a record; the streak running at this moment is a state. One winning trade resets it to zero, which is exactly the decisive signal you want.
So the monitor tracks two live values per system - current drawdown, current losing streak - and the historical records stay where they belong, on the statistics table.
2. A threshold without hysteresis is a spam machine
Set the line at 1.5x the reference drawdown. Now imagine a system whose drawdown wanders around 1.5x for a week: 1.49, 1.51, 1.48, 1.52.
Every crossing is a state change. Every state change is a notification. You get twenty messages about one situation, learn nothing from any of them, and turn the alerts off - at which point the product has failed completely, because a monitor you have muted is worse than no monitor.
The fix is a de-escalation band. A state is entered at the threshold but only left below 90% of it. To go from WATCH back to OK, the drawdown must fall meaningfully below the line, not merely dip under it.
I put a number on the gain rather than trusting the reasoning. In a test that walks a drawdown back and forth across the line eight times, the naive version fires seven notifications. With the band: three - the real entry, the real recovery, the real re-entry. Same data, same thresholds, one small rule.
3. Multipliers break on small numbers
For the drawdown threshold, a multiplier works fine: 1.5x for a warning, 2.0x for a breach. Money is a continuous quantity and scales cleanly.
Losing streaks do not. Suppose a system's backtest longest streak is 2. A 1.5x threshold gives 3. Three losses in a row is not evidence of anything - most strategies produce that in a normal week. The alert would fire constantly and mean nothing.
Suppose the backtest streak is 20. A "+3" rule gives 23, which is indistinguishable from 20 in practice.
Neither rule works across the range, so the threshold takes whichever is larger:
threshold = max(ceil(1.5 x reference), reference + 3)
Below a reference of 6 the additive term dominates and keeps small numbers from becoming trigger-happy. Above 6 the multiplier takes over and scales properly. At exactly 6 they agree, which is a pleasing accident rather than a design goal.
What the user actually types
All of that hides behind one input line:
111=800/6;222=650/4
Magic number, backtest maximum drawdown, backtest longest losing streak. Two figures you already have from the report you ran before going live. Systems you leave out are still measured - they just show a grey NO REF badge instead of being judged.
The panel then shows a colour per system, a summary line counting how many are OK, watching or breached, and it stays quiet until one of those states actually changes.
The part that surprised me
I expected the multi-terminal aggregation to be the hard part. It was not. The hard part was deciding what not to notify about: startup assignments, values hovering on a line, records that cannot recover, restarts replaying old news. Most of the engineering in a monitor is spent teaching it to stay silent.
A monitor that talks too much gets muted, and a muted monitor is just a decoration.


