
Monte-Neo strategy verifier
io.github.NeoZorK由 GitHub 帳號 NeoZorK 發布v0.54.0更新於 Oct 24, 2026
驗證交易策略回測:前視偏差探測、交易成本、Deflated Sharpe、捲動前向檢驗。
AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。
原文描述
Verify trading-strategy backtests: look-ahead probes, trading costs, Deflated Sharpe, walk-forward.
概覽
Monte-Neo strategy verifier 的本機 MCP 服務;無需登入;STDIO。
暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Monte-Neo strategy verifier,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
[Monte-Neo: the independent verifier for trading strategies written by AI agents and humans]
The independent verifier for trading strategies written by AI agents and humans.
Catch look-ahead bias, hidden trading costs and overfitting before a backtest reaches your money.
[PyPI version]
[Total downloads]
[Downloads per month]
[Python versions]
[CI]
[MIT license]
[MCP Registry]
[Tested with Claude Code and Qwen Code (local)]
[GitHub stars]
Docs · Quick start · Use from agents · Verifier API · Trap Suite · Changelog
Did it catch a leak in your backtest? Star the repository so other quants and agent builders can find it, or tell us what it missed.
The problem
A coding agent can turn a trading idea into a backtest in minutes. It will then tell you the strategy returns 40% a year with a Sharpe of 3. Most of the time that number is wrong, for the same few reasons:
- Look-ahead bias. The code reads future bars:
shift(-1), centred windows,bfill, statistics over the whole series,np.gradient, an FFT filter. - Missing costs. The edge is smaller than fees and slippage, or it disappears when the fill comes one bar later.
- Selection bias. The agent tried 300 variants and reports the best one as if it were the only one.
Backtest libraries run whatever code you give them. None of them tell you the backtest itself is broken.
The solution
Monte-Neo checks the backtest, not the idea. Give it the price data and the strategy code or its positions. It returns one of four verdicts, the checks behind the verdict, concrete next steps and a reproducible, optionally signed certificate.
The agent's strategy used shift(-1), so it knew the next close. Monte-Neo found the leak in four
independent ways and named the line. After the fix, no look-ahead is left, and the verifier tells
the truth: on a random walk, the strategy has no edge after costs.
The same run as a report for people (--html report.html: one file, no scripts, no network):
More reports, including an honest strategy and a parameter search, are in the gallery.
Text output of the first run
The run used a synthetic random walk; output shortened.
New in v0.53: from a rejected backtest to a committee
Repair the strategy, without overfitting it
Optimisers maximise the return, so they overfit. repair minimises defects instead. It first corrects
look-ahead and repainting. Then it picks from a short list of declared repairs (smoothing, holding period,
no-trade band, tranches, neutralisation, caps, volatility target) on the first 70 % of the history, by the number of
defects left and never by return, and counts every candidate as a trial. The last 30 % is a lockbox, opened once.
There are four outcomes:
REPAIRED: on data the choice never saw, the strategy still earns after costs and is not rejected (the lockbox can still ask for more evidence, such as more trades).REPAIRED_NO_EDGE: the defects are gone and so is the profit, because the profit was in the defect.NOT_REPAIRABLE: what you have to do yourself.NOTHING_TO_REPAIR: there was nothing in the catalogue to fix.
The original file is never touched. On a random walk, none of the 68 leaking strategies of the Trap Suite comes out
as REPAIRED. Guide.
Is it alpha? An Alpha Readiness Level for the committee
A ranking signal gets the checks a fund's research committee runs before it gives capital:
- signal power: rank IC, decay, quantiles, placebo scores;
- attribution: is it alpha, or momentum and short volatility under a new name?
- value to your book: the marginal Sharpe;
- implementability: square-root impact at your capital, capacity, short leg, rebalance day;
- robustness: subsets, start dates, bootstrapped markets;
- data and process: today's index members, mismatched exchange closes, decay after publication;
- multiple testing: the t ≥ 3 hurdle, the minimum backtest length;
- risk: named crises, tails.
Everything ends in one line, for example ARL 6/9 — blocked at 7: tradable and robust (rebalance_timing_luck).
Missing evidence is "not assessed", never passed. Guide.
Evidence a model-risk committee can file
A validation dossier is one folder with:
- one printable page: summary, checks, readiness level, assumptions and limitations, how to reproduce, sign-off fields;
- a clause map to SR 11-7, PRA SS1/23, MiFID II RTS 6, a crypto checklist or an academic appendix;
- the certificate and the environment.
The map shows evidence, never compliance. monitor compares live returns with the backtest, measures realised
slippage and raises sequential alarms when the edge dies.
Guide.
Machine learning, LLM signals, events and track records
fit/predict. Definefit(train)andpredict(model, df)instead ofsignal(df). The verifier refits only on the past, andml_refit_gaprejects a model whose profit lived in fitting on the whole file.--model-cutoff 2024-06. An edge that exists only before a language model's training cutoff is look-ahead through the model's memory.--events events.csv. News, earnings or LLM outputs are joined by publication time. The report shows what a join by event time would have earned.verify --returns manager.csv. Due diligence from returns alone: smoothing, missing small losses, implausible consistency, significance given the manager's number of funds.verify --legs legs.csvand--null-test pairs.py:pnl. Phantom profit in pairs and stat-arb strategies: a rolling hedge ratio booked as position times the change of the spread earns a profit that no trader could, even on independent random walks.--legsre-derives the P&L from the quantity held in each leg and rejects a reported return the legs never earned (and writes the corrected series);--null-testruns the strategy on random walks, where it must earn nothing. Trymonte-neo verify --demo-phantom.- Your institution's rules and history.
--policy policy.tomlapplies your thresholds and records them in the certificate.--trials-from mlflow:./mlruns(Optuna, W&B, Ray Tune too) counts the runs you already logged.--ledgeron a shared drive counts the whole team's attempts. - Where you already work.
%%verifyin Jupyter, Polars frames as input, andmonte-neo dossier --litefor a one-page plain-language summary for people who do not read Sharpe ratios. - Two more lint rules for ML code.
full_sample_transform(a scaler or PCA fitted on all rows) andtarget_encoding_full(a target mean over all rows mapped back to features).
Guides: ML and events · track records · phantom profit in pairs strategies · policy, trials, model cutoff · reference alpha.
Catch look-ahead that hides in milliseconds
The problem. A quote has two times: when the exchange stamped it and when it reached you. Most backtests on intraday quotes bin them by the stamp, so a fast strategy trades on prices it could not have seen yet. No code lint finds this: the leak is in the clock, not in the code.
What Monte-Neo does (monte-neo verify --quotes quotes.csv --strategy my_strategy.py):
- Arrival look-ahead. The same strategy sees bars built from the arrival time and trades against the market. If the profit exists only with zero latency, it is a leak at millisecond scale.
- The delay where the profit vanishes. One number you can act on: "the profit disappears at 38 ms of extra delay".
- Latency Monte Carlo. Each quote's latency is redrawn from the latency you actually observed (inside its venue), 200 seeded draws: the distribution of the return and the probability of a loss. It shows when a profit was lucky latency.
- Order delay.
--order-latency-msdelays every fill, so an edge that lives in instant execution is rejected. - No server near the exchange?
--latency-model lognormal:8,25assumes the latency (median and p95 in ms) instead of reading it, and the certificate says plainly that it is assumed, not measured. - Several feeds in one strategy.
--symboland--feedslet a strategy trade one instrument on the prices of another (lead-lag, futures against spot); each feed has its own latency. A leader that arrives after the follower moved is caught. - Look-ahead probes too. The truncation and perturbation probes of
verify_strategyrun on the arrival bars, so a strategy that reads the next bar (shift(-1)) is rejected: that leak exists on every clock. - Quote quality. Crossed quotes, negative latency, out-of-order arrivals and bursty latency: a congested path (VPN, Wi-Fi) holds messages and releases them in bursts, and the check says so instead of reporting your network as a result.
- A certificate. Signed, and reproducible with
--rechecklike every other certificate.
What sets it apart: it is an audit, not an environment. It takes a finished strategy from any source (any signal(df)
function, or an agent's code) and your own quote recording, and says whether the profit survives the time the data
arrived, with a certificate others can reproduce. The strategy does not have to be written for a particular engine.
Honest scope: experimental. The latency checks are context (warn at most) and were calibrated on synthetic data, so record
real latency on the machine that will trade, or state an assumed latency and read the verdict as conditional on it. Fills
are taker orders at the mid, with the data latency from the quotes (or assumed) plus a fixed order delay. Queue position and
partial fills are not modelled, on purpose (they need the order book and a passive-order model; a rough formula would give
false precision), so a market-making strategy cannot be validated here; the certificate lists these assumptions.
Read the guide.
Search for an indicator, honestly
Tries thousands of causal formulas, counts the search, tests it against shuffled markets and a lockbox, and writes a certificate for the winner. On random walks it names nothing (0 of 60 searches in the calibration), although a plain search would report a Sharpe above 6. See the guide.
The rest of the workflow
verify --ledgercounts every variant you try;verify --suggest-fixrewrites leaks as a diff (guide).- Signals must not repaint: a signal that changes after it was shown fails, and a signal that needs the bar's own prices is reported (guide).
history,register,oracle,portfolio,doctor: certificate history with a regression exit code, pre-registered hypotheses, a Thresholdout hold-out for agents, many strategies at once, and known problems of data exports (guide).- The honesty scorecard shows how often the verifier catches leaks and spares honest strategies (hypothesis zoo, with intervals and known gaps).
What it checks
Every rule is backed by the Trap Suite: 80 strategies that are known to lie and 35 honest controls. It runs on every build, so the verifier cannot silently stop catching a leak or start accusing honest code.
How it differs from other tools
Where to use it
Why Monte-Neo
- Independent. It checks code it did not write, with probes that do not trust the strategy's own numbers.
- Careful with accusations. 35 honest strategies (loops, windows, resampling, fits inside rolling windows, a real edge with a high hit rate) must never be flagged for look-ahead, on every build.
- Repairs without overfitting.
repairfixes defects chosen by the number of defects, counts every attempt and lets a lockbox decide, and says so when the profit was the defect. - Built for agents. An MCP server with 23 tools, a Claude Code plugin with a skill, a slash command and a reminder hook, plus rules for Codex, Gemini CLI, Cursor and Qwen Code. Every failed check returns a
next_actionthe agent can act on. - Institutional evidence. Alpha reports with a readiness level, validation dossiers mapped to model-risk frameworks, live monitoring, your own policy recorded in every certificate.
- Time-aware. It checks whether the profit survives the time the quotes really arrived, not only the time the exchange stamped them.
- Reproducible. The same data, code and
n_trialsalways give the samecertificate_id. Anyone can reproduce a certificate with--recheck. - Signed. Ed25519 signatures show who issued a certificate and that nobody edited it.
- Honest about selection bias. Declare how many variants you tried, or let
verify_gridcount them for you. The Deflated Sharpe prices them in. - Local and private. Your data and code never leave your machine. MIT licensed.
Quick start
Command line
my_strategy.py defines signal(df), which returns one position per bar: +1 long, 0 flat,
-1 short, or a weight such as 0.5 (half the equity long). The position decided on bar t is
filled at the open of bar t + 1.
Python
Parameter search with honest trial counting
Several symbols, and a report for people
The HTML report is a tear sheet in one file with no scripts: the reason for the verdict in one sentence, equity on a log scale against buy-and-hold, drawdown, rolling Sharpe, a monthly heat map, the timing test, sensitivity to costs, trade statistics, the evidence for a leak (bars and source lines), every check, results by period and market regime, and the hashes to reproduce the run. It prints to PDF from the browser. See the example reports.
Use it from your coding agent
Claude Code (plugin with the MCP server, the verify-strategy skill and /verify):
Any MCP client (Codex, Gemini CLI, Cursor, and others):
It is also listed in the official MCP Registry as io.github.NeoZorK/monte-neo. Setup for each
client: Use from agents.
What was tested. The maintainer has run the server with Claude Code and with Qwen Code on a local model. Codex, Gemini CLI, Cursor and other MCP clients get the same server and rules, but nobody has reported a run yet. If you use one of them, a 10-minute test helps: issue #114.
Local agents (Qwen Code, or any terminal agent on a model served from your machine through Ollama, LM Studio or llama.cpp):
qwen-code is also a built-in agent of monte-neo bench run, so you can measure how honest a local model is.
A small model often fails the bench tasks; that is a result of the model, not of the verifier.
Setup, --base-url and troubleshooting: Local agents.
MCP tools (23): verify_strategy, verify_grid, verify_quotes, verify_portfolio, verify_returns, verify_legs, validate_alpha, repair_strategy, build_dossier, monitor_live, probe_lookahead,
cost_stress, recheck_certificate, check_signature, render_report, suggest_fix, discover_indicator,
register_hypothesis, compare_certificates, holdout_query, diagnose_data, verdict_schema, verifier_manifest.
GitHub Action
The job fails on REJECT. The verdict and every check appear in the step summary.
Certificates you can check
Each run produces a strategy-verdict/1 JSON certificate. It contains the verdict, every check,
the metrics and the SHA-256 hashes of the data, signals and code.
Show that a strategy passed:
Link the badge to the verification page with your certificate and public
key (/verify/?cert=<https URL>&key=ed25519:<key>). Readers then check the signature in their
browser with one click; nothing is uploaded.
Install options
Python 3.11+ on macOS or Linux.
Research engine (fee-aware bar backtests, sweeps, Monte Carlo)
Monte-Neo started as a fast local research engine for Apple Silicon, and the verifier runs on it. The engine is still available. It is in maintenance mode: bug fixes only.
- Next-bar fills, costs in bps, SL/TP/trailing stops, funding, sessions
- Export API with golden vectors, holdout, walk-forward, CSCV/PBO, Monte Carlo helpers
- Metal / MLX / Numba device selection with a memory planner that falls back to CPU instead of hanging
- Paper OMS for event-level validation
Docs: quick start · export API · backtest engine
Help the project
Monte-Neo is free and MIT-licensed, and it is built in the open. If it saved you from a bad backtest, three things help most:
- Star the repository on GitHub. Stars are how quants and agent builders find a verifier.
- Tell us about a case it caught or missed: share it in Discussions, or open an issue with a minimal strategy file. Missed leaks become new Trap Suite cases.
- Add the badge to your strategy repository (see the certificate badge section above), so readers know the result was verified.
Project status
Monte-Neo is in active development (beta). The verifier API and the strategy-verdict/1
schema are stable across minor releases. See the
roadmap.
Not investment advice. Monte-Neo is a research and verification tool. Its reports, examples and reference strategies illustrate a method; they are not a recommendation, an offer or a call to buy, sell or trade any instrument, and not a promise of profit. Simulated and past results do not predict future returns. Trading can lose money, including more than the initial capital when leverage is used. Decisions and their consequences are yours; consult a licensed adviser if you need advice.
Contributing
Found a way a backtest fooled you or your agent? Submit it as a trap. Did the verifier accuse an honest strategy? Report a false accusation. Bug reports and pull requests are welcome; see the contributing guide. Report security issues privately: SECURITY.md.
Citation
The method is described in the technical note.
If Monte-Neo helps your research, please cite it. GitHub shows the citation under Cite this repository (CITATION.cff).
License
來源:README.md,提交 82123d0
工具
0版本歷史
13- v0.54.0最新Oct 20, 2026
- v0.53.2Oct 19, 2026
- v0.53.1Oct 12, 2026
- v0.52.0Oct 6, 2026
- v0.50.0Oct 1, 2026
- v0.49.0Sep 30, 2026
- v0.45.0Sep 30, 2026
- v0.40.0Sep 30, 2026
- v0.36.1Sep 29, 2026
- v0.35.1Sep 29, 2026
- v0.32.1Sep 28, 2026
- v0.32.0Sep 26, 2026
- v0.24.0Sep 26, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分