Repository iconcurepo.dev
Vibe-Trading preview

HKUDS / Vibe-Trading

ai-agentalgorithmic-tradingbacktestingfintech

"Vibe-Trading: Your Personal Trading Agent"

33k Stars
visibility178 Watchers
fork_right5.4k Forks
Python
historyUpdated recently

description README.md

English | 中文 | 日本語 | 한국어 | العربية | Español

Vibe-Trading Logo

Vibe-Trading: Your Personal Trading Agent

One Command to Empower Your Agent with Comprehensive Trading Capabilities

HKUDS%2FVibe-Trading | Trendshift

Python FastAPI React PyPI License
Feishu WeChat Discord

Website  ·  Docs  ·  News  ·  Features  ·  Shadow Account  ·  Demo  ·  Quick Start  ·  Examples  ·  API / MCP  ·  Roadmap  ·  Contributing

pip install vibe-trading-ai


📰 News

⚠️ Security warning: The X account VibeTrading_HKU, Virtuals project 101845, and token contract 0x640BDBF77b6447E8b7DB7894cED84BD1c40571f4 are not official Vibe-Trading assets. We have never launched or endorsed any token or memecoin. Do not buy, connect a wallet, or sign anything. Details.

  • 2026-09-09 🛢️ A US crude contract settled in yuan, and a strategy template that invented a 0% return from a missing price: CL2412.NYMEX matched no symbol pattern — the bare dated form (CL2412) matched and the venue form (ES.CME) matched, but the way a contract is actually written matched neither — so it fell to the A-share default and was run under T+1 with no shorting and settled in CNY. Tushare's own exchange spellings had the mirror-image problem on the China side (#1396, closes #1394); both halves now classify. Separately, pandas still defaults pct_change() to forward-filling, so a missing close becomes a 0.0% return that never happened and the next bar reports a two-day move as one day. Two PRs fixed one call site each (#1397, #1398); sweeping the skills exhaustively found 24 sites in 10 files, two of them in the very files those PRs were editing, and a repo-wide guard now keeps the class closed. China-futures runs also state which products they priced on a generic default instead of a table entry — rb's real margin rate is 0.10, the same number as the default, and "looked up" must not read like "assumed" (closes #1393). Also merged: future-label purging in the ML walk-forward example (#1392), assets with no factor observations excluded from TopN (#1399), and sentiment-factor orthogonalization that no longer regresses on zeros it filled in (#1400).

  • 2026-09-08 🧪 An alpha that printed a number for a bar whose inputs were blank, and a spot-gold search that answered with a Swedish Bitcoin ETP: the Alpha Zoo contract preserves NaN through warmup and missing data, but an alpha that branches on an np.where comparison never sees a NaN — the comparison is False, so the ternary falls through to its constant. Blanking every declared input on one bar of a 462-alpha sweep, 84 alphas returned a number anyway, and since dropna() is what keeps a gap out of an IC, each of those constants was consumed as a real signal. The guard now sits in the registry rather than in each alpha — the output is masked to NaN wherever a declared dependency is missing on that bar — and the same sweep afterwards finds none (#1377, closes #1376). Eleven alphas were fixed for the other half of the contract, the warmup window (#1379, #1380, #1381, #1382, #1383) — and measuring that half the same way leaves 52 alphas still emitting a value inside their own declared min_warmup_bars. A registry-level warmup mask would also blank rows for alphas whose declaration is merely conservative, so that half stays open and stated rather than quietly carried. Separately, search_symbol("XAUUSD") returned exactly one candidate — VALOUR-BTC-0-SEK.ST, a Swedish Bitcoin ETP — which then locked the run's instrument identity; a metal or FX pair query is an exact instrument assertion now, keeping only candidates that name the same two legs in any spelling (#1282). Fixed: an announcement date carries no time of day, so on an intraday frame a filing became visible from the first bar of its own announcement day — a full session of lookahead. Sub-daily frames are refused now, with fundamental_subdaily="next_day" as the explicit opt-in (closes #1387). A metric claim formatted as a generic | Metric | Value | table escaped the analysis gate that rejects the same claim in prose (#1375), while the mirror-image error rejected a price word used as a formula variable — close/SMA50 > 1 was read as an asserted price (#1378, closes #1354). A pasted broker code (HK.00700, US.AAPL, SH.600519) scanned as no symbol at all, so every market tool answered identity_required (#1384). The three Archimedean copula CDFs returned wrong extreme values under strong dependence — Clayton 0.0, Gumbel 1.0, Frank inf — and are compute