Sign inSign up

birdxs/vibe-trading

By birdxs

•Updated 5 days ago

AI trading agent with backtesting. Includes Telegram & Feishu channels.

Image
0

6.0K

birdxs/vibe-trading repository overview

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

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-10-06 🛠️ Live controls and report corrections: Stopping a live runner cancels its current analysis and waits for scheduler cleanup, including startup cancellation and API shutdown; status timestamps use the correct units (#1704⁠). Emergency cancel/flatten scans skip malformed records without abandoning the remaining book (#1703⁠); broker schedules are stored separately and writes handle concurrency and partial writes. US equity half-days respect the early closing bell (#1706⁠). Report corrections preserve figures that passed validation, and bounded feedback no longer implies that unlisted figures passed (#1702⁠).

  • 2026-10-05 🛠️ Research prompts and calculation fixes: Chat accepts longer research prompts and gives a localized recovery message when input is too large (#1701⁠). Backtests use full-sample Sortino downside deviation; grouped validation purges overlapping labels, covariance weights remain finite, shadow RSI uses Wilder seeds, and memory removal accepts filename stems. Invalid call aliases now receive exact source references for correction (#1638⁠); numeric validation stays unchanged.

  • 2026-10-04 🛠️ Scheduled reports and research workflows: Edit scheduled runs and choose a configured destination; Email reports support HTML or PDF attachments (#1649⁠, #1680⁠). Backtests expose structured summaries and paged artifact reads (#1646⁠, #1647⁠). Fixes cover memory-search snippets, export-path guidance, macro truncation, monthly risk, turnover on reversals and cash reentry, IV accuracy, VaR gaps, VCS updates and Robinhood option-order blocking.

Earlier news
  • 2026-10-03 🛠️ Research, reports and data reliability: CJK session search, channel setup, broker exposure pricing and file writes now handle cases that blocked everyday use. PDF delivery embeds CJK fonts, Swarm validates preset inputs and separates task artifacts, and replayed tool results survive context compaction (#1683⁠, #1455⁠, #1635⁠). Backtests keep one adjustment basis, local caches distinguish sources, single-asset caps and weekly/monthly risk use the declared settings, audits retain loss signs, grounding checks the current engine output and exact list references, and Stooq retries after a denial cooldown (#1684⁠, #1650⁠, #1685⁠, #1640⁠).

  • 2026-10-02 🛠️ Backtests and report checks: strategy-file writes retain model provenance without crashing (#1673⁠), and Monte Carlo drawdown and Sharpe include starting capital (#1664⁠). Report audits preserve accounting negatives and units (#1663⁠); grounding artifacts record fired declared checks (#1661⁠); public loader-health reports include sanitized failure reasons (#1643⁠). Indonesian tool documentation matches the registry (#1671⁠).

  • 2026-10-01 ✅ Data correctness and reproducible backtests: A-share adjustment conversion now refuses ambiguous one-bar edge cases (#1551⁠); Southbound Eastmoney amounts are scaled from million HKD and rejected responses no longer look empty (#1486⁠); Northbound fallback data distinguishes post-2024-08-19 turnover from net flow (#1484⁠); Binance-only unpriced positions are marked incomplete without penalising other brokers (#1505⁠); and backtest run cards record model provenance and warn when the training cutoff is unknown or outside the test window (#1618⁠, closes #1613⁠).

  • 2026-09-30 🛠️ Feishu in the Web UI, a momentum factor that read today's price, and a profit factor for runs that never lost: Feishu joins the guided channel setup, with a standalone connection test and a hot reload that closes the old WebSocket (#1572⁠). academic_carhart_mom subtracted the 1-month return from the 12-month one, so it moved with today's close; it is now the return from 12 months ago to 1 month ago (#1578⁠). A run with no losing trade reports its profit factor as undefined instead of 0.0, which ranked it last (#1602⁠). Stooq's anti-bot page now stops every later request in the process, not just the log line (#1637⁠); MCP tool results reach the agent once instead of up to four times (#1634⁠); and the first piece of loop.py moves into its own module (#1636⁠).

  • 2026-09-29 🚀 v0.1.16 released (Release notes⁠, pip install -U vibe-trading-ai): 492 commits and 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 grounding gate no longer guesses 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 it against the session's tool evidence, and a figure that fails is cut instead of the whole answer being refused. A backtest's own output — Sortino, turnover, weights and Monte Carlo p-values, not only Sharpe — now grounds the report written about it, and run cards cite a metric only where the saved CSV agrees. Long research runs keep what they fetched: compaction follows each model's real context window instead of a fixed 40K estimate. The missing-data sweep reached 59 more alphas. Fixed in this release, from a user's report: failed runs keep their steps and the stop message names the call that produced nothing; read_file says where it may read instead of letting the model guess paths until the no-progress stop; on Codex, mid-run instructions no longer replace the system prompt, reasoning carries between turns and the default model is gpt-6-sol; and get_market_data asks for AAPL.US rather than returning empty data for a bare US ticker. New: Argentina (BYMA), weekly and monthly bars, Bahasa Indonesia, Gildata, OpenCode, Email and WebSocket channels, IM channel setup in the Web UI, and KIS, Upbit, Toss Securities and Scalable Capital connectors, 18 brokers in all. Thanks @Shizoqua⁠, @zeus229⁠, @cgycorey⁠, @shadowinlife⁠, @lorenzozanee⁠, @he-yufeng⁠, @chiww⁠, @as950118⁠, @woshi77777stars⁠, @Yoruxyv⁠, @sambazhu⁠, @0xouzm⁠, @tingkk⁠, @tonydo⁠, @alanwilhelm⁠ and @modelpath-dev⁠!

  • 2026-09-28 🛠️ Source health and connector transparency: scheduled public-source canaries report outages and data drift with bounded, credential-free probes (#1627⁠); BaoStock socket requests now have deadlines and serialize concurrent sessions (#1615⁠). Copilot credential lookups refresh after a short cache TTL (#1619⁠). A generated broker matrix preserves each profile’s paper/live permissions and labels declared capabilities separately from runtime verification (#1629⁠). Grounding and MT5 follow-up: explicit evidence symbols and exact field references are preserved; localized grouped figures retain the existing numeric tolerance (#1584⁠, #1586⁠, #1588⁠). Text-only correction attempts are bounded (#1600⁠). MT5 search uses the selected terminal and refuses ambiguous broker aliases; backtest sandboxes receive only validated attachment settings (#1597⁠, #1598⁠).

  • 2026-09-27 🛠️ Verifiable run cards and safer research: Run cards now show hashed backtest execution records and verified metric-to-CSV references in JSON, Markdown and Run Detail (#1612⁠). GTJA high/low recency factors use the correct day count and consistent tie handling (#1604⁠); India short covers check the buy-side circuit band (#1608⁠). Token usage remains readable without exempting arbitrary credential strings (#1606⁠), malformed MCP schemas retain their object properties (#1607⁠), and immediate-order goal checks preserve research questions (#1605⁠). Setup documentation now correctly identifies OpenRouter as the shipped default (#1609⁠).

  • 2026-09-26 🛠️ More reliable indicators and trading limits: Technical indicators retain their observation date and can reuse results lost during conversation compaction (#1590⁠, #1601⁠). All five Qlib158 WVMA windows now use absolute returns in the numerator (#1594⁠); Benford checks preserve the correct leading digit at numeric boundaries (#1591⁠). An explicitly zero exposure limit stays zero (#1593⁠), and Dhan paper orders reject fractional or invalid quantities without rounding away input precision (#1595⁠). Invalid optional numeric environment variables fall back to defaults while explicit configuration constraints remain enforced (#1592⁠). Runtime triggers keep the correct field defaults and subclass factory behavior (#1599⁠).

  • 2026-09-25 🛠️ More reliable research sessions and channel diagnostics: A text column in a backtest CSV no longer discards the numeric metrics (#1579⁠), and conversation compaction now counts reasoning content in its retained-message budget (#1582⁠). Failed channel loads now log the actual exception (#1580⁠); the Telegram guide clarifies that CLI and Web controls share the same API runtime (#1583⁠). Robinhood portfolio reads reject malformed buying-power objects while keeping omitted or null values unknown (#1526⁠). Leaving a chat also cancels pending history-scroll timers. Thanks @Shizoqua⁠ and @lorenzozanee⁠!

  • 2026-09-24 💱 A dollar line priced as pesos, Email and WebSocket in the Web UI, and a CI break from an SDK update: BYMA and the TSX list US-dollar lines beside their home-currency ones (GGALD.BA, DLR-U.TO), and an Argentine or Canadian backtest priced them in its single peso or Canadian-dollar pool. The loaders now admit a line only in its market's currency, as LSE lines already were, and every other declared quote currency travels with the data, so an answer names the right one (#1576⁠). Hong Kong's RMB and USD counters (80700.HK, 9834.HK), which HKEX numbers in their own code ranges, are refused in a Hong Kong backtest for the same reason and quoted in their own currency. Stock profiles carry the listing's own venue and currency beside the issuer's fundamentals (#1577⁠), grounding and symbol search know every market the data layer routes (#1575⁠), and technical_indicators reports volume with the unit its source declares — board lots or shares, 100× apart (#1571⁠). Email and WebSocket join the guided channel setup, with mail-server certificates now verified and settings writes closed to cross-site pages, and a plain IMAP login is upgraded with STARTTLS before the password goes out (#1544⁠). Fixed: an explicit provider header lost to an ambient twin under openai 3.19.2, which had turned every PR's CI red (#1568⁠); a backtest from a microsecond-resolution source was dated 1970 (#1560⁠); a research goal that is plainly an order is refused again (#1562⁠); a strict-bench OOS split could leave one side empty (#1559⁠); HRP label alignment, cross-validation label order and non-finite quant inputs (#1555⁠, #1556⁠, #1557⁠, #1558⁠); the shadow-account overtrading window (#1563⁠); and asset growth was read day over day (#1564⁠). Thanks @Shizoqua⁠, @zeus229⁠ and @shadowinlife⁠!

  • 2026-09-23 🇦🇷 Argentine listings, a short book sized upside down, and the last half of the tail-risk gate: .BA symbols — BYMA equities and CEDEARs — route to Yahoo as their own ARS market, and the Web UI groups and labels them like any other; an Argentine backtest still fails closed until BYMA execution rules are modelled (#1543⁠). The mean-variance and turnover-aware optimizers scored every position as if it were held long, so the strongest shorts got the least capital. Both now size on position returns, where a long and a short of two correlated names hedge each other instead of reading as correlated — on a +0.92 correlated pair the old objective put the whole book on the long, the new one splits it 0.51 / -0.49 (#1548⁠). And a tail-risk figure now has to name its own field once a session holds more than one measure or confidence level, so an ES 95% can no longer quote the VaR 95% value under a call id (#1425⁠). Fixed: Monte-Carlo validation annualises at the venue's bars per year instead of a hardcoded 252, so its Sharpe agrees with the rest of the same report (#1546⁠); a futures order on a negative-price bar is no longer rejected outright (#1547⁠); a factor's IC ratio is left unset for a negative baseline instead of reading real decay as healthy improvement (#1549⁠); and two memories sharing a title under different types keep their own index rows and link targets (#1545⁠). Thanks @zeus229⁠, @Shizoqua⁠ and @he-yufeng⁠!

  • 2026-09-22 📅 Weekly and monthly bars, and a compaction replay that could lose evidence: get_market_data and backtests take 1W and 1M (rejected since 09-20 so 1M would not fetch minute bars). Every source still serves daily bars and the period bar is built from them, dated on the last trading day of its week or month, so a 21-month review is one call of 21 bars (#1479⁠). A price index is stamped unadjusted instead of by what its source does to a stock (#1541⁠). A read-only tool result that context compaction removed is restored from the run's own memory instead of fetched again, capped per run, and a write empties that memory so a regenerated file is read afresh (#1488⁠). A tail-risk figure declared with a field ref is checked against that field, so a VaR 99% quoting the 95% value is caught (#1444⁠). QVeris refuses stock and ETF bars, whose adjustment its search-ranked pick cannot state, and quotes priced per result (#1494⁠). Thanks @sambazhu⁠, @zeus229⁠, @he-yufeng⁠, @jw232⁠ and @cgycorey⁠!

  • 2026-09-22 💸 A backtest that died when funding pushed cash below zero, and three more tools that read a rejected query as no data: a crypto funding debit can leave free cash below zero, and the next position the strategy wanted then found no size that fit, not even zero, so the run aborted with "planned order … exceeds available capital" (or "insufficient capital for position rebalance"). That open is now skipped and reported once as insufficient_capital, the bar's reductions still run, and a close whose loss exceeds its margin still aborts the bar as before (#1542⁠). Block trades, margin trading and financial statements now tell Eastmoney rejecting a stale query apart from a genuinely empty answer, through the same check shareholder count, dragon-tiger and lockup expiry use. Answers in Spanish, German and other decimal-comma locales now ground 17,93 % or 1.410,00 CNY against the tool results, while two unspaced numbers like 1400,1777 stay two numbers, and a figure has to match its evidence to the precision it is written at (#1517⁠). Thanks @turtle696966969696⁠ for a trace reconciled to the cent, and @zeus229⁠!

  • 2026-09-21 🔌 IM channels configured from the Web UI, and 24 alphas that emitted a value computed from a missing bar: Settings now edits each IM channel with masked secrets, a connection test on the unsaved form, and a per-channel hot apply with no restart; DingTalk and QQ get guided setups (#1520⁠, #1529⁠), and every adapter logs through stdlib again, so diagnostics that a {} placeholder used to swallow reach the log (#1533⁠). In the Alpha Zoo, a comparison whose operand is NaN because its window holds a missing bar reads False and emits a constant; the #1463 sweep, which nudged the bar by a tick, could not see it. A gap-versus-gap-free check found 24 more alphas, which now mask on their inputs' reach while a correlation undefined on complete data keeps its old verdict (#1523⁠, #1534⁠, #1463⁠). Data: a lockup's free_shares is the unlocking quantity, not the float it was read from (#1513⁠); dragon-tiger seats are ranked within each listing reason (#1512⁠); shareholder-count history returns real periods (#1518⁠); Tencent, Eastmoney and AKShare A-share prices are labelled dividend-additive ([#1497](https://github.com/HKU⁠

Tag summary

Content type

Image

Digest

sha256:e8868d6e7…

Size

481.6 MB

Last updated

5 days ago

docker pull birdxs/vibe-trading