Overnight NEXUS Lab Loop
How an agent works the Backtest Lab with NEXUS: rank what is actually backtested by risk-adjusted return, ask NEXUS to refute the favourite, keep only what survives. Bounded, rate-limit aware, repeatable.
0Connect your agent
Everything below is one endpoint: https://cymetica.com/mcp/v1 (JSON-RPC 2.0, methods initialize, tools/list, tools/call). The ground-truth tools need no key. Deep research needs a platform key — create one at /account and send it as X-API-Key: evt_…. Full onboarding: /agent-onboarding, tool catalog: /api-docs.
1Ground truth first (no key)
Start from what carries real backtest rows, not from an idea. Three calls, in this order:
| Tool | What it gives you |
|---|---|
list_backtest_surfaces | The five backtest surfaces, the question each answers, its API and auth. Pick the surface that matches your goal. |
get_backtest_models | Research-backtest models (with their tradeability caveats), themes, and the strategy types Backtest Labs accepts. |
get_strategy_returns | The live run window and returns for one strategy slug: Sharpe, return, win rate, max drawdown, trade count. Find slugs with search_ontology / resolve_ontology_concept. |
Rank risk-adjusted, not by raw return
Sort Sharpe first, then max drawdown, then trade count (a high Sharpe on 20 trades is noise). A strategy with a modest return and a tiny drawdown outranks a bigger return that gave half of it back. Pair a long book with a short book that has the lowest correlated drawdown — that is the pod-shop setup worth stacking. Discard anything whose run window is shorter than your acceptance test needs.
2Deep research (key)
NEXUS is the lead researcher in the loop. Open one investigation per candidate, then collect the answer:
ask_nexus_deep{"question": "…"}→ returns a job (job_id).get_deep_answer{"job_id": "…"}→ the answer when the job is done.
This lane runs at reduced capacity. When it is busy it fails fast with retryable: true and retry_after_s. Your agent must honour that value and back off — never tight-loop the call. A good question is adversarial: "Here is the evidence for strategy X (Sharpe, drawdown, window). Refute it. What regime breaks it?"
3Each cycle
- Rank the surfaces (step 1) → take the top-N plus one consensus favourite.
- Refute the favourite: ask NEXUS to argue against it with the evidence in hand (step 2).
- Keep only the strategies that survive the refutation; log the reason each one was dropped.
- Test the survivors against your acceptance test (for example: Sharpe ≥ your floor over ≥ N trades and a drawdown under your cap, on the latest window).
- Stop or sleep. Acceptance met → stop and report. Not met → sleep the larger of your cycle interval and any
retry_after_syou were given, then run again.
4From survivors to a live run
A survivor is a research result. Before any capital touches it: run it on the Backtest Lab surface that matches its type, then paper it through the same path a customer uses. Read the numbers with their window (get_strategy_returns returns the period behind every Sharpe) and re-rank after every new window. The Movers Tournament and Potential Movers screens are the same discipline applied to single names: /events/universe/movers.
Where the material lives
- /agent-onboarding — connect your own agent to the MCP endpoint
- /api-docs — full tool catalog and auth
- /developers — SDK and integration references
- /backtest/api — the backtest surfaces and their REST forms
- /guides/ai-agents — the novice guide to running agents on EventTrader