Service Status
Operational health of the live pysystemtrade pipeline. Service-level indicators are recomputed daily — process freshness, price & FX coverage, stale orders, strategy order generation, portfolio risk versus target, and execution-quality indicators marked "informational" while their thresholds are being calibrated.
Overall: PASS
Snapshot generated at 2026-10-03T06:00:04. Trading day: No (weekend). Indicators flagged "trading-day only" are not counted toward the overall status on weekends or holidays.
Most recent operator note (dated 2026-09-26, written by the operator, not generated):
This note is written by the operator and dated above. The snapshot it sits under carries its own date; the two can differ, because a fresh snapshot is produced every morning but the page is published only after the operator approves the build by hand. A stale snapshot date means publication is behind, not that the pipeline stopped. Next scheduled review of this note: 2026-10-02.
This page reports the pipeline behind the operator's own account. The overall status has passed on 8 of the last 30 recorded days. Two indicators are red.
Process freshness. The nightly reporting job, which produces the operator's end-of-day reports, has been stopped by its own time budget before finishing every night since 7 September. What was checked: every scheduled trading process on this page (capital update, position targets, order generation, roll status) completed inside its window on every day in the strip. The reports are read by the operator; no order, position or price is derived from them. A change to the budget, sized from the measured run time, has been reviewed and is waiting to be deployed. Until it is, the operator's own end-of-day reports are incomplete; that is a reporting failure, not a trading one, and it is stated here as such.
Price update coverage. 20 of 257 sampled markets have had no price update in the last 26 hours. What was checked on 26 September: 19 of the 20 are excluded from the strategy's trading universe by configuration (quarantined for data reasons before this incident), so their stale prices are not an input to any position; 18 of those sit on a contract that expired between 28 August and 18 September without the data feed being moved to the next contract. The twentieth is inside the trading universe: it holds no position, is in a state that forbids opening one, and its last price is three days old. None of the 20 holds a position on the operator's account. Moving the expired feeds forward is an operator action and is scheduled.
What this page does not cover: the reconciliation of broker positions against the system's own record runs separately, during trading hours, and is not one of the indicators here. Absence of a holding in a market is stated as exactly that, not as absence of any effect on the book.
This note will be updated as the facts change, and on the review date above at the latest. When the indicators return to green the dated notes stay published; a green result does not erase the record of the red one.
Every run_* process is live or completed in its expected sub-daily or business-day window.
In plain English: Like checking every machine on the assembly line ran on time today. If a scheduled job didn't finish when it should have, something is stuck and needs a look.
Target: 100% · Actual: 10/11 (90.9%)
Price update coverage
FAILFraction of sampled instruments with a price update in the last 26 hours, excluding instruments with no up-to-date data (retired/stale, or feeds confirmed dead at source).
In plain English: Are we getting fresh prices for the things we trade? This is the share of markets whose prices we refreshed recently — trading on stale prices is like driving with a fogged-up windscreen.
Target: 99% · Actual: 252/255 (98.8%)
Fraction of FX codes with an update in the last 26 hours.
In plain English: The same freshness check, but for currency exchange rates. We need up-to-date rates to correctly value positions we hold in foreign currencies.
Target: 99% · Actual: 12/12 (100.0%)
Contract orders unfilled, older than 2.0h, while their market is open.
In plain English: Orders we sent to the broker that are still sitting unfilled while the market is open — like a letter we mailed that never got delivered. This should be zero.
Target: 0 · Actual: 0
Strategy orders today
PASSEvery active strategy has an optimal-position update since the start of the previous business day (evening producers, morning snapshot).
In plain English: Did every strategy do its homework and recalculate what it wants to hold? If one didn't, it's running on yesterday's (or older) plan instead of today's.
Target: 100% · Actual: 1/1 (100.0%)
Portfolio risk vs. target
PASSEach active strategy's trailing realised annualised vol (63 business days) is within [0.6x, 1.5x] of its percentage_vol_target, and its ex-ante expected risk stays below 1.5x target (overshoot guard).
In plain English: Are we taking about the amount of risk we aimed for — not too sleepy, not too wild? This checks our actual ups-and-downs stay close to target, and that we're not set up to take far more risk than intended.
Target: 100% · Actual: 1/1 (100.0%)
Optimal target freshness
INFOInstruments feeding the optimiser a non-zero position target whose value is more than 5 days old. Keyed on the age of the value, not the age of the last write.
In plain English: Every night we work out how much of each market we ought to own. This checks that those numbers are actually being recalculated, rather than an old one being copied forward and traded on. A number can be rewritten every day and still be months out of date.
Target: 0 · Actual: 0/174 (0.0%)
Bid/ask cost: realized vs configured (30d)
INFOMean ratio of realised bid/ask half-spread to currently configured spread across instruments traded in the last 30 days. 1.0 = on budget; >1.0 = paying more than expected. Informational while threshold is calibrated.
In plain English: Every time we buy or sell we pay a small 'toll' — the gap between the buy and sell price. This compares the toll we actually paid recently to what we budgeted: 1.0 means on budget, above 1.0 means we're paying more than expected.
Target: informational (calibrating) · Actual: 44/587 (127.3%)
Bid/ask cost: realized vs configured (90d)
INFOMean ratio of realised bid/ask half-spread to currently configured spread across instruments traded in the last 90 days. 1.0 = on budget; >1.0 = paying more than expected. Informational while threshold is calibrated.
In plain English: Same trading-toll check as the 30-day version, but over a longer three-month window so a few unusual days don't dominate. 1.0 means on budget, above 1.0 means we're paying more than expected.
Target: informational (calibrating) · Actual: 82/587 (436.3%)
Cost outlier instruments (30d)
INFOCount of instruments whose realised bid/ask half-spread is more than 2.0x the currently configured spread over the last 30 days. Informational while threshold is calibrated.
In plain English: How many markets charged us a much bigger trading toll than we'd budgeted for. A high count means our cost assumptions are off for several instruments and need refreshing.
Target: informational (calibrating) · Actual: 8/44 (800.0%)
Backtest vs live PnL drift (30d, execution)
INFOCumulative (realised − theoretical) PnL over the last 30 days, divided by absolute cumulative theoretical PnL. Theoretical PnL is computed from the most recently recorded optimised position per (strategy, instrument) carried through subsequent business days, multiplied by back-adjusted price changes and base-currency point size. Realised PnL is the daily change in accumulated capital. Captures execution drift (slippage, integer rounding, fill timing). Informational while threshold is calibrated.
In plain English: We have a 'perfect world' simulation of what our trades should have earned, and what they actually earned in real life. This measures the gap — caused by things like slippage and rounding. A small gap means real trading is tracking the plan.
Target: informational (calibrating) · Actual: 538.71/14023.65 (3.8%)
Realised drawdown vs expected (1mo / 3mo / 1yr)
INFORealised max drawdown depth at each of 1-month, 3-month, and 1-year trailing windows, expressed as a ratio to a reference depth. Value is the worst (most adverse) ratio across horizons. <1.0 = inside expectations; >1.0 = at least one horizon is deeper than reference. Reference depth at each horizon is the 95-th percentile of historical max-drawdown-in-window values computed from the system's own pnl history; horizons with fewer than 20 sample windows fall back to conservative hardcoded depths so the SLI never goes blank. Informational while threshold is calibrated.
In plain English: A 'drawdown' is how far we've fallen from a recent high — the size of a losing streak. This checks whether our worst recent losing streaks are normal for a system like ours, or unusually deep. Below 1.0 means within expectations.
Target: informational (calibrating) · Actual: 0.0623/0.0847 (73.5%)
Capacity utilisation (30d, worst instrument)
INFOFor each instrument: sum of |fill quantity| across all strategies in the last 30 days, divided by recent average daily volume of the currently-priced contract times 30. Reports the maximum across instruments as a raw fraction (0.005 = 0.5% of ADV at the worst instrument). value_numerator counts instruments above the 1% capacity ceiling; value_denominator is the count of instruments measured. Informational while threshold is calibrated.
In plain English: How big are our trades compared to how much that market trades each day? Small means we're a tiny customer who can get in and out easily; big means we're such a large share of the market that trading is slow and expensive. Lower is safer.
Target: informational (calibrating) · Actual: 1/46 (2.0%)
Forecast scaling drift (per rule × instrument)
INFOFor each (strategy, trading rule, instrument), the mean of |capped forecast| over the trailing 250 business days, compared to the configured average_absolute_forecast scalar (default 10.0). value reports the worst deviation fraction across all pairs; value_numerator counts pairs outside the ±25% band. Carver-framework scalars target 10; sustained drift outside the band means positions are systematically over- or under-sized vs design. Informational while threshold is calibrated.
In plain English: Each strategy turns its market views into a 'conviction score' that should average around 10. This checks the scores are sized right — if they drift too high or low, our positions end up systematically too big or too small versus the design.
Target: informational (calibrating) · Actual: 3198/5831 (100.0%)
Rule Sharpe vs backtest (per rule × instrument)
INFOFor each (strategy, trading rule, instrument), the annualised Sharpe of the rule's standalone PnL contribution over the trailing 250 business days. A pair is deviated when trailing Sharpe falls below the 5th-percentile of the rule's historical 250-BD rolling Sharpe distribution; pairs with too little history (< 50 distinct sample windows) fall back to a fixed-threshold delta of 0.50 Sharpe units below the full-period mean. value reports the most adverse delta (most negative trailing − full); value_numerator counts deviated pairs. Informational while threshold is calibrated.
In plain English: Each trading idea ('rule') is graded on its recent risk-adjusted profit. This flags any rule performing much worse lately than it normally does — an early warning that a strategy may be breaking down.
Target: informational (calibrating) · Actual: 363/5831 (-2563.4%)
Client schedule drift
PASSThe scheduled jobs installed on the production host, and each armed account's process windows, compared against the schedule generated from the client registry. 1 means they disagree: a task that never runs, or a window shut against its own cron time, stops an account trading without crashing. A commented-out approved line counts as drift like any other missing one; there is no disableable task carve-out.
In plain English: Every account has its own scheduled daily jobs. This checks that the schedule actually installed on the machine still matches the one the system says it should be running. If they disagree, an account can quietly stop trading with nothing crashing to say so.
Target: 0 · Actual: 0
Process freshness — per-process
| Process | Limit | Pass |
run_capital_update | by 04:45 | PASS |
run_systems | by 04:45 | PASS |
run_strategy_order_generator | by 04:45 | PASS |
run_backups | by 23:50 | PASS |
run_daily_fx_and_contract_updates | by 23:50 | PASS |
run_reports | by 23:50 | FAIL |
run_daily_prices_updates | by 23:50 | PASS |
run_cleaners | by 23:50 | PASS |
run_stack_handler | 0.5h | PASS |
run_auto_roll_status | by 04:45 | PASS |
run_daily_update_multiple_adjusted_prices | by 23:50 | PASS |
Rolling compliance — last 30 recorded days (2026-09-04 → 2026-10-03)
Each row shows the fraction of recorded days the SLI passed. The strip is one cell per day, oldest on the left.
Overall: 30.0% (9/30 days)
| Indicator | Compliance | Days passed | History |
| Process freshness | 0.0% | 0/30 | |
| Price update coverage | 0.0% | 0/30 | |
| FX update coverage | 36.7% | 11/30 | |
| Stale orders | 100.0% | 30/30 | |
| Strategy orders today | 100.0% | 30/30 | |
| Portfolio risk vs. target | 90.0% | 27/30 | |
| Client schedule drift | 100.0% | 30/30 | |
The producer runs at 06:00 UTC; the public site rebuilds nightly at 21:45 UTC. Lag between a fresh snapshot and this page is up to ~16h — acceptable for a daily-cadence service-status surface.