I tested Vibe-Trading, the open-source AI trading agent with 37,000 GitHub stars
An open-source agent with 90+ finance skills that analyses stocks, codes and runs its own backtests and convenes a four-agent investment committee, for 11 cents to $2.80 a run. It's an interesting tool, though some features are still limited and its backtests have small timing problems.
Vibe-Trading (GitHub)VideoPull request #2137Glassbench (GitHub)


Vibe-Trading is HKUDS's open-source trading agent, starred by 37,436 people on GitHub. You ask a finance question in plain words, and one agent with more than 110 tools fetches the data, writes the code, runs the backtest and calls in a team when the job needs one. Its three main features were tested on four models between 28 October and 1 November 2026: a stock analysis of NVIDIA, a backtest of Larry Connors' RSI(2) pullback on SPY, and the investment committee, where four agents argue their way to a rating.
It's fast and cheap. A full NVIDIA report took 80 seconds and 2 cents on Claude Haiku 5.5, and one run of all three features cost about 11 cents on Haiku, 40 cents on DeepSeek V4.1 Flash and $2.80 on Claude Sonnet 5.5. Backtests need a second look, though. In 3 of 4 DeepSeek codings the strategy shifted its own signal by a day, on top of the day the engine already adds, so every trade filled a day late and the SPY pullback reported 51.6% instead of 39.8%. None of the 4 Claude codings did that.
Watch the test: the install, the three features live, and the scoreboard.
What Vibe-Trading is
HKUDS is Chao Huang's Data Intelligence Lab at the University of Hong Kong, also behind LightRAG, nanobot and CLI-Anything. Its finance paper, AI-Trader, ran six language models live and found that general intelligence doesn't reliably turn into trading ability. Vibe-Trading ships fast: version 0.1.18 landed on 21 October, and about 185 people have contributed.
It does a lot: 90 finance skills, 30 team presets, 29 data sources, 11 backtest engines, a web app, a terminal app, 14 chat channels and an MCP server. Some corners are unfinished. Its Shadow Account backtest was broken for about three months this year, and a request for JPMorgan's earnings got routed to the derivatives desk. So this test sticks to the three main features.
How a request moves through it
It starts with a plan: one agent runs a ReAct loop, loading skills and tools only when it needs them. When a job calls for a team, it starts a preset one, and each worker pulls data through loaders that fall back between 29 sources.
For a backtest, the model writes the strategy as Python, and one of 11 engines runs it under that market's rules, with Monte Carlo, bootstrap and walk-forward checks. Then comes the grounding gate: every figure in the answer must match a tool result, or it's cut. Last, delivery: a report, Pine Script or MetaTrader 5 code, or a trade if you allow one, checked against your caps and a kill switch and logged in a hash-chained ledger.
What gets tested
First, a stock analysis. One agent researches NVIDIA from scratch, pulling prices, indicators, news, the options chain and fundamentals and searching the web, then gives a rating, an entry, a stop and a target for the next 1 to 3 months. Each model is scored on time, cost and how many of its figures the grounding gate cut.
Second, a strategy and its backtest. Larry Connors' RSI(2) pullback goes in as three plain rules, and the agent turns them into Python, runs them on SPY since 2015 and reports return, Sharpe and drawdown. Every fill is then checked against a pandas rebuild of the rule.
Third, the investment committee, Vibe-Trading's preset team of four, on NVIDIA. Bull and bear argue in parallel, a risk officer reads both, and a portfolio manager rules. Scored on time, cost and whether a rating comes out.
Each feature gets one prompt, the same on every model, plus a live run in the terminal app on 1 November.
Install, step by step
Docker is the safer route, because this agent writes code and runs it:
git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
cp agent/.env.example agent/.env # your provider and key
docker compose up --build # web app on localhost:8899
A local install needs Python 3.11 or newer, and the lock file pins the versions the project tests:
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements-lock.txt
pip install -e .
vibe-trading # the terminal app
Three warnings before a first run:
- The agent can get a shell, and every backtest runs code the model wrote. Its shell switch in
.envcovers the web app and the API; the terminal app always keeps its shell. These tests removed it and checked every strategy file before it ran. - On Windows, turn on long paths.
- With Claude, set
ANTHROPIC_MAX_TOKENS. Its default of 4,096 cost Haiku its first committee.
Four models, same prompts
| Model | Parameters | Features tested |
|---|---|---|
| DeepSeek V4.1 Flash | 552B, 8B to 16B active | all 3, plus the live runs |
| DeepSeek V4 Pro 0813 | 1.6T, 49B active | backtest |
| Claude Haiku 5.5 | all 3 | |
| Claude Sonnet 5.5 | all 3 |
All on Vibe-Trading 0.1.18, with costs at list prices.
Feature 1: one agent on NVIDIA
Prompt: "Analyze NVDA for the next 1 to 3 months and give me a rating, an entry, a stop and a target."
Live on Flash, four minutes later: Buy, entry 200 to 206, target 238.
| Model | Rating | Time | Cost | Figures cut |
|---|---|---|---|---|
| DeepSeek V4.1 Flash | Buy | 4.5 min | 15¢ | 1 |
| Claude Haiku 5.5 | Overweight | 80 s | 2¢ | 16 |
| Claude Sonnet 5.5 | Overweight | 2 min 15 s | 63¢ | 1 |

Haiku's report read well, but 16 of its figures came out as "(omitted※)". Sonnet lost one, because it wrote numbers exactly as the tools returned them, revenue as 96221000000.
Feature 2: a strategy and its backtest
Larry Connors and Cesar Alvarez's RSI(2) pullback, from Short Term Trading Strategies That Work, buys short dips in SPY while the market is rising. Prompt: backtest it on SPY since 2015, with three rules and 2 basis points per trade.
Plenty worked. Plain words became tested code in minutes, and Flash added a buy-and-hold control on its own.
| SPY, 2015 to 30 Oct 2026 | RSI(2) | Buy and hold |
|---|---|---|
| Total return | 38.27% | 343.97% |
| Sharpe | 0.48 | 0.81 |
| Max drawdown | -12.98% | -33.72% |
| Trades, average hold | 103, 3.3 days | 1 |
Capital sat in the market 11% of the time on average, which explains most of the gap. A Monte Carlo permutation test it ran unasked gave p = 0.76 on Sharpe: "not statistically distinguishable from randomly reordering the same trades."
What limited it was timing. Vibe-Trading's engine already delays every signal one bar, so a signal set on the close of day t fills at the open of t+1. Its strategy skill never says so. Asked to trade "at the next open", some models shift the signal themselves to avoid look-ahead, and every trade lands a day late. Flash's Donchian strategy on GLD did it in one line:
sig = pd.Series(state, index=df.index).shift(1)
Every run's fills were compared with a pandas replication of the rule:
| Rule | Model | Fills on time | Reported | Intended |
|---|---|---|---|---|
| RSI(2), SPY | DeepSeek V4.1 Flash | 0 of 206 | 51.6% | 39.8% |
| RSI(2), SPY | DeepSeek V4 Pro | 0 of 206 | 51.6% | 39.8% |
| RSI(2), grid | DeepSeek V4.1 Flash | 206 of 206 | 38.3% | 39.8% |
| RSI(2), SPY | Claude Haiku 5.5 | 206 of 206 | 38.3% | 39.8% |
| RSI(2), 2 runs | Claude Sonnet 5.5 | 206 of 206 | 38.3% | 39.8% |
| Donchian, GLD | DeepSeek V4.1 Flash | 0 of 140 | 36.2% | 52.5% |
Lagged fills push results either way (about 30% added to the pullback's return, a third of the breakout's gone), so the report alone can't reveal the lag. With identical fills, the small gap between 38.3% and 39.8% comes from execution pricing.
Pull request #2137 adds three lines to the strategy skill, starting with "Set each bar's signal from data up to that bar's close, and do not shift it yourself." With the patch, Flash filled 206 of 206 on RSI(2) and 140 of 140 on Donchian, exactly 52.5%. It's open, waiting for review. A backtest cost under 10 cents on Flash, about 23 on Pro, 3 on Haiku and 55 to 70 on Sonnet.
Feature 3: the investment committee
Prompt: "Run the investment committee on NVDA, US market, and close with a rating, entry, stop and target."
Live on Flash it took 17 minutes, and ruled Buy with moderate conviction, in stages from 204.64, with a hard stop on a weekly close under 189.50.

DeepSeek V4.1 Flash said Buy in about 10 minutes for 20 cents. Claude Haiku 5.5 never got a rating out. On its first try, thinking ate all 4,096 tokens, so the bear and the risk officer each handed over one cut-off sentence. With a 16,000 cap, its portfolio manager wrote Hold without calling a tool, so the worker contract marked the task incomplete and the run closed with no rating.
Claude Sonnet 5.5 took 7.5 minutes, 64 tool calls and about $1.50, with no figure cut. Hold, hedged: a 1.5% starter as a collar, long the 190 put and short the 230 call. Its ruling: "the bull is right on the business and the bear is right on timing."
Compare it in Glassbench
Glassbench is an open-source workbench for AI trading agents, built for this series. It runs Vibe-Trading, TradingAgents and AI Hedge Fund on the same ticker, date and model, and keeps every result in one table.
Scoreboard

As a research desk it's quick, and the committee's arguments are worth reading. Haiku gives the cheapest full run, Sonnet the most careful committee. Before trusting a backtest's return, check that each fill lands on the bar the rule describes.
Limits
- Mostly one run per model and feature, and results vary: the live Flash backtest on 1 November traded on the right day.
- Shell tools were off and every strategy file was checked before it ran, which isn't how the terminal app ships.
- Prices and levels date from late October 2026.
Sources: Vibe-Trading 0.1.18, its README and strategy-generate skill; run reports and fill checks, 28 October to 1 November 2026; pull request #2137; GitHub API, 2 November. Model sizes from DeepSeek. Not investment advice.


