- 快速验证一个交易想法:从提问到拿到回测曲线,省掉自己接行情、写因子、搭回测循环的几天,代价是回测口径要自己复核
- 多因子筛选的批量实验:五个因子库、478 个 alpha 因子现成可跑,适合做因子初筛和样本外对照,不适合当最终生产因子库
- 模拟盘/影子账户验证:Shadow Account 回放自己的交易规则,在真金白银之前先跑一段纸上交易,比直接上券商连接器安全
- 多市场研究覆盖:股票、量化、加密、风险各有预设研究团队,适合一个人维护多个市场观察面的场景
专家点评
上手难度:进阶更新于 2026-11-11把自然语言金融问题跑成研究报告、回测和模拟盘的 LLM 智能体框架,顶替的是自己拼数据源+回测引擎+券商 API 的那层胶水
适用场景
踩坑
- 数据源是最大的摩擦点:issue 里反复出现 Tushare 基本面覆盖不足、希望接入 mootdx 等请求,说明内置数据商对 A 股基本面策略不够用,需要自己写 DataProvider 适配层
- 依赖锁定文件有坏 pin(caio、websockets、pydantic-core 导致 --require-hashes 失败),走 hash 校验的 CI 或离线环境会直接卡在安装阶段
- 版本与分支错位:部分功能只在 main 分支,pip 装到的版本可能没有;Gildata 数据即使有 GILDATA_TOKEN 也要单独开启,容易误以为配了 token 就能用
同类对比
要的是成熟回测引擎而非 LLM 编排,选 backtrader / vectorbt / zipline-reloaded;要的是纯因子研究流水线,选 alphalens + 自建数据层。Vibe-Trading 的价值在自然语言到回测的编排层,不在回测内核本身。
pip install vibe-trading-aiREADME 未说明
项目说明
由 README 自动翻译提炼港大开源的 AI 交易智能体,把金融问题变成研究报告、可运行回测和模拟组合
用大模型智能体做量化交易,支持多智能体协作、策略回测和 MCP 接入,让个人也能搭起自己的自动交易助手。
核心能力
- 用 30 个预设研究团队覆盖股票、量化、加密与风险
- 在五个因子库中基准测试 478 个 alpha 因子
- 支持跨市场回测并做样本外检验与交易成本重跑
- 接入 19 个券商连接器并按券商分别授权
- 用 Shadow Account 回放自己的交易规则
容易踩的坑
需 Python 3.11 及以上版本;Gildata 等数据功能需单独开启,仅有 GILDATA_TOKEN 不会自动启用;部分新功能仅在 main 分支,需等下一个 pip 版本
- v0.1.19v0.1.19 — research that outlives the chat最新正式版2026-11-05 · 2026-11-05 11:38 UTC
Rolls up 299 commits / 116 merged pull requests since 0.1.18, plus 21 pull requests whose work landed through maintainer commits, from 26 contributors.
The headline is research that outlives the chat that produced it. A finished analysis can be saved as a versioned research artifact with its evidence references and data-as-of date, searched later, and revised instead of overwritten; a follow-up turn or a later session finds the backtests already run through
list_backtest_runsand reads their artifacts instead of running them again; and a research goal's objective can be edited without losing its evidence. Paper trading adds an opt-in A-share five-minute simulation that settles a completed session bar by bar on a new order lifecycle, with JoinQuant's limit-fill rules; saved accounts still settle daily. Gildata financial queries, report-period stock screening and Shannon portfolio diagnosis arrive as separate opt-ins for Gildata account holders, Gildata quotes are used only when named, and the QVeris integration is removed. Argentina (BYMA shares and CEDEARs) joins as a backtest market,web_searchcan use Parallel's hosted search, and Codex OAuth lists the models the signed-in account offers. Both 0.1.18 regressions are fixed: a retried provider error no longer halts live decisions for the day, and a research goal's answer that crosses its token budget is delivered. Most of the rest is correctness: formula corrections to GTJA and Qlib alphas, futures contract specifications and fees, loader paging and ticker forms, grounding of document figures and their units, background tasks that belong to the session that started them and survive a restart, and chat channels that no longer call a voice transcriber that does not exist. The Web UI gets a new welcome screen and a warm paper palette in light and dark.Upgrading: a stored QVeris key is no longer read, and a
GILDATA_TOKENalone no longer enables any Gildata feature. Pick the features in Settings → Data Sources orVIBE_TRADING_GILDATA_FEATURES.Added
-
Versioned research artifacts (#2079, #2159, thanks @he-yufeng; closes #1909, #2158). A finished analysis can be saved as an immutable revision with its subject, universe, data-as-of date, evidence references, verification status and optional hypothesis, goal, session or run links, through the
save_research_artifact/search_research_artifacts/get_research_artifactagent tools,vibe-trading research-artifact save|search|show|revision,/api/research-artifactsand a Web page in all eleven languages. Passing anartifact_idappends a linked revision; the subject and universe cannot change. Repeating identical content and provenance returns the existing revision, and changed content or evidence defaults tounverified: saving is not verification and does not make old data fresh. The index lives in the runtimesessions.dbunlessVIBE_TRADING_RESEARCH_ARTIFACT_DB_PATHnames another file; the idempotency lookup is indexed (#2159). The REST save route accepts at most 1,000 evidence objects (1,000,000 characters serialized) and ids of at most 200 characters. -
list_backtest_runsfinds the backtests earlier turns and sessions already ran (#2074, thanks @zeus229), so a follow-up reads their artifacts withread_run_artifactinstead of re-running them. It lists runs from thereq.jsonandrun_card.jsonthe runtime already writes, newest first and paged, with each backtest's absoluterun_dir; the agent tool defaults to the current session, the MCP tool to every run. Assistant replies in the history carry[prev_run: <id>]. The grounding gate adopts a prior run read this way only when its run card andmetrics.csvagree and every table it registers matches the run card manifest hash. The session filter is not an access control (runs have no owner), and a run the model forged in an earlier turn is not detected. -
**A research goal's objective can
-
- v0.1.18v0.1.18 — lean runtime and reliability fixes2026-10-21 · 2026-10-21 14:50 UTC
查看更新说明
Same-day follow-up to 0.1.17: 12 commits (10 non-merge), no new external pull requests. It ships the fixes made on main after 0.1.17 —
mcp>=1.30so the HTTP MCP transport reclaims sessions, connect-time checks for custom model endpoints (including fake-IP proxy hosts), grounding ofrun_dir/…refs and signed amounts, Beijing codes in correlation, the macOS timeout fix and the sdist contents — together with a leaner agent runtime: tool schemas load on demand throughload_tools, oversized tool results stay readable in the run directory, Swarm sizes its context by the model window, and usage accounting covers compaction, cancelled responses and failed streams. On the 0.1.17 pre-release verification prompt (DeepSeek V4 Pro, a 20/60 SMA backtest on AAPL.US) a run took 7 model calls instead of 12 and 152K input tokens instead of 706K, and reported the same figures.Known issues
- A retried provider error (a connection reset or rate limit) can halt live model decisions until the next UTC day, and a research goal's final answer that crosses its token budget is discarded. Both are fixed on main (see Unreleased) and ship with the next release.
Changed
- Reduce agent request overhead with on-demand tool schemas while keeping the complete tool catalog and existing execution permissions. Ordinary backtests no longer request extra attribution automatically. Automatic summary titles remain available after the first chat exchange.
- Preserve oversized tool results in readable run artifacts and stop Swarm from clearing new observations before the model sees them. Context pressure uses the model window and includes tool schemas.
- README credits cover every cycle again: contributor lines for the 0.1.13, 0.1.15, 0.1.16 and 0.1.17 cycles in all seven READMEs, each PR attribution checked against GitHub. The data-tools list counts the 29 read-only data tools the MCP server serves (it said 22). The 0.1.13 notes below credit ModelScope (#1011) to @yrk111222 and #676 to the session lifecycle entry it fixed.
Fixed
- Keep the custom-endpoint guard lazy-loaded for minimal installations and align the Windows desktop MCP lock with the updated package requirement.
- Include compaction, cancelled responses and failed streams in usage accounting; stop further work when a research goal exhausts its token budget. Forward the configured output cap to both DeepSeek adapters.
- Redact credentials before tool results reach model context or replay caches, and reject incomplete compatible-provider streams instead of releasing a truncated answer or tool call.
vibe-trading-mcp --transport httpreclaims its sessions (CVE-2026-59951 / GHSA-84m7-p3x7-pcfv).mcpis now>=1.30.0instead of capped below 1.30: an idle session closes after 30 minutes, at most 10,000 exist and an ended session is dropped, so a client can no longer grow server memory without bound. 0.1.15–0.1.17 held the cap because 1.30's RFC 8414 issuer check refused IBKR's OAuth metadata; IBKR's protected-resource document now names the same issuer as its metadata (checked 2026-10-21) and Robinhood's already did. The Docker lock pinsmcp1.30.0.- Custom model endpoints are checked again on every connection. Saving a profile resolved its host once; a name that later re-resolved to a private address (DNS rebinding), or a redirect to one, was not checked again. The provider test and the running model now resolve each direct connection once, refuse it unless every address is public and connect to the address they checked (TLS still verifies the host name). When an environment proxy carries the request the proxy resolves the name, so this check does not apply there.
- Custom providers can be saved behind fake-IP proxies. Clash, Surge and sing-box in TUN mode answer every lookup from 198.18.0.0/15, which 0.1.17 refused, so no custom provider could be saved on such a host. A looked-up 198.18.x a
- v0.1.17v0.1.17 — paper accounts, and a value that cannot be computed says so2026-10-21 · 2026-10-21 12:42 UTC
查看更新说明
Rolls up 638 commits / 228 merged pull requests since 0.1.16, plus 41 pull requests whose work landed through maintainer commits, from 33 contributors.
The headline is daily paper trading. A
paper_trade_steptool for the agent and MCP, and saved paper accounts throughvibe-trading paper,/api/paper-accountsand a Web page, match orders or a strategy against completed daily bars without ever reaching a broker; saved accounts move forward only. Most of the rest of the cycle is correctness, and much of it has one shape: a value that cannot be computed now says so instead of turning into a plausible number. A profit factor with no losing trade, an undefined correlation, a factor benchmark with too few IC observations, an upside at a zero price and an unbounded ratio come back asnullor a refusal rather than 0; a missing price no longer bridges a return pair, a VaR transition or a lag pair; an after-close SEC filing no longer reaches the IC a bar early; and a misspelled backtest setting is reported in the run card instead of silently ignored. Brazil (B3) joins as a market, the Alpha Zoo grows from 462 to 478 factors, Slack and Discord join the guided channel setup, scheduled reports can arrive by Email as HTML or a password-protectable PDF, token usage shows in Run Detail, chat and swarm, aclaude-cliprovider runs the agent on a local Claude Code login, and the Web UI adds Persian and Turkish for 11 languages.Added
-
Daily paper trading with saved accounts (#1939, thanks @shadowinlife). A new
paper_trade_stepagent and MCP tool matches explicit orders, or the per-day orders of a strategy file, against completed daily bars forcn_a,hkandus; nothing in it can reach a broker order path. The same stateless step is served asvibe-trading paper stepandPOST /api/paper-trade/step. Saved paper accounts are built on it and reachable three ways:vibe-trading paper create|list|show|history|advance, authenticated REST under/api/paper-accounts(list, create, read, history,POST .../{id}/advance) and a Paper trading page in the Web sidebar in all eleven UI languages. An account starts from the cash and positions you enter, today or at the next session, and moves forward only: an advance settles sessions whose regular close is at least 30 minutes past and carries the revision it read, so a stale or concurrent request is refused (HTTP 409 over REST) instead of committing twice, and a failed step leaves the ledger unchanged. Ledgers live in<runtime_root>/paper-trading/accounts.db; there is no background scheduler. A strategy under<runtime_root>/strategies/runs in a child process that sees only bars strictly before the execution day and the ledger after earlier fills; orders fill at that day's close, and any strategy failure discards the whole call. Matching is daily-close and all-or-none, with simplified fees, price limits, board lots and A-share T+1. Execution prices must be raw: adjusted or unknown price calibers and non-finite prices are rejected, A-shares need a complete ClickHouse trading calendar, and a split-like jump returnsPAPER_DATA_NOT_READYrather than rescaling holdings. Corporate-action reconciliation and cash dividends are not modelled and NAV is not total return; intraday, margin, options and cross-market phases remain open under #1938. -
Live runner model calls have their own cadence and daily budget (closes #1854). Safety checks still run every minute, but a model decision now defaults to every 15 minutes, each in a fresh conversation, with at most 26 decisions and 1,000,000 reported tokens per broker per UTC day; an optional once-daily time, timezone and operator-priced USD limit are set in Runtime → Model schedule and spending limits, the chat runner panel,
vibe-trading connector runner-settingsorGET/PUT /live/runner/settings. Spending history survives restarts. Limits are checked after e
-
- v0.1.16v0.1.16 — a number that can show where it came from2026-09-29 · 2026-09-29 08:37 UTC
查看更新说明
Rolls up 492 commits / 116 merged pull requests since 0.1.15, from 16 contributors.
The theme of this cycle is a number that can show where it came from. The final-answer grounding gate stopped guessing what a number is from the words around it: the model declares each figure's role — observed, derived, proposed, cited or count — the gate checks that declaration against the session's tool evidence, and a figure that fails is cut from the answer instead of the whole answer being refused. A backtest's own output (its Sortino, turnover, weights and Monte Carlo p-values, not only its Sharpe) now grounds the report written about it, run cards cite a metric only where the saved CSV agrees, and the generated broker matrix states each profile's permissions as declarations rather than as runtime verification. Research runs stopped losing what they fetched: compaction follows the model's real context window instead of a fixed 40K estimate that began clearing tool results from the third step. The missing-data sweep reached 59 more alphas: 15 qlib158 count factors, 20 that filled a missing input with a constant and 24 comparison gates. Argentina (BYMA), weekly and monthly bars, Bahasa Indonesia, Gildata, OpenCode, Email and WebSocket channels and four broker connectors (KIS, Upbit, Toss Securities, Scalable Capital) land alongside.
Added
-
Stock profiles carry the listing's own identity (#1577, thanks @Shizoqua).
get_stock_profilereturns alistingblock beside the issuer's fundamentals: Yahoo's symbol, exchange, quote type and quote currency, plus the financial currency and underlying symbol when Yahoo declares them. A secondary listing no longer reads as the primary one.GOOGL.BAis an ARS line in Buenos Aires carrying Alphabet's USD financials, andGGALD.BAis a USD line whose issuer reports in ARS. Nothing is inferred from the ticker. -
Volume statistics in
technical_indicators(#1571, thanks @zeus229). The tool returns the latest volume, its 20-bar mean and their ratio, computed from the bars it already fetched. The mean needs a complete 20-bar window.volume.unitis the unit the serving source declares (board lots on the A-share sources, shares on the Yahoo family,nullwhen undeclared), because the two are 100x apart and nothing in the numbers tells them apart. -
Argentina (BYMA) market data (#1543, thanks @zeus229). A
.BAsymbol — a BYMA listing or a locally traded CEDEAR — is its own marketar_equity, quoted in ARS, served byyahoo→yfinance→local, and reported as marketarbyget_stock_profile. Execution is deliberately not modelled: an Argentine backtest raises instead of borrowing US or crypto commissions, lot sizes, settlement and short-selling rules. The Web UI carries the market too — Settings source priority, the positions asset-class grouping and the sector union — and with ituk_equity,vietnam_equityandindex, which had been missing from one or more of those three since they landed.EnvConfig.data's per-marketMARKET_DATA_ORDER_*fields are now guarded againstFALLBACK_CHAINSinstead of a hand-written list, which is whyuk_equitynever had one. -
Weekly and monthly bars (#1479).
get_market_dataand backtests take1Wand1M(and1w/1wk/1mo). Loaders are still asked for daily bars;loaders.base.resample_barsbuilds the period bar at the three fetch boundaries (runner, market data, benchmark), so a weekly bar is the same whichever source served the days, at that source's daily caliber. A week runs Monday to Sunday, a month is a calendar month, and each bar is dated on the last trading day inside it: first open, highest high, lowest low, last close, summed volume and amount, volume-weighted vwap, mean funding rate. Annualisation is 52 / 12; a weekly perpetual bar settles 21 funding periods.1Mis matched before any case fold, which read it as one minute in strict-100x va
-
- v0.1.15v0.1.15 — data that says what it is2026-09-09 · 2026-09-09 07:49 UTC
查看更新说明
Rolls up 551 commits / 162 merged pull requests since 0.1.14, from 35 contributors.
The theme of this cycle is data that says what it is. A price frame now carries the adjustment caliber it was served under. A factor propagates the gaps in its inputs instead of filling them. A loader that cannot serve a market no longer claims it, and a source that fails to refresh is an error rather than a smaller portfolio. Three of those were the same bug wearing different clothes: a default that silently substitutes a plausible value for a missing one, which is indistinguishable downstream from a real observation. Three new markets, a fourteenth broker and fifteen Quant Library additions land alongside.
Added
- UK equity market (#1206, thanks @cgycorey) — LSE
.Land.ILsymbols end to end: market data, Yahoo-backed financial statements and indicators, trade-journal inference intouk_equity, and its own engine path. SDRT is modelled as what it actually is — a 0.5% duty on the purchase side only, not a symmetric round-trip cost. Charging both sides overstated the cost of every round trip by half, which is exactly the size of edge a mean-reversion strategy lives on. - Zerodha Kite Connect (#1193, thanks @ashutoshsinghpr7) — a fourteenth
broker connector for Indian equities. Kite exposes no runtime paper/live
discriminator — no account-id format, host separation, demo flag or trade
environment — so under the red line it is capped at paper plus read-only:
place_orderandcancel_orderhard-refuse any non-paper config at the first line, and no*-live-tradeprofile exists to select. That now covers Longbridge, Dhan, Shoonya and Zerodha; Trading212 goes further and refuses all order placement including paper. - Read-only multi-broker portfolio (#1072, thanks @goatyyc; onboarding
contracts in #1250) — one aggregated snapshot across every enabled
connection instance, reachable four ways: the Web
/portfoliopage, REST underportfolio_routes.py, theportfolio_summaryagent tool, andvibe-trading portfolio show | refresh | sources. Three design points that are not incidental: a source that fails to refresh is an error excluded from the totals (statuserror,last_success_at,complete=false), never a carried-forward cache, so a partial snapshot cannot read as a smaller portfolio; everyremote_mcpread passesinteractive_oauth=False, so aggregation can never pop an auth prompt; andanalysis_context()carriesrisk_xray_argssoportfolio_risk_xrayis fed rather than reimplemented. Eligibility is one rule —is_portfolio_connection_profilerequires readonly and account.read and positions.read — under which the IBKR official-MCP profile, which advertises only discovery, is correctly not a portfolio source. - Quant Library, fifteen additions (thanks @santhreal) — Heston (1993)
stochastic volatility option pricing (#1195); Hierarchical Risk Parity
allocation (#1196); Archimedean and Gaussian copula analytics (#1197);
market-microstructure analytics — VPIN, Roll spread, Amihud illiquidity,
Kyle's lambda (#1198); analytical single-barrier options with cash-rebate
handling (#1163) plus finite-difference sensitivity Greeks for them
(#1203); an ISDA standard-model single-name CDS valuation engine with
hazard-rate conversions (#1164); Key Rate Duration decomposition across
benchmark tenors (#1165); the Vasicek credit portfolio loss model and
spread DV01 (#1167); cross-sectional factor Information Coefficient time
series (#1166); Ornstein-Uhlenbeck exact calibration with half-life
(#1161); drawdown distribution analytics with the Ulcer and Pain indices
(#1162); Corrado rank and Cowan generalized sign non-parametric
event-study tests (#1160); multi-factor risk decomposition with Euler
marginal contributions, reporting
unmatched_weightrather than normalising it away (#1159); and group-purged k-fold cross-vali
- UK equity market (#1206, thanks @cgycorey) — LSE
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
📰 News
-
2026-11-08 📝 Research revision comparison and full-history export — Compare content, evidence and metadata between any two revisions (#2168), and export the complete research history as JSON or Markdown (#2170). Switching research records now ignores stale responses, and Markdown exports preserve original content in isolated code blocks. Also fix missing factor weights, partial-return attribution, insufficient IC samples, non-finite valuation inputs and margin calculations for negative entry prices. On
main, for the next pip release. -
2026-11-07 🧪 Research Lab: trading costs and out-of-sample testing — Rerun saved price inputs under different fees and slippage; select parameters using training results only, then freeze them for out-of-sample tests and a separate final holdout. The Research Lab shares Web, CLI, API and Agent/MCP workflows, with all eleven UI languages. Also correct window-boundary returns and factor warmup/long-window calculations, and add 20 offline task-replay cases that keep missing evidence visible. Versioned research artifacts can now store structured financial facts (#2164), and bare Chinese futures contract codes resolve correctly (#2177). On
main, for the next pip release. -
2026-11-06 📈 Implied-volatility grids and paper-trading fixes — Build strike-by-expiry IV grids from supplied option observations, with observed/interpolated labels and no extrapolation (#2172). Extreme numeric inputs now produce finite results or explicit errors. A-share 5m market orders blocked by a price limit are canceled immediately (#2176); the matcher also processes symbols chronologically so later proceeds cannot fund earlier orders. On
main, for the next pip release; public 5m requests still support one symbol per step.
-
2026-11-05 🚀 v0.1.19 released (Release notes,
pip install -U vibe-trading-ai): research that outlives the chat — save versioned research artifacts with their evidence and revise them, reuse backtests from earlier turns and sessions, and edit a research goal in place. New opt-ins: a five-minute A-share paper simulation, and Gildata financial queries, stock screening and Shannon portfolio diagnosis (QVeris is removed; an existingGILDATA_TOKENalone now enables nothing). Also Argentina (BYMA) backtests, Parallel web search, Codex OAuth model discovery, and both 0.1.18 regressions fixed. 116 merged pull requests plus 21 landed through maintainer commits, from 26 contributors (CHANGELOG). Fixed today: a backtest reports the benchmark it actually evaluated, long/short books get a risk x-ray, GTJA alpha 17 stays missing while its inputs warm up, the Shannon panel speaks all eleven UI languages, and two reviewed contributor fixes that had not landed are in (#2042 TTM sums across a missing quarter, #1985 3:2 split detection). Thanks @rudycelekli, @he-yufeng, @Jackzigen, @Shizoqua, @cgycorey, @dajiaohuang, @zeus229, @alexwan02, @BHhhh-123, @remote-controlled-man, @shadowinlife, @TWJxi, @lishuanghong1989-netizen, @TerryF7, @davidalmeida90, @DrDLyuan, @goatyyc, @hnq-ai, @kadyrbekovhamit-cyber, @MetaAviator, @octo-patch, @RowanAldean, @VectorPeak, @wavebyrd and @yufengsika! On main after the release (next pip release): backtest benchmarks are bought at the first evaluated open, as the strategy is, instead of from the last warm-up close; excess return no longer includes that move (AAPL 20/60 SMA example: 22.5% → 18.4%). -
2026-11-04 📊 Gildata financial queries, stock screening and Shannon portfolio diagnosis — Screen stocks by market cap and retrieve their half-year revenue in one request, or inspect portfolio factor exposures and each holding’s contribution to volatility. All nine Gildata features are opt-in, including for existing token holders. Free data sources never fall back to Gildata. #2117 · #2118 · #2119 Also clarified next-bar backtest fills, fixed false Swarm timeouts on Unicode heartbeats and sped up research artifact deduplication. #2137 · #2155 · #2159
-
2026-11-03 🛠️ Runtime integrity and localization follow-ups: Preserve U+2028/U+2029 inside trace, audit-ledger and session-search JSONL records, keep ledger appends valid after such payloads, normalize underscored model labels, and preserve handoff summaries during layer-2 compaction. Also accept BOM-prefixed frontmatter and keep the welcome surface aligned in RTL locales. Add regression coverage.
-
2026-11-02 🛠️ Frontmatter, result safety and welcome polish: Unquote quoted scalar metadata, fall back to a readable truncation when an oversized result cannot be encoded, and refine the welcome layout and featured cards. Add regression coverage.
-
2026-11-01 🛠️ Session timestamps, theme contrast and welcome interactions: Stamp session updates in UTC, keep dark-mode primary buttons legible, and make side-panel examples clickable with clear category labels. Add regression coverage.
-
2026-10-31 🛠️ Welcome and ticker parsing polish: Move the welcome surface to a warm paper palette and two-column layout, make featured examples and side-panel actions clearer, and stop trailing ticker letters from being interpreted as A-share or A/H constraints.
✨ Key Features
💡 What Is Vibe-Trading?
Vibe-Trading turns finance questions into research reports, runnable backtests and paper portfolios. You can also authorize a supported broker to execute live trades within a mandate you set and can halt. Your funds stay with the broker.
✨ What You Can Do
| Task | Where to start |
|---|---|
| Research markets, filings or uploaded documents | Ask in Web chat or attach a report. |
| Backtest a strategy or benchmark alphas | Inspect charts and trades in Run Detail, or compare factors in /alpha-zoo. |
| Simulate trading or replay a journal | Track daily fills and NAV in /paper-trading. Use /journal and /shadow in the CLI to review your trades. |
| Combine accounts or compare allocations | Open /portfolio for holdings and proposed allocation changes. Broker support |
| Explore options and correlations | Open /options for multi-leg payoffs and Greeks, or /correlation for market regimes. |
| Coordinate or repeat research | Run a Swarm team, assign work in Pixel Office or schedule a brief in /scheduled. |
| Revisit research with dated evidence | Search /research-artifacts compare any two revisions, and export a full series as JSON or Markdown. Versioned research |
⚡ Quick Example
Once you have run vibe-trading init, you can ask for a backtest in plain English or benchmark an existing alpha library from the terminal.
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average crossover for 2024. Compare it with buy-and-hold and report maximum drawdown."
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20
Open Run Detail to compare the crossover with buy-and-hold, inspect the trades behind a drawdown and check the data source on the run card.
🧪 Research Workflow
| Step | In the crossover example |
|---|---|
| Plan | Identify the trading pair, date range, moving averages and benchmark from the prompt. |
| Ground | Fetch historical bars for BTC-USDT. Check the source and dates before interpreting the result. |
| Execute | Write the strategy and run the backtest. The run directory holds the strategy, trades and equity curve. |
| Validate | Compare the result with buy-and-hold. Inspect turnover, drawdown and validation warnings alongside return. |
| Revisit | Open the saved run or ask a follow-up with different parameters. You can also save a dated research conclusion and revise it when new evidence arrives. |
📡 Data Sources & Smart Fallback
The loader supports 28 market-data sources. With source: "auto", it infers the market from the symbol and tries the configured sources in order.
| Market | How a request is filled |
|---|---|
| A-shares and Hong Kong | Start with Tencent. If it cannot supply the bars, try Eastmoney and then the remaining sources for that market. |
| US equities | Start with Yahoo. Stooq and Sina are the next two sources in the chain. |
| Crypto | Try OKX, Binance and CCXT before falling back to other sources. |
| Futures | Chinese contracts can use AKShare or local bars. Supply local bars for global contracts. |
You can also choose a source explicitly. For example, installing vibe-trading-ai[ashare] adds the token-free BaoStock loader for daily A-share bars. The data source reference lists the full chains and credential requirements.
🔩 Detailed Capabilities
Market research
| Feature | What you can do |
|---|---|
| Filings and holdings | Compare a manager’s SEC 13F holdings across quarters, or look through an ETF to its underlying positions. Each holdings report carries its reporting date. |
| Company valuation | Use /dcf to see how a valuation changes with the discount rate and terminal growth. Use /comps for peer multiples, or build a linked three-statement model and export the results to Excel. |
| Papers and documents | Search arXiv and OpenAlex for a signal, inspect the authors’ definition, then test it on your own universe. Upload a filing, spreadsheet or slide deck for questions about a specific exhibit. |
| Stock screening | With Gildata enabled, screen companies by market cap and retrieve half-year revenue in one request. Screening and portfolio factor diagnosis each have their own opt-in. |
Quant research
| Feature | What you can do |
|---|---|
| Alpha Zoo | Benchmark signals from Qlib, Alpha101, GTJA and the academic and fundamental libraries. Compare information coefficients across horizons, then check whether the result survives a walk-forward test. |
| Backtest engines | Model A-share price limits, crypto funding or futures margin. Use a shared capital pool for a cross-market strategy and inspect the individual fills behind its returns. |
| Options Lab | Build a spread leg by leg. Compare its expiry payoff with the Greeks and see how the position responds to a change in spot price and implied volatility. |
| Portfolio risk | Inspect drawdowns, estimate value at risk and expected shortfall, or use Brinson attribution to separate allocation from stock selection. The correlation view shows when markets start moving together. |
| Strategy tracking | Register a strategy with its evidence and track how its Sharpe ratio or factor information coefficient changes as new results come in. |
Accounts and trading
| Feature | What you can do |
|---|---|
| Portfolio | Bring read-only broker holdings into one snapshot or import an extraETF export. Enter target weights to preview the value change for each holding. |
| Paper trading | Advance a saved account one trading day and inspect fills, cash and NAV. You can also replay an A-share session in five-minute steps in a separate simulation. |
| Shadow Account | Import your broker’s trade journal, inspect fees and trading habits, then compare the actual trades with a rule-based replay. |
| Broker connections | Set up a connection in the CLI or Web and test it with a read. For supported live profiles, set symbol, order and exposure limits before enabling trading. The kill switch halts live activity. |
Teams and recurring research
| Feature | What you can do |
|---|---|
| Swarm and Pixel Office | Run a bull–bear investment committee or a quant research desk and inspect the workers’ reports. In Pixel Office, assign a task to a teammate and record the result on the shared board. |
| Scheduled briefs | Start from a premarket brief, an earnings tracker or a portfolio checkup. Choose a schedule and send the report to a configured channel such as Slack, Telegram or email. |
| Research history | Search older sessions and reopen a saved run. Save a dated conclusion with its evidence and compare revisions when the investment case changes. |
| Run records | Inspect the data source, model, execution record and metric references behind a backtest. Reopen the saved trades and equity curve to check a reported figure. |
Broker support at a glance
Read means a dedicated read-only profile. Sim means paper orders through a broker sandbox or local simulation. Live means live orders under a mandate.
Yes indicates a declared capability. A dash means no matching profile is declared.
| Broker | Read | Sim | Live |
|---|---|---|---|
| alpaca | Yes | Yes | Yes |
| binance | Yes | Yes | Yes |
| dhan | Yes | Yes | — |
| etoro | Yes | Yes | Yes |
| futu | Yes | Yes | Yes |
| ibkr | Yes | — | — |
| kis | Yes | Yes | — |
| longbridge | Yes | Yes | — |
| mstock | Yes | — | — |
| mt5 | Yes | Yes | Yes |
| okx | Yes | Yes | Yes |
| robinhood | Yes | — | Yes |
| scalable | Yes | — | — |
| shoonya | Yes | Yes | — |
| tiger | Yes | Yes | Yes |
| toss | Yes | — | — |
| trading212 | Yes | — | — |
| upbit | Yes | Yes | — |
| zerodha | Yes | Yes | — |
🎬 Demo
https://github.com/user-attachments/assets/2c595ee1-c577-481a-9460-34ea12bcf41c
https://github.com/user-attachments/assets/ac79426e-f3f7-4349-b0d5-d997a2725784
🚀 Quick Start
Terminal. Install the package with Python 3.11+, choose a model provider in the setup wizard, then open the interactive CLI.
pip install vibe-trading-ai
vibe-trading init
vibe-trading
Web app. Docker serves the frontend and API together at http://localhost:8899. From a fresh checkout, configure your provider before starting the container.
git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
cp agent/.env.example agent/.env
# Set your provider and API key in agent/.env.
docker compose up --build
The PyPI package includes the CLI, API and MCP server. For a frontend development setup or a local model, see the installation guide.
🖥 CLI Reference
Start vibe-trading for the interactive terminal. Type /help at the prompt to browse commands or use these shortcuts during research.
| Command | Use it to |
|---|---|
/model | Switch the provider or model for the session. |
/history | Browse and resume a prior conversation. |
/show <run-id> | Inspect the results of a saved run. |
/pine | Export the current strategy as a Pine Script indicator. |
From the shell, vibe-trading alpha list browses the factor libraries and vibe-trading playbook list shows the scheduled research templates.
💡 Examples
- Compare stocks. Ask “Compare AAPL and MSFT over 2024. Which month accounts for the largest gap in returns?” Resume the conversation later with
/history. - Review your trades. Use
/journalto analyze your exported trade history, then/shadowto compare your trades with a rule-based alternative. - Run an investment committee. Choose a stock and follow the bull and bear cases through to the final report.
vibe-trading --swarm-run investment_committee '{"target":"TSLA","market":"US"}'
🌐 API Server
Start a local server with vibe-trading serve --port 8899. In a second terminal, run curl http://localhost:8899/runs to list saved runs. Use the returned ID with GET /runs/{run_id} to inspect its results.
| To run a research session over HTTP | Endpoint |
|---|---|
| Create the conversation | POST /sessions |
| Send the research question | POST /sessions/{id}/messages |
| Follow progress as it happens | GET /sessions/{id}/events |
Open http://localhost:8899/docs to try the endpoints interactively. Authenticated clients send the API key in the Authorization: Bearer header.
🔌 MCP Plugin
MCP clients can launch the same package over stdio. Add this entry to Claude Desktop’s claude_desktop_config.json, restart the client and call list_skills.
{
"mcpServers": {
"vibe-trading": { "command": "vibe-trading-mcp" }
}
}
For other clients or a custom output directory, see the MCP configurations.
🏛 Ecosystem
Vibe-Trading is part of the HKUDS agent ecosystem:
🗺 Roadmap
| Area | Available now | Next |
|---|---|---|
| Paper trading | Daily accounts persist cash, fills and NAV between sessions. A separate simulation replays an A-share session in five-minute steps. | Opt-in volume-share matching (#2128, draft). |
| Research | Run cards record metrics and evidence for a completed backtest. Dated research artifacts keep revision history and are searchable. | Structured financial facts in research artifacts (#2164, in review). |
| Options Lab | Explore multi-leg payoffs, Greeks and spot × IV scenarios. | Volatility surface planned. |
Contributing
Pick a good first issue or open an issue to discuss a larger change. The contributing guide covers local setup and checks to run before opening a pull request.
Contributors
Thank you to everyone who has contributed to Vibe-Trading.
v0.1.19 contributors
- @rudycelekli — 58 PRs (12 landed as maintainer ports): GTJA alpha formulas restored to the report (#2036/#2037/#2038/#2039/#2040/#2051), loaders that ask each vendor for the ticker form it serves and page at its own cap (Alpha Vantage #1997, AKShare #1998, CCXT #1999, Tushare minute lots #2001, Tiingo/Stooq class shares #2010/#2012, Nobitex Tehran days #1989, push2 decimals #1988), futures and market fees (micro index price limits #1992, the 30-year treasury fee #1994, India stamp duty on short covers #1995), quant-library and governance fixes (#1950/#1959/#1960/#1962/#1963/#2000/#2017), sub-penny prices kept in trades and charts (#1987/#1990), TTM sums that stop at a missing quarter (#2042), 3:2 splits and ST board limits in paper trading (#1985/#1984), a live halt key that cannot alias the global halt (#2003), session, memory, CLI and API fixes (#1969/#1970/#1982/#2002/#2006), and a string-"false" sweep across ten tools (#1976/#1977/#2008/#2009/#2011/#2013/#2014/#2015/#2016/#2018)
- @he-yufeng — 18 PRs (5 landed as ports): versioned research artifacts (#2079/#2159), background tasks scoped to their owner, reaped on cancel and reconciled after a restart (#2092/#2098/#2100/#2157), silent provider streams interrupted (#2099), cache and reasoning tokens kept in
llm_usage(#2109), one tool policy across providers (#2087), Claude CLI tool-attempt recovery and structured finals (#2048/#2064/#2120), Qlib BETA/RESI/ROC/CORD semantics (#2062/#2069), magnitude suffixes in derived formulas (#2134), long/short risk x-ray and validation that refuses non-positive equity (#2162/#2161), and Unicode-safe swarm heartbeats (#2155) - @Jackzigen — the bar-agnostic paper order lifecycle (#2066), swarm runs that stop when cancelled from the chat (#2059/#2060), document figures and percentage points in grounding (#2058/#2108), Robinhood portfolio reads with account selection (#2054), Moonshot reasoning effort for kimi-k3.1-pro (#2043), and Eastmoney JSONP, AKShare 1.20 forex and bare US ETF symbol fixes (#2082/#2083/#2086)
- @Shizoqua — research goals edited in place (#2093), Feishu, Teams, WeChat, WhatsApp and Discord channel fixes (#1957/#1958/#1967/#2078/#2114), heredoc commands in the bash tool (#2077), path-escape tests (#2094), and a run-directory fallback that no longer depends on the process cwd (#2116, landed as a port)
- @cgycorey — global futures priced on real contract multipliers and micro rates, with generic defaults reported (#1965/#1966/#1968/#1972), and a shadow account that honours every entry condition and currency (#2073/#2075)
- @dajiaohuang — transfer flow signs (#2023), aligned attribution benchmarks (#2044), overflow-free weight normalisation (#2046), and boolean payoff quantities refused (#2049)
- @zeus229 — the BYMA engine for Argentine shares and CEDEARs (#2071), backtests reused across turns and sessions (#2074), Codex OAuth model discovery (#2080), and financial units kept in grounding evidence (#2072)
- @alexwan02 — Longbridge per-currency cash (#1940),
.envread by the MCP server (#1974), and Futu US symbol mapping (#2076) - @BHhhh-123 — cross-sectional factor combination with walk-forward weights (#1953), field-level data availability in alpha bench (#2057), and factor research provenance (#2067)
- @remote-controlled-man — comma-grouped document integers (#2135), one bounded retry for a withheld final answer (#2136), and A-share source setup docs (#2138)
- @shadowinlife — the opt-in five-minute A-share paper step and its bar-by-bar matching (#2110/#2111), and JoinQuant limit fills (#2127, landed as a port)
- @TWJxi and @lishuanghong1989-netizen — Gildata stock discovery and financial queries (#2117), stock screening with report-period indicators (#2118), and Shannon portfolio style and risk analysis (#2119)
- @TerryF7 — IBKR and Futu gateway endpoints per connection (#1983), and connection deletion without a credential vault (#2153, landed as a port)
- @davidalmeida90 — the next-bar signal delay documented in the strategy skill (#2137)
- @DrDLyuan — STAR Market and Beijing buys sized on their own order grid (#2105)
- @goatyyc — Binance HTTP 451 read failures explained (#1937)
- @hnq-ai — a crawlable documentation wiki (#2165, landed as a port)
- @kadyrbekovhamit-cyber — Heston prices for short expiries (#2140)
- @MetaAviator — invalid journal quantities refused (#2052)
- @octo-patch — MiniMax M3.1 Flash as the default MiniMax model (#1936)
- @RowanAldean — optional Parallel search in
web_search(#2113) - @VectorPeak — voice notes forwarded in four IM adapters (#2106)
- @wavebyrd — Yahoo three-letter
=Xforex symbols read as USD pairs (#1980) - @yufengsika — non-finite and boolean inputs refused by financial rigor checks (#2053)
v0.1.18 · @warren618 (Haozhe Wu) shipped on-demand tool schemas, preserved large research results in run artifacts and fixed usage accounting for interrupted model calls.
- @rudycelekli — a 92-PR correctness sweep (13 of them landed as maintainer ports): quant-library guards and edge cases (implied-vol price tolerance #1657, gaps in VaR breach transitions #1658, Heston inputs #1719, scheduled CDS coupons #1716, Carino coincidence #1943, undefined probabilistic-Sharpe and bond-accrual inputs #1821/#1822), missing prices kept out of risk x-ray return pairs and OU lag pairs (#1717/#1713), an undefined three-scenario upside and unbounded journal ratios reported as such (#1921/#1884), document reading that keeps PDF text, Word order, PowerPoint groups and Excel missing-value markers (#1838/#1839/#1840/#1841), session search limits, locking and snippets (#1827/#1828/#1832/#1834), more secret formats redacted (#1874/#1880), A-share board limits and Beijing codes (#1913/#1914), standalone revalidation and attribution on the run's own annualisation (#1915/#1948), and settings the selected engine ignores now warned about (#1947)
- @Shizoqua — 25 PRs (2 landed as ports): memory and cross-session search that read back clean and match non-English text (#1682/#1686/#1697/#1771/#1772), skill headings and saved skill names resolved consistently (#1797/#1858), Telegram and Matrix replies no longer dropped when the stream preview never sent and one WeCom stream id per reply (#1860/#1903/#1929), SSE events no longer double-delivered on reconnect (#1798), parallel CLI tool results paired with their own call (#1859), goal evidence confined to the claimed run (#1895), Carhart momentum no longer leaking today's price (#1578), Wilder RSI in the shadow account (#1457), direct-SDK positions priced from
current_price/ltp/market_val(#1581), the email SPF/DKIM spoofing check (#1508), and swarm artifacts cleared before each fresh task (#1455) - @he-yufeng — 24 PRs (2 landed as ports): the declared grounding-check registry and the fired checks recorded in the validation artifact (#1628/#1691/#1661), corrections that keep the figures already passed (#1702), percent-named evidence read as points in derived checks (#1823), additive A-share qfq converted to multiplicative when the offsets validate (#1551), mootdx retired from the default A-share chain and the health canary (#1730), the channel-authoring contract (#1630), the compaction-helper split out of
loop.py(#1631), the first bar's result counted against initial capital in the options engine and per-bar returns (#1750/#1844), config keys nothing reads warned about (#1935), the US early-bell close on half-days (#1706), and the ReportLab fallback for Shadow Account PDFs (#1683) - @shadowinlife — 19 PRs (5 landed as ports): daily paper trading with saved accounts across CLI, API and Web (#1939), the shared scheduler kernel adopted by the research, back-office and live loops (#1893/#1899), token usage in Run Detail, chat and swarm (#1890),
read_run_artifactand a structured backtest tool summary (#1647/#1646),get_southbound_flowand a northbound flow that no longer serves a silent empty envelope (#1486/#1484), guided Web UI setup for Feishu, Slack and Discord with runtime errors surfaced in channel status (#1572/#1764/#1777/#1738/#1737), and thirteen fundamental and valuation factors, industry-neutral A-share value alphas and a monthly-horizon IC bench (#1787/#1788/#1802/#1801) - @zeus229 — 18 PRs (4 landed as ports): grounding that fails closed on unresolved derived refs and suggests exact refs (#1835/#1837/#1638), parses complete derived formulas after labels (#1728), keeps identity in ticker-keyed metrics and blank-corner matrices (#1851/#1850) and leaves execution metadata out of numeric evidence (#1767); rich Email scheduled reports with optional PDF password protection (#1680/#1709), channel-aware scheduled-run editing (#1649), reproducible indicator reads and pinned portfolio snapshots (#1768/#1769), redundant MCP payload copies removed before agent context (#1634), and goal tool-call provenance (#1688)
- @alexwan02 — 16 PRs (4 landed as ports): the
claude-cliprovider backed by a localclaude -p(#1804), Hong Kong orders sized on each symbol's own board lot (#1813), the Longbridge SDK config built throughfrom_apikey(#1805), Futu multi-currency balances with average-cost basis (#1814), SDM registration that keeps its trading rules and records bench history for decay monitoring (#1848/#1849), a lightweight run preview built off the event loop (#1853), run trades listed newest first from the full trades.csv (#1865), trades.csv entry rows, offline benchmarks and Brinson weights fixed (#1780/#1781/#1782), and runtime connectors ordered by status (#1845) - @Jackzigen — 13 PRs (2 landed as ports): the first
loop.pyextractions for tool-result helpers, run outcome and tuning (#1636/#1641/#1678), a byte-stable system prompt for prefix caching (#1708), after-close SEC filings kept out of the IC until the next bar (#1794), a free BaoStock fallback forval:*panels (#1799), undefined correlation pairs published as null instead of 0.0 (#1933), journal PnL pooled per settlement currency (#1811),BASE-USDT-PERProuted to the crypto market (#1864), the mStock read-only profile (#1675), and the shared OHLCV contract assertion in per-loader suites (#1725) - @cgycorey — 12 PRs (3 landed as ports): only the engine's own output grounds a backtest report (#1685), adjusted and raw prices never mixed in one series (#1684), a stooq challenge latch that stops probing and sees every refusal (#1637/#1640), a loader health lane that says why a source is empty and keeps labelled credentials out (#1643/#1698),
get_macro_seriesreporting when it caps a series (#1676), env-style credential names, URL userinfo and Basic auth redacted (#1765/#1742/#1744/#1846), and suffixed HK codes normalized for the duplicate-asset guard (#1746) - @MetaAviator — 12 PRs (2 landed as ports): full-sample downside deviation for Sortino in the metrics and options engines (#1693/#1727), initial capital in Monte Carlo path metrics (#1664), missing equity kept out of adjacent validation returns (#1754), standalone revalidation that honours saved settings and entry dates (#1815/#1842), break-even exits and zero-bar trades kept in trade artifacts and holding periods (#1779/#1876), and trade-journal fixes for reversal fees, split date/time columns, equal timestamps and invalid dates (#1891/#1900/#1941/#1942)
- @lorenzozanee — unsupported Robinhood option orders gated before the broker (#1585), run cards that flag backtests possibly inside the model's training data (#1618), and option evidence in the broker bring-up checklist (#1770)
- @Mikesad — LLM usage accounting extracted from
loop.py(#1662), swarm presets that take their variables from the prompt (#1674, landed as a port), and the factor registry suite running without symlink privileges (#1696) - @remote-controlled-man — options legs priced on the run's bar cadence (#1753), the Futu journal format claimed only when its value columns exist (#1766), and three-statement balance tolerance threaded into projected periods (#1786, landed as a port)
- @Romzhou — a kill-switch sweep that fails closed on its own bookkeeping and input (#1703), and a runner driver kept alive for the scheduler's lifetime (#1704)
- @sambazhu — three Gildata research tools with off-exchange fund NAV (#1485), and an env-configurable ReAct iteration cap (#1833)
- @wavebyrd — spread and swap rates for Yahoo
=Xforex pairs (#1930), and per-cent multipliers for ICE coffee, sugar and cotton (#1944) - @BHhhh-123 — factor neutralisation and PCA in the quant library (#1817, landed as a port)
- @Bortlesboat — Calmar kept finite on explosive equity paths (#1901)
- @bygordon130-hub — Pixel Office, a shared manual research-task board, and the Turkish locale (#1616)
- @davidalmeida90 — profit factor reported as undefined when no trade lost (#1602)
- @DrDLyuan — the equity.csv drawdown peak seeded with initial capital (#1818)
- @Emad211 — per-channel configuration, custom providers and the Persian locale (#1264)
- @Frank-zhu2000 — Futu profiles no longer pinning the HK trade market (#1812)
- @goatyyc — Binance balances that survive clock skew, with unpriced assets marking the snapshot incomplete (#1505)
- @hunters1011-ctrl — symlink tests skipped where symlinks are unavailable (#1803)
- @incorpore — Brazil (B3) market data and an opt-in ZimaOS template (#1783, landed as a port)
- @mdb1230 — five example options strategies and a candidate study of which to paper-trade (#1774)
- @mminkus — the interactive message cap raised to match the scheduled-run path (#1701)
- @passionbull — KIS reads that see SOR fills and recover from a server-invalidated token (#1726)
- @rwxyx518-prog — the Portfolio page's holdings table and history chart following the display currency (#1810)
- @ThreeTima — currency identity checked in financial figure grounding (#1905)
- @tomaszkubiak-courses — strategy provenance model fields set on the loop, so writing a strategy file no longer raises
AttributeError(#1673) - @xaritoku — dotenv loaded in the
alpha bench/alpha compareCLI handlers (#1806)
- @Shizoqua — a 55-PR correctness sweep (one landed as a port) across nearly every layer: quant-library fixes and input guards (Patell z degrees of freedom #1449, copula ties #1453, Kyle's lambda intercept #1477, HRP labels #1555, non-finite impact and yield-curve inputs #1557/#1558), Alpha Zoo NaN propagation and formula fixes (gtja191_038 #1523, alpha101_074 #1534, qlib158 WVMA #1594, GTJA HIGHDAY/LOWDAY #1604), backtest sizing for negative futures prices and shorts (#1547/#1548), venue bars per year in Monte Carlo validation (#1546), options annual return over elapsed bars (#1458), memory, swarm-store and session robustness (#1450/#1525/#1545/#1536/#1579), DingTalk, Signal, Slack and Discord channel fixes (#1506/#1478/#1524/#1537), Argentina listing identity in grounding (#1575), and a mandate narrowed to zero exposure stored as zero (#1593)
- @zeus229 — grounding that reads locale decimals and grouped numbers with precision-aware rounding (#1517/#1588), resolves explicit symbols and exact field refs from observed evidence (#1584/#1586), preserves
latest_datetimestamps (#1590) and keeps corrections text-only (#1600); Argentina (.BA) market data through Yahoo (#1543), ISO-4217 portfolio currencies with isolated FX failures (#1510), explicit header names compared case-insensitively (#1568), technical-indicator volume statistics and their replay after compaction (#1571/#1601), and bounded read-only replay after compaction (#1488) - @cgycorey — a read-only extraETF export reader (#1406) and the read-only Scalable Capital MCP connector (#1417), run cards that keep non-scalar metrics (#1424), the backtest tool naming the directory it looked in (#1429), a tool-declared swarm
run_dirconfined to the workspace and worker message logs persisted on every terminal path (#1430/#1439), qlib158 CNTP/CNTN/CNTD NaN propagation (#1459), custom zoo roots that no longer replace the bundled module (#1468),get_shareholder_countanswering again (#1490), Tencent's A-share and HK calibers stamped correctly (#1497) - @shadowinlife — IM channels configured from the Web UI, with QQ, Email and WebSocket guided setups (#1520/#1529/#1544), stdlib logging placeholders across 12 channel adapters (#1533), Tencent history paginated backward from the end of the window (#1411),
state.jsonwritten by the backtest tool so tool-driven runs are ingestible (#1413), per-worker swarm skill allowlists (#1414), the1Minterval no longer folding to one minute (#1487), and welcome quick actions with a real selected state (#1500) - @he-yufeng — tail-risk measure and confidence kept through the grounding gate (#1444), full history in the risk x-ray instead of sampled rows (#1462), shareholder-count history from the per-period report (#1518), backtests attaching to a running MT5 terminal without credentials (#1598), a per-read BaoStock socket deadline (#1615), the weekly live-source health canary (#1627), the broker capability matrix generated into the README (#1629), and the channel
stop_alland WebSocket logger fixes carried over from #1521 - @lorenzozanee — dragon-tiger seat reports and lockup expiry data restored (#1512/#1513), malformed Robinhood buying power rejected (#1526), broker-only MT5 symbols resolved in
search_symbol(#1597), hash-only traces and citations on run cards (#1612), expired Copilot CLI tokens refreshed (#1619), and Telegram polling ownership documented (#1583) - @chiww — the Stooq warning naming the override variable the config layer reads (#1402), A-shares routed by market for sources without a dedicated branch (#1431), the declared interval checked against the served bars before annualising (#1432), and
_NO_NETWORK_FALLBACK_SOURCEShonoured for per-symbol gaps (#1441) - @as950118 — three Korean broker connectors: KIS with separate paper and live hosts (#1407), Upbit capped at paper plus read-only (#1408), and read-only Toss Securities (#1409)
- @0xouzm — SDM decay metrics that treat NaN and infinite bench results as missing (#1447)
- @alanwilhelm — synchronized cold loader-registry initialization, so concurrent first lookups no longer see an empty registry (#1405)
- @modelpath-dev — the description-driven strategy-store adaptation substrate (#1391)
- @sambazhu — the Gildata A-share OHLCV loader over its raw-api MCP endpoint (#1474)
- @tingkk — broker-neutral SDK diagnostics across all locales (#1436)
- @tonydo — OpenCode as a built-in provider, sending the
x-opencode-sessionheader OpenCode Go requires (#1416) - @woshi77777stars — the
Trigger.marketdefault restored on non-market triggers (#1599) - @Yoruxyv — the Bahasa Indonesia UI locale and
README_id.md(#1482)
- @Shizoqua — 28 PRs: NaN propagated through 16 GTJA and Alpha101 alphas instead of fabricated values (#1371/#1372/#1373/#1374/#1379/#1380/#1381/#1382/#1383) and Alpha Zoo returns no longer forward-filling gaps (#1172), missing-price gaps preserved in the SDM template and cross-market volatility weights (#1397/#1398), multi-factor and social-media factor evaluation fixes (#1399/#1400), walk-forward ML training without future-label leakage (#1392), China futures product codes parsed for digit-prefixed, month-code-colliding and lower-case symbols (#1369/#1389), composite sub-engines synced before every dispatch (#1370), per-regime position sizing in strategy discovery (#1368), MCP goal sessions isolated per connection with current-goal defaults (#1173/#1331), Codex token usage and model metadata (#1334/#1348), and swarm cancellation reaching the in-flight worker (#1175)
- @he-yufeng — 26 PRs, mostly fail-closed live trading and backtest semantics: broker API errors and error envelopes fail closed in position reads and the halt sweep (#1212/#1232), the flatten latch persists across restarts (#1233), market-triggered ticks skip closed markets (#1253) and buy-limit orders are sized at the worse of quote and limit (#1312); the price-adjustment caliber stamped on served frames (#1317) with adjusted Yahoo prices (#1287), unresolved symbols retried down the fallback chain (#1288) and the stooq anti-bot challenge flagged (#1342); short option legs holding margin (#1306), perpetual funding settled by bar span (#1307), A-share and India rules enforced through composite state (#1309) and halted positions marked at the last traded close (#1332); Shadow Account PnL, attribution, FIFO short lots and cache keys (#1217/#1310/#1311/#1314); and each monitor's latest verdict rendered on the list (#1156)
- @cgycorey — 23 PRs: UK (LSE
.L) equity support (#1206), swarm replay/resume of failed runs keeping completed artifacts (#1158), market-data validation of codes, dates and sources with aligned FX/index search and fetch (#1185/#1316), dotted US class shares routed as US equity (#1351), backtest execution fixes — requested targets separated from executed fills, 1x shorts liquidated, option signals filled on the next bar, default IV for HV warm-up and over-committed baskets scaled (#1281/#1298/#1299/#1305/#1344); live halt-sweep envelopes, per-episode latches and MCP buy-limit sizing (#1244/#1254/#1361); grounding clause and metric-table gates (#1326/#1338/#1375/#1378); the registry NaN contract on declared dependencies (#1377); compaction sized by tool-call arguments (#1352); and report audits that fail closed when nothing was verified (#1362) - @santhreal — 16 PRs extending the quant library: factor risk decomposition, event-study rank and sign tests, OU calibration, drawdown analytics, barrier options, single-name CDS, key-rate duration, IC time series, Vasicek credit loss and group-purged CV (#1159–#1168), Heston pricing, HRP allocation, copulas and market microstructure (#1195–#1198), finite-difference barrier Greeks (#1203), and multi-segment test sets in cross-validation (#1204)
- @AirHua-byte — multi-file drag-and-drop and paste uploads (#1179), interrupted replies recovered after a service restart (#1180), shared HTTP clients preserved during cleanup (#1182), agent-confirmed scheduled research tasks (#1187), persisted Feishu QR login credentials (#1188), explicit market context kept in grounding (#1269), and the offline harness artifact verifier (#1271)
- @lorenzozanee — silent order-plan rejections surfaced through an
_on_plan_rejectedhook (#1245), the temperature self-heal on the OpenAI-compatible path (#1246), escalating stream retry delays that honour Retry-After (#1247), USD-M tolerance calibration (#1248), FMP's Stable endpoint with no silent fallback for an explicit source (#1276), adjusted prices on the FMP and Tiingo paths (#1320), and EPERM handled in desktop updater shutdown checks (#1284) - @goatyyc — the read-only multi-broker portfolio dashboard and connection framework (#1072) with connector onboarding contracts (#1250), IBKR official MCP OAuth with verified read tools (#1190), and an isolated portfolio OAuth reconnect lifecycle with classified failures (#1211/#1251)
- @saju01 — the agent loop keeping tool results the model still needs (#1341), compacted results reconciled by exact call identity (#1358), and grounding that no longer reads percentage-point deltas as quoted prices (#1346/#1357)
- @aminak58 — symbol identity for bare joined crypto pairs (#1265), FX, metals and futures (#1280), and spot-gold aliases (#1282)
- @averatec0773 — the Anthropic static prefix cached with cache usage recorded (#1366), relocated
extra_body.temperaturestripped in the Anthropic self-heal (#1330), and an attempt start persisted so the elapsed clock survives navigation and reload (#1340) - @Elfsa-Miranda — Alpaca submissions owned before broker writes, then recovered by exact client id and exact fills across restarts (#1213/#1221/#1222)
- @ethanstoner — skill-relative reference links resolved in
read_fileand on GitHub (#1252/#1328), and strategy-store history that is really newest first (#1347) - @iagop03 — Web UI fixes: a stale
streamingSessionIdcleared on reopen, a scrollable main region with collapsed long prompts, and non-backtest runs pointed to Studio (#1257/#1258/#1259) - @Robin1987China — non-finite inputs refused across valuation and credit-risk functions (#1184/#1215), and Archimedean copula CDFs stabilized under large parameters (#1386)
- @Emad211 — cross-platform locks and path handling for Windows (#1261), and read-only Nobitex and Wallex market-data sources (#1263)
- @honginp — read-only Binance USD-M account snapshots (#1229) and USD-M drift evidence artifacts (#1230)
- @pengpengyi92 — bounded backoff on swarm worker retries (#1210), and crypto pairs resolved through an active Binance connector (#1242)
- @ashutoshsinghpr7 — the Zerodha Kite Connect broker for Indian equities (#1193)
- @be-student — the no-progress stop for repeated discovery without new evidence (#1363)
- @BigFishEmily — paginated Tencent finance history requests (#1154)
- @birdxs — Docker CI actions upgraded to Node.js 24 compatible versions (#1359)
- @bonyohana — the survivorship-bias disclosure rendered in the HTML bench report (#1289)
- @c020627 — the IBKR official read-only MCP seed pointed at
/mcp-public(#1178) - @guestccc —
/apiroutes proxied in the Vite dev server (#1319) - @Jackzigen — mandate adjustments that enforce narrowing for non-numeric and list fields (#1285)
- @JaxonHu1024 — Futu HKD valuations preserved in the portfolio (#1228)
- @laiyierjiangsu — HK-prefixed symbols (
HK.06693→06693.HK) locked in grounding (#1384) - @nandofmike — the Brazilian Portuguese (pt-BR) locale (#1327)
- @P1Piyush — metals treated as metals in the forex backtest: pip size, lot size and spreads (#1226)
- @sambazhu — per-market data-source priority in Settings and
MARKET_DATA_ORDER_*(#1231) - @SiMinus —
vibe-trading swarm retrywith a resume option (#1194) - @sykuang — the IBKR public MCP OAuth flow (#1186)
- @thisisjun786 — calendar-triggered partial rebalancing (#1277)
- @wiliao — a run-stall watchdog, a bash tree-kill timeout and a compaction verification ledger (#1169)
- @youngjincho02-arch — the historical VaR quantile formula fixed in the risk-analysis skill (#1189)
- @Shizoqua — a 13-PR correctness sweep across nearly every subsystem: grounding auto-recovers identity and price evidence within a bounded budget (#1092), swarm isolates worker artifacts between retries (#1053), rejects raw
ok/successtool-result envelopes (#1052) and truncates oversized results with the shared notice (#1110), MCP gains offset paging for SEC filings and statements (#1138), routesload_skillthrough the registry so oversized skills page (#1137) and carries market-data provenance onget_market_data(#1131), plusexcess_returnconsistency (#1058), Wilder-EWM RSI (#1056), the FTS5 tokenizer floor (#1071), non-finite prediction-market fields (#1136), in-flight delivery protection (#1140) and preserved backtest validation evidence (#1139) - @shadowinlife — the run-analysis surface, four pages in one cycle: Options Lab (#1096), the Factor Research panel with its new IC correlation matrix (#1099), positions structure visualization (#1097) and the tearsheet tab (#1091); plus evidence-gated Strategy Discovery Phase 1 (#978) and Phase 2 decay monitoring (#1007), per-market volume units in market-data provenance (#1065) and baostock volume normalized to board lots (#1067)
- @pengpengyi92 — five quantlib numerics fixes:
xirrand money-weighted return survive long-horizon discount underflow (#1119), zero-volatility options discount their forward value (#1066), the fixed-income curve keeps decay inside the requested bounds (#1076), event studies anchor to the prior session (#1078) and cross-validation aligns label ends to the prior observation (#1079) - @cgycorey — reasoning effort honoured in chat completions (#1025), the per-task swarm
ChatLLMclosed to stop a pooled-connection leak (#1145) and the same for one-shot clients (#1153),gross_profitderived from revenue minus COGS when the SEC tag is absent (#1111), andvibe-trading show <run_id>dispatching its run id instead of the flag (#1147) - @lorenzozanee — the test suite stopped escaping into the real config root and its live audit ledger (#1118, closes #1116), recovery steering delivered as user messages with inline system tags (#1112), and unsupported ticker-plus-name symbol queries marked skipped rather than failed (#1114)
- @AndyLongest — the interactive backtest research dashboard (#1084), the engine reporting actual post-fill positions (#1082), and grounding ignoring identity constants in rate formulas (#1083)
- @ofeksh-tr — eToro runtime UI parity for SDK connector status (#1051) and its crypto browse and flat market-data quotes (#1070), plus an empty
Responsefor thescheduled-runsDELETE 204 (#1068) - @wiliao — the agent-run reliability pass: grounding false-rejections, the final-answer gate and LLM timeouts (#1105), with prompt wording and support/resistance masking (#1060)
- @jay79-boop — a selectable IBKR market-data tier with starved quotes reported as
no_data(#1075), and strict alpha t-stats surfaced in the bench JSON and HTML report (#1085) - @Robin1987China — DCF refusing non-finite inputs instead of a silent negative share price (#1121), and grounding masking ISO dates that run into CJK text (#1132)
- @zzz607 — grounding masking line-leading ordered-list markers before number extraction (#1063), and the East Money research-report endpoint given the time parameters it now requires (#1077)
- @Echoandelementwebsites — worker prompts ordered for prompt-cache-friendly prefixes (#1057), and tool-less agents no longer instructed to call
write_file(#1144) - @549236606-oss — seven extended read-only Futu connector endpoints, each fail-closed through the existing gateway envelope (#1135)
- @QCYTSN — the desktop update safety boundary: PID-scoped shutdown, dormant candidate verification, interrupted-attempt recovery, and a tested tampered/unsigned/wrong-publisher/downgrade rejection matrix (#1101)
- @honginp — offline USD-M account reconciliation with immutable snapshot contracts and deterministic drift reporting (#1106)
- @he-yufeng — each monitor's latest verdict parsed server-side and persisted on the job for the Market Watch list (#1152)
- @sykuang — GitHub Copilot as a provider through the official SDK, with no borrowed client ID and no editor-impersonation headers (#990)
- @miguelangelo78 — the hosted TickerAll MetaTrader 5 data source, so forex and metals backtests need no local MT5 terminal (#968)
- @ngoanpv — Vietnam equity (HOSE) support:
.VNno longer executes under China A-share rules (#1033) - @jax-novita — Novita AI registered as a built-in OpenAI-compatible provider (#1059)
- @daviddaco1 — the Spanish locale and
README_es.md, the sixth README (#1087) - @1psconstructor — German (Deutsch) UI support (#1117)
- @x-lambda — the tencent loader building its SSL context from the certifi CA bundle, unblocking HK quotes (#1113)
- @er-s-an —
build_registry()reporting partial construction instead of silently returning a short tool list (#1129) - @straun-repo — reasoning effort passed through to the Anthropic adapter (#1115)
- @nstavros —
connector ordersrendering broker_sdk rows, with SDK enum reprs stripped and class-B tickers left intact (#1150) - @lukiod —
.env.partialcreated with owner-only permissions (#1086) - @fixXxerTech — inferred strategy labels marked as inferred in the run dashboard (#1134)
- @birdxs — Docker images carrying the Feishu and Telegram channel dependencies, with a GHCR/Docker Hub build workflow (#1088)
- @zhiwuyazhe-fjr — a Docker Codex OAuth EOF that explains itself (#1054)
- @santhreal — a 21-PR correctness sweep: trade-journal date and format parsing for Excel serials, UTF-16 BOM CSVs and BTCUSDT-style symbols (#778/#794/#811/#862/#868), loader interval mapping (#812/#838), skill frontmatter closed at EOF (#861), exact memory anchors and result bounds (#956/#957), negative-equity drawdown, insolvent empty cross accounts and
inffrom zero equity (#958/#959/#1041), NaN/inf in the grounding block (#1043), null and non-finite tool arguments (#911/#913), and resource-leak and robustness fixes in the rate limiter, HTTP throttle, event bus, store and Shoonya connector (#1039/#1047/#1046/#1045/#1038) - @Robin1987China — read-only
technical_indicatorsandsentimenttools (#921/#939), the final report aggregator stage forquant_strategy_desk(#1048), annualisation entries for 15 more data sources (#891),factor_analysisrealigned on MCP to the registered tool's contract (#715), blank symbol rows skipped in the Futu and generic journal parsers (#749), loader payloads handled without sampling indicator inputs (#1005), and a real account label in CLI balances (#843) - @he-yufeng — the options payoff and scenario explorer (#883, rebuilt by the maintainer as #946), the strict alpha bench gate via
alpha bench --strict(#796), composable optimizer weight constraints (#818), rebalance notes and risk x-ray artifacts for portfolio runs (#795/#900), yfinance crypto routed to the crypto engine (#970), and memory entries written with their.mdsuffix (#984) - @shadowinlife — memory Phase 1 lifecycle management and Tier 2 structural organization (#733/#815), JSON-string list/dict arguments accepted from MCP clients (#993), HK fallback routing repaired with a Tencent HK source (#1000), and MT5
trading_historynumpy scalars made JSON-safe (#776) - @honginp — USD-M perpetual realism: margin state contracts, isolated and cross liquidation risk, the funding and liquidation lifecycle and persisted fidelity evidence (#798/#889/#903/#936), plus opt-in atomic rebalancing integrated with strict USD-M positions (#951/#1019)
- @Shizoqua — swarm detection of
ok:false/success:falsetool failures (#1028), importance decay in FTS5 memory ranking (#1032), remote server identity in the MCP specs cache key (#1049), and lowercase4hrequests resampled in the yfinance loader (#1013) - @tyj147454413-cmd — three fixes split from #543 that landed with their authorship: one run per session with honest