Vibe-Trading Documentation

"Vibe-Trading: Your Personal Trading Agent"

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy Vibe-Trading on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name vibe-trading -p 8899:8899 --restart always node:22@sha256:5647be709086c696ff32edaaf1c70cd26d1da6ab2b39c32f3c7b4c4a31957e37
Configured Services & Ports
⚙️ vibe-trading
image: build locally
🔌 Ports: 127.0.0.1:8899:8899
⚙️ frontend
image: node:22@sha256:5647be709086c696ff32edaaf1c70cd26d1da6ab2b39c32f3c7b4c4a31957e37
🔌 Ports: 127.0.0.1:5899:5899
docker-compose.yml
yaml (docker-compose.yml)
services:
  vibe-trading:
    build: .
    ports:
      - "127.0.0.1:8899:8899"
    env_file:
      - agent/.env
    environment:
      - VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1
      - VIBE_TW_STOCK_DB=/data/tw-stock/latest.db
      # Ollama runs on the host; from inside the container "localhost" is the
      # container itself, so default to reaching the host via host.docker.internal.
      # Override by exporting OLLAMA_BASE_URL (or setting it in a top-level .env)
      # when Ollama runs elsewhere or on a different port.
      - OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://host.docker.internal:11434}
    extra_hosts:
      # Maps host.docker.internal -> host gateway (needed on Linux; harmless on Docker Desktop).
      # Requires Docker Engine >= 20.10 / Compose v2 (host-gateway support).
      - "host.docker.internal:host-gateway"
    volumes:
      - vibe-runs:/app/agent/runs
      - vibe-sessions:/app/agent/sessions
      # User-level agent state: persistent memory, cross-session search index
      # (sessions.db), user-created skills, shadow accounts, hypothesis
      # registry, broker connector config, agent.json. Without this volume a
      # rebuild/recreate wipes it all (#197).
      - vibe-home:/home/vibe/.vibe-trading
      - vibe-swarm-runs:/app/agent/.swarm/runs
      - vibe-uploads:/app/agent/uploads
      # Persist Web-UI-driven agent/.env edits (_write_env_values in
      # src/api/helpers.py writes to /app/agent/.env) across container recreation.
      # env_file above still seeds the initial boot env from the same file.
      - ./agent/.env:/app/agent/.env
      # Published Taiwan stock snapshots, mounted read-only. The default host
      # path stays OUTSIDE the checkout: no market data may ever land in the
      # working tree. Compose does not expand "~" in volume paths, so this uses
      # ${HOME}. Override VIBE_TW_STOCK_DATA_DIR in the root .env with another
      # absolute path outside the repo.
      - ${VIBE_TW_STOCK_DATA_DIR:-${HOME}/.vibe-trading/tw-stock}:/data/tw-stock:ro
    # --- Runtime hardening (VT-007) ---
    cap_drop:
      - ALL
    # SETUID/SETGID are kept on purpose: runner.py drops privilege to the
    # unprivileged vibe-sandbox user for LLM-generated-code subprocesses, which
    # needs setuid/setgid. They are granted from container start (not gained via
    # escalation), so no-new-privileges below does not neutralize them.
    cap_add:
      - SETUID
      - SETGID
    security_opt:
      - "no-new-privileges:true"
    read_only: true
    # Writable scratch on the read-only rootfs. Named volumes above already
    # cover agent/runs, agent/sessions, agent/uploads, agent/.swarm/runs and
    # /home/vibe/.vibe-trading; these tmpfs mounts cover /tmp and the cache dirs
    # matplotlib/fontconfig write to during PDF rendering.
    tmpfs:
      - /tmp
      - /home/vibe/.cache
      - /home/vibe/.config
    # Bound a single runaway backtest. Generous self-hosted defaults; override
    # in a compose override file for constrained hosts.
    mem_limit: 4g
    cpus: 2
    pids_limit: 512
    restart: unless-stopped

  frontend:
    image: node:22@sha256:5647be709086c696ff32edaaf1c70cd26d1da6ab2b39c32f3c7b4c4a31957e37  # node:22 digest resolved 2026-07-28
    working_dir: /app
    ports:
      - "127.0.0.1:5899:5899"
    volumes:
      - ./frontend:/app
    environment:
      - VITE_API_URL=http://vibe-trading:8899
    command: sh -c "npm install && npm run dev -- --host --port 5899"
    profiles:
      - frontend
    depends_on:
      vibe-trading:
        condition: service_started

volumes:
  vibe-runs:
  vibe-sessions:
  vibe-home:
  vibe-swarm-runs:
  vibe-uploads:

File: README.md

Vibe-Trading: Your Personal Trading Agent


📰 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-08-20 🚀 v0.1.14 released (Release notes, pip install -U vibe-trading-ai): 272 commits and 74 merged pull requests since 0.1.13. The headline is that a finished backtest is now something you can read rather than a folder of CSVs. Run Detail grows four tabs — Factor Research (IC series with its mean line, IC statistics, quantile-group equity, and a pairwise IC correlation matrix that existed nowhere before), Positions (weight pie/treemap on a date slider, sector net-exposure bars, weight-evolution area — the pie is gross composition and the bars are net, so a long/short pair in one sector nets to zero on the bars while both legs stay visible on the pie), Tearsheet (monthly-returns heatmap, annual bars, top-5 drawdowns annotated onto the equity curve), and an interactive research dashboard with KPIs, benchmark-relative equity, rolling Sharpe and the full trade ledger. All four read artifacts a run already writes — no new pipeline. A new Options Lab page adds an expiry payoff diagram, a spot×IV scenario matrix, portfolio Greeks and a live options chain, computed through the same test-pinned engine the MCP tools use. Install: Intel Macs can pip install vibe-trading-ai again — smartmoneyconcepts pulled in llvmlite, which ships no macOS x86_64 wheel from 0.46 on, so every Intel install became a CMake source build; it is now the opt-in [smc] extra and the stale <3.14 cap is gone (#1035). New: evidence-gated Strategy Discovery across the Alpha Zoo and the SDM store, with a population path, read-time freshness (fresh/aging/stale) and stale rows failing closed out of recommendations; scheduled research that delivers itself through a leased outbox and persists each monitor's verdict for the Market Watch list; seven read-only Futu endpoints; Vietnam (HOSE) as a backtest market; offline USD-M account reconciliation; Novita AI and GitHub Copilot providers; a hosted MetaTrader 5 data source; Spanish and German locales; and MCP grows to 74 tools. Correctness: the test suite stopped escaping into your real config root, where a full run had been appending synthetic order_rejected records to the live hash-chained audit ledger; build_registry() no longer returns a short tool list in silence; xirr survives long-horizon discount underflow and DCF refuses non-finite inputs instead of returning a negative share price; .VN symbols stopped executing under China A-share rules; the backtest archive stopped mixing two runs' artifacts; and a broad grounding pass ended a class of false refusals on dates, ordered lists, identity constants in rate formulas, and order lines read as quotes. Thanks @Shizoqua, @shadowinlife, @pengpengyi92, @cgycorey, @ofeksh-tr, @lorenzozanee, @AndyLongest, @zzz607, @wiliao, @jay79-boop, @Robin1987China, @Echoandelementwebsites, @zhiwuyazhe-fjr, @x-lambda, @sykuang, @straun-repo, @nstavros, @ngoanpv, @miguelangelo78, @lukiod, @jax-novita, @honginp, @he-yufeng, @fixXxerTech, @er-s-an, @daviddaco1, @birdxs, @QCYTSN, @549236606-oss and @1psconstructor.
  • 2026-08-19 🔌 Stalled runs, a per-task connection leak, and Intel Macs that could not install: A silent provider used to freeze a run — VIBE_TRADING_LLM_TIMEOUT_SECONDS (default 300s) now bounds the call, and tool-call markup is never released as a final answer (#1105). Every swarm task leaked a pooled HTTP connection (#1145, closes #1141). Also fixed: vibe-trading show <run_id> crashing (#1147, closes #1146), overwritten in-flight deliveries (#1140), dropped backtest validation evidence (#1139), MCP paging (#1137, #1138), and non-finite prediction-market fields (#1136). New: seven read-only Futu endpoints (#1135) and an explicit Inferred chip on guessed strategy titles (#1134). Install: smartmoneyconcepts is now the [smc] extra — the llvmlite it pulled in ships no macOS x86_64 wheel, turning every Intel Mac install into a cmake source build (#1035); the <3.14 cap goes with it. Thanks @wiliao, @cgycorey, @Shizoqua, @Echoandelementwebsites, @549236606-oss, and @fixXxerTech!
  • 2026-08-18 🈶 Correct reports stopped being refused, and backtests stopped trading noise: \b is Unicode-aware, so 最 counts as a word character and (2026-07-14最低) had no boundary after the day — the date survived the mask and 2026, 7 and 14 reached the OHLC check as prices no observed range can contain (#1132, closes #1122). Four refusals of the same family went with it: a dash-form trading day (08-10(一)), a level stated as a range leaving -20 behind, a GTC line (100 @ $3.50) read as two observed quotes, and a report-style date cell that matched no evidence row at all. Backtests: position_adjustment="hold" dropped a requested resize in silence, and "rebalance" had no drift band — measured, a 0.01% daily move re-pinned a position on 19 of 30 bars, so a strategy with its own rebalance_freq traded every bar regardless. Dropped requests are now reported, and rebalance_tolerance is the band practitioners mean by "rebalance when weights move more than X", defaulting to 0.0 so no existing run changes. Nineteen industry-neutralized alpha101 alphas had been skipped on every SP500 bench run for want of a sector tag that was already in the table the constituents come from. New: a Market Watch monitor can push its briefing to an IM channel once the run finishes, through a persisted outbox that a restart cannot lose and a concurrent sweep cannot double-send (#942); German is the seventh UI language (#1117); run_dcf refuses non-finite inputs instead of returning a plausible negative share price (#1121, closes #1120); the MCP get_market_data response carries the _provenance its own docstring promised (#1131); a tool module that fails to import is named rather than quietly shrinking the registry (#1129, closes #1124); and offline USD-M account reconciliation compares local risk state with an exchange observation without opening a connection (#1106). Also: importing backtest.runner no longer loads a .env into the process, which had made a local full-suite run untrustworthy on any machine that has one (#1123). Thanks @Robin1987China, @newgo, @er-s-an, @Shizoqua, @1psconstructor, @honginp, @cgycorey, @alinv0, and @jelech!

Earlier news

  • 2026-08-17 🔒 The test suite stopped writing into your real config root — including the live audit ledger: Running the project's own suite appended fabricated order_rejected records to ~/.vibe-trading/live/audit.jsonl, an append-only, hash-chained ledger whose entire value is that its entries cannot be manufactured, and on Windows left a corrupted chain file behind. conftest.py had no config-root sandbox at all, so every module that baked Path.home() / ".vibe-trading" at import time resolved against the real home on any platform — Windows was worse only because Path.home() reads %USERPROFILE% there and ignores $HOME, leaving the isolation idiom the suite had been using inert. Home is now redirected before collection, the sandbox owns a single knob so per-test isolation still wins, and session end asserts the real ledgers are byte-identical instead of merely checking that the redirect was installed (#1118, closes #1116). Also: xirr and money_weighted_return raised ZeroDivisionError on horizons past ~51 years, where the discount factor underflows to zero — exactly the long, irregular streams XIRR exists for (#1119); and a backtest archived into an active run merged with the previous one's artifacts, so a single report could describe two different backtests while /runs/{id} listed the leftovers as its own (#1094). Thanks @lorenzozanee, @straun-repo, and @pengpengyi92!

  • 2026-08-16 🔧 Anthropic runs no longer die on recovery, and symbol search stops reporting empty results as healthy: Recovery paths appended mid-conversation system messages that the Anthropic API rejects, killing the run — recovery steering now travels as user messages with inline <system> tags (#1112, closes #1109). search_symbol returned zero candidates with both sources reporting ok for ticker+name queries, so identity never locked and every data tool refused; the Yahoo path now reports such queries skipped instead of a misleading ok (#1114, closes #1108). Also: LANGCHAIN_REASONING_EFFORT is now honored on the Anthropic branch through a model allowlist (#1115); the Tencent loader recovers from CERTIFICATE_VERIFY_FAILED via the certifi CA bundle (#1113); the revenue - cogs gross-profit fallback is no longer dead code (#1111); and swarm workers use the shared truncation helper, so sub-agents always see the cut notice (#1110). Thanks @lorenzozanee, @straun-repo, @x-lambda, @cgycorey, and @Shizoqua!

  • 2026-08-15 🛡️ Safer desktop updates, reliable Windows packaging, and factor research in Run Detail: The dormant updater boundary now retains owned-process evidence for cleanup retries, probes TCP listeners instead of HTTP health, reserves recovery journals atomically, binds Authenticode and hashes to the same staged bytes, and rechecks immediately before launch (#1101). Windows packaging now owns bounded, checksum-verified Electron downloads and extracts the pinned GTK asset as data through 7-Zip instead of executing its flaky legacy installer; native Windows CI covers exit codes, timeouts, runtime assembly, NSIS, and packaged startup (#1104, closes #1093). Run Detail gains IC series and statistics, quantile equity, and IC correlation with bounded artifact traversal and finite JSON payloads (#1099, closes #1100); universal hash locks are verified natively on Linux, macOS ARM64, and Windows (#1102, closes #1089). Thanks @QCYTSN and @shadowinlife!

  • 2026-08-14 ⚙️ A reasoning setting that did nothing, and runs that stopped while they could still recover: LANGCHAIN_REASONING_EFFORT was silently a no-op for almost every provider — only direct OpenAI ever received it, so setting high on DeepSeek changed nothing and said so nowhere. Effort now reaches both transports through each adapter's own field: Chat Completions by default, the Responses API when LANGCHAIN_USE_RESPONSES_API=true. The providers given a top-level reasoning_effort are a verified allowlist rather than everything that speaks the OpenAI wire format — an endpoint that validates its request body strictly rejects an unknown key and fails the call, so the cost of guessing wrong is every request, not a missing setting (#1025). The grounding gate also stops handing back "confirm and continue" while a deterministic read-only recovery is still available: an unresolved instrument now drives search_symbol → get_market_data on its own bounded budget instead of spending the run's iterations and failing closed (#1092, closes #1081). New: an Options Lab page — multi-leg payoff diagram, spot × IV scenario matrix, portfolio Greeks and a live chain, computed by the existing payoff tool and quantlib rather than a second implementation of the math (#1096); a backtest tearsheet tab with a monthly-returns heatmap, annual returns and top-N drawdown episodes (#1091); tickerall as the 25th market-data source — hosted MetaTrader 5 forex/metals bars with no local terminal on any OS, explicit-only so a broker key is never a silent fallback target, and a truncated history window is an error rather than a quietly short series (#968, closes #897); and Novita AI plus GitHub Copilot as built-in providers (#1059, #990). eToro gains asset-class browsing by instrument type, and copy trading now refuses a demo account with a stated reason instead of failing obscurely (#1070). Thanks @cgycorey, @Shizoqua, @shadowinlife, @miguelangelo78, @jax-novita, @sykuang, and @ofeksh-tr.

  • 2026-08-13 🎯 Backtest reports show the book that actually filled: positions.csv held the optimiser's target weights, so a report could claim 80% exposure while lot rounding, fees, or a blocked order left the portfolio near 20% — and those targets also fed the invested-weight metrics and the risk x-ray. Fills now go to positions.csv, requests to target_positions.csv (#1082). Run Detail gains a research dashboard at ?view=dashboard (#1084), and Spanish is the sixth UI language (#1087). Also: get_research_reports was returning HTTP 400 for every A-share symbol (#1077); IBKR quotes separate the tier requested from the one applied (#1075); .env.partial is written atomically (#1086); the Docker workflow pins actions to commits and hash-locks channel SDKs (#1088); and the grounding gate stops reading support/resistance ladders and all-time highs as observed prices (#1060). Thanks @AndyLongest, @daviddaco1, @zzz607, @jay79-boop, @lukiod, @birdxs, and @wiliao.

  • 2026-08-12 📏 A-share volume no longer jumps 100× when the fallback source changes: Five sources in the A-share fallback chain reported board lots while BaoStock reported shares, and because the serving provenance carried no unit, a fallback could silently rescale every volume-based signal. Loaders now declare volume units per market, provenance exposes the unit of the source that actually served each symbol, BaoStock converts shares to board lots at the loader boundary, cache v4 prevents pre-fix entries from resurfacing, and a live-data cross-source regression requires settled-day values to agree within 1% (#1065, #1067, closes #1062). The ten-PR correctness pass also gives eToro complete runtime status and a five-locale SDK-connected UI (#1051); makes scheduled-run DELETE return a truly empty 204 (#1068); renders Alpaca's direct-SDK account payload in the CLI (#1073); normalizes Ollama roots to /v1 at the credential boundary used by the real model constructor (#1074); turns Docker Codex OAuth stdin EOF into actionable TTY guidance (#1054, closes #1050); stops Markdown ordered-list markers such as 1. from becoming unsupported numeric claims (#1063); makes two-character memory queries such as GE behave the same with or without FTS5 (#1071); and prices zero-volatility European options from discounted forward intrinsic value, restoring exercise-side logic and put-call parity (#1066). Thanks @shadowinlife, @ofeksh-tr, @zhiwuyazhe-fjr, @zzz607, @pengpengyi92, and @Shizoqua.

  • 2026-08-11 🧠 Compaction stops dropping conversation content, and a swarm retry can no longer delete its own run: Auto-compaction sliced the serialized history at a hard 80,000 characters before summarizing, so anything past that cut reached neither the summary call nor the preserved tail — it vanished with no error raised, against the function's own "zero info decay" guarantee, and the slice landed mid-object so the summarizer was handed invalid JSON. History is now packed on message boundaries and folded chunk by chunk through the existing iterative template; a single message too large for one chunk becomes labelled fragments instead of a truncation, and an empty model reply no longer wipes the summary accumulated so far (closes #1055). The new retry-time artifact cleanup ran shutil.rmtree on run_dir/artifacts/<agent_id>, where agent_id arrives unvalidated from a preset and user presets load from ~/.vibe-trading/swarm/presets/, so an id of .. resolved to the run directory itself — the path is now refused unless it is one safe segment resolving inside that run's artifacts directory. Plus technical_indicators RSI moving to the Wilder-EWM convention its own docstring already claimed, where a plain rolling mean can shift a reading across the 30/70 boundary (#1056); excess_return re-derived from the corrected benchmark total so the two fields stop contradicting each other inside one metrics dict (#1058); swarm deliverable validation rejecting ok/success-keyed raw tool envelopes passed off as analysis (#1052); a retried worker no longer inheriting the failed attempt's report.md (#1053); and worker prompts ordered so the agent-invariant blocks form one cache-eligible prefix (#1057). Thanks @Shizoqua and @Echoandelementwebsites.

  • 2026-08-10 🚀 v0.1.13 released (Release notes, pip install -U vibe-trading-ai): 408 commits and 162 merged pull requests since 0.1.12 — the largest release so far. The headline is a fix, not a feature: the identity gate stops refusing answers it already had the evidence for. A well-formed question would spend minutes on real tool calls and then return "cannot safely confirm instrument identity or price evidence". The causes: .SS and .SH were treated as different instruments, so every Shanghai ticker was permanently ambiguous; a failed side query could demote an already-locked identity; Yahoo's HTTP 400 on every CJK query was recorded as a source failure instead of "not listed here"; a hardcoded per-tool whitelist blocked 11 of the 17 documented argument spellings; Chinese answers were rejected for writing 雅虎 or 元 rather than the ASCII loader name; and a thousands separator split ¥1,309.22 so 1 was compared against the observed range. Conceptual questions and comparison reports no longer dead-end either. A quote outside recorded OHLC evidence is still refused. New: src/quantlib — 249 tested functions across 17 modules (options, bonds, credit, econometrics, VaR/CVaR/EVT, attribution, event studies, purged CV) reachable from the CLI, Web UI, REST API and MCP through the read-only quantlib_call, so skills import finance math instead of carrying formulas in markdown; a valuation engine (run_dcf / run_comps / three-statement) whose one rule is that a missing input makes a model NOT RUNNABLE rather than silently defaulted; an entity + irregular cash-flow spine (XIRR / MOIC / DPI / TVPI, TWR / Modified Dietz via cashflow_performance) kept deliberately parallel to the bar engines; governance in every run — a hash manifest over prompt, skills, tool registry and package versions, plus a hash-chained fsynced audit ledger where even a self-rehashed edit is caught one record later; four read-only data tools on free public sources (SEC 13F with quarter-over-quarter diffs, ETF look-through where a CSI-300 tracker resolves to 342 positions covering 98.66% of net assets instead of the quarterly top ten, prediction markets as labelled implied probability, and arXiv/OpenAlex with source-anchored claims); six institutional commands (/comps /dcf /attrib /memo /earnings /screen); investor lenses as a standalone skill; five scheduled-research playbooks; a desktop Electron shell with checksum-pinned Windows packaging and safeStorage; eToro as the 13th broker connector; Korea (KRX) as the 9th backtest engine; an OpenBB Workspace bridge; Canadian equities end to end; and sentiment, technical_indicators, options_payoff, orderbook_depth, ModelScope and vibe-trading update. Correctness: SEC periods are keyed on their (start, end) span — annual figures had been returning a single quarter, a 4.2× understatement; Tushare A-share prices are corporate-action adjusted, where a raw return across an ex-date was off by up to 47 percentage points; bar_returns no longer records a trading halt as a 0% move; annualisation covers all 24 data sources; a sandbox gap is closed where generated code could import the broker layer or reach socket/subprocess through a renamed binding; and mixed-currency composite backtests are refused instead of summed into one equity curve. Thanks @santhreal, @shadowinlife, @Robin1987China, @he-yufeng, @QCYTSN, @Shizoqua, @honginp, @cgycorey, @wiliao, @ngoanpv, @x-lambda, @ofeksh-tr, @00EVA, @zwrong, @yrk111222, @su322, @hhj123123, @dineeshd, @sambazhu, @ddy4633, @tyj147454413-cmd, @y85998607, @JungHoonGhae, @shugaoye, @TSENGCHIENFENG, @darkknight4563, @MuggleJinx, @klmtseng, @ebujinovch, @g0rdonL, @AmirF194, @Echoandelementwebsites, @yagnikpipaliya, @dvirarad and @1anter.

  • 2026-08-09 🪟 Secure Windows packaging, Canada markets, ModelScope, and Alpha Zoo over MCP: Windows desktop packaging now assembles a checksum-pinned embedded Python 3.12 runtime and x64 NSIS review/signing paths, plus Electron safeStorage for an allowlisted credential set. The renderer can set or clear secrets but never read them; plaintext configuration migrates once; decrypted values reach only the owned backend; and both unsigned review and signed builds fail closed on the wrong signature state. No installer artifact was published from this PR (#1015). Canadian equities now work end to end: .TO/.V symbols are classified in CAD, route through Yahoo → yfinance → local fallback, execute under Canada-specific GlobalEquity rules, benchmark against XIC.TO, and refuse mixed-currency aggregation. Strict USD-M historical backtests can also opt into position_adjustment=rebalance while preserving collateral, funding, fees, realized P&L, liquidation behavior, and immutable fill evidence across increases and reductions (#1024, #1019, closes #952). ModelScope joins the built-in providers through its official OpenAI-compatible hosted-inference endpoint, with Qwen/Qwen3.5-27B as the default (#1011); the new vibe-trading update distinguishes wheel installs from editable/source checkouts, installs the exact release it checked, and verifies fresh metadata without downgrading (#1020); and alpha_zoo plus bounded alpha_bench now reach MCP (64 tools), with horizon/result/output-path limits and safe report creation (#979). Verified Python and frontend lock refreshes also update grouped dependencies, postcss, and akshare (#1021, #1023, #1026, #1027). Thanks @QCYTSN, @wiliao, @honginp, @yrk111222, @zwrong, and @cgycorey.

  • 2026-08-08 🧱 Desktop shell, eToro, atomic rebalancing, and a broad reliability pass: A source-first Electron host now owns the existing backend lifecycle — random loopback port, per-launch secret, five-locale startup recovery, and owned-process cleanup — while eToro joins with path-separated demo/real profiles; live risk-increasing actions remain mandate-gated and audited, and API capability surfaces are authenticated under enforced CSP (#923, #989, #961). Backtests gain opt-in atomic same-direction rebalancing with immutable fill evidence; Shadow splits mixed markets by settlement currency without invented FX aggregation and honors the configured runtime root; indicators use consecutive unsampled history; negative-equity drawdown and empty insolvent cross accounts are handled correctly (#951, #997, #1017, #1005, #958, #959). OpenAI Codex OAuth gets a separate synchronized credential store and one-shot 401 recovery; proxy opt-out covers sync and async clients; sandboxed runs retain their canonical root; scheduled research isolates malformed records and fixes interval-timezone validation; lowercase 4h requests return true four-hour bars (#1014, #995, #1012, #1003, #1004, #1013). QQ replies retain source message IDs, long model slugs remain readable, and the agent stops when evidence is sufficient (#1008, #1006, #1010). Thanks @QCYTSN, @Shizoqua, @ngoanpv, @hhj123123, @su322, @Robin1987China, @shadowinlife, @dineeshd, @honginp, @santhreal, @00EVA, @x-lambda, @ofeksh-tr.

  • 2026-08-07 🛡️ Fewer false refusals, a closed sandbox gap, QVeris on MCP: The grounding gate stops rejecting well-formed answers over numbers that were never prices — confidence scores, indicator readings, moving-average windows, year-less dates like 8/5, percentage ranges, and a trading plan's own trigger levels (close ≥ 6.45 is a condition, not a quote) — while a quote outside recorded OHLC evidence is still refused, and a price table dated 08-05 now matches its evidence instead of every cell coming back unavailable (#1001, #983). Sandbox: generated strategy code can no longer import the broker layer, nor reach socket/subprocess/os.system/ctypes through a renamed binding — both were accepted before, and src.quantlib still imports. QVeris discovery/inspect/execute join the MCP surface (62 tools), with the cost quote read from the marketplace instead of trusted from the caller (#976, closes #964, thanks @shadowinlife). Plus HK market-data fallback routing repaired with a new Tencent HK source, yfinance crypto routed to the crypto engine, memory entries written and recovered with their .md suffix, MCP list/dict arguments tolerating JSON-string clients, and Portfolio Studio artifacts surfaced in run detail (#1000, #970, #984, #993, #980, #982, #966, #973, thanks @he-yufeng, @ngoanpv, @sambazhu).

  • 2026-08-06 🧮 A tested finance-math layer + valuation engine + irregular cash flows + wired-in governance: src/quantlib replaces the formulas that lived as markdown inside skills with one tested implementation each — options, bonds, credit, econometrics, VaR/CVaR/EVT, attribution, event studies, multiple-testing control, purged cross-validation — 265 functions, reachable from the CLI, Web UI, REST API and MCP via the new read-only quantlib_call tool. A valuation engine (run_dcf / run_comps / three-statement) refuses to run on a missing input instead of silently defaulting it, and a new entity + cash-flow spine admits NAVs, capital calls, and coupons (XIRR/MOIC/DPI/TVPI and TWR/Modified Dietz via cashflow_performance; crypto L2 impact cost via orderbook_depth). Every run now writes a hash manifest, the audit ledger is hash-chained so tampering is detectable, and all 30 swarm presets were re-audited — a deliverable no granted tool can compute is now declared as such instead of invented.

  • 2026-08-05 🔭 Institutional holdings, ETF look-through, prediction markets, research papers: Four read-only data tools, all on free public sources — SEC 13F books with quarter-over-quarter position diffs; ETF constituents across markets (a CSI-300 tracker resolves to 342 positions covering 98.7% of net assets, not the quarterly top ten); event contracts as labelled implied probability; and arXiv/OpenAlex search that marks what a source does not state instead of inferring it. Plus five scheduled-research templates, six institutional commands (/comps /dcf /attrib /memo /earnings /screen), investor lenses as a standalone skill, and an agent core that traces every number back to the tool that produced it.

  • 2026-08-04 🔧 Correctness pass: fundamentals, A-share prices, oversized results: SEC reporting periods are now keyed on their (start, end) span — a 10-Q files the true quarter and the year-to-date frame under the same end date and fiscal period, so period="annual" had been returning a single quarter for AAPL FY2018–2020 (a 4.2× understatement) and every fiscal-Q4 slot in a quarterly series carried the full-year figure; get_fundamentals("AAPL.US") no longer answers ok:true with an all-null panel. Tushare A-share prices are now corporate-action adjusted in both the factor bench and backtests — a raw close-to-close return across an ex-date was off by up to 47 percentage points (300750.SZ, 2023-04-26) — and the CSI300 bench masks each date to its point-in-time index membership. Cross-market composite backtests refuse a mixed-currency code set instead of summing CNY, USD and KRW into one equity curve; option legs are marked at the volatility they were opened at, removing a fabricated day-zero P&L of up to +93% of premium; oversized tool results are paged by whole record with an explicit total instead of being cut mid-JSON; and calc_metrics reports tracking error and benchmark beta.

  • 2026-08-03 ⏰ Timezone-aware scheduled research + unblocked stock screening: Scheduled jobs now take an optional IANA timezone and evaluate cron on that zone's wall clock, so a cadence survives DST — a spring-forward gap is skipped and a fall-back ambiguous time runs once — while cron fields gain comma lists and ranges (1,3-5), jobs without a timezone keep UTC semantics, and the web UI gains a Scheduled page in all five locales where it previously had no scheduling surface at all (#954, closes #953, thanks @ngoanpv). A screening request no longer dead-ends: a many-candidate shortlist counts as an answer rather than a stalled resolution and retires once a candidate is locked, and price validation stops reading ticker digits, localized dates, share counts, and position costs as quoted prices — while still refusing any quote outside recorded OHLC evidence (closes #955). Agent memory also gets exact index-anchor matching and a respected result bound (#956, #957, thanks @santhreal).

  • 2026-08-02 🧠 Live model discovery, truthful runtime identity, and a verified dependency refresh: Settings now discovers configured-provider models on demand with stable warning codes and five-locale controls, while each reply records and reloads the immutable provider/model/reasoning identity that actually served it—cleared safely when sessions change (#924, thanks @QCYTSN). Nine hash-locked Python updates plus jsdom/postcss also landed with exact-version imports, 330 focused tests, the production build, 373 frontend tests, full main CI, and Dependency Graph green (#949, #948); the breaking MCP 2.0 bump remains unmerged pending a complete lock/runtime migration (#950).

  • 2026-08-01 🧮 Options strategy analytics + market sentiment + auditable USD-M research: A new options payoff workflow analytically calculates expiry P&L extrema, exact breakevens—including continuous zero-P&L intervals—engine-aligned entry commissions, and spot × IV scenarios through Agent and MCP (#946, rebuilt from #883, thanks @he-yufeng). The read-only sentiment tool scores arbitrary text locally and retrieves the crypto Fear & Greed Index without an API key (#939, thanks @Robin1987China). Strict USD-M backtests now persist ordered fill, funding, risk, and liquidation events plus a fidelity summary, while rejecting unsupported 100× intervals (#936, thanks @honginp). Reliability improvements also ensure symbol and venue resolution precedes market-data calls, final quoted prices are checked against recorded OHLC evidence, scheduled research retries transient failures, and nested MCP results serialize cleanly.

  • 2026-07-31 🔧 USD-M liquidation lifecycle + technical indicators + user-level state dirs: Opt-in perpetual_strict mode settles historical funding before fills and executes isolated/cross margin breaches as real liquidations (#903, thanks @honginp). A read-only technical_indicators tool computes RSI/MACD/Bollinger/SMA/EMA through the existing loaders (#921, refs #920, thanks @Robin1987China). Sessions, runs, swarm runs, and uploads now live under ~/.vibe-trading (relocatable via VIBE_TRADING_HOME) with a one-time automatic migration (#925, closes #904, thanks @MuggleJinx). Plus ten correctness fixes — Yahoo .SS classified as A-share, bare/prefix-style A-share codes, slash-delimited crypto pairs, nan/inf guards (#919, #926–#935, thanks @santhreal).

  • 2026-07-30 🎨 Rebuilt WebUI + Korea (KRX) market + an OpenBB Workspace bridge: The web UI lands its guided-minimalism overhaul — no first-frame flash, one durable activity object per turn with a live reasoning whisper and a reload-safe tool trail, LLM-written session titles, full five-locale parity. Korea equity (KRX: KOSPI/KOSDAQ) becomes the 9th backtest engine — execution-time ±30% band, long-only, 2026 0.20% transaction tax, optional pykrx loader (#693, thanks @JungHoonGhae) — plus an OpenBB Workspace bridge (#817, thanks @shugaoye) and a read-only Taiwan snapshot tool (#848, thanks @TSENGCHIENFENG). Correctness: daily price bands are judged at execution time, not from the decision bar's close; a session runs one attempt at a time (HTTP 409) and a user stop is its own terminal state (#676, thanks @tyj147454413-cmd). Plus durable traces (#662), secret-scrubbed tool results (#675), fail-closed tool arguments (#913/#911, thanks @santhreal), direct-OpenAI reasoning_effort (#755, thanks @1anter), and numeric guards across the risk x-ray / edge density / options engine (#909/#908/#907).

  • 2026-07-29 🔧 Gap-safe returns + liquidation risk modeling + a risk x-ray in every run: bar_returns no longer erases the real move across a trading halt longer than the forward-fill window — the resumption move was silently recorded as 0, understating volatility and inflating Sharpe — and an inf prior price can no longer read as a clean −100% (#895, thanks @darkknight4563). Annualisation now covers all 24 data sources at every interval, with a coverage test that fails CI when a loader lands without entries (#891, closes #884, thanks @Robin1987China). USD-M perpetual research gains deterministic isolated & cross margin liquidation evaluation (#889, thanks @honginp), and every portfolio backtest now emits risk x-ray artifacts (risk_xray.json/.md) with headline concentration/vol/drawdown metrics (#900, thanks @he-yufeng). The connector CLI now loads ~/.vibe-trading/.env, so env-sourced broker credentials resolve again (#902, closes #901, thanks @MuggleJinx). Plus indent-preserving channel message splits and skill-frontmatter parsing at EOF (#867/#861, thanks @santhreal).

  • 2026-07-28 🔧 Next-gen Claude models unblocked + sign-safe returns: Claude models that deprecate the temperature field (opus-4-7, opus-5, sonnet-5) now work — the adapter drops the field when the API rejects it, retries once, and remembers the model, so no per-release patch is needed (#890, closes #856, thanks @yagnikpipaliya). Non-interactive vibe-trading run now injects a host session id: research-goal tools previously failed on every call while the run still reported success (#885). Buy-and-hold returns are sign-safe — a near-zero prior close no longer explodes the compounded benchmark, and an exact-zero close no longer yields inf/nan (#872, thanks @darkknight4563). The frontend moves to Node 22 + React Router 8, clearing a high-severity advisory.

  • 2026-07-27 🔧 Correlation integrity + vn.py 4.0 export repair + an encoding batch: The rolling correlation matrix no longer forward-fills missing closes — a halted session was being scored as a fabricated 0% return against the peer's real move, distorting the matrix (#873, thanks @ddy4633). The vn.py export skill is repaired for the vn.py 4.x layout, where vnpy.app.cta_strategy no longer exists upstream — templates now import from vnpy_ctastrategy (#869, thanks @y85998607). Plus a six-fix batch: UTF-16 BOM decoding in the document reader and trade-journal CSVs, currency symbols stripped before numeric coercion, BTCUSDT-style symbols inferred as crypto, lowercase 1h/1d intervals annualized correctly, and CJK characters preserved in skill directory slugs (#862, #863, #864, #865, #866, #868, thanks @santhreal).

  • 2026-07-26 🔒 Dependency lock + universe transparency: Docker’s hash-locked install works again, with a new CI lock check (#858, closes #847). alpha bench now discloses CSI300/SP500 sources, counts, degraded fallbacks, and survivorship bias (#859, closes #845). Actions and five frontend dependencies were also refreshed (#850–#852).

  • 2026-07-25 🔧 Perpetual realism + MCP crash fix + a correctness batch: USD-M perpetuals gain margin state contracts (#798, thanks @honginp) and the engine now consumes historical funding rates instead of fetching-and-ignoring them (#819, thanks @g0rdonL). MCP dataclass results no longer crash on a false Circular reference detected (#849, thanks @Echoandelementwebsites), and alpha bench CLI/HTML forward the _meta survivorship disclosure (#841, closes #797, thanks @AmirF194). Plus 12 correctness fixes across journals, connectors, and channels (#799–#810, thanks @santhreal), and a real account label in CLI balances (#843, closes #846, thanks @Robin1987China).

  • 2026-07-24 🔀 Memory Tier 2, composable optimizer constraints + an interval-handling sweep: Persistent memory gains Tier 2 structural organization (#815, thanks @shadowinlife), and backtest optimizers accept composable weight constraints (#818, thanks @he-yufeng). Correctness: the daily-bar validator can opt in to non-positive prices — opening on negative bars while still rejecting zero (#816, closes #571, thanks @darkknight4563). Plus a 19-PR loader interval-normalization sweep: lowercase 1h/4h/1d/1w aliases accepted everywhere, unsupported intervals now fail fast instead of silently returning daily bars, Yahoo 4H maps to 1h, and MT5 accepts 1W/1M (#812–#838, thanks @santhreal), a trade-journal fix for Eastmoney Excel-serial dates (#811, thanks @santhreal), and a README nav-anchor fix (#840, thanks @dvirarad).

  • 2026-07-23 🔧 Reliability sweep + strict alpha-bench surfaced + opt-in memory lifecycle: A 22-PR contributor batch. A broad reliability sweep fixes timeframe handling end to end — yfinance 1M→monthly (not minute), CCXT 1W/1M, akshare/india-broker rejecting unsupported intervals instead of silent daily, and the Tiger/Alpaca/OKX/Shoonya/Longbridge connectors keeping 1H/4H as hour bars — plus trade-journal Excel-date normalization (eastmoney float YYYYMMDD, Futu/Tonghuashun serial dates), finite-JSON report_audit, blank holding_days validation, and Feishu/CLI markdown table edges (#778–#794, thanks @santhreal). MT5 trading_history now coerces numpy scalars so JSON serialization no longer dies on int64 (#776, closes #774, thanks @shadowinlife), and PIT fundamentals dedup restated rows and stop the snapshot regressing to an older fiscal period on a late restatement (#772, closes #771, thanks @klmtseng). New: alpha bench --strict finally wires the strict same-universe random-control + OOS gate that shipped unreachable since 0.1.9 (#796, closes #773, thanks @he-yufeng), an opt-in memory lifecycle (quality scoring, Ebbinghaus decay, archive-only GC — all off by default) (#733, closes #732, thanks @shadowinlife), and backtest rebalance-notes artifacts + turnover metrics (#795, thanks @he-yufeng).

  • 2026-07-22 🚀 v0.1.12 released (Release notes, pip install -U vibe-trading-ai): The correlation regime timeline adds a GET /correlation/regime endpoint + an opt-in Correlation-tab strip — edge density run through a causal hysteresis state machine that marks FUSED market episodes, descriptive risk context rather than a signal (#756, closes #719, thanks @ebujinovch). Provider endpoint resolution now falls back to each provider's canonical base URL and gracefully handles non-SSE endpoints, fixing the native zai provider on glm-5.1 (#758). Plus a strict-JSON / finite-number reliability sweep across metrics, factors, pattern, session, and journal (#761–#770, thanks @santhreal) and a Binance maintenance-bracket decouple that keeps -PERP backtests zero-credential (#757, thanks @honginp). Rolls up ~90 fixes since 0.1.11.

  • 2026-07-21 🔧 Data-loader completeness + a reliability fix sweep: Partial market-data results now complete the missing symbols through the fallback chain and fail closed instead of silently shrinking the backtest universe (#689, closes #681, thanks @xkam7ar), and OKX bars use the history-candles endpoint with rate-limit retry for deep backfills (#644, thanks @tyj147454413-cmd). Plus a fix sweep: the MCP network guard accepts IPv6 / case-variant hosts (#750, thanks @Robin1987China), trade-journal parsers skip blank/NaN symbol rows (#749, thanks @Robin1987China), the Shadow Account skips the mined entry-hour gate on daily bars (#748, thanks @Robin1987China), and MiniMax regional API endpoints are selectable (#731, thanks @octo-patch).

  • 2026-07-20 🔀 Providers, MetaTrader 5, and a reliability sweep: Native Anthropic Messages API (optional [anthropic] extra, #695, thanks @jelech), SiliconFlow (#565, thanks @UNHNQ), and iFlytek Spark (#537, thanks @FenjuFu) join the provider roster, and a MetaTrader 5 (Exness) broker connector + mt5 forex/metal data source lands (broker connectors → 12, #481, thanks @StaniellG). Plus a provider-agnostic llm-vision OCR engine (#548, thanks @shadowinlife), an 80× signal-alignment vectorization (#698, thanks @shadowinlife), historical Binance USD-M funding/bracket data (#716, thanks @honginp), a swarm MCP-discovery cache (#704), and a reliability consolidation closing 13 SSE/session/CLI/swarm/scheduler issues (#584, thanks @xkam7ar). Correctness: options partial-close now honors the requested quantity instead of flattening the lot (#577), centralized provider credential resolution (#563), queued-cancel handling (#641), a frontend streaming-DOM race (#717, thanks @Marnie0415), and the connector CLI renderers (#726, thanks @nareshkps).

  • 2026-07-19 🔧 Real US/HK stock-news articles + MCP factor-analysis fix + a robustness pass: The stock-news tool now returns real Yahoo Finance articles (title/url/source/published/snippet) for US and HK tickers instead of related-instrument matches, still routed through the frozen IP-throttled client (#730, thanks @yxhuang). The MCP factor_analysis tool is realigned to the registered tool's real CSV contract, so calls no longer die on KeyError before running (#715, closes #635, thanks @Robin1987China). Plus a robustness pass: the whole Kimi K-series (k2/k3/…/for-coding) now auto-forces temperature=1 as the API requires (#701, thanks @sambazhu), and split_message, PDF page ranges, and trade-journal date filters all fail fast on degenerate or inverted input instead of hanging or silently returning nothing (#727–#729, thanks @santhreal).

  • 2026-07-18 🔧 Binance crypto fallback + parallel-execution and correctness fixes: A Binance loader joins the crypto historical-data fallback chain (#643, thanks @tyj147454413-cmd), and the IBKR connector moves to a thread-local connection pool with snapshot quotes, fixing hangs under parallel agent runs (#636, thanks @MikeCer). Plus a correctness pass: factor analysis rejects non-positive n_groups, inverted period ranges and non-positive detection windows fail fast, an unnamed DatetimeIndex in the correlation matrix is handled, equity.csv nav/value column aliases are accepted, and empty A-share codes are no longer coerced to 000000.SZ (#709–#714, thanks @santhreal). A correlation-rewiring stability factor joins the academic zoo (#705, thanks @ebujinovch), the fundamental zoo is whitelisted for factor analysis (#707, thanks @sambazhu), persisted run state is now fsync-durable (#645, thanks @tyj147454413-cmd), and the dev extra installs the documented Black/Ruff toolchain (#634, thanks @xkam7ar).

  • 2026-07-17 🧩 Correlation-regime skill + a broad backtest / data / live-safety correctness pass: a new correlation-regime detection skill (bundled skills → 88, #557, thanks @ebujinovch), a Longbridge runtime connection card (#569, thanks @fanfpy), and user-defined swarm presets loaded from ~/.vibe-trading (#570, thanks @darkknight4563). Plus hardening across the stack: silent-data-corruption fixes in the Futu / Tencent / CCXT / mootdx loaders, look-ahead-bias and strict-OOS guards in the factor bench and Shadow Account, live-trading safety (signed exposure caps, atomic daily order limits, consent-first mandate commits, fail-closed live state), and journal / QVeris-budget / swarm / CI-gate improvements (#552, thanks @xor-xe; much of the correctness work by @xkam7ar).

  • 2026-07-16 🔧 Dependency lock repaired + Windows settings save fix: the hash-verified runtime lock is regenerated so Docker's pip install --require-hashes resolves cleanly again, fixing the incompatible caio/pydantic-core/websockets pins (#564, closes #558, thanks @tianrking). Saving Agent LLM settings from the Web UI no longer returns HTTP 500 on Windows — the POSIX-only os.fchmod hardening is now platform-guarded, with a regression test for platforms without fchmod (#561, thanks @CRui5in).

  • 2026-07-15 🧮 Backtest correctness + Portfolio Studio core: A 10-PR convergence pass made rebalances causal and order-independent, charged terminal close costs, reported fill-derived turnover, enforced exposure caps, and kept validation output finite and strict (#530/#531/#532/#540). Charts now reuse the run's actual data source, repeatable market queries are no longer dropped, and .env loads refresh cached config (#535/#544/#554). Portfolio Studio #456 and config bug #541 are closed; provider fixes #528/#529 closed too. Thanks @YZY0108, @santhreal, @Robin1987China, @xkam7ar, @Marnie0415, and @marichu99.

  • 2026-07-14 🌉 Longbridge market data + modern MCP transport + provider reliability: Longbridge joins the historical-data fallback layer with key-gated credentials, date-window splitting, strict completeness checks, and an opt-in SDK dependency; four China-market flow tools gain verified Tushare fallbacks, and negative final equity no longer crashes backtest metrics. The MCP server now supports Streamable HTTP, write_file safely recovers aliased or missing path arguments, hypothesis updates reject unsupported fields, and Correlation requests are authenticated. NVIDIA NIM is now a first-class provider across Web Settings and both CLI onboarding paths, with a versioned compatibility User-Agent to address the reported 403; Web Settings now writes to the canonical ~/.vibe-trading/.env, migrates legacy configuration, and reports permission failures clearly, fixing the DeepSeek save-time 500 (#534, closes #516/#524; #528/#529). Thanks @fanfpy, @asahikiko, @santhreal, @sTunnaSu, @abhishekjaisinghani, @huangcheng, @ShiroKSH, @Meru143, @DIEGOD79, and @not-knope for the code, reports, and diagnosis.

  • 2026-07-13 🔒 Security hardening: all 10 external-audit findings closed + contributor batch: every finding from the 2026-07-10 external security audit (issue #476, discussion #468) is now addressed on main — Docker multi-stage rebuild with digest-pinned images, an AST-hardened backtest sandbox blocking network/subprocess/eval/os.environ/unsafe-open (including inside nested function bodies), short-lived single-use SSE auth tickets, hardened Compose (read-only rootfs, dropped capabilities, resource limits), auth + rate limiting on /correlation, security headers, hash-locked dependencies, and more. Also merged: opt-in TAP mode for Alpaca key isolation (#377, thanks @0xZKnw), realized portfolio turnover surfaced in backtest metrics (#478, thanks @Robin1987China), a Frazzini-Pedersen betting-against-beta academic factor (Alpha Zoo → 461, #480, thanks @YogeshModi24), a look-ahead-bias fix across all 5 portfolio optimizers (#487, thanks @YZY0108), and two preflight/provider-config fixes (#479/#484, closes #477/#482, thanks @ananaymital/@Bortlesboat).

  • 2026-07-12 🧪 Strategy Development Manager + contributor fix batch: the new strategy-dev-manager skill (#87) turns academic papers and broker research into registered factors/strategies with a persistent artifact store and automated IC/Sharpe decay monitoring — sdm_register / sdm_status / sdm_decay_scan drive an active → monitoring → decayed → disabled lifecycle over ~/.vibe-trading/ (#457, closes #455, thanks @shadowinlife). Also merged: the Correlation tab accepts bare tickers (AAPL,SPY) and walks the full loader fallback chain (#472, closes #471, thanks @yxhuang), the local loader honors requested intervals via OHLCV resampling (#467, thanks @Shizoqua), Binance USD-M perpetual history lands with explicit BTC-USDT-PERP routing + execution/mark price separation as the first #462 slice (#470, thanks @honginp), FastMCP transport imports now work across both module layouts (#469, thanks @roberttidball), and Requesty is available as an OpenAI-compatible LLM gateway provider (#474, thanks @Thibaultjaigu).

  • 2026-07-11 🚀 v0.1.11 released (pip install -U vibe-trading-ai): rolls up three weeks since 0.1.10 — first-class Indian equity (NSE/BSE) backtesting, the PIT-safe fundamental factor layer (Alpha Zoo → 460), the 16-adapter IM channel runtime, end-to-end scheduled research, optional QVeris premium data, and today's contributor batch: a turnover-aware optimizer (#466, thanks @Robin1987China), an analyze_image vision tool + NapCat DM pairing + the IM-media read fix (#464/#463/#465, thanks @fei-moss), Longbridge Decimal serialization (#459, thanks @fanfpy), and packaged-manifest count guards (#461, thanks @asahikiko). Full details: CHANGELOG · release notes.

  • 2026-07-10 🇮🇳 Indian equity (NSE/BSE) support + centralized env config: a dedicated IndiaEquityEngine lands — T+1 delivery, circuit bands, and a config-driven STT/stamp/exchange/SEBI/GST cost stack — with .NS/.BO symbol routing, an opt-in read-only Shoonya/Dhan data bridge, and 255 alpha101/qlib158 factors opted into the new equity_in universe (#305, thanks @muku314115). Environment variables now flow through a single Pydantic EnvConfig schema with an AST-based CI gate against future os.getenv sprawl (#440, closes #438, thanks @shadowinlife). Also: a second-confirmation dialog before committing a real trading mandate plus unified error toasts (#453, thanks @wison1717-maker), scheduled-research route tests (#452, thanks @Robin1987China), and GLM thinking models no longer lose their reasoning stream on the zhipu provider (#458).

  • 2026-07-09 🧯 Docker startup unblocked + provider/CLI contributor batch: Docker/server startup no longer crashes when FastAPI route iteration sees an included-router-like entry without path (#450, thanks @Penn-Live). We also landed the queued quick-win contributor fixes: loader fetch() signatures now match the protocol across OKX / Tushare / yfinance (#437, thanks @shadowinlife), the CLI resume prompt preserves the first user message (#448, closes #447, thanks @morluto), Codex OAuth defaults to openai-codex/gpt-5.4 (#446, thanks @morluto), Kimi for Coding is available as a distinct provider (#435, thanks @yxhuang), opencode provider mappings are wired (#444, thanks @imsankz), and Tushare reference code fences now say python instead of pyhton (#449, thanks @flash1234pku). Validation included focused server/CLI/provider/loader tests plus a Docker build and /health smoke.

  • 2026-07-08 💎 Fundamental factor layer (Phase 1) + optional QVeris premium data + maintainer day: PIT-safe SEC fundamentals now flow into daily factor panels — fund:* panel columns, filed-date anchoring with restatement and YTD-frame protection, and 4 new quality/value factors (registry now 460 alphas). Data routing gains an optional premium track: the 18 free sources stay the default, while QVeris unlocks 63+ providers via Settings → QVeris or vibe-trading data mode paid (see the QVeris section below). Also: api_server modularization completed (1,103 → 371 lines, #424 closing #331, thanks @shadowinlife), backtest validation.json no longer requires a pre-existing artifacts dir (#429, thanks @isaveall), clearer --swarm-run errors (#428, thanks @isaveall), and we reverted the governance stack that broke session chats (#433, thanks @yxhuang for the precise diagnosis).

  • 2026-07-07 ✅ Contributor PR batch: merged the queued contributor work for IM channel timeout configuration (#413, thanks @SyntaxSawdust), Alpha Library social previews and the beginner tutorial (#396, #393, thanks @kadaliao), value-investing skills / tools / committee presets (#407, thanks @sambazhu), zero-sized order-field handling in trading_place_order (#417, thanks @irfanallana-oss), and timezone-aware UTC timestamps across session/API paths (#397, thanks @mustafakamal88).

  • 2026-07-06 🧭 Preflight hardening, API slices, and CN search fallback: provider preflight no longer follows redirects (#404, closes #402, thanks @SyntaxSawdust), the remaining API routes moved into focused modules (#387, superseding #383-#386, thanks @shadowinlife), and CN web-search fallbacks now include Alibaba Cloud IQS (#408, thanks @sambazhu). Maintainer cleanup added no-network fallback tests and EOF whitespace cleanup (fbac74f); main CI is green (run 28780619018).

  • 2026-07-05 ✅ Contributor PR queue closed + Windows baseline green: merged the four non-draft PRs selected for today's maintainer pass. A-share mootdx batch pulls now let KeyboardInterrupt / SystemExit propagate instead of being swallowed by a bare except (#399, closes #398, thanks @shadowinlife). The Settings route slice and patched dependency floors are now merged under their original contributor PRs (#382, #390, thanks @shadowinlife and @aeonframework). Windows baseline compatibility now isolates loader caches, makes OAuth cache assertions platform-aware, skips one fork-only mock test on Windows, and bypasses proxies for MCP loopback fixtures (#401, thanks @Elfsa-Miranda). Validation: 4701 passed, 47 skipped.

  • 2026-07-04 🧩 API route slices, tutorial docs, and dependency floors: IM channel and Settings routes moved out of api_server.py into src/api/channels_routes.py and src/api/settings_routes.py, continuing the narrow #331 modularization path from contributor work (#379, #382, thanks @shadowinlife). The wiki gained a Chinese beginner tutorial for non-finance readers (#393, thanks @kadaliao), and dependency floors now keep Pillow / LangChain / LangGraph on the installable patched track (#390, thanks @aeonframework).

  • 2026-07-04 🧹 UTC timestamp cleanup for session and API paths: tightened the #395 timestamp fix so session, goal, channel, and API timestamps now emit timezone-aware UTC values in explicit ISO form.

  • 2026-07-03 🛡️ Robinhood MCP refresh + API modularization + SSRF guard: Robinhood Agentic Trading now uses the current MCP tool names across generic reads, live-runner plumbing, default read-only seeds, and mandate-gate tests, while interactive startup honors the same .env search order as the provider loader (~/.vibe-trading/.env → agent/.env → $CWD/.env) (#391, closes #381 and #380). System routes (/health, /correlation, /system/shutdown, /skills, /api) moved into src/api/system_routes.py as the next narrow API modularization slice (#378, thanks @shadowinlife). Channel media SSRF defenses now reject CGNAT/mesh/non-global targets and QQ media redirects-to-internal before fetching (#389, thanks @hobostay).

  • 2026-07-02 ⚡ Factor acceleration + safer runtime boundaries: hot rolling factor operators now use bottleneck/NumPy fast paths, alpha bench parallelism avoids repeated large-panel worker payloads, and base equity math has regression coverage (#376, closes #339, original work from #342 by @shadowinlife). Upload and Shadow report routes moved out of the monolithic api_server.py as the first narrow API modularization slice while #331 stays open (#375, based on #358, thanks @shadowinlife). Generated backtests now inherit only an allowlisted subprocess environment instead of the parent secrets surface (#374, closes #332), and IM channels gained /new session reset plus case-insensitive pairing commands (#372, closes #371, thanks @shadowinlife).

  • 2026-07-01 🧹 Security polish + tracker cleanup: tightened API/Docker/frontend dev defaults, stabilized Settings channel and zh-CN edges, cleared frontend dependency/CSP alerts, and closed stale WhatsApp + paper-trading tracker items (#338, #351, #349, #365, #367, #350, #335, #283).

  • 2026-06-30 💬 IM channel runtime for research delivery: Vibe-Trading can now attach the same agent session runtime to 16 built-in message adapters — WebSocket, Telegram, Slack, Discord, Matrix, WhatsApp, Signal, QQ/NapCat, WeChat/WeCom, Feishu/Lark, DingTalk, Teams, email, and Mochat. CLI (vibe-trading channels status/start/stop/login/pairing), REST (/channels/status, /channels/start, /channels/stop, /channels/pairing/command), and the Web UI Settings panel expose status, recovery hints, start/stop, and sender pairing; SDK-backed adapters stay behind extras such as vibe-trading-ai[telegram] or vibe-trading-ai[channels] (#341).

  • 2026-06-29 🛡️ Live advisory safety + Trading 212 read-only connector + Windows/Gemini fixes: live order guards now have an opt-in, broker-agnostic PreTradeAdvisoryInterface that records advisory reviews without bypassing the mandate gate, kill switch, or audit trail (#328, closes #317, thanks @shadowinlife). Trading 212 joins the connector layer with read-only account, positions, orders, history, and instrument-metadata support; place_order / cancel_order still hard-refuse until a structural paper/live boundary exists (#321, closes #309, thanks @mvanhorn). Windows startup avoids the pandas 3.0 Timestamp crash via the <3.0.0 constraint (#329, closes #324, thanks @hannibal-lee); Gemini thought_signature dict-history replay was verified/fixed on main (#318); .US financial statements now route to SEC EDGAR instead of Eastmoney (#325); and the Alpha Library landing page got cache/date/selector/noscript/DNS-prefetch hardening while heavier CSP and social-card follow-ups stay tracked (#323).

  • 2026-06-28 🧰 Cross-platform setup/dev + runtime and file-tool hardening: vibe-trading setup and vibe-trading dev now handle Windows TypeScript builds, launch the backend from the right cwd, use the Vite 5899 port, and shut child processes down cleanly (#292, thanks @digger-yu). Runtime status polling now degrades instead of crashing (#322); MCP OAuth cache keys are sanitized (#313); OpenAI defaults and Robinhood agent.json validation were tightened (#319, #320, thanks @mvanhorn); and file tools got isolated read/write roots plus broader sandbox tests (#299, thanks @skloxo).

  • 2026-06-27 🧯 Content-filter resilience + Shadow Account feature contract cleanup: event-driven and swarm runs now skip individual LLM content-moderation hits, warn in run cards when filter rates are high, and recognize Gemini safety finish reasons instead of aborting an entire analysis (#308, closes #307, thanks @shadowinlife). Shadow Account extraction/codegen now share one PRICE_FEATURES contract and keep four-decimal return bounds, preventing rule/codegen drift and precision loss on prior_5d_return (#316, thanks @Robin1987China).

  • 2026-06-26 🎯 Shadow Account conditional entry + tushare ETF/index/HK routing: extracted Shadow Account rules now carry RSI / prior-return bounds, so the generated SignalEngine enters on real conditions (RSI in range, prior-return in range) instead of blindly replaying the holding cadence (#314, follows #302, thanks @Robin1987China). The tushare loader also routes ETF/LOF → fund_daily(), indices → index_daily(), and HK equities → hk_daily() instead of always calling daily() (which silently returns empty for non-stocks), with per-symbol empty-result + partial-fetch warnings (#315, closes #310, thanks @shadowinlife).

  • 2026-06-25 🧪 Strict validation JSON + calmer agent context: standalone backtest validation now normalizes nested NaN / Infinity values before writing artifacts/validation.json or CLI stdout, so strict JSON parsers no longer choke on validation payloads (#306, thanks @gyx09212214-prog). The agent prompt also derives the current data-source count from the loader registry, and _microcompact() now waits for real token pressure instead of clearing older tool results during short runs (#296, closes #282, thanks @MarkfuGod).

  • 2026-06-24 🎯 Shadow Account price context + reactive Chinese UI + LAN auth fix: Shadow Account rule extraction now sees PIT-safe entry context — entry_rsi14 and prior_5d_return fetched through the loader registry as of buy_dt, with graceful offline/no-data degradation (#302, follows #295, thanks @Robin1987China). The main Web UI panels now use reactive English / zh-CN translations across charts, chat, Alpha Library, Correlation, and Run Detail (#301, thanks @skloxo). Remote same-origin Web UI deployments with API_AUTH_KEY can post and upload again after the CSRF hardening, while mismatched cross-site origins remain blocked (#304, thanks @Hinotoi-agent).

  • 2026-06-23 🛡️ Local API CSRF hardening: a malicious web page can no longer drive unsafe cross-site requests (POST/PUT/DELETE) against the loopback API — CORS blocks reading the response but not the side effect, so loopback dev-mode trust now applies the existing cross-site guard to unsafe methods before honoring it. Safe methods and local CLI / non-browser uploads are unaffected (#293, thanks @Hinotoi-agent).

  • 2026-06-22 🔧 Live-authorize OAuth fix + Alpha Zoo headline fix: connector authorize now holds the OAuth handshake open through a multi-minute broker sign-in (tunable via VIBE_LIVE_AUTHORIZE_TIMEOUT_SECONDS) and no longer spawns a competing callback server on retry, so the token actually persists (#281, closes #259, thanks @Robin1987China). The Alpha Zoo page no longer prints its alpha count twice (#287, closes #286, thanks @digger-yu). Scheduled research also picked up end-to-end usage docs (#288).

  • 2026-06-21 ⏰ Scheduled-research executor + Reports library + post-backtest attribution: scheduled research now runs end to end — a default-off background executor (VIBE_TRADING_ENABLE_SCHEDULER) fires due interval/cron jobs through the session runtime (#278, thanks @mvanhorn, closing #254). A new /reports Run Library page lists, searches, and filters report-worthy runs with links into Run Detail + Compare (#224, thanks @LemonCANDY42). And after every backtest the agent now runs layered attribution — trade-level winners/losers, beta regression, market-regime analysis, and a Monte Carlo permutation test, gated by data availability and routing (#280, thanks @shadowinlife).

  • 2026-06-20 🔬 Research Autopilot loop closes (Phase 3) + loader OHLC integrity guard + 4 academic alphas: Research Autopilot now runs hypothesis → signal-engine → backtest end to end — scaffold_signal_engine writes a contract-correct engine and link_autopilot_backtest feeds run metrics back to the hypothesis (68 tools) (#267). A structural OHLC sanity check drops dirty bars (high < low, non-positive prices, bad bracketing) centrally at the loader boundary, guarding every data source (#274, thanks @Shizoqua). And the academic alpha family grows 6 → 10 — Jegadeesh reversal, George-Hwang 52-week-high, Amihud illiquidity, Harvey-Siddique skew (456 factors) (#277, thanks @Robin1987China).

  • 2026-06-19 🚀 v0.1.10 — Global data layer: market-data sources grow 10 → 18 (free Eastmoney / Sina / Stooq / Yahoo + key-gated Finnhub / Alpha Vantage / Tiingo / FMP, ban-risk fallback) plus 18 read-only data tools (fund flow, dragon-tiger, northbound, margin, block trades, SEC EDGAR + XBRL, financials, options chains, full-market screening…) across A-share / US / HK, all over MCP. Also bundles everything since 0.1.9 — 10 broker connectors, alpha compare, the provider-reliability overhaul, and the opt-in data cache. pip install -U vibe-trading-ai

  • 2026-06-18 🔬 Research Autopilot Phase 1 + a local Data Bridge loader, + a Discord security notice: new run_research_autopilot + generate_backtest_config wire Hypothesis → Research Goal → backtest end to end (now 50 tools), and a local loader reads OHLCV straight from your own CSV / Parquet / DuckDB files (#260, #252, thanks @Robin1987China), alongside DeepSeek DSML tool-call parsing and an identifier-containment hardening wave. ⚠️ Security: the old community Discord invite now points to a server we don't control running a fake Collab.Land wallet-"verification" phishing scam — removed everywhere; the only official Discord is the HKUDS server (discord.gg/6TdQnT5xcF), and we'll never ask you to connect a wallet.

  • 2026-06-17 🧩 Install compatibility + Opus/Kimi provider fixes: Baseline pip install vibe-trading-ai no longer pulls the optional pyharmonics / ta dependency chain; harmonic detection now lives behind vibe-trading-ai[harmonic] while the bundled detector remains available (#250, closes #249). The agent loop also avoids assistant-prefill handoff messages rejected by Opus 4.8+, and Kimi/Moonshot can override the client User-Agent with MOONSHOT_USER_AGENT (#248, closes #246 and #204); follow-up tests now directly cover background-result and auto-compact handoff paths (#251).

  • 2026-06-16 🛡️ Security/API hardening + GLM/Zhipu alias: Settings writes require auth when configured (#245); API shell-capable tools require explicit VIBE_TRADING_ENABLE_SHELL_TOOLS=1 opt-in (#243); local shutdown requires auth when an API key is configured (#241); and untrusted loopback-looking hosts are rejected instead of treated as local (#242). Runtime edges also got cleaned up: Web chat syncs completed attempts (#236), run cards emit strict JSON for non-finite metrics (#238), malformed RSSHUB_TIMEOUT_S / RSSHUB_FETCH_BUDGET_S falls back safely (#240), and ddgs retry fallback is regression-covered (#239). GLM/Zhipu is now a first-class provider alias with model-name inference (#247, closes #237).

  • 2026-06-15 🧭 Web-search resilience + Web UI run-continuity fixes: web_search no longer fails when a single engine is rate-limited — it now queries several free, no-key engines in order (DuckDuckGo, Google, Bing, Brave, Mojeek, Yahoo) with retry/backoff, treats "no results" as an empty answer rather than an error, and returns an actionable message instead of a bare ❌ when every engine is throttled (override the engine list with VIBE_TRADING_SEARCH_BACKENDS) (#232, closes #231, thanks @Ethan-sun01). In the Web UI, switching pages during a run no longer freezes it — the chat re-subscribes to the live stream and replays missed progress on return (#234) — and the Stop button now takes effect mid-stream and between tools instead of only at iteration boundaries (#235), closing both halves of #229 (thanks @kalkinj). The baostock loader also accepts native sh.601398 / sz.000001 codes alongside tushare-style 601398.SH (#230, thanks @bhlt).

  • 2026-06-14 📊 Per-run token usage + progressive Run Detail charts: Every agent run now persists provider-reported token usage as a run-scoped llm_usage.json — provider/model, aggregate totals, and per-iteration counts — surfaced additively on /runs/{id}, so a finished run's token cost stays auditable after the live stream is gone (provider-reported only; no prompt/content capture, no price estimation) (#223, thanks @LemonCANDY42). The Run Detail page no longer loads every symbol's candlesticks up front: the default /runs/{id} response is unchanged, but the UI now renders the run summary first and loads each symbol's chart on demand through opt-in ?chart_payload=summary / ?chart_symbol= modes, with per-symbol loading state and a load-all-with-progress control (#225, thanks @LemonCANDY42). Two loader fixes close the cycle: yfinance's exclusive end boundary no longer drops the final requested trading day — the download now passes end + 1 day while cache keys keep the original range (#226, thanks @gyx09212214-prog) — and a malformed CCXT_TIMEOUT_MS / OKX_TIMEOUT_S value now warns and falls back to its default instead of raising at import and blocking startup (#227, thanks @gyx09212214-prog).

  • 2026-06-13 ↩️ Resume a past session by ID from the CLI: The interactive CLI now prints the session-id on exit, with a copy-paste vibe-trading resume <session-id> hint — so locating the trace for a finished run no longer means guessing which folder under agent/sessions/ is newest by timestamp. The new vibe-trading resume <session-id> subcommand reopens that exact session and replays its recent turns into the loop; an unknown id fails fast instead of silently starting a blank session (#218, thanks @zwrong).

  • 2026-06-12 🩺 Provider reliability overhaul — DeepSeek hangs, Kimi access, streaming liveness: A cluster of provider reports — DeepSeek runs stuck on "Agent is working…" (#208, thanks @XYWOX), reached max iterations masking empty model responses (#203, thanks @mojianliang), the UI never recovering after a stall (#195, thanks @mafia23), and Kimi rejecting the client (#204, thanks @liao497) — shared one root: every OpenAI-compatible provider ran through a single shim that applied DeepSeek/Kimi/Gemini quirks globally and silently swallowed stream failures. Provider-specific behavior now lives in an explicit capability layer — reasoning capture/replay, Gemini thought signatures, the Kimi User-Agent, OpenRouter's reasoning body are each gated to their own provider instead of cross-contaminating. Reasoning-only streams show a live "Reasoning…" indicator instead of dead air; a stream failure raises a contextual provider_stream_error with one automatic retry for transient resets (deterministic 4xx fail fast) instead of silently falling back to a slow non-streaming call; an empty model response is reported as empty_model_response instead of "max iterations"; SSE heartbeats no longer break reconnect replay; and a stuck read-only tool times out instead of hiding behind heartbeats forever. A new vibe-trading provider doctor prints a redacted provider/model/package/proxy snapshot for one-command triage of environment-side hangs. DeepSeek users can opt into the official native adapter with pip install "vibe-trading-ai[deepseek]", and kimi-k2.x's temperature=1 requirement is applied automatically — the Kimi path is verified end-to-end against the live API (tool calls + strict multi-turn reasoning replay on kimi-k2.6).

  • 2026-06-11 🐝 Swarm workers now pull market data through the loader layer: An investment-committee run on NVDA exposed a chain of gaps — workers wrote ad-hoc yfinance scripts, trusted a malformed latest bar (volume present, OHLC empty), leaked NaN into non-strict JSON, and a context-free continuation prompt re-routed to the wrong preset (#198, thanks @BillDin for an exceptional diagnosis plus both fixes). Swarm workers now get a local get_market_data tool backed by the same normalized loader registry as MCP — strict JSON, non-finite floats serialize as null — wired into every market-data preset (21 workers across 13 presets) with a prompt policy that steers OHLCV work tool-first (#199); run_swarm takes an explicit preset_name and refuses ambiguous continuation fragments instead of silently falling back to equity_research_team (#200). Grounding got smarter too: a bare US ticker like NVDA in a swarm prompt is promoted to NVDA.US (stopword-guarded), so workers start from authoritative pre-fetched prices. The tool joins the main agent registry as well — 48 tools now. Also: your Docker data now survives updates — persistent memory, the session search index, user-created skills, shadow accounts and broker config live in named volumes, so docker compose up --build no longer wipes them (#197, thanks @FlyerJ).

  • 2026-06-10 🐳 Docker reaches a host-side Ollama out of the box: Inside the container localhost is the container itself, so the shipped OLLAMA_BASE_URL=http://localhost:11434 failed the LLM preflight for every Dockerized Ollama setup. docker-compose.yml now defaults to http://host.docker.internal:11434 (export OLLAMA_BASE_URL to point elsewhere) and adds the host-gateway extra_hosts mapping so the same file works on Linux as well as Docker Desktop (#196, thanks @ShahNewazKhan).

  • 2026-06-09 🔑 Clearer error when the Web UI is opened from another machine: Reaching the chat from a non-loopback client (another machine, a VM host, a phone on your LAN) without API_AUTH_KEY set returned 403 on every sensitive endpoint — sending a message, listing sessions, live status — but the chat only showed a generic "Failed to send message, please retry." The send path now surfaces the real reason — "Remote API access requires an API key. Add it in Settings, or run the backend on localhost for local-only use." — and the README's web-UI setup spells out the localhost-vs-LAN rule plus the three fixes (browse via localhost on the same machine; set API_AUTH_KEY and enter it once in Settings; or VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1 for Docker Desktop's host gateway) (#191, thanks @mafia23).

  • 2026-06-08 🔧 Gemini 3.x multi-turn tool-calling fix: This completes the Gemini 3.x thinking-model fix. The 6/05 round-trip (#176) only covered in-memory history, but the real agent loop replays history as OpenAI-format dicts where LangChain dropped the per-tool-call thought_signature before the request was built — so multi-turn tool calling still 400'd with missing thought_signature. It is now re-attached at the single _convert_input chokepoint both invoke and stream pass through (parallel calls, where only the first of N is signed, included) (#184, thanks @ngoanpv).

  • 2026-06-07 🐝 Live swarm status in the chat timeline: When the agent launches a multi-agent swarm (investment committee, quant desk, risk committee, …), the chat now renders an inline status card that streams each worker's state — waiting / running / done / failed / blocked / retrying — in real time, the same per-agent visibility the standalone swarm dashboard already had. Runtime events are bridged into the session SSE stream without changing the existing /swarm/runs API, and a finished card rehydrates from the final run_swarm result on reconnect or history replay (#188, thanks @BillDin). Preset routing also got sharper: an explicitly named preset (e.g. investment_committee, with or without underscores) now wins over keyword scoring, and the bare IV derivatives keyword no longer false-matches inside ordinary words like "given" (#189, thanks @BillDin).

  • 2026-06-06 ⚖️ Alpha compare — head-to-head across CLI, Web UI, REST & agent: A new alpha compare benches a hand-picked shortlist of Alpha Zoo alphas against each other on a universe and period, then ranks them by IC mean/std, IR, IC-positive ratio or sample count — each with its gap to the leader. Unlike a full-zoo bench it evaluates only the alphas you name (a new run_bench(only=…) subset filter), so comparing three alphas no longer scores all 191 in their zoo. One shared core powers every surface: vibe-trading alpha compare … --sort ir (CLI), a Compare view in the Alpha Zoo Web UI (tick alphas in the catalogue → one-click compare with a streamed ranking table), POST /alpha/compare + SSE (REST), and a read-only alpha_compare agent tool (47 tools now).

  • 2026-06-05 🇮🇳 Dhan + Shoonya connectors (India) — 10 brokers total: The connector-first trading layer adds Dhan and Shoonya for the Indian market (NSE/BSE equities + F&O), bringing the roster to ten brokers. Both are paper + read-only — like Longbridge, their APIs expose no runtime paper/live discriminator, so their place_order / cancel_order hard-refuse any non-paper config at the first line (the rule: a broker with no structural paper/live guard is capped at paper + read-only) (#181, closes #174). This cycle also fixes Gemini 2.5 / 3.x thinking models: their per-tool-call thoughtSignature now round-trips through the OpenAI-compatible path, so multi-turn function calling no longer fails with INVALID_ARGUMENT (#176, closes #170, thanks @mvanhorn & @jliu6789). Chinese docstrings landed on all 452 Alpha Zoo factors (#180, thanks @LeeCQiang), and a frontend test suite (197 vitest tests) plus backend auth / path-traversal / CORS security tests joined CI (#175, thanks @sambazhu).

  • 2026-06-04 🗃️ Opt-in local data cache for all 7 data sources: A new VIBE_TRADING_DATA_CACHE switch lets every backtest loader — tushare, okx, ccxt, akshare, mootdx, yfinance, futu — cache settled historical bars under ~/.vibe-trading/cache (user home, never the repo), so repeated and long-horizon / cross-market backtests skip the network and avoid provider rate limits. Off by default. Batch and connection loaders (yfinance, futu) skip the bulk download / FutuOpenD connection entirely on a full cache hit, a staleness guard never caches a range ending today (its last bar is still forming), and cached frames round-trip byte-identical to freshly fetched ones (#177, thanks @mvanhorn). A new contributor guide for AI / automation-assisted PRs also landed, mapping safe local checks and high-risk broker/MCP/credential surfaces (#173).

  • 2026-06-03 🧹 Community triage + trace correlation: Tool-call trace entries now carry the originating call_id, so a tool_result can be matched back to its tool_call when replaying a run trace — arg previews stay truncated to keep trace files small (#168, thanks @zwrong). Source comments no longer point at an internal-only docs path that external contributors couldn't find (#166, thanks @jaleelpersonal). Also clarified that the langchain-community resolver warning on install is a harmless leftover-package notice, not a failure (#167), and scoped Gemini 2.5/3.0 thoughtSignature round-tripping for function calls as a help wanted task with a full fix plan (#170, thanks @jliu6789).

  • 2026-06-02 🔌 Six new broker connectors (Tiger / Longbridge / Alpaca / OKX / Binance / Futu): The connector-first trading layer gains a direct-SDK transport alongside IBKR (local) and Robinhood (MCP). Each connector exposes read-only account / positions / orders / quote / history plus paper-account order placement — test your strategies across these broker paper accounts. Five of them (Tiger, Alpaca, OKX, Binance, Futu) also support bounded, mandate-gated order placement behind the same safety model as Robinhood: a user-committed mandate (symbol universe / order size / exposure / leverage / daily cap), a filesystem kill switch, a fail-closed pre-trade gate, and a full audit ledger. Longbridge is paper + read-only only (its API exposes no runtime paper/live discriminator). Every paper/live distinction is a structural per-broker guard — account-id format, host separation, demo flag, or trade environment. New trading_place_order / trading_cancel_order tools; HK and A-share asset classes added to the mandate universe. Experimental / use at your own risk.

  • 2026-06-01 🚀 v0.1.9 released (pip install -U vibe-trading-ai): Rolls up everything since 0.1.8. Connector-first broker profiles (IBKR local read-only TWS / IB Gateway + Robinhood Agentic Trading behind OAuth, a committed mandate, order guard, audit ledger, and instant halt). Research Goal runtime across CLI / REST / MCP / Web. A swarm pass — live reconcile + MCP keepalive, operator-configured worker MCP tools, a strict alpha-bench random control, and a new retry_run to relaunch failed/stale runs (36 MCP tools now). The agent/cli/ package refactor with a refreshed terminal UI, the mootdx no-token A-share loader, and a robustness pass across backtest / agent loop / sessions. --version now always matches the installed package, fixing the 0.1.8 drift (#156).

  • 2026-05-31 🔌 Connector-first broker architecture (IBKR + Robinhood): Trading access now starts from a selectable connector profile instead of separate broker/live entry points. vibe-trading connector list/use/check/account/positions/orders/quote/history and the MCP trading_* tools share the same selected profile, where paper/live is an attribute of the connector. IBKR can be used immediately through a local read-only TWS / IB Gateway profile, while the official IBKR remote MCP path is seeded as an OAuth mcp.read probe until stable read tool names are available. Robinhood Agentic Trading remains the bounded live MCP connector behind OAuth, a committed mandate, order guard, audit ledger, and instant halt.

  • 2026-05-30 🧰 Robustness pass — backtest, agent loop, sessions: LLM-generated signal engines now pass pre-flight interface validation before instantiation, catching circular self-imports, a missing generate(), non-defaulted __init__ args, and wrong return types with actionable JSON errors instead of raw tracebacks (#149); a follow-up routes source-level AST validation errors through the same clean JSON envelope. The agent loop no longer burns all 50 iterations into a failed status with no output — it mirrors the swarm worker's wrap-up nudge at 80% of the iteration budget and drops tool definitions on the last iteration to force a final text answer (#148), guarded to fire only mid-run so it never displaces research-goal context. Session message writes now flush + fsync each append so expensive AI responses survive a mid-write crash, and the read path skips corrupted JSONL lines (logging the first 200 chars for recovery) instead of 500-ing the whole /messages endpoint (#147). The Web composer also fixes IME Enter handling so a composition-confirming Enter no longer submits mid-word (#146).

  • 2026-05-29 🔐 Robinhood Agentic Trading support (opt-in, bounded autonomy): Adds support for Robinhood Agentic Trading (remote MCP, OAuth). Off and read-only by default; the agent acts only inside a user-committed mandate (symbols / order size / exposure / leverage / daily cap), with a filesystem-level instant kill switch, preemptive flatten, mandate auto-expiry, a full audit ledger, and a persistent autonomous runner. No custody, no venue — the broker holds funds and executes; we only relay intent. Experimental / use at your own risk.

  • 2026-05-28 🧪 Swarm safety + strict alpha gate + worker MCP: Swarm DAG blocks downstream tasks when upstream fails (#145). New run_bench_strict() adds a same-universe random control + OOS split to catch factors that just track market beta (#143, thanks @Soli22de). Swarm workers can call operator-configured external MCP servers, with trust boundary pinned (#142, thanks @shadowinlife).

  • 2026-05-27 📊 mootdx A-share data source + output polish: New mootdx loader speaks the native 通达信 TCP protocol for A-share OHLCV (no auth, no IP rate-limit, daily + intraday with 25-page walk-back pagination), slotting between tushare and akshare in the fallback chain (#107). CCXT loader now reads HTTP_PROXY/HTTPS_PROXY/ALL_PROXY so Binance/OKX public data works from restricted networks (#126, thanks @ruok808). Final-answer rendering also dropped the ugly full-width --- horizontal separators on CLI and Web: the system prompt now nudges the agent toward markdown tables and ## headings, the CLI renderer strips standalone HRs as defense-in-depth, and the chat bubble hides any <hr> that slips through (#139, thanks @sdwxm188).

  • 2026-05-26 ✅ Research Goal lifecycle closure: Goal mode now behaves like a real task runner: Web UI goal creation creates or binds the session and immediately sends the kickoff turn; active goals can be continued, edited, cancelled, and completed across Web/API/CLI/MCP; and the agent advances from the current goal snapshot (criteria, evidence, claims, open items) instead of only the original prompt. Covered-but-still-active goals now enter an audit/status update instead of stopping silently, with regression coverage across backend, CLI, MCP, and frontend events.

  • 2026-05-25 🧼 Cleaner chat UI + composer workflow: The Web UI keeps chat focused on the next action: upload, swarm, and research-goal modes now live behind the composer + menu instead of floating panels. Active context appears above the input as compact chips, and goal details expand inline only when needed. The UI also drops the old custom i18n layer in favor of direct English copy, gates Full Report cards to report-worthy runs, and hardens local dev startup/status reporting for reliable browser smoke tests.

  • 2026-05-24 🎯 Research Goal runtime: Added a session-scoped Research Goal layer across backend, CLI, API/MCP, SSE, and Web UI. Goals persist claims, acceptance criteria, evidence rows, budgets, and completion policy; agent tools can create goals and attach evidence; /goal gives the CLI a direct entry point; REST/MCP expose goal snapshots and evidence writes; SSE keeps chat clients fresh. Follow-up audit fixes locked down verified evidence, blocked live-trading risk tiers through agent tools, wired CLI-created goals into later turns, cleaned goal ledgers on session deletion, enabled replay-all, and fixed cross-session frontend races.

  • 2026-05-23 🖥️ Interactive CLI refresh: The terminal front door now opens with a larger Vibe-Trading banner, a cleaner prompt divider, prior-turn recap, post-run timing, and a Claude Code-style activity rail for live agent work. Tool calls, web/data fetches, shell-style actions, Markdown answers, and pipe tables render in a more readable transcript, while piped or non-TTY runs keep plain-text output for automation. Generated CLI screenshots are now treated as local artifacts instead of committed docs files, keeping the repository lighter.

  • 2026-05-22 🧭 Swarm recovery + MCP keepalive: Swarm status now reconciles from live task files on every read, so API/MCP/SSE/list views recover crashed or stale runs instead of showing permanent running snapshots. run_swarm sends MCP progress heartbeats while it polls, with a fixed first frame of swarm_started run_id= for clients that reconnect after transport drops; workers now heartbeat through LLM streaming, grounding fetches, and tool execution. The stale-run reaper uses per-run thresholds and derives terminal status from task states, SwarmTool no longer cancels a still-running team just because its wait budget elapsed, and MCP clients can call reap_stale_runs() for explicit cleanup. Today's DX pass also refreshed provider default models and aligned CI syntax checks with the new agent/cli/ package. 22 new regressions cover hydration, terminal recovery, stale reaping, keepalive cadence, env parsing, and heartbeat wiring; the full swarm/MCP suite is at 169 passed, 4 skipped.

  • 2026-05-21 🧱 CLI package refactor: agent/cli.py (3216 LOC) split into the agent/cli/ package — interactive front door, slash router, Rich components, plus a _legacy.py shim that preserves every subcommand and re-exports every public symbol so cli.cmd_* / cli._INIT_ENV_PATH / cli.Confirm keep working. New FastAPI middleware serves the SPA shell when a browser opens /runs/{id} or /correlation directly; same narrowing landed in the Vite dev proxy. Version unified via cli/_version.py (no more drift between --version and the banner), python -m cli restored via __main__.py, and the chat-gate narrowed so chat --help / chat extra reach legacy argparse instead of being swallowed by the REPL.

  • 2026-05-20 🔬 Hypothesis Registry CLI: Closes the CLI side of the Hypothesis Registry shipped backend-only on 2026-05-16. vibe-trading hypothesis list prints a Rich table or JSON (--status filter, --limit); show renders a detail panel including linked run cards; invalidate --note "..." flips status to rejected while preserving prior invalidation notes when --note is omitted. Honors the existing VIBE_TRADING_HYPOTHESES_PATH env override and adds a per-invocation --path. 22 new tests cover wiring, JSON output, status filter, limit, missing-id errors, and note persistence.

  • 2026-05-19 ✨ Live tool feedback + graceful cancel: Long-running tools (backtests, large PDFs, swarm workers) no longer look frozen. Each tool call now emits a 3-second heartbeat plus structured per-stage progress — run_backtest shows phase markers (validate / simulate / finalize), read_document ticks per page on PDF or per sheet on Excel, read_url marks fetch / parse. The CLI Rich Live dashboard renders a Unicode spinner, ASCII progress bar, ETA, and stacks up to 3 parallel tools keyed by name; the frontend chat ships a new ToolProgressIndicator with rAF-coalesced renders, ARIA role="status" + hidden native `` for screen readers, and a determinate ProgressRing SVG when total is known. First Ctrl+C during a CLI run now calls agent.cancel() for graceful exit (current step finishes, trace closes cleanly); a second within 2s force-quits. Reusable primitives extracted along the way: ProgressBar.tsx and lib/tools.ts (shared tool-name i18n).

  • 2026-05-18 🧹 Cleanup pass + three latent bug fixes: CompositeEngine no longer misroutes bare Chinese-futures codes like RB2410 to GlobalFuturesEngine — _is_china_futures moved into a shared _market_hooks module with a case-normalized product table and a non-CN exchange guard, plus 9 new regression cases. Session FTS5 indexes now persist timestamps so cross-session search can sort by date; the same path also fixed a re-upsert that was wall-clocking every session's started_at. The Vite dev-mode proxy gained the missing /alpha entry so the AlphaZoo page resolves on npm run dev. tests/test_e2e_harness_v2.py (real-LLM e2e suite) is now gated behind VIBE_TRADING_RUN_LIVE_E2E=1 so CI no longer changes shape based on env-key presence. Ruff per-file-ignores added for the factor zoo (3783 → 0 F401 noise), frontend tsconfig enables noUnusedLocals / noUnusedParameters as regression guards, and 76 unused vw = vwap(...) boilerplate lines were dropped from gtja191 alphas. Net -918 LOC.

  • 2026-05-17 🧬 Alpha Zoo v1 (0.1.8): 452 pre-built quant alphas across 4 zoos — qlib158 (Microsoft Qlib, Apache-2 attribution), alpha101 (Kakushadze 101 Formulaic Alphas, paper rewrite from arXiv:1601.00991), gtja191 (Guotai Junan 2014 short-horizon factor report), and academic (Fama-French 5 + Carhart price-based proxies). One-line CLI to bench any zoo on your universe: vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025. Ships with AST purity gate, lookahead-guard test, pytest-socket network kill-switch, per-zoo LICENSE.md, and a Developer Certificate of Origin (DCO) workflow for community PRs. Auto-rendered Alpha Library at vibetrading.wiki/alpha-library/ + research-lab post Which of the 191 GTJA alphas still work in 2026?.

  • 2026-05-16 🧪 Research spine update: Added a backend Hypothesis Registry with create_hypothesis, update_hypothesis, link_backtest, and search_hypotheses; external-content readers now attach warning-only security_warnings; and Shadow Account scanning now uses deterministic OHLCV feature evaluation instead of the old calendar-phase stub.

  • 2026-05-15 🪪 The run detail page now surfaces the Trust Layer run card alongside metrics and artifacts, completing the UI side of the run_card.json work landed on 2026-05-12. PersistentMemory.add() was also hardened on length, empty/whitespace-only names, and C0/C1 control bytes from the #108/#109/#110 triage (#112, thanks @Teerapat-Vatpitak).

  • 2026-05-14 🌐 the public wiki is now live at vibetrading.wiki with docs, tutorials, Research Lab, and Alpha Library sections deployed through Cloudflare Pages. Persistent memory is also inspectable from the CLI via vibe-trading memory list/show/search/forget (#102, thanks @Teerapat-Vatpitak), and memory tokenization/slugs now support Thai, Arabic, Hebrew, and Cyrillic text (#104).

  • 2026-05-13 🧭 Swarm runs now ground workers with fetched market data and cleaner persisted reports (#93, #84).

  • 2026-05-12 🧾 Backtests now emit run_card.json and run_card.md alongside artifacts for reproducible research runs.

  • 2026-05-11 🧭 Memory slugs, swarm accounting, and CLI preflight: Persistent memory now preserves CJK characters when generating file slugs, preventing silent filename collisions for Chinese/Japanese/Korean notes (#95, thanks @voidborne-d). Swarm run totals now prefer provider-reported token usage with the existing estimate fallback (#94, thanks @Teerapat-Vatpitak), and the CLI run UI gained a startup preflight check for common environment issues (#96, thanks @ykykj).

  • 2026-05-10 🧱 Regression guardrails + run metadata: Memory recall now treats underscores as token boundaries, so snake_case saved memories such as mcp_wiring_test match natural-language queries like "mcp wiring" (#87, thanks @hp083625). The MCP server has a subprocess smoke test covering initialize → tools/list → tools/call to guard the first-call deadlock path (#86), while low-risk hardening landed for Windows path-sensitive tests, API best-effort exception handling, backtest run_dir allowed-root validation, and SwarmRun provider/model metadata (#88, #90, #91, #92, thanks @Teerapat-Vatpitak).

  • 2026-05-09 🛡️ API path hardening + MCP server stability: API run/session routes now validate path IDs before lookup, rejecting malformed newline-containing parameters and pinning the behavior in the auth/security regression suite (#80, thanks @SJoon99). The MCP server now pre-warms the tool registry on the main thread before serving tools/call, avoiding a first-call deadlock in lazy tool discovery (#85, thanks @Teerapat-Vatpitak). The Vite dev proxy also honors VITE_API_URL for non-default backend targets (#82, thanks @voidborne-d).

  • 2026-05-08 🧾 Tushare statement fields in filters: A-share daily backtests can now request PIT-safe financial statement fields through fundamental_fields, so signal engines can screen on income_total_revenue, income_n_income, balancesheet_total_hldr_eqy_exc_min_int, fina_indicator_roe, and similar table-prefixed columns after their announcement/disclosure dates (#76, thanks @mrbob-git). Follow-up hardening makes explicit statement-field requests fail fast if Tushare enrichment cannot run, instead of silently falling back to raw price bars (#77).

  • 2026-05-07 📈 Tushare fundamentals + community triage: Added a point-in-time TushareFundamentalProvider contract for fundamental research workflows, with regression coverage for the project TUSHARE_TOKEN environment path (#74). Community triage also clarified that Vibe-Trading keeps rapid iteration focused on one UI language for now, avoids adding redundant search dependencies while DuckDuckGo-backed web_search is already bundled, and treats unofficial hosted deployments as untrusted places for API keys or data-source tokens.

  • 2026-05-06 🚀 v0.1.7 released (Release notes, pip install -U vibe-trading-ai): Security-boundary hardening is now published on PyPI and ClawHub, covering safer API/read/upload/file/URL/generated-code/shell-tool/Docker defaults while keeping localhost CLI/Web UI workflows low-friction. This cycle also includes Web UI Settings, correlation heatmap, OpenAI Codex OAuth, A-share pre-ST filtering, interactive CLI UX, swarm preset inspection, dividend analysis, dev workflow polish, and audited frontend build-dependency floors. Thanks to the 0.1.7 contributors and to lemi9090 (S2W) for coordinated security validation.

  • 2026-05-05 🛡️ Security boundary follow-up: Completes the remaining security-boundary hardening around explicit CORS origins, Settings credential indicators, web URL reading, and Shadow Account code generation, with regression tests added for each path. Normal localhost CLI/Web UI workflows stay the same; remote deployments should continue using API_AUTH_KEY and explicit trusted origins.

  • 2026-05-04 🖥️ Interactive CLI UX + CI cleanup: Interactive mode now has a live bottom status bar showing provider/model, session duration, last-run latency, and cumulative tool-call stats, plus prompt history navigation and cursor editing with arrow keys via prompt_toolkit (#69). The CLI still falls back to Rich prompts when prompt_toolkit or a TTY is unavailable. CI path expectations were also aligned with the hardened file-import sandbox and cross-platform /tmp resolution, returning main to green (bb67dc7).

  • 2026-05-03 🛡️ Security hardening patch: Tightens default API authentication for non-local deployments, protects sensitive run/session/swarm reads, restricts upload and local file-reading boundaries, gates shell-capable tools by entry point, validates generated strategy loading before import, and runs the Docker image as a non-root user with a localhost-only published port by default. Local CLI and localhost Web UI workflows remain low-friction; remote API/Web deployments should set API_AUTH_KEY.

  • 2026-05-02 🧭 Dividend analysis + sharper roadmap: Added the dividend-analysis skill for income stocks, payout sustainability, dividend growth, shareholder yield, ex-dividend mechanics, and yield-trap checks, pinned by bundled-skill regression tests. The public roadmap now focuses on upcoming work: Research Autopilot, Data Bridge, Options Lab, Portfolio Studio, Alpha Zoo, Research Delivery, Trust Layer, and Community sharing.

  • 2026-05-01 🔥 Correlation heatmap + OpenAI Codex OAuth + A-share pre-ST filter: New correlation dashboard/API computes rolling return correlations and renders an ECharts heatmap for portfolio and symbol analysis (#64). OpenAI Codex provider support now uses ChatGPT OAuth via vibe-trading provider login openai-codex, with Settings metadata and adapter regression tests (#65). Added and hardened the ashare-pre-st-filter skill for A-share ST/*ST risk screening, including Sina penalty relevance filtering so securities-account mentions do not inflate E2 counts (#63).

  • 2026-04-30 ⚙️ Web UI Settings + validation CLI hardening: New Settings page for LLM provider/model, base URL, reasoning effort, and data source credentials, backed by local/auth-protected settings APIs and data-driven provider metadata (#57). Also hardens python -m backtest.validation <run_dir> so missing, blank, malformed, non-existent, and non-directory inputs fail with clear operator-facing messages before validation starts (#60).

  • 2026-04-28 🚀 v0.1.6 released (pip install -U vibe-trading-ai): Fixes vibe-trading --swarm-presets returning empty after pip install / uv tool install (#55) — preset YAMLs now bundled inside the src.swarm package and pinned by a 6-test regression suite. Plus AKShare loader correctly routes ETFs (510300.SH) and forex (USDCNH) to the right endpoints with hardened registry fallback. Rolls up everything since v0.1.5: benchmark comparison panel, /upload streaming + size limits, Futu loader (HK + A-share), vnpy export skill, security hardening, frontend lazy loading (688KB → 262KB).

  • 2026-04-27 📊 Benchmark panel + upload safety: Backtest output now ships a benchmark comparison panel (ticker / benchmark return / excess return / information ratio) with yfinance-backed resolution for SPY, CSI 300, etc. (#48). Plus /upload streams the request body in 1 MB chunks and aborts past MAX_UPLOAD_SIZE, bounding memory under oversized/malformed clients (#53) — pinned by a 4-case regression suite.

  • 2026-04-22 🛡️ Hardening + new integrations: Path containment enforced in safe_path + journal/shadow tool sandbox, MANIFEST.in ships .env.example / tests / Docker files in sdist, route-level lazy loading shrinks frontend initial bundle 688KB → 262KB. Plus Futu data loader for HK & A-share equities (#47) and vnpy CtaTemplate export skill (#46).

  • 2026-04-21 🛡️ Workspace + docs: Relative run_dir normalized to active run dir (#43). README usage examples (#45).

  • 2026-04-20 🔌 Reasoning + Swarm: reasoning_content preserved across all ChatOpenAI paths — Kimi / DeepSeek / Qwen thinking work end-to-end (#39). Swarm streaming + clean Ctrl+C (#42).

  • 2026-04-19 📦 v0.1.5: Published to PyPI & ClawHub. python-multipart CVE floor bump, 5 new MCP tools wired (analyze_trade_journal + 4 shadow-account tools), pattern_recognition → pattern registry fix, Docker dep parity, SKILL manifest synced (22 MCP tools / 71 skills).

  • 2026-04-18 👥 Shadow Account: Extract your strategy rules from a broker journal → backtest the shadow across markets → 8-section HTML/PDF report showing exactly how much you leave on the table (rule violations, early exits, missed signals, counterfactual trades). 4 new tools, 1 skill, 32 tools total. Trade Journal + Shadow Account samples now live in the web UI welcome screen.

  • 2026-04-17 📊 Trade Journal Analyzer + Universal File Reader: Upload broker exports (同花顺/东财/富途/generic CSV) → auto trading profile (holding days, win rate, PnL ratio, drawdown) + 4 bias diagnostics (disposition effect, overtrading, chasing momentum, anchoring). read_document now dispatches PDF, Word, Excel, PowerPoint, images (OCR), and 40+ text formats behind one unified call.

  • 2026-04-16 🧠 Agent Harness: Persistent cross-session memory, FTS5 session search, self-evolving skills (full CRUD), 5-layer context compression, read/write tool batching. 27 tools, 107 new tests.

  • 2026-04-15 🤖 Z.ai + MiniMax: Z.ai provider (#35), MiniMax temperature fix + model update (#33). 13 providers.

  • 2026-04-14 🔧 MCP Stability: Fixed backtest tool Connection closed error on stdio transport (#32).

  • 2026-04-13 🌐 Cross-Market Composite Backtest: New CompositeEngine backtests mixed-market portfolios (e.g. A-shares + crypto) with shared capital pool and per-market rules. Also fixed swarm template variable fallback and frontend timeout.

  • 2026-04-12 🌍 Multi-Platform Export: /pine exports strategies to TradingView (Pine Script v6), TDX (通达信/同花顺/东方财富), and MetaTrader 5 (MQL5) in one command.

  • 2026-04-11 🛡️ Reliability & DX: vibe-trading init .env bootstrap (#19), preflight checks, runtime data-source fallback, hardened backtest engine. Multi-language README (#21).

  • 2026-04-10 📦 v0.1.4: Docker fix (#8), web_search MCP tool, 12 LLM providers, akshare/ccxt deps. Published to PyPI and ClawHub.

  • 2026-04-09 📊 Backtest Wave 2: ChinaFutures, GlobalFutures, Forex, Options v2 engines. Monte Carlo, Bootstrap CI, Walk-Forward validation.

  • 2026-04-08 🔧 Multi-market backtest with per-market rules, Pine Script v6 export, 5 data sources with auto-fallback.


✨ Key Features

text
<h3>🐝 Multi-Agent Trading Teams</h3>
  
    • Investment, quant, crypto, and risk teams
    • Streaming progress and persisted reports
    • Workers grounded with fetched market data
  




  
  <h3>📊 Cross-Market Data & Backtesting</h3>
  
    • A / HK / US / Canada / India / Korea equities, crypto, futures, and forex
    • Data fallback and composite backtests
    • PIT data, validation, and run cards
  


  
  <h3>👥 Shadow Account</h3>
  
    • Broker-journal behavior diagnostics
    • Rule-based Shadow Account comparisons
    • Exportable audit reports and strategy code

💡 What Is Vibe-Trading?

Vibe-Trading is an open-source research workspace for turning finance questions into runnable analysis. It connects natural-language prompts to market-data loaders, strategy generation, backtest engines, reports, exports, and persistent research memory.

It is designed for research, simulation, and backtesting — and, when you choose, autonomous trading through a broker you authorize yourself (e.g. Robinhood Agentic Trading). It holds no funds and never trades outside the limits you set, and you can halt it instantly.


✨ What You Can Do

Task Output
Ask a trading question Market research with tools, data, documents, and reusable session context.
Backtest a strategy idea Strategy code, metrics, benchmark context, validation artifacts, and run cards.
Review your own trades Broker-journal parsing, behavior diagnostics, rule extraction, and Shadow Account comparisons.
Read documents & charts Parse PDF / DOCX / XLSX / PPTX / images with pluggable OCR (read_document), and read chart screenshots semantically with a vision model (analyze_image).
Read institutional filings & fund books SEC 13F manager books with quarter-over-quarter position diffs, ETF constituents across markets, event-contract implied probability, and arXiv / OpenAlex factor extraction — all read-only, on free public sources.
Improve repeated research Persistent memory and editable skills turn useful routines into reusable workflows.
Run analyst teams Multi-agent research reviews for investment, quant, crypto, macro, and risk workflows.
Put research into IM channels Run the same session runtime through WebSocket, Telegram, Slack, Discord, Matrix, WhatsApp, Signal, QQ/NapCat, WeChat/WeCom, Feishu/Lark, DingTalk, Teams, email, and Mochat with CLI, REST, and Web UI controls.
Ship usable artifacts Reports, TradingView Pine Script, TDX, MetaTrader 5, MCP tools, and later research sessions.
Bench a pre-built alpha zoo One-line IC + alive/reversed/dead categorisation across 462 alphas (Qlib 158 + Kakushadze 101 + GTJA 191 + academic + PIT-safe fundamental) on your universe.
Spot correlation regimes An edge-density + hysteresis timeline on the /correlation surface showing when markets fuse into one bloc — descriptive risk context, not a signal.

⚡ Quick Example

bash
pip install vibe-trading-ai

# Natural-language research
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024, summarize return and drawdown, then export the report"

# Bench a pre-built alpha zoo (one line)
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20
bash
vibe-trading --upload trades_export.csv
vibe-trading run -p "Analyze my trading behavior, extract my shadow strategy, and compare it with my actual trades"

👥 Shadow Account

Shadow Account starts from your own trading records instead of a generic strategy template.

Upload a broker export, let the agent summarize your behavior, then compare the actual trading path with a rule-based shadow strategy.

Step Agent output
1. Read your journal Parses broker exports from 同花顺, 东方财富, 富途, and generic CSV formats.
2. Profile your behavior Holding days, win rate, PnL ratio, drawdown, disposition effect, overtrading, momentum chasing, and anchoring checks.
3. Extract your rules Turns recurring entries/exits into an explicit strategy profile instead of a hand-wavy summary.
4. Run the shadow Backtests the extracted rules and highlights rule breaks, early exits, missed signals, and alternative trade paths.
5. Deliver the report Produces an HTML/PDF report that can be inspected, archived, or refined in a later session.
bash
vibe-trading --upload trades_export.csv
vibe-trading run -p "Analyze my trading behavior, extract my shadow strategy, and compare it with my actual trades"

🧪 Research Workflow

Most runs follow the same evidence path: route the request, load the right market context, execute tools, validate outputs, and keep the artifacts inspectable.

Layer What happens
Plan Selects the relevant finance skills, tools, data sources, and swarm preset when useful.
Ground Pulls A-shares, HK/US/Canada equities, crypto, futures, forex, documents, or web context through the available loaders.
Execute Generates testable strategy code, runs tools, and uses the matching backtest engine or analysis workflow.
Validate Adds metrics, benchmark comparison, Monte Carlo, Bootstrap, Walk-Forward, run cards, and warnings where applicable.
Deliver Returns reports, artifacts, tool traces, and exports for TradingView, TDX, MetaTrader 5, MCP clients, or later sessions.

📡 Data Sources & Smart Fallback

One get_market_data call, 23 free market-data sources (plus the optional QVeris premium marketplace). Set source: "auto" — the loader picks by symbol, then walks a per-market chain ordered by IP-ban risk: never-banned public sources first, throttled / key-gated ones last. Zero config, no single point of failure.

Source Markets Auth Role
tencent · mootdx A-share + HK none never IP-banned (mootdx = 通达信 TCP)
eastmoney A / US / HK none OHLCV + deep fundamentals & flow tools (throttled)
baostock · akshare A (+ US/HK/futures/macro/fx) none free fallbacks
tushare A / HK / futures / fund / macro token richest A-share
yahoo US / HK / Canada none direct chart/quotes/options; TSX .TO / TSXV .V
sina · stooq US none K-line to 1984 · EOD CSV
yfinance US / HK / Canada none wrapper; TSX .TO / TSXV .V pass through
longbridge US / HK App Key + App Secret + Access Token optional historical OHLCV source; install the optional SDK
finnhub · alphavantage · tiingo · fmp US key optional providers
qveris global multi-asset key · credits premium marketplace — 63+ providers via one key (explicit-only, never in auto fallback)
okx · ccxt · binance crypto none OKX + 100+ exchanges + Binance historical / USD-M perps
futu HK / A OpenD optional local FutuOpenD
mt5 forex / metals MT5 terminal MetaTrader 5 (Exness-style) forex / metal bars, 1m–1D
tickerall forex / metals key + account (read-only) same broker MT5 feed, hosted — no local terminal, any OS (explicit-only, never in auto fallback)
pykrx Korea (KRX: KOSPI/KOSDAQ) none daily KOSPI / KOSDAQ bars for .KS / .KQ (optional krx extra)
india_broker India (NSE/BSE) broker login read-only Shoonya / Dhan bars for .NS / .BO (fallback-chain tail)
local any none your own CSV / Parquet / DuckDB via local: prefix

Fallback chains (by IP-ban risk):

  • A-share → tencent · mootdx · eastmoney · baostock · akshare · tushare · local
  • US → yahoo · stooq · sina · eastmoney · yfinance · tiingo · fmp · finnhub · alphavantage · longbridge · akshare · local
  • HK → tencent · eastmoney · yahoo · futu · akshare · yfinance · tushare · longbridge · local
  • India (NSE/BSE) → yahoo · yfinance · india_broker · local
  • Korea (KOSPI/KOSDAQ) → pykrx · yahoo · yfinance · local
  • Crypto → okx · ccxt · binance · yfinance · local
  • Forex / metals → mt5 · yfinance · akshare · local  ·  (futures / fund / macro → tushare/akshare → local)

Using Longbridge explicitly

Longbridge is an optional US/HK historical OHLCV loader. Install its SDK with:

bash
pip install "vibe-trading-ai[longbridge]"

Configure the three credentials in .env:

dotenv
LONGBRIDGE_APP_KEY=...
LONGBRIDGE_APP_SECRET=...
LONGBRIDGE_ACCESS_TOKEN=...

For a backtest, set source in config.json:

json
{
  "codes": ["QQQ.US"],
  "start_date": "2025-01-01",
  "end_date": "2025-01-10",
  "interval": "1D",
  "source": "longbridge"
}

In an Agent conversation, ask explicitly: "Use Longbridge to fetch QQQ.US historical data." The explicit source request is separate from source: "auto"; auto keeps the normal per-market fallback chain.

Beyond OHLCV, 22 read-only data tools reach into fundamentals & flow — fund flow, dragon-tiger, northbound, margin, block trades, shareholder count, lockup, sector, research reports, news, SEC filings, financial statements, options chains, stock profile, market screening, symbol search, macro, iwencai, institutional holdings (13F), ETF look-through, prediction markets, and research papers — all exposed over MCP. An explicit local: symbol never silently falls back to a network source.

💎 Optional premium data — QVeris

Data: free routing or premium, your choice. Free stays the default: 23 built-in sources with ban-risk fallback, no key, no cost. Premium via QVeris adds 10,000+ capabilities (per QVeris) across 63+ providers for options Greeks, premium fundamentals, China/HK/global data, macro, crypto, news, and filings; failed calls are not charged. Enable it in Settings -> QVeris or vibe-trading data mode paid.

QVeris disclosure: signing up through the Vibe-Trading referral link gets you +1,000 bonus credits and supports the project.


🔩 Detailed Capabilities

Detailed inventories are folded below to keep the main README scannable. Open them when you want to inspect the available building blocks.

Finance Skill Library 90 skills across 9 categories

  • 📊 90 specialized finance skills organized into 9 categories
  • 🌐 Complete coverage from traditional markets to crypto & DeFi
  • 🔬 Comprehensive capabilities spanning data sourcing to quantitative research
Category Skills Examples
Data Source 10 data-routing, tushare, yfinance, okx-market, akshare, mootdx, ccxt, eastmoney, sec-edgar, qveris
Strategy 19 strategy-generate, cross-market-strategy, technical-basic, candlestick, ichimoku, elliott-wave, smc, multi-factor, ml-strategy
Analysis 23 factor-research, correlation-regime, macro-analysis, global-macro, valuation-model, investor-lenses, credit-analysis, dividend-analysis
Asset Class 9 options-strategy, options-advanced, convertible-bond, etf-analysis, asset-allocation, sector-rotation
Crypto 7 perp-funding-basis, liquidation-heatmap, stablecoin-flow, defi-yield, onchain-analysis
Flow 8 hk-connect-flow, us-etf-flow, edgar-sec-filings, financial-statement, adr-hshare
Tool 10 backtest-diagnose, report-generate, pine-script, doc-reader, web-reader, vnpy-export, trade-journal
Research 3 alpha-zoo, strategy-dev-manager, strategy-discovery
Risk Analysis 1 ashare-pre-st-filter

Custom Data Source register your own historical OHLCV loader

Need a market or vendor we don't ship a loader for? Add your own historical-bar
loader and select it with source="<name>". The steps edit package source, so
run from a clone (pip install -e .).

  1. Write the loader — create agent/backtest/loaders/<name>_loader.py with a
    class that satisfies DataLoaderProtocol (duck-typed, no base class needed)
    and is tagged with @register:

    python
    import pandas as pd
    from backtest.loaders.registry import register
    
    @register
    class DataLoader:
        name = "mysource"            # the value you pass as source=
        markets = {"us_equity"}      # a_share/us_equity/hk_equity/crypto/futures/fund/macro/forex
        requires_auth = False
    
        def is_available(self) -> bool:
            return True              # token present? network reachable?
    
        def fetch(self, codes, start_date, end_date, *, interval="1D", fields=None):
            # return {symbol: DataFrame indexed by trade_date,
            #         columns: open, high, low, close, volume}
            ...
  2. Register the module so @register fires — add
    "backtest.loaders.<name>_loader" to _loader_modules in
    agent/backtest/loaders/registry.py.

  3. Allow the name through config validation — add "mysource" to
    _VALID_SOURCES in agent/backtest/runner.py.

  4. (Optional) slot it into a market's FALLBACK_CHAINS in registry.py so
    source="auto" can reach it.

  5. Use it — source="mysource" in a backtest config, or via the CLI / agent.

Real-time ticks / order-book depth are out of scope for loaders — the
loader layer is point-in-time historical bars only. Live market data flows
through the broker connectors instead: okx / binance / ccxt for crypto,
futu / tiger for equities.

Broker Connectors 13 brokers — read + paper, bounded-live where supported

Connector-first profiles. Most do read + paper-account order placement — IBKR is read-only, Robinhood is live-only (no paper account), and Trading 212 refuses order placement entirely, paper included; live order placement is bounded by a user-defined mandate (symbol allowlist, order-size / exposure caps, daily trade cap, instant kill switch) and never holds funds — the broker executes. Order-placing tools stay off MCP (agent + CLI only). Research / backtest paths are structurally barred from any live endpoint.

Broker Markets Capabilities
IBKR global local TWS / Gateway, read-only
Robinhood US Agentic MCP (desktop OAuth) — read + bounded live
Tiger US / HK / A read + paper + bounded live
Alpaca US read + paper + bounded live (+ TAP credential-isolation mode)
OKX · Binance crypto read + paper + bounded live
Futu HK / US / A read + paper + bounded live
eToro global read + paper + bounded live (Public API; demo keys reach only /demo paths, plus copy-trading workflows)
MetaTrader 5 forex / CFD read + paper + bounded live (Exness-style; demo ⇔ paper identity guard)
Longbridge · Dhan · Shoonya US / HK · India (NSE/BSE) read + paper only — no runtime paper/live discriminator, so live order placement is hard-refused
Trading 212 UK / EU fully read-only — place_order / cancel_order hard-refuse even paper

Paper-vs-live is a structural per-broker runtime guard (account-id format, host separation, demo flag, or trade environment), never a config flag the agent can flip. A broker exposing no such discriminator is capped at paper + read-only.

Preset Trading Teams 30 swarm presets

  • 🏢 30 ready-to-use agent teams
  • ⚡ Pre-configured finance workflows
  • 🎯 Investment, trading & risk management presets
Preset Workflow
investment_committee Bull/bear debate → risk review → PM final call
global_equities_desk A-share + HK/US + crypto researcher → global strategist
crypto_trading_desk Funding/basis + liquidation + flow → risk manager
earnings_research_desk Fundamental + revision + options → earnings strategist
macro_rates_fx_desk Rates + FX + commodity → macro PM
quant_strategy_desk Screening + factor research → backtest → risk audit
technical_analysis_panel Classic TA + Ichimoku + harmonic + Elliott + SMC → consensus
risk_committee Drawdown + tail risk + regime review → sign-off
global_allocation_committee A-shares + crypto + HK/US → cross-market allocation

Plus 20+ additional specialist presets — run vibe-trading --swarm-presets to explore all.
Bring your own: drop preset YAMLs into ~/.vibe-trading/swarm/presets/ — they are listed
alongside the bundled roster (same-name files override it, like user skills) and survive upgrades.

Alpha Zoo 462 pre-built quant alphas across 5 families

  • 🧬 462 cross-sectional alphas, lookahead-banned at the operator layer
  • 📈 IC + IR + alive/reversed/dead categorisation in one CLI command
  • 🔬 AST purity gate + 300-row lookahead sentinel test + pytest-socket network kill-switch
  • 📦 Apache-2 attribution for Qlib; per-zoo LICENSE.md declaring formulas as mathematical content
  • 🤝 Developer Certificate of Origin (DCO) sign-off workflow for community PRs
Zoo Count Source License
qlib158 154 Microsoft Qlib Alpha158 (Apache-2.0, commit-pinned) Apache-2.0
alpha101 101 Kakushadze (2015), "101 Formulaic Alphas", arXiv:1601.00991 Formulas are mathematical content
gtja191 191 Guotai Junan (2014), "191 Short-period Trading Alpha Factors" Formulas are mathematical content
academic 12 Fama-French 5 + Carhart momentum + Jegadeesh reversal + George-Hwang 52-week-high + Amihud illiquidity + Harvey-Siddique skew + Frazzini-Pedersen betting-against-beta + correlation-rewiring stability (price-based proxies) Public academic literature
fundamental 4 PIT-safe SEC company facts — earnings yield, ROE, gross profitability, asset growth (filed-date anchored) Public financial data

Run vibe-trading alpha list to browse, vibe-trading alpha show for formulas + source, vibe-trading alpha bench --zoo X --universe Y --period Z to score a whole zoo, and vibe-trading alpha compare --all to rank zoos side by side.

Backtest Engines 10 engines + options portfolio, cross-market composite

Engine Market Notes
ChinaA A-share T+1, price limits, pre-ST filter
GlobalEquity US / HK / Canada same-session trading; market-specific lots, ticks, and costs
IndiaEquity India (NSE/BSE) T+1, circuit bands, config-driven STT / stamp / SEBI / GST cost stack
KoreaEquity Korea (KRX: KOSPI/KOSDAQ) long-only, ±30% band judged at execution time on the unified tick grid, 2026 0.20% transaction tax
VietnamEquity Vietnam (HOSE) long-only, T+2 settlement hold, ±7% band on the 10/50/100-VND tick grid, 100-share lots, 0.1% sell-side tax
Crypto crypto spot / USD-M perps funding settlements, execution/mark split
ChinaFutures · GlobalFutures futures margin, contract multipliers
Forex FX / metals via the mt5 loader (local terminal) or the hosted tickerall loader (no terminal, any OS)
Composite cross-market one shared capital pool across markets (source="auto")
options_portfolio options multi-leg, Greeks, payoff/scenario

Intraday bars: 1m / 5m / 15m / 30m / 1H / 4H / 1D. 15 metrics + benchmark comparison, 5 portfolio optimizers (equal-volatility / risk-parity / mean-variance / max-diversification / turnover-aware), and 3 validation tools (Monte Carlo / Bootstrap / Walk-Forward).

Quant Library 265 tested functions across 19 modules, callable from every transport

src/quantlib holds one tested implementation of each piece of finance math the
agent needs. Skills import these rather than carrying formulas inside
markdown code blocks — if you find a pricing formula living in a SKILL.md,
that is a bug, not a pattern.

Module What it covers
options Black-Scholes price + greeks, implied-volatility inversion
fixedincome Bond math, Nelson-Siegel / Svensson curve fitting
credit Altman Z-score, Merton / KMV distance-to-default
timeseries Stationarity, cointegration, GARCH, bootstrap
risk · var_backtest VaR / CVaR / EVT and their backtests
attribution Brinson-Fachler decomposition
performance · fundmath TWR / MWR / Modified Dietz; XIRR / MOIC / DPI / TVPI
factormodel · eventstudy Factor regressions, event studies
multipletesting · crossvalidation Deflated significance, purged CV
impact Market-impact models

The read-only quantlib_call tool reaches all of it through one contract, so the
finance math works on the CLI, the Web UI, the REST API and MCP — including
deployments where bash is gated off. It is
structurally not a shell — module allowlist, __all__-only dispatch, export_*
refused. Econometrics needs the stats extra
(pip install "vibe-trading-ai[stats]"); those functions lazy-import and tell
you which one is missing.

Valuation & Institutional Research DCF, comps, three-statement, and six research commands

A valuation engine that refuses to invent its own inputs. The one rule in
contracts.py: a missing input makes a model NOT RUNNABLE and is never
silently defaulted
— every default in a valuation model is an opinion wearing
a constant's clothes.

Model Behaviour worth knowing
run_dcf FCFF bridge, WACC build, mid-year discounting, net-debt bridge, WACC×g sensitivity grid. Dual terminal value: each method is cross-checked against the other's implied multiple and implied g
run_comps EV bridge, LTM + calendar-year calendarisation, multiple matrix. A peer with a non-positive denominator is excluded and reported, never averaged in as a negative multiple
threestatement Linked projection with a hard balance assertion, an explicit revolver plug, and an iterated interest↔debt circularity that must converge or raise

Artifacts are input-hashed and versioned, with xlsx / pptx export.

Six slash commands drive the workflows — /comps /dcf /attrib /memo
/earnings /screen — each carrying a step skeleton and an
arithmetic-consistent worked example (the Brinson decomposition sums exactly to
active return; the earnings bridge sums exactly to the EPS delta). The
investor-lenses skill stacks named-investor reasoning frameworks on top as
analysis overlays: each lens is an operating procedure — priority signals,
disqualifying conditions, typical misuse — not a biography, and names no tool.

Beyond bars, src/entities ingests irregular dated cash flows (NAVs, capital
calls, coupons) and cashflow_performance reports XIRR / MOIC / DPI / TVPI /
TWR / Modified Dietz / MWR over them. This path is deliberately parallel to the
bar engines so a nav column can never reach one and get priced as a close.

Governance & Audit Trail answer "what methodology produced that number?"

Every run writes a manifest hashing the prompt, the skill contents, the tool
registry and the package versions, so a number produced last month can be traced
to the exact methodology that produced it.

The audit ledger chains each record to its predecessor's hash and fsyncs, so
editing or deleting a record is detectable — and an edit that recomputes its own
hash is still caught one record later via prev_hash_mismatch. Timestamps are
always caller-supplied; no module here calls datetime.now().

Trace redaction is sink-aware: tool-call arguments and the live audit ledger
use a fail-closed sink where content stays redacted, while the tool-result
sink releases it and pattern-scrubs its string leaves. env is never released
in either.

🎬 Demo


🚀 Quick Start

One-line install (PyPI)

bash
pip install vibe-trading-ai

Then run a first research task:

bash
vibe-trading init
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024 and summarize return and drawdown"

Upgrading from an older version? 0.1.10 moved to LangChain 1.x. If imports break after pip install -U vibe-trading-ai over a pre-0.1.10 install (e.g. langgraph fails to import), recreate the venv or run pip install --force-reinstall vibe-trading-ai. A fresh install is unaffected.

Package name vs commands: The PyPI package is vibe-trading-ai. Once installed, you get three commands:

Command Purpose
vibe-trading Interactive CLI / TUI
vibe-trading serve Launch FastAPI web server
vibe-trading-mcp Start MCP server (for Claude Desktop, OpenClaw, Cursor, etc.)
bash
vibe-trading init              # interactive .env setup
vibe-trading                   # launch CLI
vibe-trading serve --port 8899 # launch web UI
vibe-trading-mcp               # start MCP server (stdio)

Or choose a path

Path Best for Time
A. Docker Try it now, zero local setup 2 min
B. Local install Development, full CLI access 5 min
C. MCP plugin Plug into your existing agent 3 min
D. ClawHub One command, no cloning 1 min

Prerequisites

  • An LLM API key from any supported provider — or run locally with Ollama (no key needed)
  • Python 3.11+ for Path B
  • Docker for Path A
  • OpenAI Codex can also be used with ChatGPT OAuth: set LANGCHAIN_PROVIDER=openai-codex, then run vibe-trading provider login openai-codex. This does not use OPENAI_API_KEY.
  • GitHub Copilot can be used with an active Copilot subscription instead of a separately billed LLM API key. See GitHub Copilot SDK provider.

Supported LLM providers: OpenRouter, Requesty, OpenAI, Anthropic (native Messages API), DeepSeek, Gemini, Groq, DashScope/Qwen, Zhipu, Moonshot/Kimi, MiniMax, SiliconFlow (CN + Global), Xiaomi MIMO, Novita AI, iFlytek Spark, Z.ai, NVIDIA NIM, ModelScope, GitHub Copilot, Ollama (local). When no *_BASE_URL is set, each provider falls back to its canonical endpoint, so just a key is enough. See .env.example for config.

Tip: All markets work without any API keys thanks to automatic fallback. yfinance/Yahoo (HK/US/Canada), OKX (crypto), mootdx (A-shares, TCP-direct, no IP throttle), and AKShare (A-shares, US, HK, futures, forex) are all free. Tushare token is optional — mootdx is the preferred no-token A-share fallback, with AKShare as a broader backup.

GitHub Copilot SDK provider

The official GitHub Copilot SDK ships as an optional extra, so install it alongside Vibe-Trading with pip install "vibe-trading-ai[copilot]"; installing the Copilot CLI is optional. Authenticate with any one of these supported methods:

bash
gh auth login                         # use GitHub CLI credentials
# or run `copilot` and sign in         # stores credentials in the OS keychain
# or export COPILOT_GITHUB_TOKEN=gho_xxx

Then configure agent/.env:

dotenv
LANGCHAIN_PROVIDER=copilot
LANGCHAIN_MODEL_NAME=claude-sonnet-5
# COPILOT_GITHUB_TOKEN=gho_xxx         # optional; recommended for Docker/CI

Start Vibe-Trading normally. Its preflight reports whether the SDK can authenticate:

bash
vibe-trading

Authentication priority is COPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKEN, stored Copilot CLI credentials, then gh credentials. Vibe-Trading does not copy or persist SDK credentials. Host keychain credentials are not automatically available inside Docker, so containers should receive COPILOT_GITHUB_TOKEN.

Path A: Docker (zero setup)

bash
git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
cp agent/.env.example agent/.env
# Edit agent/.env — uncomment your LLM provider and set API key
docker compose up --build

Open http://localhost:8899. Backend + frontend in one container.

[!NOTE]
OpenAI Codex OAuth with Docker: the browser login needs a terminal so you
can paste the callback URL. Run it through Compose, which allocates an
interactive terminal automatically:

bash
docker compose exec vibe-trading vibe-trading provider login openai-codex

If you use docker exec directly, pass -it before the container name.

Docker publishes the backend on 127.0.0.1:8899 by default and runs the app as a non-root container user. If you intentionally expose the API beyond your own machine, set a strong API_AUTH_KEY and send Authorization: Bearer <key> from clients.

[!NOTE]
Using Ollama with Docker: the container reaches a host-side Ollama via host.docker.internal, not localhost (inside the container localhost is the container itself). docker-compose.yml defaults OLLAMA_BASE_URL to http://host.docker.internal:11434; export OLLAMA_BASE_URL (or set it in a top-level .env) to point elsewhere. This relies on the host-gateway mapping in extra_hosts, which requires Docker Engine ≥ 20.10 / Compose v2 (provided automatically on Docker Desktop).

Your data survives updates: persistent memory, the cross-session search index, user-created skills, shadow accounts, broker connector config, web sessions, backtest runs, swarm history, and uploads all live in named Docker volumes, so git pull && docker compose up --build keeps them. They are deleted only by docker compose down -v.

Path B: Local install

bash
git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
python -m venv .venv

# Activate
source .venv/bin/activate          # Linux / macOS
# .venv\Scripts\activate.bat       # Windows CMD
# .venv\Scripts\Activate.ps1       # Windows PowerShell

pip install -e .
cp agent/.env.example agent/.env   # Edit — set your LLM provider API key
vibe-trading                       # Launch interactive TUI

[!NOTE]
On Windows: cp is a PowerShell alias for Copy-Item, so the snippets above work as-is in PowerShell. CMD has no cp — use copy agent\.env.example agent\.env instead (this applies to the Docker snippet above too). If PowerShell refuses to run Activate.ps1, run Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned first; it applies to that shell session only.

Start web UI (optional)

bash
# Terminal 1: API server
vibe-trading serve --port 8899

# Terminal 2: Frontend dev server
cd frontend && npm install && npm run dev  # requires Node >= 22.22

Open http://localhost:5899. The frontend proxies API calls to localhost:8899.

Production mode (single server):

bash
cd frontend && npm run build && cd ..
vibe-trading serve --port 8899     # FastAPI serves dist/ as static files

[!NOTE]
vibe-trading serve binds 0.0.0.0 and is loopback-only by default: opening the UI on the same machine (http://localhost:8899) works with zero config. If you browse from another machine, a VM host, or a phone on your LAN, sensitive endpoints return 403 and the chat shows "Remote API access requires an API key" — set a strong API_AUTH_KEY in agent/.env, restart, and enter the same key once in Settings. (Docker Desktop's host gateway: set VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1 with the default 127.0.0.1 port bind.)

Path C: MCP plugin

See MCP Plugin section below.

Path D: ClawHub (one command)

bash
npx clawhub@latest install vibe-trading --force

The skill + MCP config is downloaded into your agent's skills directory. See ClawHub install for details.


🧠 Environment Variables

Copy agent/.env.example to agent/.env and uncomment the provider block you want. Each provider needs 3-4 variables:

Variable Required Description
LANGCHAIN_PROVIDER Yes Provider name (openrouter, deepseek, groq, ollama, etc.)
_API_KEY Yes* API key (OPENROUTER_API_KEY, DEEPSEEK_API_KEY, etc.)
_BASE_URL Yes API endpoint URL
LANGCHAIN_MODEL_NAME Yes Model name (e.g. deepseek-v4-pro)
LANGCHAIN_REASONING_EFFORT No Reasoning effort (none, low, medium, high, or max)
LANGCHAIN_USE_RESPONSES_API No Responses transport override: literal true uses /v1/responses when the endpoint supports it; native adapters retain their own transport; all other values use Chat Completions
TUSHARE_TOKEN No Tushare Pro token for A-share data (falls back to AKShare)
TIMEOUT_SECONDS No LLM call timeout, default 120s
API_AUTH_KEY Recommended for network deployments Bearer token required when the API is reachable from non-local clients
VIBE_TRADING_ENABLE_SHELL_TOOLS No Explicit opt-in for shell-capable tools in remote API/MCP-SSE style deployments
VIBE_TRADING_ALLOWED_FILE_ROOTS No Extra comma-separated roots for document and broker-journal imports
VIBE_TRADING_ALLOWED_RUN_ROOTS No Extra comma-separated roots for generated-code run directories
VIBE_TW_STOCK_DB No Path to a Taiwan-market SQLite snapshot; the read-only taiwan_stock_data tool registers only when it is schema-valid
VIBE_TRADING_EXTRA_CORS_ORIGINS No Comma-separated origins added to the loopback CORS defaults (CORS_ORIGINS replaces them instead)
CONTENT_FILTER_WARNING_THRESHOLD No Content-filter warning ratio threshold (default 0.05 = 5%). When the ratio of LLM responses blocked by content moderation exceeds this, the run card warns you to switch providers.

* Ollama does not require an API key. OpenAI Codex uses ChatGPT OAuth and stores tokens via oauth-cli-kit, not in agent/.env. GitHub Copilot authentication is handled by the official SDK.

Free data (no key needed): A-shares via AKShare, HK/US/Canada equities via Yahoo/yfinance, crypto via OKX, 100+ crypto exchanges via CCXT. The system automatically selects the best available source for each market.

Vibe-Trading is a tool-heavy agent — skills, backtests, memory, and swarms all flow through tool calls. Model choice directly decides whether the agent uses its tools or fabricates answers from training data.

Tier Examples When to use
Best anthropic/claude-opus-4.7, anthropic/claude-sonnet-4.6, openai/gpt-5.5-pro, google/gemini-3.5-flash Complex swarms (3+ agents), long research sessions, paper-grade analysis
Sweet spot (default) deepseek-v4-pro, deepseek/deepseek-v4-pro, x-ai/grok-4.20, z-ai/glm-5.1, moonshotai/kimi-k2.6, qwen/qwen3-max-thinking Daily driver — reliable tool-calling at ~1/10 the cost
Avoid for agent use *-nano, *-flash-lite, *-coder-next, small / distilled variants Tool-calling is unreliable — the agent will appear to "answer from memory" instead of loading skills or running backtests

The default agent/.env.example ships with DeepSeek official API + deepseek-v4-pro; OpenRouter users can use deepseek/deepseek-v4-pro.


🖥 CLI Reference

The interactive TUI (vibe-trading) now uses a terminal-native transcript: a startup banner, prompt rule, previous-turn recap, live activity rail, Markdown/table rendering, and run timing all stay in the CLI. Non-interactive invocations such as vibe-trading run, pipes, and --json remain script-friendly.

bash
vibe-trading               # interactive TUI
vibe-trading run -p "..."  # single run
vibe-trading serve         # API server
vibe-trading alpha list    # browse 462 pre-built alphas; show / bench / compare / export-manifest sub-commands available
vibe-trading playbook list # five scheduled-research templates; show / create sub-commands available
vibe-trading channels status --local  # inspect IM channel config and install hints
vibe-trading provider doctor  # print redacted provider/proxy/package diagnostics

Slash commands inside TUI

Command Description
/help Show keyboard shortcuts and command list
/model Switch LLM provider and model
/memory Show / manage persistent memory
/history Browse and resume prior sessions
/goal Start / inspect a finance research goal
/search Full-text search across all sessions
/swarm Multi-agent presets (committee / quant / risk)
/skill List / load / unload skills
/show Show prior run by id
/clear Clear current conversation
/pine Export current strategy as Pine Script
/journal Analyze trade journal CSV
/shadow Train / view shadow account
/export Export current session (md / json)
/debug Toggle debug panel (token usage / latency)
/comps Comparable company analysis (peer multiples -> implied range)
/dcf Discounted cash flow valuation with sensitivity grid
/attrib Brinson-Fachler attribution (allocation vs selection)
/memo Investment memo — thesis, variant view, scenarios, kill criteria
/earnings Earnings review — surprise bridge from revenue to EPS
/screen Systematic idea screen — hypothesis, funnel, survivor queue
/playbook Scheduled research templates (list / run / schedule)
/connector Trading connector profiles (status / start / halt)
/halt Kill switch — halt ALL live trading now
/resume Clear the kill switch (re-enable live trading)
/data Data routing mode
/quit Exit (also: q, exit, :q)

Single run & flags

bash
vibe-trading run -p "Backtest BTC-USDT MACD strategy, last 30 days"
vibe-trading run -p "Analyze AAPL momentum" --json
vibe-trading run -f strategy.txt
echo "Backtest 000001.SZ RSI" | vibe-trading run
bash
vibe-trading -p "your prompt"
vibe-trading --skills
vibe-trading --swarm-presets
vibe-trading --swarm-run investment_committee '{"topic":"BTC outlook"}'
vibe-trading --list
vibe-trading --show <run_id>
vibe-trading --code <run_id>
vibe-trading --pine <run_id>           # Export indicators (TradingView + TDX + MT5)
vibe-trading --trace <run_id>
vibe-trading --continue <run_id> "refine the strategy"
vibe-trading --upload report.pdf
bash
vibe-trading alpha list --zoo gtja191 --limit 10
vibe-trading alpha show gtja191_171
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20

IM channels

IM channel adapters connect outside chat apps to the same session runtime used by the Web UI and CLI. Configure enabled adapters under channels in ~/.vibe-trading/agent.json; SDK-backed adapters are optional extras, and missing SDKs report recovery hints instead of crashing the runtime.

For long-running channel tasks, tune the central assistant-reply wait budget with replyTimeoutS (seconds, default 600):

json
{
  "channels": {
    "replyTimeoutS": 1800,
    "feishu": {
      "enabled": true
    }
  }
}

This controls how long the shared channel runtime waits for the agent session to produce an assistant message; adapter HTTP/socket timeouts remain adapter-specific.

bash
vibe-trading channels status --local   # inspect config and missing SDK hints without API
vibe-trading channels status           # query the running API runtime
vibe-trading channels start            # start enabled adapters through the API
vibe-trading channels stop             # stop enabled adapters through the API
vibe-trading channels login weixin     # run an adapter login hook when needed
vibe-trading channels pairing --channel telegram list

The built-in adapters cover websocket, telegram, slack, discord, matrix, whatsapp, signal, qq, napcat, weixin, wecom, feishu, dingtalk, msteams, email, and mochat. Use narrow extras such as pip install "vibe-trading-ai[telegram]", or install the full channel set with pip install "vibe-trading-ai[channels]".

In-chat slash commands (channel-agnostic, work in all 16 adapters):

Command Description
/new Reset the current session — the next message starts a fresh conversation
/reset Alias for /new
/newsession Alias for /new
/pairing list Show pending sender-pairing requests (operators only)

Commands are case-insensitive and must be sent as the entire message (e.g. hello /new is treated as a regular message, not a reset).

/pairing is operator-gated. In-chat pairing-control commands are rejected unless the sender is listed as an operator — set channels.operators (cross-channel authority) or a channel section's own operators list in your channels config. With no operators configured, in-chat /pairing is refused (fail-closed) and pairing is managed only through the authenticated CLI (vibe-trading channels pairing …) and the auth-gated REST endpoint. This prevents any allow-listed group member from taking over pairing across channels.


💡 Examples

Strategy & Backtesting

bash
# Moving average crossover on US equities
vibe-trading run -p "Backtest a 20/50-day moving average crossover on AAPL for the past year, show Sharpe ratio and max drawdown"

# RSI mean-reversion on crypto
vibe-trading run -p "Test RSI(14) mean-reversion on BTC-USDT: buy below 30, sell above 70, last 6 months"

# Multi-factor strategy on A-shares
vibe-trading run -p "Backtest a momentum + value + quality multi-factor strategy on CSI 300 constituents over 2 years"

# After backtesting, export to TradingView / TDX / MetaTrader 5
vibe-trading --pine <run_id>

Bench a pre-built alpha zoo (one line):

bash
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20

Browse the catalogue and inspect a single alpha:

bash
vibe-trading alpha list --zoo gtja191 --theme reversal --limit 10
vibe-trading alpha show gtja191_171

Compose a multi-factor signal from the zoo (Python):

python
from src.skills.multi_factor.zoo_signal_engine import ZooSignalEngine
engine = ZooSignalEngine.from_zoo(["gtja191_171", "gtja191_111", "gtja191_163"])
panel = ...  # your wide OHLCV panel
signal = engine.compute_signal(panel)

Market Research

bash
# Equity deep-dive
vibe-trading run -p "Research NVDA: earnings trend, analyst consensus, option flow, and key risks for next quarter"

# Macro analysis
vibe-trading run -p "Analyze the current Fed rate path, USD strength, and impact on EM equities and gold"

# Crypto on-chain
vibe-trading run -p "Deep dive BTC on-chain: whale flows, exchange balances, miner activity, and funding rates"

Swarm Workflows

bash
# Bull/bear debate on a stock
vibe-trading --swarm-run investment_committee '{"topic": "Is TSLA a buy at current levels?"}'

# Quant strategy from screening to backtest
vibe-trading --swarm-run quant_strategy_desk '{"universe": "S&P 500", "horizon": "3 months"}'

# Crypto desk: funding + liquidation + flow → risk manager
vibe-trading --swarm-run crypto_trading_desk '{"asset": "ETH-USDT", "timeframe": "1w"}'

# Global macro portfolio allocation
vibe-trading --swarm-run macro_rates_fx_desk '{"focus": "Fed pivot impact on EM bonds"}'

Cross-Session Memory

bash
# Save your preferences once
vibe-trading run -p "Remember: I prefer RSI-based strategies, max 10% drawdown, hold period 5–20 days"

# The agent recalls them in future sessions automatically
vibe-trading run -p "Build a crypto strategy that fits my risk profile"

Upload & Analyze Documents

bash
# Analyze a broker export or earnings report
vibe-trading --upload trades_export.csv
vibe-trading run -p "Profile my trading behavior and identify any biases"

vibe-trading --upload NVDA_Q1_earnings.pdf
vibe-trading run -p "Summarize the key risks and beats/misses from this earnings report"

🌐 API Server

bash
vibe-trading serve --port 8899
Method Endpoint Description
GET /runs List runs
GET /runs/{run_id} Run details
GET /runs/{run_id}/pine Multi-platform indicator export
POST /sessions Create session
POST /sessions/{id}/messages Send message
GET /sessions/{id}/events SSE event stream
POST /upload Upload PDF/file
GET /swarm/presets List swarm presets
POST /swarm/runs Start swarm run
GET /swarm/runs/{id}/events Swarm SSE stream
GET /alpha/list List alphas (filter by zoo/theme/universe)
GET /alpha/{alpha_id} Alpha metadata + source code
POST /alpha/bench Start a bench job (returns job_id)
GET /alpha/bench/{job_id}/stream SSE progress stream
GET /settings/llm Read Web UI LLM settings
PUT /settings/llm Update local LLM settings
GET /settings/data-sources Read local data source settings
PUT /settings/data-sources Update local data source settings
GET /channels/status Read IM channel runtime and adapter status
POST /channels/start Start configured IM channel adapters
POST /channels/stop Stop configured IM channel adapters
POST /channels/pairing/command Run a sender-pairing command against the shared store
POST /scheduled-runs Create a scheduled research job (interval-ms or cron)
GET /scheduled-runs List scheduled jobs
DELETE /scheduled-runs/{job_id} Cancel a scheduled job
GET /scheduled-runs/playbooks List the research templates
GET /scheduled-runs/playbooks/{slug} Show one template, with its variables
POST /scheduled-runs/playbooks/{slug} Schedule a job from a template
POST /sessions/{id}/cancel Stop the session's in-flight run (recorded as cancelled, not failed)
POST /sessions/{id}/title/auto Summarize the first exchange into a session title (never overwrites a manual rename)
GET /correlation/regime Correlation edge-density regime timeline
GET /agents.json · POST /v1/query OpenBB Workspace bridge — registered only with the optional openbb extra; /v1/query requires auth

Interactive docs are available at http://localhost:8899/docs in keyless
loopback development mode. When API_AUTH_KEY is configured, /docs and
/redoc are disabled; authenticated tooling can fetch /openapi.json with an
Authorization: Bearer <key> header.

Security defaults

For localhost development, vibe-trading serve keeps the browser workflow simple. For any non-local client, sensitive API endpoints require API_AUTH_KEY; use Authorization: Bearer <key> for JSON/upload requests. Browser EventSource streams are handled by the Web UI after you enter the same key once in Settings.

Shell-capable process tools (bash / background_run / cancel_background) are enabled only for the interactive local CLI. Every other surface — the HTTP/SSE API and the MCP server on all transports (stdio included) — keeps them off unless you explicitly opt in with VIBE_TRADING_ENABLE_SHELL_TOOLS=1 (or pass --enable-shell-tools to vibe-trading-mcp). Transport type never implicitly grants shell access. cancel_background stops only the tracked task ID returned by background_run; broad Python process-name termination is refused because it could terminate Vibe-Trading itself. Document and journal readers are limited to upload/import roots by default; place files under ~/.vibe-trading/uploads, ~/.vibe-trading/runs, ./uploads, ./data (or the legacy agent/uploads / agent/runs), or add a dedicated directory through VIBE_TRADING_ALLOWED_FILE_ROOTS. Sessions, runs, swarm runs, uploads, and the sessions.db index live under ~/.vibe-trading (relocatable via the VIBE_TRADING_HOME shell environment variable); pre-existing history is moved there automatically on first run.

Generated backtest code runs as a local Python subprocess and can make network requests through the configured market-data loaders. Its environment is intentionally narrow: the runner keeps OS/Python basics, proxy/certificate settings, VIBE_TRADING_ALLOWED_RUN_ROOTS, and read-only market-data keys such as TUSHARE_TOKEN, FMP_API_KEY, FRED_API_KEY, and VIBE_TRADING_IWENCAI_KEY. It does not pass LLM provider keys, API auth tokens, shell-tool switches, broker trading secrets, or live/advisory toggles to generated strategy code by default.

Web UI Settings

The Web UI Settings page lets local users update the LLM provider/model, base URL, generation parameters, reasoning effort, and optional market data credentials such as the Tushare token. Settings are persisted to agent/.env; provider defaults are loaded from agent/src/providers/llm_providers.json.

Settings reads are side-effect free: GET /settings/llm and GET /settings/data-sources never create agent/.env, and they only return project-relative paths. Settings reads and writes can expose credential state or update credentials/runtime environment, so they require API_AUTH_KEY when configured. If API_AUTH_KEY is unset for dev mode, settings access is accepted only from loopback clients.

The same Settings page includes an IM Channels panel for local operators. It polls /channels/status, shows configured/enabled/available/loaded/running states, surfaces adapter recovery hints, and can start or stop the configured channel runtime without going back to the terminal.

Scheduled research

Run a research prompt or backtest on a repeating schedule — from the Scheduled page in the web UI or over REST. The background executor is off by default — start the server with VIBE_TRADING_ENABLE_SCHEDULER=1 to enable it:

bash
VIBE_TRADING_ENABLE_SCHEDULER=1 vibe-trading serve --port 8899

Then create jobs over REST. schedule is either a bare integer (interval in milliseconds) or a 5-field cron expression (min hour dom mon dow; each field takes *, */n, numbers, comma lists, or low-high ranges like 1-5). Cron runs on the wall clock of the job's optional timezone (an IANA key), so the cadence holds across DST transitions — a spring-forward gap time is skipped, and a fall-back ambiguous time runs once, at its first occurrence. Jobs without a timezone keep plain UTC semantics:

bash
# every 6 hours (cron)
curl -X POST http://localhost:8899/scheduled-runs \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Scan CSI300 for momentum breakouts and backtest the top 5","schedule":"0 */6 * * *"}'

# weekdays at 23:30 Auckland wall time — DST-proof
curl -X POST http://localhost:8899/scheduled-runs \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Pre-open scan of NZX names","schedule":"30 23 * * 1-5","timezone":"Pacific/Auckland"}'

# list / cancel
curl http://localhost:8899/scheduled-runs
curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>

Each fire runs the prompt through a fresh agent session (optional backtest parameters go in config), and jobs persist under ~/.vibe-trading/ so they survive restarts. Without the flag, the /scheduled-runs endpoints still record jobs but nothing fires. Add -H "Authorization: Bearer <key>" to each call when API_AUTH_KEY is set.

Five ready-to-schedule templates ship with the scheduler — premarket-brief, earnings-season-tracker, portfolio-checkup, a-share-money-flow, institutional-holdings-diff. Each states the data a run needs in plain language instead of naming tools, so a template keeps working as the tool surface grows, and each is required to name a missing input rather than fill it from memory. Reach them from the CLI, over REST, or with /playbook in the TUI:

bash
vibe-trading playbook list                     # the five templates
vibe-trading playbook show premarket-brief     # body, declared variables, suggested cadence
vibe-trading playbook create premarket-brief \
  --var home_market="US equities" --var watchlist="AAPL, MSFT, NVDA" \
  --timezone America/New_York

curl http://localhost:8899/scheduled-runs/playbooks
curl http://localhost:8899/scheduled-runs/playbooks/premarket-brief
curl -X POST http://localhost:8899/scheduled-runs/playbooks/premarket-brief \
  -H "Content-Type: application/json" \
  -d '{"variables":{"home_market":"US equities","watchlist":"AAPL, MSFT, NVDA"}}'

Posting {} schedules a template on its own suggested cadence with its declared defaults. The rendered body becomes the job prompt verbatim, and an undeclared variable is rejected rather than silently ignored.


🔌 MCP Plugin

Vibe-Trading exposes 74 MCP tools for any MCP-compatible client. Runs as a stdio subprocess — no server setup needed. Core research tools work with zero API keys for HK/US/crypto; trading connector tools use the selected connector profile, and run_swarm needs an LLM key.

Environment variables: the client spawns the server itself, so a shell export never reaches it — set them in the client's env block. Generated backtest code is sandboxed to the allowed run roots, so writing results into a workspace of your own needs VIBE_TRADING_ALLOWED_RUN_ROOTS:

json
{
  "mcpServers": {
    "vibe-trading": {
      "command": "vibe-trading-mcp",
      "env": { "VIBE_TRADING_ALLOWED_RUN_ROOTS": "C:\\Users\\me\\research" }
    }
  }
}

Claude Desktop

Add to claude_desktop_config.json:

json
{
  "mcpServers": {
    "vibe-trading": {
      "command": "vibe-trading-mcp"
    }
  }
}

OpenClaw

Add to ~/.openclaw/config.yaml:

yaml
skills:
  - name: vibe-trading
    command: vibe-trading-mcp

For a first research-only smoke test, confirm tool discovery and run a market
data or backtest request before selecting a trading connector profile. Core
research tools can run without broker credentials; connector-backed trading_*
tools should be used only after you intentionally select and check a connector
profile. run_swarm requires an LLM key.

Cursor / Windsurf / other MCP clients

bash
vibe-trading-mcp                   # stdio (default)
vibe-trading-mcp --transport http  # Streamable HTTP (current MCP spec default) at http://127.0.0.1:8900/mcp
vibe-trading-mcp --transport sse   # legacy SSE (deprecated) for older clients

For HTTP clients (QwenPaw, and any client that negotiates by POSTing an
InitializeRequest), use --transport http and point the client at the single
/mcp endpoint — e.g. http://127.0.0.1:8900/mcp. Do not point an HTTP
client at /sse; that path belongs to the deprecated two-endpoint SSE transport
and will return 405 Method Not Allowed on POST. Override the bind address
with --host / --port.

MCP tools exposed (74): list_skills, load_skill, start_research_goal, get_research_goal, add_goal_evidence, update_research_goal_status, backtest, factor_analysis, alpha_zoo, alpha_bench, analyze_options, analyze_options_payoff, pattern_recognition, read_url, read_document, web_search, write_file, read_file, list_strategies, query_strategies, get_strategy_evidence, refresh_strategy_evidence, trading_connections, trading_select_connection, trading_check, trading_account, trading_positions, trading_orders, trading_quote, trading_history, list_swarm_presets, run_swarm, get_market_data, get_fund_flow, get_dragon_tiger, get_northbound_flow, get_margin_trading, get_block_trades, get_shareholder_count, get_lockup_expiry, get_sector_info, get_research_reports, get_stock_news, get_sec_filings, get_financial_statements, get_options_chain, get_stock_profile, screen_market, search_symbol, get_macro_series, iwencai_search, qveris_search, qveris_inspect, qveris_execute, get_institutional_holdings, etf_holdings, prediction_market, research_papers, get_swarm_status, get_run_result, list_runs, reap_stale_runs, retry_run, analyze_trade_journal, extract_shadow_strategy, run_shadow_backtest, render_shadow_report, scan_shadow_signals, quantlib_call, cashflow_performance, orderbook_depth, sentiment, technical_indicators, get_fundamentals.

SWARM external MCP tools

run_swarm workers can call operator-approved tools from external MCP servers. Configure the server-side allowlist in VIBE_TRADING_SWARM_AGENT_CONFIG, ~/.vibe-trading/swarm-agent.json, or the fallback ~/.vibe-trading/agent.json; then list remote tools in a swarm preset using the local MCP wrapper name, such as mcp_internal_kb_search. Caller-provided variables stay template data only and cannot inject MCP URLs, commands, environment variables, or allowlist overrides.

Install from ClawHub (one command)

bash
npx clawhub@latest install vibe-trading --force

--force is required because the skill references external APIs, which triggers VirusTotal's automated scan. The code is fully open-source and safe to inspect.

This downloads the skill + MCP config into your agent's skills directory. No cloning needed.

Browse on ClawHub: clawhub.ai/skills/vibe-trading

OpenSpace — self-evolving skills

All 90 finance skills are published on open-space.cloud and evolve autonomously through OpenSpace's self-evolution engine.

To use with OpenSpace, add both MCP servers to your agent config:

json
{
  "mcpServers": {
    "openspace": {
      "command": "openspace-mcp",
      "toolTimeout": 600,
      "env": {
        "OPENSPACE_HOST_SKILL_DIRS": "/path/to/vibe-trading/agent/src/skills",
        "OPENSPACE_WORKSPACE": "/path/to/OpenSpace"
      }
    },
    "vibe-trading": {
      "command": "vibe-trading-mcp"
    }
  }
}

OpenSpace will auto-discover all 90 skills, enabling auto-fix, auto-improve, and community sharing. Search for Vibe-Trading skills via search_skills("finance backtest") in any OpenSpace-connected agent.


MetaTrader 5 (Exness and other MT5 brokers)

Connects to a locally running MT5 terminal through the official MetaTrader5 package (Windows only):

bash
pip install "vibe-trading-ai[mt5]"

Configure ~/.vibe-trading/mt5.json (create it yourself; chmod 600 where supported):

json
{
  "login": 12345678,
  "password": "...",
  "server": "Exness-MT5Trial8",
  "symbol_suffix": "m",
  "max_order_volume": 1.0,
  "max_order_notional_usd": 10000
}

Then:

bash
vibe-trading connector use mt5-paper-sdk
vibe-trading connector check
vibe-trading connector account
vibe-trading connector quote EURUSD
vibe-trading connector history EURUSD
Profile Account Orders
mt5-paper-sdk demo read-only
mt5-live-sdk-readonly real read-only
mt5-paper-trade demo direct placement (connector per-order size guards apply)
mt5-live-trade real mandate + kill-switch gated

Safety boundary: "paper" means the broker's own demo account, re-verified on every call — the terminal reports account_info().trade_mode and the logged-in account number, so pointing a paper profile at a real-money account (or the reverse) is refused outright. MT5 sizes orders in lots (1 lot EURUSD = 100,000 EUR); the live mandate gate prices lots through the connector's USD hook, and the connector's own max_order_volume / max_order_notional_usd guards apply on demo as well as live, failing closed when a notional cannot be priced. On hedging accounts (the Exness default), note that an opposing order opens a hedge position — close by ticket instead (pass the position ticket to trading_cancel_order) so the fill is pinned to that position and can only reduce exposure. Rollback / halt path: the kill switch blocks new live orders, while cancellation stays available and is written to the audit log. Mandate limits are denominated in USD; a non-USD account currency is margined by the broker in its own currency.

The mt5 market-data loader — the head of the forex fallback chain — shares this same mt5.json. With no such file it attaches read-only to the most recently used terminal that is already logged in.


🔌 eToro Public API Connector

Connects to eToro's Public API for demo and real accounts via API key pair (x-api-key + x-user-key). Demo and real environments are separated structurally: demo keys only reach /demo API paths.

Configure ~/.vibe-trading/etoro.json (create it yourself; chmod 600 where supported):

json
{
  "api_key": "YOUR_PUBLIC_API_KEY",
  "user_key": "YOUR_USER_KEY",
  "profile": "paper"
}

Alternatively set ETORO_API_KEY and ETORO_USER_KEY in ~/.vibe-trading/.env.

Then:

bash
vibe-trading connector use etoro-paper-sdk
vibe-trading connector check
vibe-trading connector account
vibe-trading connector positions
vibe-trading connector quote BTC
Profile Account Orders
etoro-paper-sdk demo read-only
etoro-live-sdk-readonly real read-only
etoro-paper-trade demo direct placement on demo paths
etoro-live-trade real mandate + kill-switch gated

Symbol lookup uses eToro's internalSymbolFull search (e.g. BTC → instrument id 100000). Use the etoro_search_instruments agent tool to resolve tickers before trading.

Safety boundary: demo and real are path-separated and key-bound (paper_guard: path_separated_key_bound). Live risk-increasing actions (open and copy-start/increase) require an authorized mandate, a clear halt state, and a verified USD account for copy-notional enforcement. Validated full and partial position closes, open-order cancellation, and copy close remain available when halted and are audit-logged. Cancelling a pending close or editing position stops is paper-only: the live path fails closed because those operations can increase exposure or transfer extra margin without enough API data to quantify the incremental USD risk. Copy amounts are denominated in the eToro account currency, and every copy start/adjust requires a caller-supplied 1-35 character URL-safe reference id for polling. eToro-specific write tools (etoro_close_position, etoro_copy_*, etc.) are agent tools only — not exposed via MCP or CLI. Rollback: revert the connector commit(s) or disable profiles; halt blocks new live risk-increasing actions.


🔌 Loading Tools from External MCP Servers (MCP Client Mode)

This is the opposite direction from the MCP Plugin above.
The MCP Plugin lets other agents call Vibe-Trading tools.
This section lets the built-in Vibe-Trading agent call tools from your external MCP servers.

Quick start

Create ~/.vibe-trading/agent.json:

json
{
  "mcpServers": {
    "my-server": {
      "command": "uvx",
      "args": ["my-mcp-server"]
    }
  }
}

Run any CLI command — tools from ordinary external servers are automatically injected into the agent's registry after local tools:

bash
vibe-trading run "use my-server to do X"

Official IBKR MCP read-only probe

Vibe-Trading can connect directly to Interactive Brokers' official remote MCP
endpoint in read-only mode. Add this to ~/.vibe-trading/agent.json:

json
{
  "mcpServers": {
    "ibkr": {
      "type": "streamableHttp",
      "url": "https://api.ibkr.com/v1/api/mcp",
      "auth": {
        "type": "oauth",
        "scopes": ["mcp.read"],
        "clientName": "Vibe-Trading",
        "cacheDir": "~/.vibe-trading/live/ibkr/oauth"
      },
      "enabledTools": ["*"]
    }
  }
}

Then start the browser OAuth flow:

bash
vibe-trading connector authorize ibkr-live-official-mcp-readonly

The wildcard is accepted only for IBKR's mcp.read probe. Authorizing this
profile confirms access to IBKR's official read scope; generic trading_account
and trading_positions calls stay disabled until IBKR publishes stable read
tool names that Vibe-Trading can map safely. A config that adds mcp.write must
pin an explicit tool allowlist and still passes through the live order guard.

If IBKR issues a pre-registered OAuth client, add clientId and clientSecret
inside auth.

Trading connectors: fastest path

For users who cannot wait for IBKR OAuth client approval, connect to a local
TWS or IB Gateway session. Credentials stay inside IBKR's desktop app; Vibe-
Trading only connects to 127.0.0.1 and exposes it as a connector profile.

Install the optional SDK:

bash
pip install "vibe-trading-ai[ibkr]"

Open TWS paper trading or IB Gateway paper, enable API socket clients, then run:

bash
vibe-trading connector list
vibe-trading connector use ibkr-paper-local
vibe-trading connector configure ibkr-paper-local --yes
vibe-trading connector check
vibe-trading connector account
vibe-trading connector positions
vibe-trading connector orders
vibe-trading connector quote AAPL
vibe-trading connector history AAPL --duration "30 D" --bar-size "1 day"

Default local ports:

App Paper Live read-only
TWS 7497 7496
IB Gateway 4002 4001

The agent exposes connector-scoped tools named trading_connections,
trading_select_connection, trading_check, trading_account,
trading_positions, trading_orders, trading_quote, and trading_history.
Live-broker raw MCP tools are not registered directly as mcp__*.
No IBKR order-placement tool is registered.

🔐 TAP Mode — full credential isolation & human-approved writes

Opt-in, off by default. If the TAP_* variables below are unset, the
connector behaves exactly as before (direct broker SDK) — nothing changes.

TAP (Tool Authorization Protocol) is a credential
proxy: the agent never holds the raw broker API secret, and consequential writes
are gated on human approval. With TAP mode on, every Alpaca call — order
placement, cancel, and the reads (account/positions/orders/quote/bars) — is sent
to the TAP proxy's /forward endpoint instead of the broker SDK; TAP injects the
real key server-side, then forwards upstream.

  • The agent process holds no Alpaca key at all — and doesn't even need
    alpaca-py — because the whole egress goes through TAP. The secret is
    referenced by name (<CREDENTIAL:alpaca.key_id>) and TAP substitutes it.
  • Writes block on human approval. An order or cancel cannot reach the broker
    without a human approving it; even a prompt-injected "buy now" is held, and
    denying it means it never reaches Alpaca. Orders carry a deterministic
    client_order_id, so an approval-race retry is deduplicated rather than
    double-placed.
  • Reads auto-approve. Account/positions/orders/quote/bars are GETs that TAP
    forwards without a human step — this is credential isolation (no key in the
    process), not a gate, so there's ~zero added friction.
  • allowed_hosts on the TAP credential pins where the key may be sent, so a
    tampered target is rejected (403) before injection.

Enable it:

  1. In the TAP dashboard, create a multi-secret credential named alpaca
    holding your Alpaca key pair as fields key_id and secret_key, assigned to
    your agent, with allowed hosts paper-api.alpaca.markets (or the live host
    api.alpaca.markets) and data.alpaca.markets (the market-data host used
    by quote/bars). Use separate TAP credentials for paper and live (e.g.
    alpaca-paper / alpaca-live, selected via TAP_ALPACA_CREDENTIAL), each
    with allowed_hosts pinned to its own API host — TAP then structurally
    refuses to send the paper key to the live host and vice versa, keeping the
    paper/live separation crisp end to end.
  2. Add to agent/.env:
Variable Required Description
TAP_PROXY_URL Yes TAP proxy base URL (e.g. https://proxy.tap.human.tech)
TAP_AGENT_KEY Yes Your TAP agent API key (secret)
TAP_ALPACA_CREDENTIAL No TAP credential name for Alpaca (default alpaca)
TAP_APPROVAL_TIMEOUT No Seconds to wait for a human decision (default 300)

When a write is placed, approve or deny it in your TAP channel (Telegram /
dashboard). An approved order/cancel is forwarded to Alpaca; a denied or
timed-out one returns an error and is never sent.

Known limitation — approval race. If the human approves right at the
TAP_APPROVAL_TIMEOUT boundary, TAP may forward the order while the poll has
already given up: the gate then reports an error even though the order reached
the broker, and the max_trades_per_day counter under-counts by one. The
deterministic client_order_id keeps a retry from double-placing that order;
if you rely on a tight trades-per-day cap, check open orders after a TAP
timeout error before retrying.

Scope: covers Alpaca order placement, cancel, and all five reads — the
full connector egress, so the process holds no key on any path. HMAC-signed
brokers (Binance/OKX) are follow-ups (client-side signing doesn't fit pure egress
injection). The hooks are additive — they live inside the Alpaca connector and
leave the live mandate gate unchanged.

Config reference

Field Type Default Description
type string inferred for stdio; required for HTTP Omit for stdio, or set to sse / streamableHttp for URL-based servers.
command string required for stdio Executable to spawn for stdio servers. Invalid for sse / streamableHttp servers.
args array [] Command-line arguments for stdio servers only.
env object {} Extra environment variables merged into the subprocess env for stdio servers only.
url string required for sse / streamableHttp Remote SSE / streamable HTTP endpoint URL. Not used for stdio servers.
headers object {} Extra HTTP headers for sse / streamableHttp servers only.
toolTimeout number 30 Per-tool call timeout in seconds
initTimeout number unset (max(toolTimeout, 30)) MCP initialize / OAuth authorization timeout in seconds. Use this for slow browser authorization without widening ordinary tool calls.
enabledTools array ["*"] Tool allowlist. Use ["*"] to expose all tools from the server

Config file location: ~/.vibe-trading/agent.json (JSON or YAML).

For URL-based transports, type is required. The agent no longer guesses between SSE and streamable HTTP from the URL suffix.

Per-session overrides (API)

When creating a session via the API you can pass mcpServers inside session.config to extend or override the global config for that session only:

json
{
  "config": {
    "mcpServers": {
      "research-server": {
        "command": "uvx",
        "args": ["research-mcp"],
        "enabledTools": ["search", "fetch"]
      }
    }
  }
}

Tool naming

Ordinary remote tools are exposed with stable names: mcp_<server>_<tool>.
Live-broker MCP servers stay behind the trading_* connector surface.

If two server names produce the same ASCII-safe local prefix (e.g. foo-bar and foo_bar both become foo_bar), a deterministic hash suffix is appended at the server-segment level so names remain unique. The operator receives a warning:

text
WARNING: Configured MCP server 'foo-bar' collides with another server after local name
normalization. Using local tool prefix 'mcp_foo_bar_<hash>_<tool>' to keep generated
tool names unique. Rename the server in agent config if you want a different prefix.

v1 limits

Limit Detail
Transport stdio, SSE, and streamable HTTP
Execution serial only — MCP tools never enter the parallel readonly path
Surfaces tools only (resources and prompts excluded in v1)
Hot reload not supported — restart the process to pick up config changes
Swarm path MCP tools are not available inside Swarm worker registries in v1

📁 Project Structure

Click to expand

text
/* Detailed source-code truncated for AI context efficiency. */

🏛 Ecosystem

Vibe-Trading is part of the HKUDS agent ecosystem:

| NanoBot
Ultra-Lightweight Personal AI Assistant | AI-Trader
Agent-Native Signal & Copy Trading Platform | CLI-Anything
Making All Software Agent-Native | OpenSpace
Self-Evolving AI Agent Skills | ClawTeam
Agent Swarm Intelligence |

| --- | --- | --- | --- | --- |


🗺 Roadmap

We ship in phases. Items move to Issues when work begins.

Phase Feature Status
Trust Layer Reproducible run cards are emitted and shown in Run Detail; v1 adds tool traces and citations v0 Shipped
Hypothesis Registry Durable research hypotheses with lifecycle status, data sources, skills, run-card links, and invalidation notes Backend MVP Shipped
Research Autopilot Manual-first research loop: hypothesis → deterministic backtest → evidence report Phase 1–3 Shipped
Data Bridge Bring-your-own data: local CSV/Parquet/SQL connectors with schema mapping Local loader Shipped
Options Lab Vol surface, Greeks dashboard, payoff/scenario explorer Analytic payoff/scenario tool Shipped; surface/dashboard Planned
Portfolio Studio Risk x-ray, constraints, turnover-aware optimizer, rebalance notes Turnover-aware optimizer Shipped 0.1.11; rest Planned
Alpha Zoo 462 pre-built alphas (Qlib 158 + Kakushadze 101 + GTJA 191 + academic + fundamental) with one-line bench, agent integration, and Web UI Shipped 0.1.8, extended through 0.1.12
Strategy Development Manager Register papers / broker research as factors & strategies with a persistent store + automated IC/Sharpe decay lifecycle Shipped 0.1.11
Correlation Regime Edge-density + hysteresis regime timeline layered on /correlation — spot when markets fuse into one bloc Shipped 0.1.12
Research Delivery Scheduled briefs and live research sessions through Slack / Telegram / email-style IM channels Scheduler + IM Runtime Shipped
Community Shareable skills, presets, and strategy cards Exploring

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Good first issues are tagged with good first issue — pick one and get started.

Want to contribute something bigger? Check the Roadmap above and open an issue to discuss before starting.


Contributors

Thanks to everyone who has contributed to Vibe-Trading!

Recent v0.1.14 cycle contributors and credits:

  • @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/success tool-result envelopes (#1052) and truncates oversized results with the shared notice (#1110), MCP gains offset paging for SEC filings and statements (#1138), routes load_skill through the registry so oversized skills page (#1137) and carries market-data provenance on get_market_data (#1131), plus excess_return consistency (#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: xirr and 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 ChatLLM closed to stop a pooled-connection leak (#1145) and the same for one-shot clients (#1153), gross_profit derived from revenue minus COGS when the SEC tag is absent (#1111), and vibe-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 Response for the scheduled-runs DELETE 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: .VN no 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 orders rendering broker_sdk rows, with SDK enum reprs stripped and class-B tickers left intact (#1150)
  • @lukiod — .env.partial created 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)

v0.1.12 cycle contributors

  • @santhreal — a 30-PR correctness sweep: strict-JSON / finite-number hardening across metrics, factors, pattern, and options (#764/#765/#766/#767/#739/#740/#744), loader correctness (#761 yahoo 1m bars), and session / journal robustness (#762/#763/#768/#769/#770)
  • @xkam7ar — broad reliability across packaging, web, scheduler, swarm, and CLI (#584), cancellation before the first AgentLoop iteration (#641, closes #638), QVeris session budget + atomic credit accounting (#685/#686), CI / OOS gates (#630/#632), and journal month-filter / side-parse fixes (#626/#628)
  • @shadowinlife — the Strategy Development Manager skill (#457, closes #455), pluggable OCR + LLM-vision extraction (#548), centralized provider credentials (#563), the 80× signal-alignment vectorization (#698), and swarm MCP-discovery caching (#704)
  • @ebujinovch — the correlation regime timeline endpoint + UI (#756, closes #719) and its correlation-regime skill (#557), plus the academic_corr_rewire factor (#705)
  • @honginp — Binance USD-M routing with execution/mark separation (#470/#716) and the maintenance-bracket decouple that keeps -PERP backtests zero-credential (#757)
  • @StaniellG — the MetaTrader 5 (Exness) broker connector + mt5 data source (#481)
  • @tyj147454413-cmd — the Binance fallback loader (#643), bounded OKX history with rate-limit handling (#644), and codex stream-failure classification (#663)
  • @Marnie0415 — composite sub-engine fallback for unknown symbols (#734) and the frontend insertBefore streaming DOM-race fix (#717)
  • @YZY0108 — the look-ahead-bias fix across all five portfolio optimizers (#487)
  • @UNHNQ — the SiliconFlow CN + Global providers (#565)
  • @FenjuFu — the iFlytek Spark provider (#537)
  • @jelech — the native Anthropic Messages API adapter (#695)
  • @octo-patch — MiniMax regional API endpoints (#731)
  • @Thibaultjaigu — the Requesty OpenAI-compatible gateway provider (#474)
  • @Robin1987China — realized portfolio turnover metrics for every optimizer (#478)
  • @YogeshModi24 — the Frazzini-Pedersen betting-against-beta academic factor (#480)
  • @0xZKnw — opt-in TAP mode for Alpaca (#377)
  • @sambazhu — the fundamental zoo _VALID_ZOOS whitelist (#707)
  • @nareshkps — Robinhood connector account_number wiring (#726)
  • @darkknight4563 — user swarm-presets directory discovery (#570)
  • @MikeCer — IBKR thread-local connection pool + snapshot quotes (#636)
  • @Shizoqua — local loader interval resampling (#467)
  • @roberttidball — FastMCP transport import compatibility (#469)
  • @yxhuang — bare-ticker resolution in the correlation matrix (#472, closes #471)
  • @Bortlesboat — stale OPENAI_BASE_URL provider-switch fix (#484, closes #482)
  • @ananaymital — preflight EnvConfig stale-cache fix (#479, closes #477)
  • @GabbaTauchi — reported the native zai streaming / base-URL bug (#758)
  • @warren618 / Haozhe Wu — the correlation regime backend integration, the zai provider streaming + base-URL resolution fix (#758), release integration, and open-PR/issue triage

v0.1.11 cycle contributors

  • @shadowinlife — the api_server modularization capstone (1,103 → 371 lines, #424 closing #331), centralized env config with the AST CI gate (#440), loader fetch() protocol conformance (#437), and the Strategy Development Manager RFC in review (#455/#457) — 12 merged PRs this cycle
  • @Robin1987China — Research Autopilot Phase 3 loop closure (#267), 4 canonical academic alphas (#277), Shadow Account PIT-safe entry conditions (#302/#314/#316), the turnover-aware portfolio optimizer (#466), scheduled-research route tests (#452), and test-coverage batches for trade-journal / pattern / loader layers (#268/#269/#276)
  • @muku314115 — first-class Indian equity (NSE/BSE) support: the IndiaEquityEngine, cost stack, .NS/.BO routing, and the india_broker bridge (#305)
  • @mvanhorn — the end-to-end scheduled-research executor (#278), the Trading 212 read-only connector (#321), OpenAI default-model resolution (#319), and Robinhood config validation (#320)
  • @fei-moss — the analyze_image vision tool (#464), NapCat DM pairing (#463), and the IM-media allowed-roots report (#465)
  • @sambazhu — the value-investing toolkit: financial-rigor + report-audit tools, 4 skills, and the value_investing_committee preset (#407/#408)
  • @Elfsa-Miranda — the evidence-bound alpha research pipeline exploration (#405/#416, since re-scoped into #442)
  • @Hinotoi-agent — loopback CSRF rejection (#293) and authenticated remote same-origin UI requests (#304)
  • @dpersek — configurable IM reply timeout (#413) and the provider-preflight redirect fix (#404)
  • @digger-yu — cross-platform setup/dev commands (#292) and dev-dependency pre-checks (#349)
  • @skloxo — tilde expansion + file-roots safety fallback (#299) and reactive zh-CN localization (#301)
  • @kadaliao — the beginner tutorial (#393) and Alpha Library social cards (#396)
  • @morluto — CLI resume first-message preservation (#448) and the Codex OAuth default model (#446)
  • @yxhuang — the Kimi for Coding provider (#435) and the precise #433 diagnosis behind the governance-stack revert
  • @isaveall — the validation.json artifacts-dir fix (#429) and clearer --swarm-run errors (#428)
  • @mustafakamal88 — timezone-aware UTC timestamps (#397)
  • @irfanallana-oss — the zero-size order guard in trading_place_order (#417)
  • @Shizoqua — the central OHLC-invariant loader guard (#274)
  • @hobostay — SSRF-guard hardening for CGNAT/mesh ranges + the QQ media redirect fix (#389)
  • @aeonframework — Pillow / langchain CVE floor bumps (#390)
  • @hannibal-lee — the pandas version-constraint fix (#329)
  • @MarkfuGod — dynamic data-source counts + token-gated microcompaction (#296)
  • @gyx09212214-prog — strict JSON validation outputs (#306)
  • @LemonCANDY42 — the backtest report library (#224)
  • @fanfpy — Longbridge Decimal→float serialization (#459)
  • @asahikiko — packaged SKILL.md capability-count sync + the manifest guard test (#461)
  • @wison1717-maker — the mandate second-confirmation dialog + unified error toasts (#453)
  • @imsankz — opencode provider mappings (#444)
  • @flash1234pku — the tushare reference code-fence fix (#449)
  • @Penn-Live — the Docker startup route-iteration crash report (#450)
  • @warren618 / Haozhe Wu — the fundamental factor layer (PIT-safe SEC panels), the QVeris premium track, the IM channel runtime, India-equity integration review, CN search fallbacks, and release integration

v0.1.10 cycle contributors

  • @Hinotoi-agent — a security-hardening wave: local-shutdown auth (#241), loopback-host rebinding rejection (#242), agent shell-tool opt-in (#243), settings-write auth (#245), mandate proposal-id containment (#256), persistent-memory type validation (#257), and MCP swarm run-id containment (#258)
  • @mvanhorn — the opt-in local data cache (#177), Gemini thoughtSignature round-trip over OpenAI-compat tool calls (#176), the custom data loader guide (#194), and the glm/zhipu provider alias + model-name inference (#247)
  • @gyx09212214-prog — loader robustness for malformed crypto/RSSHub timeout env vars (#227, #240), requested yfinance end-date inclusion (#226), strict run-card JSON for non-finite metrics (#238), and ddgs retry-fallback coverage (#239)
  • @BillDin — swarm agent status in the chat UI (#188), explicit preset-name handling (#189), the loader-backed market-data tool for swarm workers (#199), and preset-context continuations (#200)
  • @Robin1987China — the Research Autopilot goal-hypothesis bridge (#260), the local CSV/Parquet/DuckDB data loader (#252), and an assistant-prefill fix + configurable Kimi User-Agent (#248)
  • @LemonCANDY42 — the read-only runtime status dashboard (#210), persisted AgentLoop usage artifacts (#223), and opt-in Run Detail chart payloads (#225)
  • @zwrong — the trace.jsonl overhaul with zero truncation + offload (#206) and session-id on exit + resume <session-id> (#218)
  • @forge-builder — the AI contributor guide (#173) and the OpenClaw MCP research-only smoke-test docs (#165)
  • @skloxo — Chinese (zh-CN) frontend localization (adopted from #217)
  • @LeeCQiang — Chinese docstrings across all 452 Alpha Zoo factors (#180)
  • @KaiLuettmann — GHCR pre-built image publishing on release (#187)
  • @ngoanpv — Gemini thought_signature preservation through the AgentLoop dict path (#184)
  • @ShahNewazKhan — Docker host-Ollama reachability via host.docker.internal (#196)
  • @sambazhu — frontend sync of completed chat attempts (#236)
  • @bhlt — baostock-native code format support (#230)
  • @octo-patch — MiniMax M3 default model upgrade (#162)
  • @warren618 / Haozhe Wu — the global data layer (8 sources + 18 read-only data tools), the 10 broker SDK connectors, the alpha-compare full stack, the provider-reliability overhaul, multi-engine web_search fallback, responsive Stop + SSE reconnect, and release integration

Disclaimer

Vibe-Trading is research and trading software. It is not investment advice, holds no funds, and runs no execution venue. Trading through a broker channel you explicitly authorize (e.g. Robinhood Agentic Trading) happens only within the limits you set and which you can halt at any time. This broker-trading capability is experimental and not verified by us against a real broker account — use it at your own risk. Past performance does not guarantee future results.

License

MIT License — see LICENSE




File: README_ar.md

Vibe-Trading: وكيل التداول الشخصي الخاص بك


📰 الأخبار

⚠️ تحذير أمني: حساب X باسم VibeTrading_HKU، ومشروع Virtuals رقم 101845، وعقد التوكن 0x640BDBF77b6447E8b7DB7894cED84BD1c40571f4 كلّها غير رسمية ولا تتبع Vibe-Trading. لم نُطلق أو نؤيد مطلقًا أي توكن أو عملة ميم. لا تشترِ هذا التوكن، ولا تربط محفظتك، ولا توقّع أي شيء. التفاصيل.

  • 2026-08-20 🚀 صدر الإصدار v0.1.14 (ملاحظات الإصدار، pip install -U vibe-trading-ai): 272 التزامًا و74 طلب دمج منذ 0.1.13. العنوان هو أن الاختبار الرجعي المكتمل صار شيئًا يمكن قراءته، لا مجلد ملفات CSV. اكتسبت صفحة Run Detail أربع علامات تبويب — بحث العوامل (سلسلة IC اليومية مع خط متوسطها، وإحصاءات IC، ومنحنيات ملكية المجموعات الكمّية، ومصفوفة ارتباط IC لم تكن موجودة في أي مكان من قبل)، وبنية المراكز (رسم دائري/شجري للأوزان مع منزلق زمني، وأعمدة الانكشاف الصافي حسب القطاع، ومساحة تطوّر الأوزان — الدائري تركيب إجمالي والأعمدة صافية، فيتلاشى زوج شراء/بيع في القطاع نفسه إلى صفر على الأعمدة بينما تبقى الساقان مرئيتين على الدائري)، وTearsheet (خريطة حرارية للعوائد الشهرية، وأعمدة سنوية، وأكبر خمسة تراجعات معلَّمة على منحنى الملكية)، ولوحة بحث تفاعلية بمؤشرات أداء ومنحنى ملكية مقابل المؤشر ونسبة شارب متدحرجة وسجل الصفقات كاملاً. الأربع تقرأ مخرجات تكتبها عملية التشغيل أصلاً — بلا أي خط بيانات جديد. وتضيف صفحة Options Lab الجديدة مخطط العوائد عند الاستحقاق، ومصفوفة سيناريوهات السعر الفوري×التذبذب الضمني، وحروف الإغريق للمحفظة، وسلسلة خيارات حيّة، محسوبة بالمحرك نفسه المثبَّت بالاختبارات الذي تستخدمه أدوات MCP. التثبيت: عادت أجهزة Mac بمعالج Intel قادرة على تنفيذ pip install vibe-trading-ai — إذ كانت smartmoneyconcepts تجرّ معها llvmlite التي لم تعد تنشر wheel لـ macOS x86_64 منذ 0.46، فتحوّل كل تثبيت على Intel إلى بناء من المصدر يتطلب CMake؛ صارت الآن إضافة اختيارية باسم [smc]، ورُفع معها سقف <3.14 القديم (#1035). الجديد: اكتشاف الاستراتيجيات ببوابة أدلة عبر Alpha Zoo ومخزن SDM، مع مسار لتعبئة الأدلة، وحداثة تُحسب عند القراءة (fresh/aging/stale)، وصفوف قديمة تخرج من التوصيات الافتراضية بشكل fail-closed؛ وبحث مجدول يسلّم نفسه عبر صندوق صادر بعقد إيجار، ويحفظ حكم كل مراقب لقائمة Market Watch؛ وسبع نقاط نهاية للقراءة فقط من Futu؛ وفيتنام (HOSE) كسوق للاختبار الرجعي؛ ومطابقة حساب USD-M دون اتصال؛ ومزوّدا Novita AI وGitHub Copilot؛ ومصدر بيانات MetaTrader 5 مُستضاف؛ ولغتا الواجهة الإسبانية والألمانية؛ وارتفاع أدوات MCP إلى 74. الصحّة: لم تعد حزمة الاختبارات تفلت من صندوقها الرملي لتكتب في جذر إعداداتك الحقيقي، حيث كان كل تشغيل كامل يُلحق سجلات order_rejected مصطنعة بدفتر تدقيق التداول الحي المسلسل بالتجزئة؛ ولم تعد build_registry() تعيد قائمة أدوات ناقصة بصمت؛ وصار xirr يصمد أمام تدفّق الخصم السفلي على آفاق طويلة، ويرفض DCF المدخلات غير المنتهية بدل إعادة قيمة سهم سالبة؛ وتوقّفت رموز .VN عن التنفيذ بقواعد الأسهم الصينية من الفئة A؛ وتوقّف أرشيف الاختبار الرجعي عن خلط مخرجات تشغيلين؛ وأنهت جولة واسعة من إصلاحات grounding صنفًا كاملاً من الرفض الخاطئ المتعلق بالتواريخ والقوائم المرقّمة والثوابت المتطابقة في صيغ المعدلات وأسطر الأوامر التي كانت تُقرأ كأسعار مرصودة. شكراً لـ @Shizoqua و@shadowinlife و@pengpengyi92 و@cgycorey و@ofeksh-tr و@lorenzozanee و@AndyLongest و@zzz607 و@wiliao و@jay79-boop و@Robin1987China و@Echoandelementwebsites و@zhiwuyazhe-fjr و@x-lambda و@sykuang و@straun-repo و@nstavros و@ngoanpv و@miguelangelo78 و@lukiod و@jax-novita و@honginp و@he-yufeng و@fixXxerTech و@er-s-an و@daviddaco1 و@birdxs و@QCYTSN و@549236606-oss و@1psconstructor.
  • 2026-08-19 🔌 عمليات تشغيل متجمّدة، وتسريب اتصال لكل مهمة، وأجهزة Intel Mac يتعذّر التثبيت عليها: كان صمت المزوّد يجمّد التشغيل إلى ما لا نهاية — والآن يحدّ VIBE_TRADING_LLM_TIMEOUT_SECONDS (الافتراضي 300s) من الاستدعاء، ولم تعد صيغة tool-call تُنشر كإجابة نهائية (#1105). كانت كل مهمة في swarm تسرّب اتصال HTTP واحدًا من التجمّع (#1145، يغلق #1141). وأُصلح أيضًا: تعطّل vibe-trading show <run_id> (#1147، يغلق #1146)، والكتابة فوق تسليم قيد التنفيذ (#1140)، وفقدان أدلة التحقق من الاختبار الخلفي (#1139)، وترقيم صفحات MCP (#1137، #1138)، والقيم غير المنتهية في أسواق التنبؤ (#1136). جديد: سبع نقاط نهاية للقراءة فقط من Futu (#1135)، وشارة Inferred صريحة على أسماء الاستراتيجيات المستنتجة (#1134). التثبيت: أصبح smartmoneyconcepts إضافة [smc] — إذ إن llvmlite الذي يجرّه لا ينشر wheel لـ macOS x86_64، ما كان يحوّل كل تثبيت على Intel Mac إلى بناء من المصدر عبر cmake (#1035)؛ ويزول معه الحد <3.14. شكرًا @wiliao، @cgycorey، @Shizoqua، @Echoandelementwebsites، @549236606-oss، و@fixXxerTech!
  • 2026-08-18 🈶 لم تعد التقارير الصحيحة تُرفض، ولم تعد الاختبارات الرجعية تتداول الضجيج: \b يراعي Unicode، فيُحتسب 最 حرفًا ضمن الكلمة، ومن ثم لا توجد حدود بعد اليوم في (2026-07-14最低): نجا التاريخ من الإخفاء ووصلت 2026 و7 و14 إلى فحص OHLC كأسعار لا يمكن لأي نطاق مرصود أن يحتويها (#1132، يغلق #1122). ومعه عولجت أربع حالات رفض من العائلة نفسها: يوم تداول بصيغة الشرطة (08-10(一))، ومستوى مكتوب كنطاق يترك -20 خلفه، وسطر أمر GTC (100 @ $3.50) يُقرأ كتسعيرتين مرصودتين، وخلية تاريخ بصيغة التقارير لا تطابق أي صف أدلة. الاختبارات الرجعية: كان position_adjustment="hold" يُسقط بصمت أي تعديل مطلوب على الحجم، ولم يكن لدى "rebalance" أي نطاق انحراف على الإطلاق: بالقياس، حركة يومية بنسبة 0.01% أعادت تثبيت المركز في 19 شمعة من 30، أي أن استراتيجية لها rebalance_freq خاص بها كانت تتداول في كل شمعة رغم ذلك. صارت الطلبات المُسقطة تُبلَّغ، وrebalance_tolerance هو النطاق الذي يعنيه الممارسون بعبارة «أعد التوازن عندما تتحرك الأوزان أكثر من X»، وقيمته الافتراضية 0.0 فلا يتغير أي تشغيل قائم. كما كانت تسع عشرة صيغة alpha101 محايدة قطاعيًا تُتخطى في كل اختبار SP500 بسبب غياب وسم القطاع، وهو موجود أصلًا في الجدول الذي تأتي منه المكوّنات. جديد: يمكن لمراقب Market Watch إرسال ملخصه إلى قناة مراسلة فور انتهاء التشغيل، عبر صندوق صادر مُخزَّن لا تفقده إعادة التشغيل ولا يُكرِّره مسحٌ متزامن (#942)؛ الألمانية هي لغة الواجهة السابعة (#1117)؛ وrun_dcf يرفض المدخلات غير المنتهية بدل إعادة سعر سهم سالب يبدو معقولًا (#1121، يغلق #1120)؛ وتحمل استجابة get_market_data في MCP حقل _provenance الذي وعد به توثيقها (#1131)؛ ووحدة أدوات يفشل استيرادها تُذكر بالاسم بدل تقليص السجل بصمت (#1129، يغلق #1124)؛ وتسوية حساب USD-M دون اتصال تقارن حالة المخاطر المحلية برصدٍ من المنصة دون فتح أي اتصال (#1106). وأيضًا: لم يعد استيراد backtest.runner يحمّل ملف .env إلى العملية، وهو ما كان يجعل تشغيل مجموعة الاختبارات محليًا غير جدير بالثقة على أي جهاز يملك واحدًا (#1123). شكرًا @Robin1987China و@newgo و@er-s-an و@Shizoqua و@1psconstructor و@honginp و@cgycorey و@alinv0 و@jelech!

أخبار سابقة

  • 2026-08-17 🔒 لم تعد مجموعة الاختبارات تكتب في جذر الإعدادات الحقيقي — بما فيه سجل التدقيق المباشر: كان تشغيل مجموعة اختبارات المشروع يُلحق سجلات order_rejected مُصطنعة بـ ~/.vibe-trading/live/audit.jsonl، وهو سجل للإضافة فقط ومترابط بالتجزئة وقيمته كلها في أن مدخلاته لا يمكن اصطناعها؛ وعلى Windows كان يترك ملف سلسلة تالفاً. لم يكن في conftest.py أي عزل لجذر الإعدادات، فكل وحدة تُثبّت Path.home() / ".vibe-trading" وقت الاستيراد كانت تحلّ إلى المنزل الحقيقي على أي نظام؛ وكان Windows أسوأ فقط لأن Path.home() هناك يقرأ %USERPROFILE% ويتجاهل $HOME، ما جعل أسلوب العزل الذي كانت المجموعة تستخدمه بلا أثر. صار المنزل يُحوَّل قبل الجمع، وتملك البيئة المعزولة مفتاحاً واحداً فقط ليبقى عزل كل اختبار هو الغالب، ويتحقق نهاية الجلسة من أن السجلات الحقيقية مطابقة بايت ببايت بدل الاكتفاء بفحص وجود التحويل (#1118، يغلق #1116). كذلك: كان xirr وmoney_weighted_return يرفعان ZeroDivisionError على المدى الذي يتجاوز نحو 51 سنة حيث يهبط معامل الخصم إلى الصفر — وهي بالضبط التدفقات الطويلة غير المنتظمة التي وُجد XIRR من أجلها (#1119)؛ وكانت نتائج الاختبار الخلفي المؤرشفة في تشغيل نشط تندمج مع مخرجات التشغيل السابق، فيصير تقرير واحد قادراً على وصف اختبارين مختلفين، ويعرض /runs/{id} البقايا وكأنها مخرجاته (#1094). شكراً @lorenzozanee، @straun-repo، و @pengpengyi92!

  • 2026-08-16 🔧 لم تعد عمليات Anthropic تموت في مسارات التعافي، ولم يعد بحث الرموز يبلّغ عن نتائج فارغة وكأنها سليمة: رسائل system التي تُلحقها مسارات التعافي في منتصف المحادثة ترفضها واجهة Anthropic فتُنهي التشغيل؛ صار توجيه التعافي يسري الآن كرسائل مستخدم بوسوم <system> مضمّنة (#1112، يغلق #1109). وكان search_symbol يعيد صفر مرشحين لاستعلامات "رمز + اسم" بينما يبلّغ المصدران عن ok، فلا تنقفل الهوية وترفض كل أدوات البيانات الطلب؛ أصبح مسار Yahoo يعلّم هذه الاستعلامات بـ skipped بدل ok مضلل (#1114، يغلق #1108). كذلك: صار LANGCHAIN_REASONING_EFFORT يُفعَّل في فرع Anthropic عبر قائمة سماح للنماذج (#1115)، ويتعافى محمّل Tencent من CERTIFICATE_VERIFY_FAILED بحزمة شهادات certifi (#1113)، ولم يعد اشتقاق revenue - cogs لإجمالي الربح كوداً ميتاً (#1111)، ويقصّ عمال السرب النتائج بالمساعد المشترك فيرى الوكيل الفرعي إشعار القص دائماً (#1110). شكراً @lorenzozanee, @straun-repo, @x-lambda, @cgycorey, و @Shizoqua!

  • 2026-08-15 🛡️ تحديثات سطح مكتب أكثر أمانًا، وحزم Windows أكثر موثوقية، وبحث العوامل في Run Detail: تحتفظ حدود updater الخامل الآن بأدلة العمليات المملوكة لإعادة محاولة التنظيف، وتفحص مستمعي TCP بدلًا من HTTP health، وتحجز recovery journal ذريًا، وتربط Authenticode والتجزئات بالبايتات المرحّلة نفسها، ثم تعيد التحقق قبل التشغيل مباشرةً (#1101). تتولى حزم Windows تنزيل Electron ضمن حدود ومع تحقق من checksum، وتستخرج أصل GTK المثبّت كبيانات عبر 7-Zip بدل تشغيل المثبّت القديم غير المستقر؛ وتغطي CI الأصلية على Windows رموز الخروج والمهل وتجميع runtime وNSIS وتشغيل الحزمة (#1104، ويغلق #1093). أضاف Run Detail سلسلة IC وإحصاءاتها وquantile equity وارتباط IC مع اجتياز محدود للـ artifacts وقيم JSON منتهية (#1099، ويغلق #1100)؛ كما جرى التحقق أصليًا من universal hash locks على Linux وmacOS ARM64 وWindows (#1102، ويغلق #1089). شكرًا @QCYTSN و@shadowinlife!

  • 2026-08-14 ⚙️ إعداد استدلال لم يكن يفعل شيئاً، وعمليات تشغيل كانت تتوقف بينما لا يزال بإمكانها التعافي: كان LANGCHAIN_REASONING_EFFORT بلا أثر صامت لدى جميع المزوّدين تقريباً — لم يكن يصل إلا إلى OpenAI المباشر، فضبطه على high مع DeepSeek لم يكن يغيّر شيئاً ولم يكن يُعلن ذلك في أي مكان. صار هذا الإعداد يصل الآن عبر كلا المسارين من خلال الحقل الخاص بكل مُهايئ: Chat Completions افتراضياً، وواجهة Responses عندما تكون LANGCHAIN_USE_RESPONSES_API=true. والمزوّدون الذين يتلقّون حقل reasoning_effort في المستوى الأعلى هم قائمة سماح مُتحقَّق منها لا "كل ما يتحدث بصيغة OpenAI" — فأي نقطة نهاية تتحقق من جسم الطلب بصرامة ترفض المفتاح غير المعروف وتُفشل الاستدعاء بأكمله، فتكون كلفة التخمين الخاطئ كل طلب لا مجرد إعداد لا يعمل (#1025). كذلك لم تعد بوابة الإسناد تُعيد "أكّد وتابع" بينما لا يزال التعافي الحتمي للقراءة فقط متاحاً: الأداة غير المحلولة تُشغّل الآن search_symbol ثم get_market_data ضمن ميزانية محدودة خاصة بها بدل استهلاك تكرارات التشغيل والفشل المغلق (#1092، يغلق #1081). جديد: صفحة Options Lab — مخطط عوائد متعدد الأرجل، ومصفوفة سيناريوهات السعر الفوري × التقلب الضمني، وإغريق المحفظة، وسلسلة خيارات حيّة، يحسبها أداة العوائد القائمة وquantlib بدل تنفيذ ثانٍ للرياضيات (#1096)؛ وتبويب tearsheet للاختبار الرجعي بخريطة حرارية للعوائد الشهرية والعوائد السنوية وأكبر N من فترات التراجع (#1091)؛ وtickerall كمصدر بيانات السوق الخامس والعشرين — شموع فوركس/معادن من MetaTrader 5 مُستضاف دون طرفية محلية على أي نظام تشغيل، ولا يعمل إلا بطلب صريح فلا يصبح مفتاح الوسيط هدف تراجع صامت، والنافذة التاريخية المبتورة خطأ لا سلسلة قصيرة بصمت (#968، يغلق #897)؛ وNovita AI وGitHub Copilot كمزوّدَين مدمجَين (#1059، #990). كما حصل eToro على تصفح فئات الأصول حسب نوع الأداة، وصار التداول بالنسخ يرفض الحساب التجريبي بسبب مُعلَن بدل الفشل الغامض (#1070). شكراً @cgycorey, @Shizoqua, @shadowinlife, @miguelangelo78, @jax-novita, @sykuang, و @ofeksh-tr.

  • 2026-08-13 🎯 تقارير الاختبار الرجعي تعرض المحفظة التي نُفِّذت فعلاً: كان positions.csv يحتوي على الأوزان المستهدفة من المُحسِّن، فقد يزعم التقرير تعرضاً بنسبة 80% بينما تترك تقريبات الحصص أو الرسوم أو أمرٌ مرفوض المحفظة قرب 20% — وكانت الأوزان المستهدفة نفسها تُغذّي مقاييس الوزن المستثمر وأشعة المخاطر. تُكتب التنفيذات الآن في positions.csv والطلبات في target_positions.csv (#1082). أُضيفت لوحة البحث إلى صفحة التشغيل عبر ?view=dashboard (#1084)، وأصبحت الإسبانية سادس لغة للواجهة (#1087). كذلك: كان get_research_reports يُعيد HTTP 400 لكل رمز في سوق الأسهم الصينية (#1077)؛ تفصل عروض IBKR بين مستوى البيانات المطلوب والمستوى المُطبَّق فعلاً (#1075)؛ يُكتب .env.partial بشكل ذرّي (#1086)؛ تُثبَّت إجراءات سير عمل Docker على عمليات إيداع محددة وتُثبَّت حزم القنوات بالتجزئة (#1088)؛ ولم تعد بوابة الإسناد تقرأ مستويات الدعم/المقاومة والقمم التاريخية كأسعار مرصودة (#1060). Thanks @AndyLongest، @daviddaco1، @zzz607، @jay79-boop، @lukiod، @birdxs، @wiliao.

  • 2026-08-12 📏 لم يعد حجم تداول أسهم A يقفز بصمت 100× عند تبدّل مصدر البيانات الاحتياطي: كانت خمسة مصادر في سلسلة الرجوع لأسهم A تعرض الحجم بوحدات التداول (board lots)، بينما كان BaoStock يعيده بعدد الأسهم؛ ولأن provenance للمصدر الذي خدم الطلب لم يحمل الوحدة، كان انتقال احتياطي واحد قادرًا على تغيير كل إشارة تعتمد على الحجم بمقدار 100 مرة. تعلن loaders الآن وحدة الحجم لكل سوق، وتكشف provenance وحدة المصدر الذي خدم كل رمز فعلًا، ويحوّل BaoStock الأسهم إلى وحدات تداول عند حدّ loader، ويمنع cache v4 إعادة استخدام إدخالات ما قبل الإصلاح، كما يفرض اختبار اتساق بين المصادر ببيانات حقيقية أن تتفق قيم يوم التداول المستقر ضمن 1% (#1065، #1067، وإغلاق #1062). وتشمل دفعة الدقة المكوّنة من 10 طلبات دمج أيضًا حالة runtime كاملة لـ eToro وواجهة SDK متصلة بخمس لغات (#1051)؛ واستجابة 204 فارغة حقًا لحذف scheduled-run (#1068)؛ وعرض حمولة حساب Alpaca عبر direct-SDK في CLI (#1073)؛ وتوحيد جذور Ollama إلى /v1 عند حدّ بيانات الاعتماد الذي يستخدمه مُنشئ النموذج الفعلي (#1074)؛ وتحويل خطأ stdin EOF في Docker Codex OAuth إلى إرشادات TTY قابلة للتنفيذ (#1054، وإغلاق #1050)؛ ومنع علامة القائمة المرتبة 1. في Markdown من التحول إلى ادعاء رقمي بلا دليل (#1063)؛ وجعل استعلامات الذاكرة ذات الحرفين مثل GE متطابقة مع FTS5 أو بدونه (#1071)؛ وتسعير الخيارات الأوروبية عديمة التقلب بالقيمة الجوهرية الآجلة المخصومة لاستعادة منطق التنفيذ وتعادل الشراء والبيع (#1066). شكرًا @shadowinlife، و@ofeksh-tr، و@zhiwuyazhe-fjr، و@zzz607، و@pengpengyi92، و@Shizoqua.

  • 2026-08-11 🧠 لم يعد الضغط يُسقط محتوى المحادثة، ولم تعد إعادة محاولة swarm تحذف تشغيلها: كان الضغط التلقائي يقطع السجل المتسلسل عند 80,000 حرف بالضبط قبل التلخيص، ولذلك لم يصل ما بعد نقطة القطع إلى استدعاء التلخيص ولا إلى الذيل المحفوظ — بل اختفى بلا أي خطأ، خلافاً لضمان الدالة نفسها «صفر تدهور في المعلومات»، كما أن القطع وقع داخل كائن فوصل إلى الملخِّص JSON غير صالح. صار السجل الآن يُعبَّأ عند حدود الرسائل ويُطوى chunk بعد chunk عبر القالب التكراري الموجود؛ وإذا كانت رسالة واحدة أكبر من أن تتسع لها chunk واحدة، تتحول إلى شظايا موسومة بدلاً من قطعها، كما أن رد النموذج الفارغ لم يعد يمحو التلخيص المتراكم حتى تلك اللحظة (يغلق #1055). شغّل تنظيف المخرجات الجديد وقت إعادة المحاولة shutil.rmtree على run_dir/artifacts/<agent_id>؛ وكان agent_id يصل من preset غير متحقق منه، وتُحمَّل presets الخاصة بالمستخدم من ~/.vibe-trading/swarm/presets/، ولذلك كان id يساوي .. يُحلّ إلى دليل التشغيل نفسه. أما الآن فلا يُقبل إلا إذا كان مقطعاً واحداً آمناً ويقع المسار الناتج عن حله داخل دليل artifacts الخاص بذلك التشغيل. كذلك انتقلت RSI في technical_indicators إلى اصطلاح Wilder-EWM الذي كان docstring الخاص بها يعلنه أصلاً، بعدما كان المتوسط المتحرك البسيط قد ينقل القراءة عبر حد 30/70 (#1056)؛ وأُعيد اشتقاق excess_return من إجمالي benchmark المصحح حتى لا يتناقض الحقلان داخل metrics dict واحد (#1058)؛ وصار التحقق من مخرجات swarm يرفض أغلفة raw tool ذات مفاتيح ok/success حين تُقدَّم على أنها تحليل (#1052)؛ ولم يعد worker الذي أُعيدت محاولته يرث report.md من المحاولة الفاشلة (#1053)؛ ورُتبت prompts الخاصة بالعمال بحيث تشكل الكتل الثابتة للوكيل prefix واحداً مؤهلاً للتخزين المؤقت (#1057). شكراً لـ @Shizoqua و@Echoandelementwebsites.

  • 2026-08-10 🚀 صدر الإصدار v0.1.13 (ملاحظات الإصدار، pip install -U vibe-trading-ai): 408 التزامات و162 طلب دمج منذ 0.1.12 — وهو أكبر إصدار حتى الآن. البطل إصلاح لا ميزة: بوابة الهوية لم تعد ترفض إجابات تملك أدلتها بالفعل. كان السؤال السليم الصياغة يقضي دقائق في استدعاءات أدوات حقيقية ثم يعود بـ*«يتعذّر التأكد بأمان من هوية الأداة أو من دليل السعر». الأسباب: التعامل مع .SS و.SH كأداتين مختلفتين، فصار كل رمز في شنغهاي ملتبساً بشكل دائم؛ واستعلام جانبي فاشل كان بإمكانه تخفيض هوية مقفلة أصلاً؛ وتسجيل رد Yahoo بـ HTTP 400 على كل استعلام صيني/ياباني/كوري بوصفه فشلاً في مصدر البيانات بدل «غير مُدرج هنا»؛ وقائمة سماح مثبّتة لكل أداة حجبت 11 من 17 صيغة وسيطة موثّقة؛ ورفض الإجابات الصينية لأنها كتبت 雅虎 أو 元 بدل اسم المُحمِّل بالحروف اللاتينية؛ وفاصل الآلاف الذي شطر ¥1,309.22 فقُورن 1 بالنطاق المرصود. كما لم تعد الأسئلة المفاهيمية وتقارير المقارنة تصل إلى طريق مسدود. وما زال أي سعر خارج دليل OHLC المسجَّل مرفوضاً. الجديد: src/quantlib — 249 دالة مختبَرة عبر 17 وحدة (خيارات، سندات، ائتمان، اقتصاد قياسي، VaR/CVaR/EVT، تفكيك الأداء، دراسات الأحداث، purged CV) يمكن بلوغها من CLI وWeb UI وREST API وMCP عبر quantlib_call للقراءة فقط، فصارت الـ skills تستورد الرياضيات المالية بدل حملها داخل markdown؛ و*محرك تقييم (run_dcf / run_comps / ثلاث قوائم مترابطة) قاعدته الوحيدة أن المدخل الناقص يجعل النموذج غير قابل للتشغيل بدل ملئه ضمنياً؛ وعمود فقري للكيانات والتدفقات النقدية غير المنتظمة (XIRR / MOIC / DPI / TVPI، وTWR / Modified Dietz عبر cashflow_performance) مُبقى عمداً موازياً لمحركات الأشرطة؛ وحوكمة في كل تشغيل — manifest يجزّئ الموجّه والـ skills وسجل الأدوات وإصدارات الحزم، مع سجل تدقيق مسلسل بالتجزئة ومُثبَّت بـ fsync يُضبَط فيه حتى التعديل الذي يعيد حساب تجزئته عند القيد التالي؛ وأربع أدوات بيانات للقراءة فقط على مصادر عامة مجانية (SEC 13F بفروق المراكز ربعاً بربع، واختراق محتويات ETF حيث يُحَل صندوق يتتبع CSI300 إلى 342 مركزاً تغطي 98.66% من صافي الأصول بدل أكبر عشرة في التقرير الربعي، وأسواق التنبؤ كاحتمال ضمني موسوم، وarXiv/OpenAlex بادعاءات مثبّتة بالمصدر). يضاف إلى ذلك ستة أوامر بحث مؤسسي (/comps /dcf /attrib /memo /earnings /screen)، وعدسات المستثمرين كـ skill مستقلة، وخمسة playbooks بحثية جاهزة للجدولة، وغلاف Electron لسطح المكتب بتغليف Windows مثبَّت بالمجاميع الاختبارية وsafeStorage، وeToro كموصّل الوساطة الثالث عشر، وكوريا (KRX) كمحرك الاختبار الرجعي التاسع، وجسر OpenBB Workspace، ودعم الأسهم الكندية من طرف إلى طرف، إضافة إلى sentiment وtechnical_indicators وoptions_payoff وorderbook_depth وModelScope وvibe-trading update. الصحّة: صارت فترات تقارير SEC تُفهرَس بمجالها (start, end) — إذ كان الطلب السنوي يعيد ربعاً واحداً، أي بخس بمقدار 4.2 ضعف؛ وأسعار الأسهم الصينية من tushare صارت معدَّلة لإجراءات الشركات، بعدما كان العائد الخام عبر تاريخ توزيع الحقوق ينحرف حتى 47 نقطة مئوية؛ ولم يعد bar_returns يسجّل توقّف التداول كحركة 0%؛ ويغطي التسنين كل مصادر البيانات الـ24؛ وسُدَّت ثغرة في الصندوق الرملي كان الكود المولَّد يستطيع عبرها استيراد طبقة الوساطة أو بلوغ socket/subprocess عبر ارتباط مُعاد التسمية؛ وتُرفض الاختبارات الرجعية المركّبة متعددة العملات بدل جمعها في منحنى ملكية واحد. شكراً لـ @santhreal و@shadowinlife و@Robin1987China و@he-yufeng و@QCYTSN و@Shizoqua و@honginp و@cgycorey و@wiliao و@ngoanpv و@x-lambda و@ofeksh-tr و@00EVA و@zwrong و@yrk111222 و@su322 و@hhj123123 و@dineeshd و@sambazhu و@ddy4633 و@tyj147454413-cmd و@y85998607 و@JungHoonGhae و@shugaoye و@TSENGCHIENFENG و@darkknight4563 و@MuggleJinx و@klmtseng و@ebujinovch و@g0rdonL و@AmirF194 و@Echoandelementwebsites و@yagnikpipaliya و@dvirarad و@1anter.

  • 2026-08-09 🪟 حزم Windows آمنة وأسواق كندا وModelScope وAlpha Zoo عبر MCP: أصبح تغليف سطح مكتب Windows يبني بيئة Python 3.12 مضمّنة ومثبّتة بالـ checksum ومساري مراجعة/توقيع x64 NSIS، مع Electron safeStorage للاعتمادات المدرجة في قائمة السماح. يستطيع renderer ضبط الأسرار أو مسحها ولا يستطيع قراءتها؛ وتُرحّل الإعدادات النصية مرة واحدة؛ ولا تصل القيم المفكوكة إلا إلى backend المملوك؛ ويفشل كل من build المراجعة غير الموقّع والـ build الموقّع بصورة مغلقة إذا كانت حالة التوقيع خاطئة. لم يُنشر أي installer artifact من هذا PR (#1015). تعمل الأسهم الكندية الآن من البداية إلى النهاية: تُصنّف رموز .TO/.V بعملة CAD، وتمر عبر fallback ‏Yahoo → yfinance → local، وتُنفّذ وفق قواعد GlobalEquity الخاصة بكندا، وتقارن بـ XIC.TO، وترفض تجميع العملات المختلطة. ويمكن لاختبارات USD-M التاريخية الصارمة اختيار position_adjustment=rebalance مع إبقاء الضمان والتمويل والرسوم والأرباح والخسائر المحققة وسلوك التصفية ودليل التنفيذ غير القابل للتغيير متسقة خلال الزيادة والتخفيض (#1024، #1019، يغلق #952). انضم ModelScope إلى providers المضمنة عبر endpoint الاستدلال المستضاف الرسمي المتوافق مع OpenAI، مع Qwen/Qwen3.5-27B افتراضيًا (#1011). يميّز الأمر الجديد vibe-trading update تثبيت wheel عن editable/source checkout، ويثبت الإصدار الدقيق الذي تحقّق منه، ثم يتحقق من metadata في process جديدة من دون downgrade (#1020). وأصبحت alpha_zoo وalpha_bench المحدودة متاحتين عبر MCP (64 أداة)، مع حدود للمدة وعدد النتائج ومسار الإخراج وإنشاء آمن للتقارير (#979). كما حدّثت عمليات lock الموثقة لـ Python/frontend مجموعات dependencies وpostcss وakshare (#1021، #1023، #1026، #1027). شكرًا @QCYTSN، @wiliao، @honginp، @yrk111222، @zwrong، و@cgycorey.

  • 2026-08-08 🧱 غلاف سطح المكتب وeToro وإعادة الموازنة الذرّية وتعزيز الموثوقية: يتولى مضيف Electron المصدري دورة حياة الخلفية الحالية — منفذ loopback عشوائي، وسر لكل تشغيل، واسترداد بدء التشغيل بخمس لغات، وتنظيف العمليات التابعة — وينضم eToro بملفات demo/real مفصولة على مستوى المسار؛ وتبقى الإجراءات الحية التي تزيد المخاطر خلف بوابة التفويض والتدقيق، بينما تتطلب أسطح قدرات API المصادقة وتُطبّق CSP (#923، #989، #961). تضيف الاختبارات الرجعية إعادة موازنة ذرّية اختيارية في الاتجاه نفسه مع أدلة تنفيذ غير قابلة للتغيير؛ ويفصل Shadow الأسواق حسب عملة التسوية بلا تجميع FX مختلق ويلتزم بجذر التشغيل المضبوط؛ وتستخدم المؤشرات تاريخًا متصلًا من دون أخذ عينات متباعدة، وصارت حدود السحب عند الملكية السالبة وتصفية الحسابات المعسرة الخالية صحيحة (#951، #997، #1017، #1005، #958، #959). يحصل OpenAI Codex OAuth على مخزن اعتماد مستقل ومتزامن وتعافٍ واحد من 401؛ ويشمل تعطيل proxy العملاء المتزامنين وغير المتزامنين؛ وتحافظ تشغيلات sandbox على جذرها القياسي؛ ويعزل البحث المجدول السجلات التالفة ويصحح تحقق timezone للفواصل؛ وتعيد طلبات 4h المكتوبة بأحرف صغيرة شموع أربع ساعات حقيقية (#1014، #995، #1012، #1003، #1004، #1013). تحتفظ ردود QQ بمعرّف الرسالة الأصلية، وتبقى model slugs الطويلة مقروءة، ويتوقف الوكيل عندما تكفي الأدلة (#1008، #1006، #1010). شكرًا @QCYTSN، @Shizoqua، @ngoanpv، @hhj123123، @su322، @Robin1987China، @shadowinlife، @dineeshd، @honginp، @santhreal، @00EVA، @x-lambda، @ofeksh-tr.

  • 2026-08-07 🛡️ رفض كاذب أقل، وسدّ ثغرة في الصندوق الرملي، وQVeris على MCP: لم تعد بوابة الإسناد ترفض إجابات سليمة الصياغة بسبب أرقام لم تكن أسعارًا أصلًا — درجات الثقة، وقيم المؤشرات، ونوافذ المتوسطات المتحركة، والتواريخ بلا سنة مثل 8/5، والنطاقات المئوية، ومستويات التحفيز الخاصة بخطة التداول نفسها (الإغلاق ≥ 6.45 شرط وليس سعرًا مقتبسًا). في المقابل، ما زال أي سعر خارج أدلة OHLC المسجّلة مرفوضًا، وصار جدول الأسعار المؤرَّخ 08-05 يطابق أدلته بدل أن تعود كل خلية بلا إسناد (#1001، #983). الصندوق الرملي: لم يعد بإمكان كود الاستراتيجية المولَّد استيراد طبقة الوسيط، ولا الوصول إلى socket/subprocess/os.system/ctypes عبر ربط مُعاد التسمية — وكلاهما كان مقبولًا سابقًا — بينما يبقى src.quantlib قابلًا للاستيراد. QVeris: انضمت أدوات discovery/inspect/execute إلى سطح MCP (62 أداة)، مع قراءة تقدير التكلفة من السوق بدل الوثوق بما يعلنه المستدعي (#976، closes #964، شكرًا @shadowinlife). إضافة إلى إصلاح مسار التراجع لبيانات سوق هونغ كونغ مع مصدر Tencent جديد، وتوجيه عملات yfinance المشفّرة إلى محرك الكريبتو، وكتابة واسترجاع مدخلات الذاكرة بلاحقة .md، وتسامح وسائط list/dict في MCP مع العملاء الذين يرسلون سلاسل JSON، وإظهار مخرجات Portfolio Studio في تفاصيل التشغيل (#1000، #970، #984، #993، #980، #982، #966، #973، شكرًا @he-yufeng، @ngoanpv، @sambazhu).

  • 2026-08-06 🧮 طبقة رياضيات مالية مُختبَرة + محرك تقييم + تدفقات نقدية غير منتظمة + حوكمة موصولة فعلًا: يستبدل src/quantlib الصيغ التي كانت تعيش كنصوص markdown داخل المهارات بتطبيق مُختبَر واحد لكل منها — الخيارات والسندات والائتمان والاقتصاد القياسي وVaR/CVaR/EVT وإسناد الأداء ودراسات الأحداث وضبط الاختبارات المتعددة والتحقق المتقاطع المنقّى — نحو 250 دالة يمكن الوصول إليها كلها من CLI وWeb UI وREST API وMCP عبر أداة القراءة فقط الجديدة quantlib_call. ويرفض محرك التقييم (run_dcf / run_comps / القوائم الثلاث المترابطة) التشغيل عند غياب مدخل بدل ملئه بقيمة افتراضية صامتة، وتقبل البنية الجديدة للكيانات والتدفقات النقدية صافي قيمة الأصول ونداءات رأس المال والكوبونات (cashflow_performance يوفّر XIRR/MOIC/DPI/TVPI وTWR/Modified Dietz، وorderbook_depth يحسب كلفة الأثر في دفتر أوامر العملات المشفرة). ويكتب كل تشغيل الآن بيان تجزئات، وسجل التدقيق مسلسل بالتجزئات فيُكشف أي عبث، وأعيد فحص جميع الإعدادات المسبقة الثلاثين للسرب مقابل ما تستطيع أدواتها حسابه فعلًا — فما لا يمكن حسابه يُصرَّح به بدل اختلاق أرقامه.

  • 2026-08-05 🔭 حيازات المؤسسات، وتفكيك محافظ ETF، وأسواق التنبؤ، والأوراق البحثية: أربع أدوات للقراءة فقط تعتمد كلها على مصادر عامة مجانية — حيازات SEC 13F مع فروق المراكز ربعاً بربع؛ ومكوّنات صناديق ETF عبر الأسواق (صندوق يتتبع CSI-300 يعود بـ 342 مركزاً تغطي 98.7% من صافي الأصول بدل العشرة الأوائل الفصلية)؛ وعقود الأحداث معروضة كاحتمال ضمني موسوم بوحدته؛ وبحث arXiv/OpenAlex الذي يعلّم ما لا يذكره المصدر بدل استنتاجه. وإلى جانبها: خمسة قوالب بحث مجدولة، وستة أوامر بحث مؤسسي (/comps /dcf /attrib /memo /earnings /screen)، وinvestor lenses كمهارة مستقلة، ونواة وكيل تُرجع كل رقم إلى الأداة التي أنتجته.

  • 2026-08-04 🔧 إصلاحات صحّة البيانات: الأساسيات وأسعار الأسهم الصينية والنتائج المفرطة الطول: صارت فترات التقارير في SEC تُعرَّف بمدى (start, end)؛ فالنموذج 10-Q يودع الربع الحقيقي والإطار التراكمي منذ بداية السنة تحت التاريخ نفسه والربع المالي نفسه، ولذلك كان period="annual" يُعيد ربعًا واحدًا لسهم AAPL في السنوات المالية 2018–2020 (تقليل بمقدار 4.2 ضعف)، وكان كل موضع للربع الرابع في السلسلة الربعية يحمل رقم السنة الكاملة؛ كما لم يعد get_fundamentals("AAPL.US") يُرجع ok:true مع لوحة فارغة تمامًا. وتُعدَّل الآن أسعار الأسهم الصينية من Tushare لأحداث الشركات في كل من مقعد اختبار العوامل والاختبارات الرجعية — إذ كان العائد الخام بين إغلاقين عبر يوم توزيع الحقوق يخطئ بما يصل إلى 47 نقطة مئوية (300750.SZ، 2023-04-26) — ويقنّع مقعد CSI300 كل تاريخ بمكونات المؤشر في حينه. وترفض الاختبارات الرجعية المركّبة عبر الأسواق مجموعة رموز مختلطة العملات بدل جمع CNY وUSD وKRW في منحنى ملكية واحد؛ وتُقيَّم أرجل الخيارات بالتقلب الذي فُتحت عليه، مما أزال ربحًا وهميًا في اليوم صفر يبلغ +93% من العلاوة؛ وتُقسَّم النتائج المفرطة الطول إلى صفحات بسجلات كاملة مع إظهار العدد الإجمالي بدل قطعها في منتصف JSON؛ ويُبلّغ calc_metrics عن خطأ التتبع وبيتا المرجع.

  • 2026-08-03 ⏰ بحث مجدول واعٍ بالمنطقة الزمنية + فكّ انسداد فرز الأسهم: صارت المهام المجدولة تقبل مفتاح timezone اختياريًا بمعيار IANA، ويُقيَّم cron على ساعة الحائط لتلك المنطقة، فيبقى الإيقاع صحيحًا عبر تحولات التوقيت الصيفي — تُتخطّى اللحظة المفقودة عند التقديم، وتُنفَّذ اللحظة المكرَّرة عند التأخير مرة واحدة فقط — كما تقبل حقول cron قوائم الفواصل والمدَيات (1,3-5)، وتحتفظ المهام بلا منطقة زمنية بدلالات UTC، وأضيفت إلى واجهة الويب صفحة Scheduled بخمس لغات بعد أن لم يكن للجدولة أي واجهة أمامية (#954، closes #953، شكرًا @ngoanpv). ولم يعد طلب الفرز ينتهي إلى طريق مسدود: تُعدّ القائمة القصيرة متعددة المرشحين إجابةً لا عمليةَ تحليل متوقفة، وتنسحب بمجرد قفل مرشح بعينه، وتوقّف التحقق من الأسعار عن قراءة أرقام رمز السهم والتواريخ المحلية وأعداد الأسهم وتكلفة المركز كأسعار معلنة — مع استمرار رفض أي سعر خارج أدلة OHLC المسجّلة (closes #955). كذلك حصلت ذاكرة الوكيل على مطابقة دقيقة لمرساة الفهرس وحدٍّ مُحترَم لعدد النتائج (#956، #957، شكرًا @santhreal).

  • 2026-08-02 🧠 اكتشاف حي للنماذج، وهوية تشغيل صادقة، وتحديث اعتماديات مُتحقَّق منه: تستطيع Settings الآن اكتشاف نماذج كل provider مُعَدّ عند الطلب وعرضها برموز تحذير مستقرة وواجهة بخمس لغات، بينما تسجّل كل إجابة وتستعيد هوية provider/model/reasoning غير القابلة للتبدّل التي عالجت الطلب فعلًا، وتُمسح بأمان عند تبديل الجلسات (#924، شكرًا @QCYTSN). كما حُدّثت تسع اعتماديات Python مقفلة بالتجزئات مع jsdom وpostcss، ونجحت اختبارات الاستيراد بالإصدارات الدقيقة و330 اختبارًا مركّزًا وبناء الإنتاج و373 اختبارًا للواجهة وكامل CI على main وDependency Graph (#949، #948)؛ وبقي MCP 2.0 الكاسر غير مدمج حتى تكتمل هجرة القفل وبيئة التشغيل (#950).

  • 2026-08-01 🧮 تحليلات استراتيجيات الخيارات + معنويات السوق + أبحاث USD-M قابلة للتدقيق: يحسب سير عمل جديد لعوائد الخيارات تحليليًا القيم القصوى للربح والخسارة عند الاستحقاق، ونقاط التعادل الدقيقة — بما فيها فترات متصلة يكون فيها الربح والخسارة صفرًا — وعمولة الدخول المتوافقة مع المحرك، وسيناريوهات السعر الفوري × التقلب الضمني، عبر Agent وMCP (#946، أُعيد تنفيذه بسجل نظيف انطلاقًا من #883، شكرًا @he-yufeng). تسجّل أداة sentiment للقراءة فقط درجات أي نص محليًا، وتجلب مؤشر الخوف والطمع للعملات المشفرة من دون مفتاح API (#939، شكرًا @Robin1987China). تحفظ اختبارات USD-M الرجعية الصارمة أحداث التنفيذ والتمويل والمخاطر والتصفية بالترتيب مع ملخص لدقة المحاكاة، وترفض الفواصل الزمنية غير المدعومة في نمط 100× الصارم (#936، شكرًا @honginp). وتضمن تحسينات الاعتمادية أيضًا حلّ الرمز والسوق قبل استدعاء بيانات السوق، ومراجعة الأسعار النهائية في ضوء أدلة OHLC المسجلة، وإعادة محاولة الأبحاث المجدولة بعد الأعطال العابرة، وتسلسل نتائج MCP المتداخلة بصورة سليمة.

  • 2026-07-31 🔧 دورة تصفية USD-M + أداة مؤشرات فنية + نقل مجلدات الحالة إلى جذر المستخدم: نمط perpetual_strict الاختياري يسوّي رسوم التمويل التاريخية قبل التنفيذ وينفّذ خروقات هامش العزل/المتقاطع كتصفية فعلية (#903، شكرًا @honginp). أداة technical_indicators للقراءة فقط تحسب RSI/MACD/Bollinger/SMA/EMA عبر المُحمِّلات الحالية (#921، مرجع #920، شكرًا @Robin1987China). الجلسات ومخرجات التشغيل وتشغيلات السرب والمرفوعات صارت تحت ~/.vibe-trading (قابلة للنقل عبر VIBE_TRADING_HOME) مع ترحيل تلقائي لمرة واحدة (#925، يغلق #904، شكرًا @MuggleJinx). إضافةً إلى عشر إصلاحات صحّة — تصنيف .SS من Yahoo كأسهم صينية، والرموز المجرّدة/المسبوقة، وأزواج العملات المشفرة بالشرطة المائلة، وحواجز nan/inf (#919، #926–#935، شكرًا @santhreal).

  • 2026-07-30 🎨 واجهة ويب مُعاد بناؤها + سوق كوريا (KRX) + جسر OpenBB Workspace: هبطت إعادة تصميم الواجهة وفق «البساطة الموجَّهة» — لا وميض في الإطار الأول، وكائن نشاط دائم واحد لكل دور (همس استدلال حي وأثر أدوات يُستعاد بعد إعادة التحميل)، وعناوين جلسات يكتبها النموذج، وتطابق كامل عبر اللغات الخمس. وتصبح أسهم كوريا (KRX: KOSPI/KOSDAQ) محرك الاختبار الرجعي التاسع — نطاق ±30% يُحكم عليه لحظة التنفيذ، وشراء فقط، وضريبة تداول 0.20% لعام 2026، ومُحمِّل pykrx اختياري (#693، شكرًا @JungHoonGhae) — مع جسر OpenBB Workspace (#817، شكرًا @shugaoye) وأداة لقطة أسهم تايوان للقراءة فقط (#848، شكرًا @TSENGCHIENFENG). الصحّة: تُحكم النطاقات السعرية اليومية لحظة التنفيذ لا من إغلاق شمعة القرار؛ وتُشغّل الجلسة محاولة واحدة في كل وقت (HTTP 409) مع اعتبار إيقاف المستخدم حالة نهائية مستقلة (#676، شكرًا @tyj147454413-cmd). يضاف إلى ذلك متانة سجلات التتبع (#662)، وتنظيف الأسرار من نتائج الأدوات (#675)، وفشل مغلق للوسائط المشوّهة (#913/#911، شكرًا @santhreal)، وreasoning_effort لـ OpenAI المباشر (#755، شكرًا @1anter)، وحواجز عددية في الأشعة السينية للمخاطر وكثافة الحواف ومحرك الخيارات (#909/#908/#907).

  • 2026-07-29 🔧 عوائد آمنة عبر فجوات التداول + نمذجة مخاطر التصفية + أشعة سينية للمخاطر في كل تشغيل: لم يعد bar_returns يمحو الحركة الحقيقية عبر تعليق تداول أطول من نافذة التعبئة الأمامية — كانت حركة شمعة الاستئناف تُسجَّل صفرًا بصمت فيُبخَس التقلب ويُضخَّم شارب — ولم يعد السعر السابق inf يُقرأ كخسارة −100% نظيفة (#895، شكرًا @darkknight4563). التحويل السنوي يغطي الآن جميع مصادر البيانات الـ 24 في كل الفواصل الزمنية مع اختبار تغطية يُفشل CI عند غياب الإدخالات (#891، يغلق #884، شكرًا @Robin1987China). تكتسب أبحاث العقود الدائمة USD-M تقييم تصفية الهامش المعزول والمتقاطع الحتمي (#889، شكرًا @honginp)، وكل اختبار رجعي للمحفظة يُصدر الآن مخرجات الأشعة السينية للمخاطر (risk_xray.json/.md) (#900، شكرًا @he-yufeng). تحمّل واجهة connector في CLI الآن ~/.vibe-trading/.env فتعود بيانات اعتماد الوسطاء المصدرها البيئة إلى العمل (#902، يغلق #901، شكرًا @MuggleJinx). إضافةً إلى الحفاظ على المسافة البادئة عند تقسيم رسائل القنوات وتحليل frontmatter عند نهاية الملف (#867/#861، شكرًا @santhreal).

  • 2026-07-28 🔧 إتاحة أحدث نماذج Claude + عوائد آمنة الإشارة: أصبحت نماذج Claude التي أوقفت حقل temperature (‏opus-4-7 و‏opus-5 و‏sonnet-5) تعمل الآن — إذ يزيل المُهيّئ الحقل عند رفض الواجهة له ويعيد المحاولة مرة واحدة ثم يتذكّر النموذج، فلا حاجة إلى ترقيع مع كل إصدار (#890، يغلق #856، شكرًا @yagnikpipaliya). صار الأمر غير التفاعلي vibe-trading run يحقن معرّف جلسة من المضيف: كانت أدوات أهداف البحث تفشل في كل استدعاء بينما يُبلَّغ عن نجاح التشغيل (#885). وأصبحت عوائد الشراء والاحتفاظ آمنة الإشارة — لم يعد سعر إغلاق سابق قريب من الصفر يُفجّر المؤشر المركب، ولم يعد إغلاق يساوي صفرًا ينتج inf/nan (#872، شكرًا @darkknight4563). وانتقلت الواجهة الأمامية إلى Node 22 + React Router 8، ما أزال تنبيهًا أمنيًا عالي الخطورة.

  • 2026-07-27 🔧 سلامة مصفوفة الارتباط + إصلاح تصدير vn.py 4.0 + حزمة إصلاحات الترميز: لم تعد مصفوفة الارتباط المتدحرجة تملأ أسعار الإغلاق المفقودة بالقيمة السابقة — كانت جلسة التوقف تُحتسب كعائد صفري مُفتعل ويُقارَن بالحركة الفعلية للأصل النظير، ما يشوّه المصفوفة (#873، شكرًا @ddy4633). وأُصلحت مهارة تصدير vn.py لتوافق بنية vn.py 4.x بعد اختفاء vnpy.app.cta_strategy من المصدر، فصارت القوالب تستورد من vnpy_ctastrategy (#869، شكرًا @y85998607). إضافةً إلى ست إصلاحات: فك ترميز UTF-16 BOM في قارئ المستندات وملفات CSV لسجل التداول، وإزالة رموز العملات قبل التحويل الرقمي، والتعرف على الرموز بصيغة BTCUSDT كعملات مشفّرة، وتصحيح الحساب السنوي للفواصل 1h/1d بالأحرف الصغيرة، والحفاظ على محارف CJK في أسماء مجلدات المهارات (#862، #863، #864، #865، #866، #868، شكرًا @santhreal).

  • 2026-07-26 🔒 إصلاح قفل الاعتماديات + شفافية مكونات المؤشر: عاد تثبيت Docker المقيّد بالتجزئات للعمل، مع فحص جديد للقفل في CI (#858، يغلق #847). ويكشف alpha bench الآن مصادر CSI300/SP500 وأعداد المكونات وحالات الرجوع المخفّضة وانحياز البقاء (#859، يغلق #845). كما حُدّثت Actions وخمس اعتماديات للواجهة الأمامية (#850–#852).

  • 2026-07-25 🔧 واقعية العقود الدائمة + إصلاح تعطل MCP + حزمة تصحيحات: حصلت عقود USD-M الدائمة على عقود حالة الهامش (#798، شكرًا @honginp)، وأصبح المحرك يستهلك معدلات التمويل التاريخية فعليًا بدلًا من جلبها وتجاهلها (#819، شكرًا @g0rdonL). لم تعد نتائج dataclass في MCP تتعطل بسبب Circular reference detected خاطئ (#849، شكرًا @Echoandelementwebsites)، ويمرر alpha bench في CLI/HTML كتلة _meta للإفصاح عن انحياز البقاء (#841، يغلق #797، شكرًا @AmirF194). إضافة إلى 12 إصلاحًا للصحة عبر اليوميات والموصلات والقنوات (#799–#810، شكرًا @santhreal)، وعرض تسمية حساب حقيقية في عرض الأرصدة في CLI (#843، يغلق #846، شكرًا @Robin1987China).

  • 2026-07-24 🔀 الطبقة الثانية من الذاكرة وقيود مُحسِّن قابلة للتركيب + جولة معالجة الفترات: حصلت الذاكرة الدائمة على تنظيم هيكلي من الطبقة الثانية (Tier 2) (#815، شكرًا @shadowinlife)، وأصبحت مُحسِّنات الاختبار الرجعي تقبل قيود أوزان قابلة للتركيب (#818، شكرًا @he-yufeng). التصحيح: أصبح مدقّق الأعمدة اليومية قادرًا على تفعيل الأسعار غير الموجبة اختياريًا — يفتح عند أعمدة الأسعار السالبة مع استمرار رفض الصفر (#816، يغلق #571، شكرًا @darkknight4563). بالإضافة إلى جولة تطبيع فترات عبر 19 طلب دمج في المحمّلات: قبول الأسماء المستعارة بالأحرف الصغيرة 1h/4h/1d/1w في كل مكان، والفترات غير المدعومة تفشل الآن بسرعة بدل إرجاع أعمدة يومية بصمت، ويُحوَّل 4H في Yahoo إلى 1h، ويقبل MT5 الفترتين 1W/1M (#812–#838، شكرًا @santhreal)، مع إصلاح تواريخ Excel التسلسلية من Eastmoney في سجل التداول (#811، شكرًا @santhreal)، وإصلاح مرساة التنقل في README (#840، شكرًا @dvirarad).

  • 2026-07-23 🔧 جولة موثوقية + كشف بوابة alpha-bench الصارمة + دورة حياة اختيارية للذاكرة: دفعة من 22 طلب دمج من المساهمين. جولة موثوقية واسعة تُصلح معالجة الأطر الزمنية من طرف إلى طرف — yfinance 1M←شهري (لا دقيقة)، وCCXT 1W/1M، وakshare/india-broker يرفضان الفواصل غير المدعومة بدل إرجاع يومي بصمت، وموصّلات Tiger/Alpaca/OKX/Shoonya/Longbridge تُبقي 1H/4H شموعاً بالساعة — إضافة إلى تطبيع تواريخ Excel في سجل التداول (عدد عشري YYYYMMDD من eastmoney، وتواريخ تسلسلية من Futu/Tonghuashun)، وJSON منتهي القيم في report_audit، والتحقق من holding_days الفارغة، وأعمدة حواف جداول markdown في Feishu/CLI (#778–#794، شكرًا @santhreal). أصبح MT5 trading_history يحوّل قيم numpy العددية إلى أنواع Python أصلية فلا يفشل تسلسل JSON على int64 (#776، يغلق #774، شكرًا @shadowinlife)، والبيانات الأساسية PIT تزيل تكرار الصفوف المُعاد ذكرها وتمنع تراجع اللقطة إلى فترة مالية أقدم عند إعلان تصحيح متأخر (#772، يغلق #771، شكرًا @klmtseng). جديد: alpha bench --strict يربط أخيرًا بوابة الضبط الصارم بالتحكم العشوائي على نفس الكون + OOS التي شُحنت دون منفذ منذ 0.1.9 (#796، يغلق #773، شكرًا @he-yufeng)، ودورة حياة اختيارية للذاكرة (تسجيل الجودة، تلاشي إبنغهاوس، جمع مهملات بالأرشفة فقط — كلها معطّلة افتراضيًا) (#733، يغلق #732، شكرًا @shadowinlife)، ومنتجات ملاحظات إعادة التوازن في الاختبار الخلفي + مقاييس معدل الدوران (#795، شكرًا @he-yufeng).

  • 2026-07-22 🚀 صدر الإصدار v0.1.12 (ملاحظات الإصدار، pip install -U vibe-trading-ai): يضيف الجدول الزمني لنظام الارتباط (correlation regime) نقطة نهاية GET /correlation/regime + شريطاً اختيارياً في تبويب Correlation — تُمرَّر كثافة الحواف عبر آلة حالة تباطؤ (hysteresis) سببية تُعلّم فترات اندماج السوق (FUSED)، وهو سياق مخاطر وصفي لا إشارة تداول (#756، يغلق #719، شكرًا @ebujinovch). وأصبح حلّ نقاط نهاية المزوّد يتراجع الآن إلى عنوان URL الأساسي القانوني لكل مزوّد ويتعامل بسلاسة مع نقاط النهاية غير SSE، ما يصلح مزوّد zai الأصلي على glm-5.1 (#758). بالإضافة إلى جولة موثوقية بـ JSON صارم / أرقام منتهية عبر المقاييس والعوامل والأنماط والجلسات والسجل (#761–#770، شكرًا @santhreal)، وفصل شريحة صيانة Binance الذي يُبقي اختبارات -PERP الرجعية بلا بيانات اعتماد (#757، شكرًا @honginp). يجمع ~90 إصلاحاً منذ 0.1.11.

  • 2026-07-21 🔧 اكتمال محمّل البيانات + جولة إصلاحات للموثوقية: أصبحت نتائج بيانات السوق الجزئية تُكمل الرموز المفقودة عبر سلسلة fallback وتفشل بأمان بدلًا من تقليص نطاق الاختبار الخلفي بصمت (#689، يُغلق #681، شكرًا @xkam7ar)، وتستخدم شموع OKX نقطة النهاية history-candles مع إعادة المحاولة عند حد المعدل لعمليات التعبئة التاريخية العميقة (#644، شكرًا @tyj147454413-cmd). بالإضافة إلى جولة إصلاحات: يقبل حارس شبكة MCP مضيفي IPv6 / المختلفين في حالة الأحرف (#750، شكرًا @Robin1987China)، ويتخطى محلّلو سجل التداول صفوف الرموز الفارغة/NaN (#749، شكرًا @Robin1987China)، ويتخطى Shadow Account بوابة ساعة الدخول المستخرجة على الشموع اليومية (#748، شكرًا @Robin1987China)، وأصبحت نقاط نهاية MiniMax الإقليمية قابلة للاختيار (#731، شكرًا @octo-patch).

  • 2026-07-20 🔀 مزوّدو النماذج وMetaTrader 5 ومراجعة للموثوقية: انضم مزوّد Anthropic Messages API الأصلي (إضافة اختيارية [anthropic]، #695، شكرًا @jelech) وSiliconFlow (#565، شكرًا @UNHNQ) وiFlytek Spark (#537، شكرًا @FenjuFu) إلى قائمة المزوّدين، ووصل موصّل وسيط MetaTrader 5 (Exness) ومصدر بيانات mt5 للفوركس/المعادن (موصّلات الوسطاء → 12، #481، شكرًا @StaniellG). بالإضافة إلى محرّك llm-vision OCR المستقل عن المزوّد (#548، شكرًا @shadowinlife)، وتحويل محاذاة الإشارات إلى متجهات بسرعة 80× (#698، شكرًا @shadowinlife)، وبيانات تمويل/شرائح USD-M التاريخية من Binance (#716، شكرًا @honginp)، وذاكرة تخزين مؤقتة لاكتشاف MCP في swarm (#704)، ودمج للموثوقية يُغلق 13 مشكلة في SSE/الجلسات/CLI/swarm/المجدول (#584، شكرًا @xkam7ar). تصحيحات الدقّة: أصبح الإغلاق الجزئي للخيارات يحترم الكمية المطلوبة بدلًا من تصفية العقدة بالكامل (#577)، وتوحيد حلّ بيانات اعتماد المزوّد (#563)، ومعالجة الإلغاء أثناء الانتظار (#641)، وسباق DOM أثناء البث في الواجهة (#717، شكرًا @Marnie0415)، وعارضات CLI للموصّلات (#726، شكرًا @nareshkps).

  • 2026-07-19 🔧 مقالات أخبار حقيقية للأسهم الأمريكية/هونغ كونغ + إصلاح MCP factor-analysis + مراجعة للمتانة: تُعيد أداة أخبار الأسهم الآن مقالات Yahoo Finance حقيقية (title/url/source/published/snippet) لرموز الأسهم الأمريكية وهونغ كونغ بدلًا من مطابقات الأدوات ذات الصلة، مع بقاء التوجيه عبر العميل المجمّد المحدود بمعدّل عناوين IP (#730، شكرًا @yxhuang). وأصبحت أداة MCP factor_analysis متوائمة مع عقد CSV الحقيقي للأداة المسجّلة، فلم تعُد الاستدعاءات تفشل بـ KeyError قبل التشغيل (#715، تغلق #635، شكرًا @Robin1987China). إضافةً إلى مراجعة للمتانة: تفرض سلسلة Kimi K بأكملها (k2/k3/…/for-coding) الآن temperature=1 تلقائيًا كما يتطلب API (#701، شكرًا @sambazhu)، وتفشل split_message ونطاقات صفحات PDF ومرشّحات تواريخ سجل التداول فورًا عند المدخلات المنحلّة أو المعكوسة بدلًا من التعليق أو إرجاع نتيجة فارغة بصمت (#727–#729، شكرًا @santhreal).

  • 2026-07-18 🔧 احتياطي عملات Binance المشفّرة + إصلاحات التنفيذ المتوازي والصحّة: انضمّ loader لـ Binance إلى سلسلة الاحتياط (fallback) لبيانات العملات المشفّرة التاريخية (#643، شكرًا @tyj147454413-cmd)، وانتقل موصّل IBKR إلى تجمّع اتصالات محلي للخيط (thread-local) مع عروض أسعار لقطية، بما يصلح التعليق أثناء تشغيل الوكلاء المتوازي (#636، شكرًا @MikeCer). إضافةً إلى مراجعة للصحّة: يرفض factor analysis قيم n_groups غير الموجبة، وتفشل النطاقات الزمنية المعكوسة ونوافذ الكشف غير الموجبة فورًا، ويُعالَج DatetimeIndex غير المسمّى في correlation matrix بشكل صحيح، وتُقبَل أسماء أعمدة nav/value البديلة في equity.csv، ولم تعُد أكواد الأسهم الصينية (A-share) الفارغة تُحوَّل قسرًا إلى 000000.SZ (#709–#714، شكرًا @santhreal). ينضمّ عامل استقرار إعادة ربط الارتباط (correlation-rewiring) إلى academic zoo (#705، شكرًا @ebujinovch)، وأُضيف fundamental zoo إلى القائمة البيضاء لـ factor analysis (#707، شكرًا @sambazhu)، وأصبحت حالة التشغيل المُخزَّنة مضمونة عبر fsync (#645، شكرًا @tyj147454413-cmd)، ويثبّت dev extra سلسلة أدوات Black/Ruff الموثّقة (#634، شكرًا @xkam7ar).

  • 2026-07-17 🧩 مهارة correlation-regime + مراجعة واسعة لصحة الاختبار الرجعي / البيانات / أمان التداول الحي: مهارة كشف correlation-regime جديدة (المهارات المضمّنة → 88، #557، شكرًا @ebujinovch)، وبطاقة اتصال وقت التشغيل لـ Longbridge (#569، شكرًا @fanfpy)، وإعدادات swarm مُعرّفة من المستخدم تُحمّل من ~/.vibe-trading (#570، شكرًا @darkknight4563). إضافةً إلى تحصين يشمل الحزمة بأكملها: إصلاحات لتلف البيانات الصامت في loaders الخاصة بـ Futu / Tencent / CCXT / mootdx، وضوابط لمنع تحيّز الاستشراف المسبق ولفرض strict-OOS في factor bench وShadow Account، وأمان التداول الحي (حدود انكشاف موقَّعة، وحدود أوامر يومية ذرّية، واعتمادات mandate بموافقة مسبقة، وحالة حية fail-closed)، وتحسينات على journal / ميزانية QVeris / swarm / بوابة CI (#552، شكرًا @xor-xe؛ ومعظم أعمال الصحّة من إنجاز @xkam7ar).

  • 2026-07-16 🔧 إصلاح قفل الاعتماديات + إصلاح حفظ الإعدادات على Windows: أُعيد توليد قفل التشغيل المُتحقق منه بالتجزئة بحيث يعود pip install --require-hashes في Docker إلى الحل بنجاح، بإصلاح التثبيتات غير المتوافقة لـ caio/pydantic-core/websockets (#564، يغلق #558، شكرًا @tianrking). لم يعد حفظ إعدادات Agent LLM من واجهة الويب يعيد HTTP 500 على Windows — أصبح تحصين os.fchmod الخاص بأنظمة POSIX محروسًا حسب المنصة مع اختبار انحدار للمنصات التي لا تدعم fchmod (#561، شكرًا @CRui5in).

  • 2026-07-15 🧮 صحة الاختبار الرجعي + اكتمال نواة Portfolio Studio: جمعت دفعة من 10 طلبات سحب (PR) إصلاحات تجعل إعادة الموازنة سببية وغير متأثرة بترتيب الرموز، وتحتسب تكاليف الإغلاق النهائي والدوران من الصفقات المنفذة، وتفرض حدود الانكشاف، وتحافظ على مخرجات تحقق رقمية منتهية وصارمة (#530/#531/#532/#540). تعيد الرسوم التاريخية استخدام مصدر البيانات الفعلي للتشغيل، ولا تُسقط استعلامات السوق المتكررة بصمت، ويُحدَّث cache الإعدادات بعد تحميل .env (#535/#544/#554). أُغلقت Portfolio Studio #456 ومشكلة الإعداد #541، وكذلك إصلاحا provider #528/#529. شكرًا @YZY0108 و@santhreal و@Robin1987China و@xkam7ar و@Marnie0415 و@marichu99.

  • 2026-07-14 🌉 بيانات Longbridge السوقية + نقل MCP الحديث + موثوقية المزوّدين: انضم Longbridge إلى طبقة fallback للبيانات التاريخية مع بيانات اعتماد مفعّلة بالمفاتيح، وتقسيم نوافذ التاريخ، وفحوص صارمة للاكتمال، واعتماد SDK اختياري. وحصلت أربع أدوات لتدفقات السوق الصينية على fallback موثّق عبر Tushare، ولم تعد القيمة النهائية السالبة لصافي الأصول تعطّل مقاييس الاختبار الرجعي. يدعم MCP server الآن Streamable HTTP، وتستعيد write_file وسائط path البديلة أو المفقودة بأمان، وترفض تحديثات hypothesis الحقول غير المدعومة، وأصبحت طلبات Correlation خاضعة للمصادقة. وأصبح NVIDIA NIM مزوّدًا من الدرجة الأولى في Web Settings ومساري CLI onboarding، مع User-Agent متوافق يتضمن رقم الإصدار لمعالجة خطأ 403 المُبلّغ عنه. كما تكتب Web Settings الآن إلى المسار القياسي ~/.vibe-trading/.env، وتنقل الإعدادات القديمة، وتعرض أخطاء الصلاحيات بوضوح، ما يصلح خطأ 500 عند حفظ DeepSeek (#534، يغلق #516/#524؛ #528/#529). شكرًا لكل من @fanfpy و@asahikiko و@santhreal و@sTunnaSu و@abhishekjaisinghani و@huangcheng و@ShiroKSH و@Meru143 و@DIEGOD79 و@not-knope على الكود والتقارير والتشخيص.

  • 2026-07-13 🔒 تحصين أمني: إغلاق جميع نتائج التدقيق الخارجي العشرة + دفعة مساهمين: تمّت معالجة جميع النتائج العشر من التدقيق الأمني الخارجي بتاريخ 2026-07-10 (issue #476، نقاش #468) على main — إعادة بناء Docker متعددة المراحل بصور أساسية مثبّتة عبر digest، وصندوق رملي للباكتيست مُحصّن بـ AST يمنع الشبكة/subprocess/eval/os.environ/فتح الملفات غير الآمن (حتى داخل أجسام الدوال المتداخلة)، وتذاكر مصادقة SSE قصيرة العمر وأحادية الاستخدام، وتحصين Compose (نظام ملفات جذري للقراءة فقط، إسقاط الصلاحيات، حدود الموارد)، ومصادقة + تحديد معدّل على /correlation، ورؤوس أمان، واعتماديات مثبّتة بالتجزئة، وغيرها. كما دُمج: وضع TAP الاختياري لعزل مفتاح Alpaca (#377، شكراً @0xZKnw)، وإظهار معدل دوران المحفظة المُحقَّق ضمن مقاييس الباكتيست (#478، شكراً @Robin1987China)، وعامل أكاديمي Frazzini-Pedersen للمراهنة ضد بيتا (Alpha Zoo → 461، #480، شكراً @YogeshModi24)، وإصلاح تحيّز الاستشراف المسبق عبر جميع محسّنات المحفظة الخمسة (#487، شكراً @YZY0108)، وإصلاحان لإعدادات preflight/provider (#479/#484، يغلقان #477/#482، شكراً @ananaymital/@Bortlesboat).

  • 2026-07-12 🧪 مدير تطوير الاستراتيجيات + دفعة إصلاحات المساهمين: مهارة strategy-dev-manager الجديدة (رقم 87) تحوّل الأوراق الأكاديمية وتقارير الوسطاء إلى عوامل/استراتيجيات مسجلة مع مخزن artifacts دائم ومراقبة تلقائية لاضمحلال IC/Sharpe — تقود أدوات sdm_register / sdm_status / sdm_decay_scan دورة الحياة active → monitoring → decayed → disabled فوق ~/.vibe-trading/ (#457، يغلق #455، شكراً @shadowinlife). كما دُمج: يقبل تبويب Correlation رموزاً مجردة (AAPL,SPY) ويمشي سلسلة loader fallback كاملة (#472، يغلق #471، شكراً @yxhuang)، ويحترم local loader الفاصل الزمني المطلوب عبر إعادة تجميع OHLCV (#467، شكراً @Shizoqua)، ووصل تاريخ عقود Binance USD-M الدائمة مع توجيه صريح BTC-USDT-PERP وفصل سعر التنفيذ عن سعر العلامة كأول شريحة من #462 (#470، شكراً @honginp)، وتعمل استيرادات FastMCP transport عبر كلا تخطيطي الوحدات (#469، شكراً @roberttidball)، وأصبح Requesty متاحاً كمزوّد بوابة LLM متوافقة مع OpenAI (#474، شكراً @Thibaultjaigu).

  • 2026-07-11 🚀 صدر الإصدار v0.1.11 (pip install -U vibe-trading-ai): يجمع ثلاثة أسابيع من العمل منذ 0.1.10 — اختبار رجعي من الدرجة الأولى للأسهم الهندية (NSE/BSE)، وطبقة العوامل الأساسية الآمنة زمنياً (PIT-safe) (Alpha Zoo → 460)، وبيئة تشغيل قنوات IM بـ16 محوّلاً، والأبحاث المجدولة من طرف إلى طرف، وبيانات QVeris المدفوعة الاختيارية، ودفعة مساهمي اليوم: محسّن يراعي الدوران (#466، شكراً @Robin1987China)، وأداة رؤية analyze_image + إقران NapCat DM + إصلاح قراءة وسائط IM (#464/#463/#465، شكراً @fei-moss)، وتسلسل Longbridge Decimal (#459، شكراً @fanfpy)، وحُرّاس عدّ المانيفست المحزوم (#461، شكراً @asahikiko). التفاصيل الكاملة: CHANGELOG · ملاحظات الإصدار.

  • 2026-07-10 🇮🇳 دعم الأسهم الهندية (NSE/BSE) + مركزية متغيرات البيئة: محرك مخصص IndiaEquityEngine — تسوية T+1، ونطاقات حدود السعر، وحزمة تكاليف STT/الدمغة/البورصة/SEBI/GST قابلة للتهيئة — مع توجيه رموز .NS/.BO، وجسر بيانات Shoonya/Dhan للقراءة فقط (اختياري)، وانضمام 255 عاملاً من alpha101/qlib158 إلى الكون الجديد equity_in (#305، شكرًا @muku314115). تتدفق متغيرات البيئة الآن عبر مخطط Pydantic واحد EnvConfig مع بوابة CI تعتمد على AST لمنع انتشار os.getenv مستقبلاً (#440، يغلق #438، شكرًا @shadowinlife). أيضًا: مربع تأكيد ثانٍ قبل اعتماد تفويض تداول حقيقي مع توحيد رسائل الأخطاء (#453، شكرًا @wison1717-maker)، واختبارات مسارات scheduled-research (#452، شكرًا @Robin1987China)، ولم تعد نماذج GLM التفكيرية تفقد تدفق الاستدلال على مزود zhipu (#458).

  • 2026-07-09 🧯 إزالة عائق بدء Docker + دفعة مساهمين لـ provider/CLI: لم يعد بدء Docker/server ينهار عندما يمرّ FastAPI route iteration على عنصر included-router-like لا يملك path (#450، شكراً @Penn-Live). كما دُمجت دفعة quick-win من إصلاحات المساهمين: توحّدت تواقيع fetch() في loaders الخاصة بـ OKX / Tushare / yfinance مع البروتوكول (#437، شكراً @shadowinlife)، ويحفظ CLI resume prompt أول رسالة يكتبها المستخدم (#448، يغلق #447، شكراً @morluto)، وتحوّل default في Codex OAuth إلى openai-codex/gpt-5.4 (#446، شكراً @morluto)، وأصبح Kimi for Coding مزوداً مستقلاً (#435، شكراً @yxhuang)، ووُصلت opencode provider mappings (#444، شكراً @imsankz)، كما صُححت code fences في مراجع Tushare من pyhton إلى python (#449، شكراً @flash1234pku). شمل التحقق focused server/CLI/provider/loader tests وDocker build و/health smoke.

  • 2026-07-08 💎 طبقة العوامل الأساسية (المرحلة 1) + بيانات QVeris المدفوعة الاختيارية + يوم صيانة: بيانات SEC المالية الآمنة زمنياً (PIT-safe) تتدفق الآن مباشرة إلى panels العوامل اليومية —— أعمدة fund:*، وتثبيت على تاريخ filed (مع حماية من إعادة البيانات وإطارات YTD)، و4 عوامل جودة/قيمة جديدة (يضم zoo الآن 460 alphas). اكتسب توجيه البيانات مساراً مدفوعاً اختيارياً: تبقى المصادر المجانية الـ18 هي الافتراضية، بينما يفتح QVeris أكثر من 63 مزوداً عبر Settings → QVeris أو vibe-trading data mode paid (انظر قسم QVeris أدناه). أيضاً: اكتملت وحدات api_server (من 1,103 إلى 371 سطراً، #424 يغلق #331، شكراً @shadowinlife)، ولم يعد validation.json في الاختبار الخلفي يتطلب وجود دليل artifacts مسبقاً (#429، شكراً @isaveall)، وأصبحت أخطاء --swarm-run أوضح (#428، شكراً @isaveall)، وقمنا بالتراجع عن governance stack الذي عطّل محادثات الجلسات (#433، شكراً @yxhuang على التشخيص الدقيق).

  • 2026-07-07 ✅ دفعة PR للمساهمين: دُمجت أعمال المساهمين المنتظرة: إعداد IM channel timeout (#413، شكراً @SyntaxSawdust)، وAlpha Library social previews ودليل المبتدئين (#396، #393، شكراً @kadaliao)، وvalue-investing skills / tools / committee presets (#407، شكراً @sambazhu)، ومعالجة حقول order sizing ذات القيمة الصفرية في trading_place_order (#417، شكراً @irfanallana-oss)، وtimezone-aware UTC timestamps عبر session/API paths (#397، شكراً @mustafakamal88).

  • 2026-07-06 🧭 تقوية preflight وشرائح API وCN search fallback: لم يعد provider preflight يتبع redirect (#404، يغلق #402، شكراً @SyntaxSawdust)، وانتقلت بقية API routes إلى focused modules (#387، supersedes #383-#386، شكراً @shadowinlife). يشمل CN web-search fallback الآن Alibaba Cloud IQS (#408، شكراً @sambazhu). وأضافت cleanup من الصيانة اختبارات no-network fallback وتنظيف EOF whitespace (fbac74f)؛ وأصبح main CI أخضر (run 28780619018).

  • 2026-07-05 ✅ إغلاق دفعة PR للمساهمين ونجاح Windows baseline: دُمجت اليوم أربعة PR غير draft اختيرت للمراجعة. لم تعد عمليات A-share mootdx batch pull تبتلع KeyboardInterrupt / SystemExit عبر bare except، ويمكن الآن إيقاف السحب الطويل بـ Ctrl+C بشكل صحيح (#399، يغلق #398، شكراً @shadowinlife). دُمجت أيضاً Settings route slice وحدود التبعيات المصححة عبر PR الأصلية مع حفظ credit للمساهمين (#382، #390، شكراً @shadowinlife و@aeonframework). أصبحت Windows baseline compatibility تعزل loader caches، وتجعل OAuth cache assertions واعية بالمنصة، وتتخطى اختبار fork-only mock واحداً على Windows، وتتجاوز proxy في MCP loopback fixtures (#401، شكراً @Elfsa-Miranda). Validation: 4701 passed, 47 skipped.

  • 2026-07-04 🧩 شرائح API routes، ودليل صيني للمبتدئين، وحدود تبعيات أكثر أماناً: انتقلت IM channel وSettings routes من api_server.py إلى src/api/channels_routes.py / src/api/settings_routes.py متابعةً لمسار #331 الضيق للتقسيم المعياري (#379، #382، شكراً @shadowinlife). أضيف إلى Wiki دليل صيني للمبتدئين غير المتخصصين في المالية (#393، شكراً @kadaliao)، وتحدّثت حدود Pillow / LangChain / LangGraph إلى مسار patched قابل للتثبيت (#390، شكراً @aeonframework).

  • 2026-07-04 🧹 تنظيف طوابع UTC الزمنية لمسارات الجلسات وAPI: تم إحكام إصلاح الطوابع الزمنية #395 بحيث تُصدر طوابع session وgoal وchannel وAPI قيم UTC واعية بالمنطقة الزمنية بصيغة ISO صريحة.

  • 2026-07-03 🛡️ Robinhood MCP refresh + API modularization + SSRF guard: يستخدم Robinhood Agentic Trading الآن أسماء MCP الحالية عبر generic reads وlive-runner plumbing وdefault read-only seeds واختبارات mandate-gate، كما يحترم interactive startup ترتيب البحث نفسه عن .env الذي يستخدمه provider loader (~/.vibe-trading/.env → agent/.env → $CWD/.env) (#391، يغلق #381 و#380). انتقلت System routes (/health و/correlation و/system/shutdown و/skills و/api) إلى src/api/system_routes.py كـ narrow API modularization slice تالية (#378، شكراً @shadowinlife). ترفض channel media SSRF defenses الآن أهداف CGNAT/mesh/non-global وQQ media redirect-to-internal قبل fetch (#389، شكراً @hobostay).

  • 2026-07-02 ⚡ Factor acceleration + safer runtime boundaries: تستخدم مسارات rolling factor الساخنة الآن fast paths عبر bottleneck/NumPy، وتتجنب موازاة alpha bench تمرير panel payload ضخم لكل worker مراراً، وأضيفت regression coverage لحسابات base equity (#376، يغلق #339، والعمل الأصلي من #342 بواسطة @shadowinlife). نُقلت Upload وShadow report routes من api_server.py الضخم كأول slice ضيق من API modularization، مع إبقاء #331 مفتوحاً (#375، مبني على #358، شكراً @shadowinlife). ترث عمليات generated backtest الفرعية الآن بيئة allowlist فقط بدلاً من parent secrets surface الكامل (#374، يغلق #332)، وحصلت IM channels على /new session reset وأوامر pairing غير حساسة لحالة الأحرف (#372، يغلق #371، شكراً @shadowinlife).

  • 2026-07-01 🧹 Security polish + tracker cleanup: شُدِّدت defaults الخاصة بـ API/Docker/frontend dev، واستقرت Settings channel وzh-CN edges، وأُزيلت frontend dependency/CSP alerts، ونُظِّفت عناصر WhatsApp + paper-trading القديمة من tracker (#338، #351، #349، #365، #367، #350، #335، #283).

  • 2026-06-30 💬 بيئة تشغيل قنوات IM لتسليم الأبحاث: يستطيع Vibe-Trading الآن وصل بيئة تشغيل جلسة agent نفسها بـ 16 محوّلاً مدمجاً للرسائل — WebSocket وTelegram وSlack وDiscord وMatrix وWhatsApp وSignal وQQ/NapCat وWeChat/WeCom وFeishu/Lark وDingTalk وTeams وemail وMochat. تغطي CLI (vibe-trading channels status/start/stop/login/pairing) وREST (/channels/status و/channels/start و/channels/stop و/channels/pairing/command) ولوحة Web UI Settings الحالة وتلميحات الاسترداد والبدء/الإيقاف وsender pairing؛ وتبقى المحولات المعتمدة على SDK خلف extras مثل vibe-trading-ai[telegram] أو vibe-trading-ai[channels] (#341).

  • 2026-06-29 🛡️ Live advisory safety + Trading 212 read-only connector + Windows/Gemini fixes: live order guards now have an opt-in, broker-agnostic PreTradeAdvisoryInterface that records advisory reviews without bypassing the mandate gate, kill switch, or audit trail (#328, closes #317, thanks @shadowinlife). Trading 212 joins the connector layer with read-only account, positions, orders, history, and instrument-metadata support; place_order / cancel_order still hard-refuse until a structural paper/live boundary exists (#321, closes #309, thanks @mvanhorn). Windows startup avoids the pandas 3.0 Timestamp crash via the <3.0.0 constraint (#329, closes #324, thanks @hannibal-lee); Gemini thought_signature dict-history replay was verified/fixed on main (#318); .US financial statements now route to SEC EDGAR instead of Eastmoney (#325); and the Alpha Library landing page got cache/date/selector/noscript/DNS-prefetch hardening while heavier CSP and social-card follow-ups stay tracked (#323).

  • 2026-06-28 🧰 أوامر setup/dev عبر المنصات + تقوية runtime وأدوات الملفات: يتعامل vibe-trading setup وvibe-trading dev الآن مع بناء TypeScript على Windows، وتشغيل backend من cwd الصحيح، واستخدام منفذ Vite 5899، وإغلاق العمليات الفرعية بنظافة عند الخروج (#292، شكراً @digger-yu). كما أصبح polling لحالة Runtime يتدهور بأمان بدل الانهيار (#322)، وتُنظَّف مفاتيح cache الخاصة بـ MCP OAuth (#313)، وشُدِّدت defaults الخاصة بـ OpenAI والتحقق من Robinhood agent.json (#319، #320، شكراً @mvanhorn)، وحصلت أدوات الملفات على read/write roots منفصلة واختبارات sandbox أوسع (#299، شكراً @skloxo).

  • 2026-06-27 🧯 مرونة content-filter + تنظيف عقد features في Shadow Account: أصبحت تشغيلات event-driven وswarm تتجاوز إصابات content-moderation الفردية من LLM، وتعرض تحذيراً في run cards عندما ترتفع معدلات الفلترة، وتتعرف على أسباب Gemini safety finish بدلاً من إيقاف التحليل كاملاً (#308، يغلق #307، شكراً @shadowinlife). كما تشترك مراحل استخراج Shadow Account وتوليد الكود في عقد PRICE_FEATURES واحد وتحافظ على حدود العوائد بأربع منازل عشرية، ما يمنع drift بين القاعدة والكود وفقدان دقة prior_5d_return (#316، شكراً @Robin1987China).

  • 2026-06-26 🎯 دخول مشروط لـ Shadow Account + توجيه tushare لـ ETF/المؤشرات/هونغ كونغ: أصبحت قواعد Shadow Account المستخرجة تحمل نطاقات RSI / العائد السابق، فيدخل SignalEngine المُولَّد بناءً على شروط حقيقية (RSI ضمن النطاق، والعائد السابق ضمن النطاق) بدلاً من تكرار وتيرة الاحتفاظ بشكل أعمى (#314، متابعة لـ #302، شكراً @Robin1987China). كما يوجّه loader الخاص بـ tushare صناديق ETF/LOF إلى fund_daily()، والمؤشرات إلى index_daily()، وأسهم هونغ كونغ إلى hk_daily() بدلاً من استدعاء daily() الذي يعيد فراغاً بصمت لغير الأسهم، مع تحذيرات لكل رمز عن النتائج الفارغة والجلب الجزئي (#315، يغلق #310، شكراً @shadowinlife).

  • 2026-06-25 🧪 JSON صارم للتحقق + سياق agent أهدأ: أصبح مسار التحقق المستقل للاختبار الخلفي يطبّع قيم NaN / Infinity المتداخلة قبل كتابة artifacts/validation.json أو stdout في CLI، فلا تتعطل parsers الصارمة أمام payload التحقق (#306، شكراً @gyx09212214-prog). كما صار prompt الخاص بالـ agent يستنتج عدد مصادر البيانات الحالي من loader registry، ولا تعمل _microcompact() إلا عند وجود ضغط tokens حقيقي، فلا تُمسح نتائج الأدوات القديمة مبكرًا في التشغيلات القصيرة (#296، يغلق #282، شكراً @MarkfuGod).

  • 2026-06-24 🎯 سياق سعري لـ Shadow Account + واجهة صينية تفاعلية + إصلاح auth على LAN: أصبح استخراج قواعد Shadow Account يرى سياق الدخول الآمن point-in-time — entry_rsi14 وprior_5d_return عبر loader registry عند buy_dt — مع تدهور graceful عند عدم توفر الشبكة أو البيانات (#302، متابعة لـ #295، شكراً @Robin1987China). كما انتقلت اللوحات الرئيسية في Web UI إلى ترجمات English / zh-CN تفاعلية عبر charts وchat وAlpha Library وCorrelation وRun Detail (#301، شكراً @skloxo). وبعد تحصين CSRF، عادت deployments البعيدة same-origin التي تضبط API_AUTH_KEY إلى دعم POST / upload، بينما تبقى origins المتقاطعة غير المطابقة محظورة (#304، شكراً @Hinotoi-agent).

  • 2026-06-23 🛡️ تحصين CSRF لواجهة API المحلية: لم يعد بإمكان صفحة ويب خبيثة إرسال طلبات cross-site غير آمنة (POST/PUT/DELETE) إلى واجهة loopback — فـ CORS يمنع قراءة الاستجابة لكنه لا يمنع الأثر الجانبي، لذا أصبحت ثقة dev-mode الخاصة بـ loopback تطبّق حارس cross-site الحالي على الطرق غير الآمنة قبل منحها الثقة. الطرق الآمنة ورفع الملفات عبر CLI المحلي / غير المتصفح غير متأثرة (#293، شكراً @Hinotoi-agent).

  • 2026-06-22 🔧 إصلاح OAuth لتفويض التداول الحي + إصلاح عنوان Alpha Zoo: يُبقي connector authorize الآن مصافحة OAuth مفتوحة طوال تسجيل دخول الوسيط الذي قد يستغرق دقائق (قابل للضبط عبر VIBE_LIVE_AUTHORIZE_TIMEOUT_SECONDS)، ولم يَعُد يُشغِّل خادم callback منافسًا عند إعادة المحاولة، فأصبح الرمز يُحفَظ فعلاً (#281، يغلق #259، شكراً @Robin1987China). ولم تَعُد صفحة Alpha Zoo تعرض عدد الـ alpha مرتين (#287، يغلق #286، شكراً @digger-yu). كما حصلت الأبحاث المجدولة على وثائق استخدام شاملة (#288).

  • 2026-06-21 ⏰ مُنفِّذ الأبحاث المجدولة + مكتبة التقارير + إسناد ما بعد الاختبار الخلفي: تعمل الأبحاث المجدولة الآن من طرف إلى طرف — مُنفِّذ خلفي مُعطَّل افتراضيًا (VIBE_TRADING_ENABLE_SCHEDULER) يُشغِّل المهام المستحقة وفق interval/cron عبر بيئة تشغيل الجلسة (#278، شكراً @mvanhorn، يغلق #254). وتَسرُد صفحة مكتبة التشغيل /reports الجديدة عمليات التشغيل ذات التقارير وتبحث فيها وتُرشِّحها، مع روابط إلى Run Detail + Compare (#224، شكراً @LemonCANDY42). وبعد كل اختبار خلفي يُجري الوكيل الآن إسنادًا متعدّد الطبقات — الرابحون/الخاسرون على مستوى الصفقة، وانحدار بيتا، وتحليل أنظمة السوق (regime)، واختبار مونت كارلو للتباديل — مشروطًا بتوفّر البيانات والتوجيه (#280، شكراً @shadowinlife).

  • 2026-06-20 🔬 اكتمال حلقة Research Autopilot (المرحلة 3) + حارس سلامة OHLC على حدود المُحمِّل + 4 عوامل ألفا أكاديمية: أصبح Research Autopilot ينفّذ الفرضية → محرّك الإشارة → الاختبار الخلفي من طرف إلى طرف — حيث يكتب scaffold_signal_engine محرّكًا مطابقًا لعقد runner، ويعيد link_autopilot_backtest مقاييس التشغيل تلقائيًا إلى الفرضية (68 أداة) (#267). ويُسقط فحص سلامة OHLC البنيوي الأشرطة المعيبة (high < low، الأسعار غير الموجبة، وعدم إحاطة high/low بـ open/close) مركزيًا عند حدود المُحمِّل، بما يحمي كل مصادر البيانات (#274، شكراً @Shizoqua). كما تتوسّع عائلة عوامل ألفا الأكاديمية من 6 إلى 10 — انعكاس Jegadeesh، وقمة 52 أسبوعًا لـ George-Hwang، وانعدام سيولة Amihud، والتواء Harvey-Siddique (456 عاملًا) (#277، شكراً @Robin1987China).

  • 2026-06-19 🚀 v0.1.10 — طبقة بيانات عالمية: تنمو مصادر بيانات السوق من 10 إلى 18 (مجانية Eastmoney / Sina / Stooq / Yahoo + محكومة بمفتاح Finnhub / Alpha Vantage / Tiingo / FMP، مع fallback مرتّب حسب خطر حظر الـ IP)، إضافةً إلى 18 أداة بيانات للقراءة فقط (تدفق الأموال، لوحة التنين والنمر، التدفق الشمالي، التداول بالهامش، الصفقات الكتلية، SEC EDGAR + XBRL، القوائم المالية، سلاسل الخيارات، فرز كامل السوق…) عبر الأسهم الصينية / الأمريكية / هونغ كونغ، وكلّها مكشوفة عبر MCP. تتضمّن هذه الإصدارة أيضًا كل تحديثات ما بعد 0.1.9 —— 10 موصّلات وسطاء، وalpha compare، وإصلاح موثوقية المزوّدين، وذاكرة تخزين بيانات اختيارية. pip install -U vibe-trading-ai

  • 2026-06-18 🔬 المرحلة الأولى من Research Autopilot + محمّل Data Bridge محلي، إضافةً إلى تنبيه أمني بشأن Discord: تربط أداتا run_research_autopilot وgenerate_backtest_config الجديدتان مسار Hypothesis → Research Goal → backtest من طرف إلى طرف (الآن 50 أداة)، ويقرأ محمّل local الجديد بيانات OHLCV مباشرةً من ملفاتك CSV / Parquet / DuckDB (#260، #252، شكراً @Robin1987China)، إضافةً إلى تحليل استدعاءات أدوات DeepSeek DSML ودفعة لتقوية احتواء المعرّفات. ⚠️ تنبيه أمني: دعوة المجتمع القديمة على Discord تشير الآن إلى خادم لا نتحكم به (تصيّد بانتحال "تحقّق" محفظة Collab.Land) — أُزيلت بالكامل، وخادم HKUDS (discord.gg/6TdQnT5xcF) هو Discord الرسمي الوحيد. لن نطلب منك أبداً ربط محفظة.

  • 2026-06-17 🧩 توافق التثبيت + إصلاحات مزوّدي Opus/Kimi: لم يعد التثبيت الأساسي pip install vibe-trading-ai يجلب سلسلة الاعتماد الاختيارية pyharmonics / ta؛ أصبح كشف الأنماط التوافقية خلف extra باسم vibe-trading-ai[harmonic] مع بقاء detector المضمّن متاحاً (#250، يغلق #249). ولم يعد Agent loop يرسل رسائل assistant-prefill handoff التي يرفضها Opus 4.8+، كما يمكن لـ Kimi/Moonshot تجاوز User-Agent عبر MOONSHOT_USER_AGENT (#248، يغلق #246 و#204)؛ وتغطي اختبارات المتابعة مساري background-result وauto-compact handoff مباشرة (#251).

  • 2026-06-16 🛡️ تعزيز الأمان/API + alias لـ GLM/Zhipu: تتطلب كتابات Settings المصادقة عند تفعيلها (#245)؛ وتتطلب أدوات shell-capable في جلسات API تفعيلًا صريحًا عبر VIBE_TRADING_ENABLE_SHELL_TOOLS=1 (#243)؛ ويتطلب local shutdown المصادقة عند ضبط API key (#241)؛ وتُرفض Host التي تبدو كـ loopback لكنها غير موثوقة بدل معاملتها كمحلية (#242). كما صُقلت تفاصيل التشغيل: يتزامن Web chat مع المحاولات المكتملة (#236)، وتُصدر run cards صيغة strict JSON للمقاييس غير المنتهية (#238)، وتتراجع قيم RSSHUB_TIMEOUT_S / RSSHUB_FETCH_BUDGET_S المشوهة بأمان (#240)، وثُبّت fallback إعادة المحاولة في ddgs باختبار انحدار (#239). وأصبح GLM/Zhipu alias من الدرجة الأولى مع استنتاج اسم النموذج (#247، يغلق #237).

  • 2026-06-15 🧭 متانة بحث الويب + إصلاحات استمرارية التشغيل في واجهة الويب: لم يعد web_search يفشل عند تقييد مزوّد بحث واحد——إذ يستعلم الآن عدة محركات مجانية بلا مفاتيح بالترتيب (DuckDuckGo، Google، Bing، Brave، Mojeek، Yahoo) مع إعادة محاولة/تراجع، ويعامل "لا نتائج" كإجابة فارغة لا كخطأ، ويعيد رسالة قابلة للتنفيذ بدل ❌ مجرّدة عندما تُقيَّد كل المحركات (يمكن تجاوز قائمة المحركات عبر VIBE_TRADING_SEARCH_BACKENDS) (#232، يغلق #231، شكراً @Ethan-sun01). وفي واجهة الويب، لم يعد تبديل الصفحات أثناء التشغيل يُجمِّده——إذ تعيد المحادثة الاشتراك في البث الحي وتعيد تشغيل التقدّم الفائت عند العودة (#234)——وأصبح زر الإيقاف يسري أثناء البث وبين الأدوات لا عند حدود التكرار فقط (#235)، ما يغلق شِقَّي #229 (شكراً @kalkinj). كما أصبح محمّل baostock يقبل الرموز الأصلية sh.601398 / sz.000001 إلى جانب صيغة tushare 601398.SH (#230، شكراً @bhlt).

  • 2026-06-14 📊 استهلاك التوكنات لكل تشغيل + تحميل رسوم Run Detail عند الطلب: أصبح كل تشغيل agent يحفظ استهلاك التوكنات المُبلَّغ من المزوّد كملف llm_usage.json على مستوى التشغيل——المزوّد/النموذج، والإجماليات التراكمية، والعدّ لكل تكرار——ويُعرَض إضافيًا على /runs/{id}، بحيث تبقى تكلفة التوكنات قابلة للتدقيق بعد انتهاء التشغيل واختفاء البث الحي (قيم المزوّد فقط؛ بلا التقاط prompt/محتوى ولا تقدير سعر) (#223، شكراً @LemonCANDY42). كما لم تعد صفحة Run Detail تُحمّل شموع كل الرموز مقدمًا: تبقى استجابة /runs/{id} الافتراضية دون تغيير، لكن الواجهة الآن تعرض ملخّص التشغيل أولًا ثم تُحمّل رسم كل رمز عند الطلب عبر وضعَي ?chart_payload=summary / ?chart_symbol= الاختياريين، مع حالة تحميل لكل رمز وزر "تحميل الكل مع شريط تقدّم" (#225، شكراً @LemonCANDY42). ويُختتم ذلك بإصلاحين في الـ loader: لم تعد حدود end الحصرية في yfinance تُسقِط آخر يوم تداول في النطاق المطلوب——إذ يمرّر الاستدعاء الآن end + يوم واحد بينما تحتفظ مفاتيح الكاش بالنطاق الأصلي (#226، شكراً @gyx09212214-prog)——وأصبحت القيمة المُشوَّهة لـ CCXT_TIMEOUT_MS / OKX_TIMEOUT_S تُصدر تحذيرًا وتعود إلى قيمتها الافتراضية بدل أن ترفع استثناءً عند الـ import وتعطّل الإقلاع (#227، شكراً @gyx09212214-prog).

  • 2026-06-13 ↩️ استئناف جلسة سابقة بالمعرّف من سطر الأوامر: أصبحت واجهة CLI التفاعلية تطبع session-id عند الخروج، مع تلميح قابل للنسخ vibe-trading resume <session-id>——فلم يعد العثور على trace لتشغيل منتهٍ يتطلّب تخمين أي مجلد تحت agent/sessions/ هو الأحدث زمنياً. الأمر الفرعي الجديد vibe-trading resume <session-id> يعيد فتح تلك الجلسة بالذات ويعيد تشغيل أحدث أدوارها في الـ loop؛ والمعرّف غير الموجود يفشل فوراً بدل بدء جلسة فارغة بصمت (#218، شكراً @zwrong).

  • 2026-06-12 🩺 إصلاح شامل لموثوقية المزوّدين——تعليق DeepSeek، الوصول إلى Kimi، حيوية البث: مجموعة من البلاغات——تشغيلات DeepSeek عالقة عند "Agent is working…" (#208، شكرًا @XYWOX)، رسالة reached max iterations تخفي استجابات نموذج فارغة (#203، شكرًا @mojianliang)، واجهة لا تتعافى بعد التوقف (#195، شكرًا @mafia23)، وKimi يرفض العميل (#204، شكرًا @liao497)——تشترك في جذر واحد: كل مزوّد متوافق مع OpenAI كان يمر عبر طبقة واحدة تطبّق خصوصيات DeepSeek/Kimi/Gemini عالميًا وتبتلع أخطاء البث بصمت. أصبح السلوك الخاص بكل مزوّد الآن في طبقة قدرات صريحة——التقاط/إعادة إرسال reasoning، وتوقيعات Gemini الفكرية، وUser-Agent الخاص بـ Kimi، وجسم reasoning في OpenRouter، كلٌّ مقيّد بمزوّده ولا يلوّث غيره. تُظهر تدفقات reasoning مؤشر "Reasoning…" حيًّا بدل الصمت؛ ويرفع فشلُ البث خطأ provider_stream_error سياقيًا مع إعادة محاولة واحدة للانقطاعات العابرة (أخطاء 4xx الحتمية تفشل فورًا) بدل التراجع الصامت إلى استدعاء غير متدفق بطيء؛ وتُشخَّص الاستجابة الفارغة كـ empty_model_response بدل "max iterations"؛ ولم تعد نبضات SSE تكسر إعادة التشغيل عند إعادة الاتصال؛ وتنتهي مهلة الأداة القارئة العالقة بدل الاختباء خلف النبضات للأبد. الأمر الجديد vibe-trading provider doctor يطبع لقطة مموَّهة للمزوّد/النموذج/الحزم/الوكيل لتشخيص التعليق البيئي بأمر واحد. يمكن لمستخدمي DeepSeek تفعيل المحوّل الأصلي الرسمي عبر pip install "vibe-trading-ai[deepseek]"، ويُطبَّق متطلب temperature=1 لنماذج kimi-k2.x تلقائيًا——مسار Kimi مُتحقَّق منه نهايةً إلى نهاية مقابل الـ API الحقيقي (استدعاء أدوات + إعادة إرسال reasoning متعدد الأدوار الصارم على kimi-k2.6).

  • 2026-06-11 🐝 أصبح عمّال swarm يجلبون بيانات السوق عبر طبقة الـ loader: كشف تشغيل للجنة الاستثمار على NVDA سلسلة من الثغرات——كان العمّال يكتبون سكربتات yfinance مرتجلة، ويثقون بشمعة أخيرة معطوبة (حجم تداول موجود لكن OHLC فارغة)، وتسرّب NaN إلى JSON غير صارم، وأعاد prompt المتابعة الفاقد للسياق التوجيه إلى preset خاطئ (#198، شكراً @BillDin على التشخيص الممتاز والإصلاحين). أصبح لدى عمّال swarm الآن أداة get_market_data محلية مدعومة بنفس سجلّ الـ loaders المُطبَّع الذي يستخدمه MCP——JSON صارم، والأعداد غير المنتهية تُسلسَل كـ null——موصولة بـكل preset لبيانات السوق (21 عاملاً عبر 13 preset) مع سياسة prompt توجّه أعمال OHLCV نحو الأداة أولاً (#199)؛ ويقبل run_swarm معامل preset_name صريحاً ويرفض مقاطع المتابعة الغامضة بدلاً من السقوط بصمت إلى equity_research_team (#200). وصار التأريض أذكى أيضاً: رمز سهم أمريكي مجرّد مثل NVDA في prompt السرب يُرقّى إلى NVDA.US (بحماية كلمات استبعاد)، فيبدأ العمّال من أسعار مرجعية مُسبقة الجلب. وتنضم الأداة إلى سجلّ الـ agent الرئيسي أيضاً——48 أداة الآن. إضافة إلى ذلك: بيانات Docker تبقى الآن بعد التحديثات——الذاكرة الدائمة وفهرس بحث الجلسات والمهارات التي أنشأها المستخدم وحسابات الظل وإعدادات الوسيط كلها في وحدات تخزين مسماة، فلم يعد docker compose up --build يمسحها (#197، شكراً @FlyerJ).

  • 2026-06-10 🐳 يصل Docker إلى Ollama على المضيف مباشرة دون إعداد: داخل الحاوية يشير localhost إلى الحاوية نفسها، لذا كان OLLAMA_BASE_URL=http://localhost:11434 الافتراضي يُفشِل الفحص المسبق للـ LLM في كل تركيبة Docker + Ollama. أصبح docker-compose.yml يشير افتراضياً إلى http://host.docker.internal:11434 (يمكن التجاوز بتصدير OLLAMA_BASE_URL) ويضيف تحويل host-gateway في extra_hosts بحيث يعمل الملف نفسه على Linux كما على Docker Desktop (#196، شكراً @ShahNewazKhan).

  • 2026-06-09 🔑 رسالة خطأ أوضح عند فتح واجهة الويب من جهاز آخر: عند الوصول إلى المحادثة من عميل غير loopback (جهاز آخر، أو مضيف جهاز افتراضي، أو هاتف على شبكتك المحلية) دون ضبط API_AUTH_KEY، كانت كل النقاط الحساسة——إرسال رسالة، قائمة الجلسات، حالة live——تُعيد 403، لكن المحادثة كانت تعرض فقط رسالة عامة «Failed to send message, please retry.». أصبح مسار الإرسال الآن يُظهر السبب الحقيقي——«Remote API access requires an API key. Add it in Settings, or run the backend on localhost for local-only use.»——كما يوضّح إعداد واجهة الويب في README الفرق بين localhost والشبكة المحلية والحلول الثلاثة (التصفّح عبر localhost على نفس الجهاز؛ ضبط API_AUTH_KEY وإدخاله مرة في Settings؛ أو VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1 لبوابة مضيف Docker Desktop) (#191، شكراً @mafia23).

  • 2026-06-08 🔧 إصلاح استدعاء الأدوات متعدد الأدوار في Gemini 3.x: يكتمل بهذا إصلاح نماذج التفكير Gemini 3.x. غطّى تبادل 6/05 (#176) السجلّ في الذاكرة فقط، لكن حلقة الـ agent الفعلية تعيد تشغيل السجل على هيئة dict بصيغة OpenAI حيث كانت LangChain تُسقِط thought_signature لكل استدعاء أداة قبل بناء الطلب——فظلّت استدعاءات الأدوات متعددة الأدوار تفشل بـ missing thought_signature (خطأ 400). أصبح يُعاد إرفاقه الآن عند نقطة الاختناق الوحيدة _convert_input التي يمر بها كل من invoke وstream (بما في ذلك الاستدعاءات المتوازية، حيث يُوقّع الأول فقط من بين N) (#184، شكراً @ngoanpv).

  • 2026-06-07 🐝 حالة swarm حيّة في مسار المحادثة: عندما يُطلق الـ agent سربًا متعدد الوكلاء (لجنة الاستثمار، مكتب الكَمّ، لجنة المخاطر، …)، تعرض المحادثة الآن بطاقة حالة مضمّنة تبث حالة كل worker——انتظار / تشغيل / اكتمال / فشل / محظور / إعادة محاولة——في الوقت الفعلي، بنفس وضوح كل وكيل الذي توفّره لوحة swarm المستقلة. تُجسّر أحداث وقت التشغيل إلى تدفّق SSE للجلسة دون تغيير واجهة /swarm/runs القائمة، وتُستعاد البطاقة المنتهية من نتيجة run_swarm النهائية عند إعادة الاتصال أو إعادة تشغيل السجل (#188، شكراً @BillDin). وصار توجيه الـ preset أدقّ: إذ يتقدّم الـ preset المُسمّى صراحةً (مثل investment_committee، بشرطة سفلية أو بدونها) على ترتيب الكلمات المفتاحية، ولم تعد الكلمة IV للمشتقات تُطابِق خطأً داخل كلمات عادية مثل «given» (#189، شكراً @BillDin).

  • 2026-06-06 ⚖️ مقارنة Alpha — عبر CLI وWeb UI وREST وagent: يقارن alpha compare الجديد قائمة مختارة يدويًا من عوامل Alpha Zoo بعضها ببعض على نفس universe والفترة، ثم يرتّبها حسب متوسط/انحراف IC وIR ونسبة IC>0 أو عدد العينات — مع إظهار فجوة كل عامل عن المتصدّر. وخلافًا لـ bench لكامل الـ zoo، فإنه يقيّم العوامل التي تسمّيها فقط (مرشّح المجموعة الجزئية الجديد run_bench(only=…))، فمقارنة ثلاثة عوامل لم تعد تُشغّل كل الـ 191 في الـ zoo. نواة مشتركة واحدة تشغّل كل الواجهات: vibe-trading alpha compare … --sort ir (CLI)، وعرض Compare في واجهة Alpha Zoo على الويب (حدّد العوامل في الكتالوج → مقارنة بنقرة واحدة مع جدول ترتيب متدفّق)، وPOST /alpha/compare + SSE (REST)، وأداة alpha_compare للـ agent للقراءة فقط (47 أداة الآن).

  • 2026-06-05 🇮🇳 connectors لـ Dhan + Shoonya (الهند) — 10 وسطاء إجمالاً: تضيف طبقة التداول التي تعتمد أولاً على connectors وسيطين هنديين هما Dhan وShoonya (أسهم NSE/BSE + المشتقات F&O)، ليصبح الإجمالي عشرة وسطاء. كلاهما paper + قراءة فقط — كما هي حال Longbridge، لا تكشف واجهتاهما عن مميِّز زمن تشغيل بين paper وlive، لذا يرفض place_order / cancel_order أي إعداد غير paper من السطر الأول (القاعدة: أي وسيط بلا حارس بنيوي paper/live يُقيَّد إلى paper + قراءة فقط) (#181، يغلق #174). كما تُصلح هذه الدورة نماذج التفكير Gemini 2.5 / 3.x: صار thoughtSignature لكل استدعاء أداة يُعاد تمريره عبر المسار المتوافق مع OpenAI، فلم تعد استدعاءات الدوال متعددة الأدوار تفشل بـ INVALID_ARGUMENT (#176، يغلق #170، شكراً @mvanhorn و@jliu6789). وأُضيفت docstrings صينية إلى جميع عوامل Alpha Zoo البالغة 452 (#180، شكراً @LeeCQiang)، وانضمت إلى CI حزمة اختبارات للواجهة الأمامية (197 اختبار vitest) إضافة إلى اختبارات أمان للواجهة الخلفية تغطي المصادقة / اجتياز المسارات / CORS (#175، شكراً @sambazhu).

  • 2026-06-04 🗃️ تخزين مؤقت محلي اختياري لجميع مصادر البيانات السبعة: مفتاح جديد VIBE_TRADING_DATA_CACHE يتيح لكل loader للاختبار الخلفي——tushare وokx وccxt وakshare وmootdx وyfinance وfutu——تخزين الأشرطة التاريخية المستقرة مؤقتاً ضمن ~/.vibe-trading/cache (المجلد الرئيسي للمستخدم، ولا يُكتب أبداً داخل المستودع)، بحيث تتخطى عمليات الاختبار الخلفي المتكررة والطويلة المدى / عبر الأسواق الشبكة وتتجنب حدود معدّل المزوّد. معطّل افتراضياً. تتخطى محمّلات الدُّفعات والاتصال (yfinance، futu) التنزيل المجمّع / اتصال FutuOpenD بالكامل عند إصابة المخزن المؤقت كلياً، ولا يخزّن حارس القِدَم أبداً نطاقاً ينتهي اليوم (شريطه الأخير ما زال قيد التكوين)، وتعود الإطارات المخزّنة مطابِقة بايتاً ببايت لما يُجلب حديثاً (#177، شكراً @mvanhorn). كما وصل دليل مساهمين جديد للـ PRs المدعومة بالذكاء الاصطناعي / الأتمتة، يوضّح الفحوص المحلية الآمنة والأسطح عالية الخطورة لـ broker/MCP/بيانات الاعتماد (#173).

  • 2026-06-03 🧹 فرز المجتمع + ربط التتبع: تحمل الآن إدخالات تتبع استدعاء الأدوات call_id الأصلي، بحيث يمكن مطابقة tool_result مع tool_call المقابل عند إعادة تشغيل تتبع التشغيل — وتبقى معاينات الوسائط مقتطعة للحفاظ على صغر حجم ملفات التتبع (#168، شكراً @zwrong). لم تعد تعليقات الكود المصدري تشير إلى مسار وثائق داخلي لا يستطيع المساهمون الخارجيون العثور عليه (#166، شكراً @jaleelpersonal). كما تم توضيح أن تحذير محلّل تبعيات langchain-community أثناء التثبيت هو مجرد إشعار غير ضار عن حزمة متبقية وليس فشلاً (#167)، وتم تنظيم معالجة ذهاب وإياب thoughtSignature لاستدعاءات الدوال في Gemini 2.5/3.0 كمهمة help wanted مع خطة إصلاح كاملة (#170، شكراً @jliu6789).

  • 2026-06-02 🔌 ستة connectors وسطاء جديدة (Tiger / Longbridge / Alpaca / OKX / Binance / Futu): تكتسب طبقة التداول التي تعتمد أولاً على connectors ناقلاً مباشراً عبر SDK إلى جانب IBKR (محلي) وRobinhood (MCP). يكشف كل connector عن حساب / مراكز / أوامر / quote / تاريخ للقراءة فقط، بالإضافة إلى وضع أوامر على حساب PAPER — اختبر استراتيجياتك عبر حسابات paper الخاصة بهؤلاء الوسطاء. كما يدعم خمسة منها (Tiger وAlpaca وOKX وBinance وFutu) وضع أوامر محدوداً ومحكوماً بـ mandate خلف نفس نموذج السلامة المطبّق على Robinhood: mandate يلتزم به المستخدم (نطاق الرموز / حجم الأمر / التعرّض / الرافعة / الحد اليومي)، وkill switch على مستوى الملفات، وبوّابة استباقية قبل التداول تُغلَق عند الفشل، وسجل تدقيق كامل. أما Longbridge فهو للقراءة فقط + paper حصراً (لا تكشف واجهته عن مميِّز زمن تشغيل بين paper وlive). كل تمييز بين paper وlive هو حارس بنيوي خاص بكل وسيط. أدوات جديدة trading_place_order / trading_cancel_order؛ وأُضيفت فئتا الأصول HK وأسهم A إلى universe الخاص بـ mandate. تجريبي / الاستخدام على مسؤوليتك.

  • 2026-06-01 🚀 إصدار v0.1.9 (pip install -U vibe-trading-ai): يجمع كل ما استُجد منذ 0.1.8. ملفات وسطاء تعتمد أولاً على connectors (IBKR محلي للقراءة فقط من TWS / IB Gateway + Robinhood Agentic Trading خلف OAuth وmandate مُلتزم وorder guard وسجل تدقيق وhalt فوري). زمن تشغيل Research Goal عبر CLI / REST / MCP / Web. تحديث swarm — reconcile حيّ + إبقاء MCP حياً، وأدوات MCP لعمّال swarm يضبطها المشغّل، وتحكم عشوائي صارم في alpha-bench، وretry_run جديد لإعادة تشغيل runs الفاشلة/القديمة (الآن 36 أداة MCP). إعادة هيكلة حزمة agent/cli/ مع واجهة طرفية محدّثة، ومحمّل mootdx لأسهم A بدون توكن، وجولة متانة عبر backtest / agent loop / sessions. أصبح --version يطابق دائماً الحزمة المثبّتة، مصلحاً انحراف 0.1.8 (#156).

  • 2026-05-31 🔌 بنية وسطاء تعتمد أولاً على connectors (IBKR + Robinhood): يبدأ الوصول إلى التداول الآن من connector profile قابل للاختيار، لا من مداخل منفصلة للوسيط أو live. أوامر vibe-trading connector list/use/check/account/positions/orders/quote/history وأدوات MCP trading_* تشترك في نفس profile المحدد، حيث تكون paper/live مجرد خاصية ضمن connector. يمكن استخدام IBKR فوراً عبر profile محلي للقراءة فقط من TWS / IB Gateway، بينما يُزرع مسار MCP الرسمي البعيد لـ IBKR كتحقق OAuth بنطاق mcp.read إلى أن تتوفر أسماء أدوات قراءة مستقرة. يظل Robinhood Agentic Trading هو connector MCP حيّاً ومحدوداً خلف OAuth وmandate مُلتزم وorder guard وسجل تدقيق وhalt فوري.

  • 2026-05-30 🧰 جولة متانة — backtest وagent loop وsession: تمرّ الآن signal engines المولّدة بواسطة LLM بتحقق مسبق من الواجهة قبل الإنشاء، فتلتقط مبكراً الأخطاء الشائعة مثل self-import الدائري، وغياب generate()، ووسائط __init__ بلا قيم افتراضية، ونوع الإرجاع الخاطئ، وتُرجِع أخطاء JSON قابلة للتنفيذ بدل traceback خام (#149)؛ ومتابعةٌ لاحقة توجّه أخطاء تحقق AST على مستوى المصدر عبر نفس مغلّف JSON النظيف. لم يعد agent loop يستنزف الخمسين تكراراً ليصل إلى حالة failed بلا أي مخرجات — فهو يحاكي أسلوب swarm worker المُجرَّب: يحقن wrap-up nudge عند 80% من ميزانية التكرار ويُسقط تعريفات الأدوات في التكرار الأخير لفرض إجابة نصية (#148)، مع حارس يجعله يُطلَق في المنتصف فقط كي لا يزيح سياق research-goal. كتابة رسائل الجلسة تجري الآن flush + fsync بعد كل append حتى تنجو ردود الـ AI الباهظة من تعطّل أثناء الكتابة، ويتخطّى مسار القراءة أسطر JSONL التالفة (مع تسجيل أول 200 حرف للاسترداد) بدل إعطاء 500 لنقطة /messages كاملة (#147). كما أصلح محرّر الإدخال في الويب معالجة Enter مع IME بحيث لا يؤدي Enter لتأكيد التركيب إلى إرسال في منتصف الكلمة (#146).

  • 2026-05-29 🔐 دعم Robinhood Agentic Trading (اختياري، استقلالية محدودة): أُضيف دعم Robinhood Agentic Trading (MCP عن بُعد، OAuth). مُعطَّل وللقراءة فقط افتراضياً؛ ويتداول الوكيل تلقائياً فقط ضمن mandate يلتزم به المستخدم (الرموز / حجم الأمر / التعرّض / الرافعة / الحد اليومي)، مع kill switch فوري على مستوى الملفات، وتصفية استباقية للمراكز، وانتهاء صلاحية تلقائي لـ mandate، وسجل تدقيق كامل، و runner مستقل دائم. لا حفظ للأموال ولا تشغيل لمنصة تداول — الوسيط يحتفظ بالأموال وينفّذ، ونحن ننقل النية فقط. تجريبي / الاستخدام على مسؤوليتك.

  • 2026-05-28 🧪 سلامة Swarm + بوّابة alpha صارمة + MCP لعمّال swarm: يحجب Swarm DAG الآن المهام المتفرعة عندما تفشل المهمة الأعلى (#145). دالة run_bench_strict() الجديدة تضيف فوق بوّابة IC تحكماً عشوائياً بنفس universe + قسمة train/test OOS لاصطياد العوامل التي تتبع beta السوق فقط (#143، شكراً @Soli22de). يستطيع عمّال Swarm الآن استدعاء أدوات من خوادم MCP خارجية يضبطها المشغل، مع تثبيت حدود الثقة باختبارات مخصصة (#142، شكراً @shadowinlife).

  • 2026-05-27 📊 مصدر بيانات A-share عبر mootdx + تحسين الإخراج: محمّل mootdx الجديد يتحدث بروتوكول 通达信 TCP الأصلي لبيانات OHLCV لأسهم A (بدون مصادقة، بدون قيود معدل لكل IP، يومي + intraday مع pagination تراجع بـ 25 صفحة)، ويُدرج بين tushare وakshare في سلسلة fallback (#107). محمّل CCXT يقرأ الآن HTTP_PROXY/HTTPS_PROXY/ALL_PROXY ليعمل جلب بيانات Binance/OKX العامة من الشبكات المقيدة (#126، شكراً @ruok808). عرض الإجابة النهائية أزال أيضاً فواصل --- الأفقية القبيحة بعرض كامل على CLI وWeb: يحث system prompt الآن agent على استخدام جداول markdown وعناوين ##، يجرّد CLI renderer أسطر HR المستقلة كدفاع متعمق، ويخفي chat bubble أي <hr> ينفذ عبر (#139، شكراً @sdwxm188).

  • 2026-05-26 ✅ إغلاق دورة حياة Research Goal: أصبح Goal mode يعمل كمنفّذ مهام حقيقي: إنشاء goal من Web UI ينشئ الجلسة أو يربطها ويرسل kickoff turn فوراً؛ يمكن متابعة active goals وتعديلها وإلغاؤها وإكمالها عبر Web/API/CLI/MCP؛ ويتقدم agent loop من لقطة goal الحالية (criteria وevidence وclaims وopen items) بدلاً من الاعتماد على prompt الأصلي فقط. عندما تكون criteria covered لكن goal لا يزال active، ينتقل النظام إلى audit/status update بدلاً من التوقف الصامت، مع تغطية انحدارية عبر backend وCLI وMCP وfrontend events.

  • 2026-05-25 🧼 واجهة Chat أنظف + سير composer: أصبحت واجهة Web UI تترك التركيز للمدخل التالي: انتقلت أوضاع upload وswarm وresearch-goal إلى قائمة + في composer بدلاً من لوحات عائمة تقاطع المحادثة. يظهر السياق النشط فوق حقل الإدخال كشرائح compact، ولا تتوسع تفاصيل goal إلا inline عند النقر على الشريحة. أزيلت طبقة i18n المخصصة القديمة لصالح نصوص إنجليزية مباشرة، وتظهر بطاقة Full Report فقط للتشغيلات ذات تقرير فعلي، كما أصبح تشغيل التطوير المحلي وتقارير الحالة أكثر ثباتاً لاختبارات browser smoke.

  • 2026-05-24 🎯 Research Goal runtime: أضيفت طبقة Research Goal مرتبطة بالجلسة عبر backend وCLI وAPI/MCP وSSE وWeb UI. تحفظ الأهداف claims وacceptance criteria وevidence rows وbudgets وcompletion policy؛ تستطيع agent tools إنشاء الأهداف وإضافة evidence؛ أصبح /goal مدخل CLI؛ تعرض REST/MCP لقطات goal وكتابات evidence؛ وتحافظ SSE على حداثة حالة chat clients. أغلقت إصلاحات audit اللاحقة مسارات verified evidence، ومنعت live-trading risk tiers عبر agent tools، وربطت goals المنشأة من CLI بالمنعطفات اللاحقة، ونظفت goal ledger عند حذف الجلسة، ووصلت replay-all، وأصلحت race في frontend snapshot بين الجلسات.

  • 2026-05-23 🖥️ تحديث CLI التفاعلي: تفتح واجهة الطرفية الآن ببانر Vibe-Trading أكبر، وفاصل prompt أوضح، وملخص للدورة السابقة، وتوقيت بعد التشغيل، ومسار نشاط بأسلوب Claude Code لعمل الوكيل الحي. تُعرض استدعاءات الأدوات، وجلب الويب/البيانات، وأفعال نمط shell، وإجابات Markdown، وجداول pipe كسجل أكثر قابلية للقراءة، بينما تحافظ تشغيلات pipe أو non-TTY على إخراج نصي مناسب للأتمتة. أصبحت لقطات CLI المولدة artifacts محلية بدلاً من ملفات docs ملتزم بها، مما يبقي المستودع أخف.

  • 2026-05-22 🧭 استعادة Swarm + إبقاء MCP حياً: أصبحت حالة Swarm تُصالح من ملفات المهام الحية عند كل قراءة، لذلك تستعيد عروض API/MCP/SSE/list التشغيلات التي تعطلت أو صارت stale بدلاً من عرض لقطة running للأبد. يرسل run_swarm نبضات MCP progress أثناء polling، مع إطار أول ثابت swarm_started run_id= كي يستطيع العملاء استعادة المقبض بعد سقوط النقل؛ كما يصدر worker نبضات خلال LLM streaming وgrounding fetch وتنفيذ الأدوات. يستخدم stale-run reaper عتبات خاصة بكل run ويستنتج الحالة النهائية من حالات المهام. لم يعد SwarmTool يلغي team ما زال يعمل لمجرد انتهاء wait budget، ويمكن لعملاء MCP استدعاء reap_stale_runs() للتنظيف الصريح. حدّثت دفعة DX اليوم أيضاً النماذج الافتراضية للمزودين، وواءمت فحص CI syntax مع حزمة agent/cli/ الجديدة. تغطي 22 اختباراً انحدارياً جديداً hydration، واستعادة الحالات النهائية، وجمع التشغيلات stale، وإيقاع keepalive، وتحمل env parsing، وربط heartbeat؛ ومجموعة swarm/MCP الكاملة عند 169 passed و4 skipped.

  • 2026-05-21 🧱 إعادة هيكلة حزمة CLI: تقسيم agent/cli.py (3216 سطراً) إلى حزمة agent/cli/ — واجهة تفاعلية، موجّه slash، مكوّنات Rich، وطبقة _legacy.py تحافظ على كل الأوامر الفرعية وتعيد تصدير كل الرموز العامة فتبقى cli.cmd_* / cli._INIT_ENV_PATH / cli.Confirm كما هي. Middleware جديد في FastAPI يخدم قشرة SPA عند فتح /runs/{id} أو /correlation مباشرة من المتصفح، مع نفس التضييق في بروكسي Vite للتطوير. توحيد سلسلة الإصدار عبر cli/_version.py (إنهاء الانحراف بين --version والبانر)، استعادة python -m cli عبر __main__.py، وتضييق بوابة chat بحيث تصل chat --help / chat extra إلى argparse القديم بدلاً من ابتلاع REPL لها.

  • 2026-05-20 🔬 Hypothesis Registry CLI: استكمال جانب CLI لـ Hypothesis Registry الذي شُحن backend فقط في 2026-05-16. يُخرج vibe-trading hypothesis list جدول Rich أو JSON (مع فلتر --status و--limit)؛ يعرض show لوحة تفاصيل تتضمن run cards المرتبطة؛ يقلب invalidate --note "..." الحالة إلى rejected ويُبقي ملاحظات الإبطال السابقة عند حذف --note. متغير البيئة VIBE_TRADING_HYPOTHESES_PATH ما زال مدعوماً، مع إضافة --path لكل استدعاء. تغطي 22 اختباراً جديداً الربط، إخراج JSON، فلتر الحالة، الحد، أخطاء معرّف مفقود، وثبات الملاحظات.

  • 2026-05-19 ✨ تغذية راجعة حيّة للأدوات + إلغاء سلس: لم تعد الأدوات الطويلة (backtests، PDF كبيرة، عمّال swarm) تبدو متجمدة. كل استدعاء أداة يُصدر الآن نبضة قلب كل 3 ثوانٍ، بالإضافة إلى تقدّم مرحلي مهيكل — يُظهر run_backtest علامات الأطوار (validate / simulate / finalize)، ويُحدّث read_document عدّاد كل صفحة على PDF أو كل ورقة على Excel، ويُعلِم read_url بمرحلتي fetch / parse. تعرض لوحة Rich Live في CLI دوّاراً Unicode وشريط تقدّم ASCII وETA، وتُكدّس حتى 3 أدوات متوازية مفهرسة بالاسم. تضيف الواجهة الأمامية مكوّن ToolProgressIndicator جديد مع تجميع rAF، وARIA role="status" + `` أصلي مخفي لقارئات الشاشة، وSVG ProgressRing حتمي عندما يكون المجموع معروفاً. أول Ctrl+C أثناء تشغيل CLI يستدعي الآن agent.cancel() للخروج السلس (تكتمل الخطوة الحالية وتُغلق التتبعات بنظافة)، والثاني خلال ثانيتين يفرض الإنهاء. تم استخراج عناصر أساسية قابلة لإعادة الاستخدام: ProgressBar.tsx وlib/tools.ts (تعيين i18n لأسماء الأدوات المشترك).

  • 2026-05-18 🧹 تنظيف + إصلاح 3 أخطاء كامنة: لم يعد CompositeEngine يوجّه رموز العقود الآجلة الصينية بدون لاحقة (مثل RB2410) إلى GlobalFuturesEngine بشكل خاطئ — انتقل _is_china_futures إلى وحدة _market_hooks المشتركة مع تطبيع حالة جدول المنتجات + حارس لبورصة غير صينية، وأُضيفت 9 حالات اختبار انحدار. تحفظ فهارس FTS5 للجلسات الآن الطوابع الزمنية، فيمكن لبحث الجلسات الفرز بالتاريخ، ونفس التغيير أصلح مسار إعادة الإدراج الذي كان يستبدل started_at بساعة الحائط في كل مرة. أُضيف /alpha المفقود إلى بروكسي تطوير Vite، فتُحلّ صفحة AlphaZoo الآن على npm run dev. تم تقييد tests/test_e2e_harness_v2.py (مجموعة e2e بـ LLM حقيقي) خلف VIBE_TRADING_RUN_LIVE_E2E=1 كي لا تغيّر CI شكلها بناءً على وجود مفتاح البيئة. أُضيفت إلى ruff قاعدة per-file-ignores لمكتبة المعاملات (الضوضاء F401 من 3783 إلى 0)، وفُعِّلت noUnusedLocals / noUnusedParameters في tsconfig الواجهة كحواجز انحدار، وحُذف 76 سطراً من نموذج vw = vwap(...) غير المستخدم في ملفات gtja191. الصافي -918 سطراً.

  • 2026-05-17 🧬 Alpha Zoo v1 (0.1.8): 452 ألفا كمّي جاهز عبر 4 zoos — qlib158 (ميزات Alpha158 من Microsoft Qlib، إسناد Apache-2.0)، alpha101 (إعادة تنفيذ "101 Formulaic Alphas" من Kakushadze بناءً على ورقة arXiv:1601.00991)، gtja191 (تقرير بحث Guotai Junan 2014 لعوامل تداول قصيرة الأجل)، academic (Fama-French 5 + Carhart momentum كـ proxy قائم على الأسعار). سطر أوامر واحد للـ bench على أي universe: vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025. تتضمن بوابة AST للنقاء، اختبار حماية lookahead، عزل الشبكة عبر pytest-socket، LICENSE.md لكل zoo، وسير عمل توقيع DCO لمساهمات المجتمع. تقديم Alpha Library تلقائياً على vibetrading.wiki/alpha-library/، مع منشور Research Lab Which of the 191 GTJA alphas still work in 2026?.

  • 2026-05-16 🧪 تحديث عمود البحث: أضيف backend Hypothesis Registry مع create_hypothesis وupdate_hypothesis وlink_backtest وsearch_hypotheses. تضيف قارئات المحتوى الخارجي الآن security_warnings تحذيرية فقط، وانتقل ماسح Shadow Account من calendar-phase stub القديم إلى تقييم حتمي لميزات OHLCV.

  • 2026-05-15 🪪 تعرض صفحة تفاصيل الـ run الآن بطاقة Trust Layer run card إلى جانب المقاييس والمخرجات، لتكمل الجانب الواجهي من عمل run_card.json الذي هبط في 2026-05-12. كما تم تعزيز PersistentMemory.add() على مسارات الطول والأسماء الفارغة أو التي تحتوي على فراغات فقط وبايتات التحكم C0/C1 ضمن فرز #108/#109/#110 (#112، شكراً @Teerapat-Vatpitak).

  • 2026-05-14 🌐 أصبح الويكي العام متاحاً على vibetrading.wiki مع أقسام docs وtutorials وResearch Lab وAlpha Library، ويُنشر عبر Cloudflare Pages. أصبحت الذاكرة الدائمة أيضاً قابلة للفحص من سطر الأوامر عبر vibe-trading memory list/show/search/forget (#102، شكراً @Teerapat-Vatpitak)، كما يدعم توليد الرموز وslugs للذاكرة الآن التايلاندية والعربية والعبرية والنص السيريلي (#104).

  • 2026-05-13 🧭 أصبحت تشغيلات السرب تؤسس عمل الوكلاء على بيانات سوق مجلوبة مسبقاً، مع تقارير محفوظة أنظف (#93، #84).

  • 2026-05-12 🧾 أصبحت الاختبارات الرجعية تنتج run_card.json وrun_card.md إلى جانب المخرجات لدعم تشغيلات بحثية قابلة لإعادة الإنتاج.

  • 2026-05-11 🧭 Memory slugs، ومحاسبة السرب، وفحص CLI المسبق: أصبحت الذاكرة الدائمة تحفظ أحرف CJK عند توليد slugs للملفات، مما يمنع اصطدامات أسماء صامتة لملاحظات الصينية/اليابانية/الكورية (#95، شكراً @voidborne-d). تفضل مجاميع تشغيل السرب الآن استخدام استهلاك الرموز المبلغ من المزود مع الإبقاء على التقدير الاحتياطي الحالي (#94، شكراً @Teerapat-Vatpitak)، كما حصلت واجهة تشغيل CLI على فحص بدء مبكر للمشكلات البيئية الشائعة (#96، شكراً @ykykj).

  • 2026-05-10 🧱 حواجز انحدار وبيانات تشغيل وصفية: أصبح استدعاء الذاكرة يتعامل مع الشرطات السفلية كحدود رموز، لذلك تطابق ذكريات snake_case مثل mcp_wiring_test استعلامات طبيعية مثل "mcp wiring" (#87، شكراً @hp083625). يملك خادم MCP الآن اختبار smoke عبر subprocess يغطي initialize → tools/list → tools/call لحماية مسار التعطل في أول استدعاء (#86)، كما وصلت تحسينات منخفضة المخاطر لاختبارات مسارات Windows، ومعالجة استثناءات API best-effort، والتحقق من allowed-root في run_dir للاختبار الرجعي، وبيانات provider/model في SwarmRun (#88، #90، #91، #92، شكراً @Teerapat-Vatpitak).

  • 2026-05-09 🛡️ تعزيز مسارات API واستقرار خادم MCP: تتحقق مسارات run/session في API الآن من معرفات المسار قبل البحث، وترفض المعاملات المشوهة التي تحتوي على أسطر جديدة مع تثبيت السلوك في مجموعة اختبارات auth/security (#80، شكراً @SJoon99). يسخن خادم MCP سجل الأدوات على الخيط الرئيسي قبل خدمة tools/call لتجنب تعطل أول استدعاء في اكتشاف الأدوات الكسول (#85، شكراً @Teerapat-Vatpitak). كما يحترم Vite dev proxy المتغير VITE_API_URL لأهداف الخلفية غير الافتراضية (#82، شكراً @voidborne-d).

  • 2026-05-08 🧾 حقول قوائم Tushare داخل المرشحات: تستطيع اختبارات أسهم A اليومية الآن طلب حقول قوائم مالية آمنة زمنياً عبر fundamental_fields، بحيث يمكن لمحركات الإشارات الفرز على أعمدة مثل income_total_revenue وincome_n_income وbalancesheet_total_hldr_eqy_exc_min_int وfina_indicator_roe بعد تواريخ الإعلان/الإفصاح (#76، شكراً @mrbob-git). ويجعل التعزيز اللاحق طلب حقول القوائم الصريح يفشل سريعاً إذا تعذر تشغيل إثراء Tushare، بدلاً من الرجوع بصمت إلى أشرطة الأسعار الخام (#77).

  • 2026-05-07 📈 أساسيات Tushare وفرز المجتمع: أضيف عقد TushareFundamentalProvider بنمط point-in-time لتدفقات البحث الأساسي، مع تغطية انحدار لمسار متغير البيئة TUSHARE_TOKEN في المشروع (#74). كما أوضح فرز المجتمع أن Vibe-Trading يركز حالياً على لغة واجهة واحدة لتسريع التكرار، ويتجنب تبعيات بحث زائدة ما دام web_search المدعوم من DuckDuckGo مضمناً، ويتعامل مع النشر المستضاف غير الرسمي كمكان غير موثوق لمفاتيح API أو رموز مصادر البيانات.

  • 2026-05-06 🚀 إصدار v0.1.7 (Release notes، pip install -U vibe-trading-ai): نُشر تعزيز حدود الأمان على PyPI وClawHub، ويغطي افتراضات أكثر أماناً للـ API/القراءة/الرفع/الملفات/URL/الكود المولد/أدوات shell/Docker مع إبقاء تدفقات CLI/Web UI المحلية سهلة. تشمل الدورة أيضاً Web UI Settings، وخريطة ارتباط حرارية، وOpenAI Codex OAuth، ومرشح A-share pre-ST، وتحسين CLI التفاعلي، وفحص swarm presets، وتحليل التوزيعات، وصقل سير التطوير، ورفع حدود أمان تبعيات بناء الواجهة. شكراً لمساهمي 0.1.7 وlemi9090 (S2W) على التحقق الأمني المنسق.

  • 2026-05-05 🛡️ متابعة حدود الأمان: استكمال تعزيز الأمان حول CORS origins الصريحة، ومؤشرات بيانات الاعتماد في Settings، وقراءة عناوين الويب، وتوليد كود Shadow Account، مع اختبارات انحدار لكل مسار. تبقى تدفقات CLI/Web UI على localhost كما هي؛ وعلى عمليات النشر البعيدة استخدام API_AUTH_KEY وorigins موثوقة صريحة.

  • 2026-05-04 🖥️ تجربة CLI تفاعلية وتنظيف CI: يعرض الوضع التفاعلي الآن شريط حالة سفلياً مباشراً يبين provider/model ومدة الجلسة وكمون آخر تشغيل وإحصاءات استدعاءات الأدوات، مع تصفح سجل الأوامر وتحرير المؤشر بمفاتيح الأسهم عبر prompt_toolkit (#69). يعود CLI إلى Rich prompts عند غياب prompt_toolkit أو TTY. كما وُئمت توقعات مسارات CI مع صندوق استيراد الملفات المعزز وحل /tmp عبر المنصات، فعاد main إلى الأخضر (bb67dc7).

  • 2026-05-03 🛡️ تصحيح تعزيز الأمان: يشدد مصادقة API الافتراضية للنشر غير المحلي، ويحمي قراءات run/session/swarm الحساسة، ويقيد حدود الرفع وقراءة الملفات المحلية، ويقيد أدوات shell بحسب نقطة الدخول، ويتحقق من تحميل الاستراتيجيات المولدة قبل الاستيراد، ويشغل صورة Docker كمستخدم غير root مع منفذ localhost فقط افتراضياً. تبقى تدفقات CLI وWeb UI المحلية سهلة؛ وعلى نشر API/Web البعيد ضبط API_AUTH_KEY.

  • 2026-05-02 🧭 تحليل التوزيعات وخارطة طريق أوضح: أضيفت مهارة dividend-analysis لأسهم الدخل، واستدامة التوزيعات، ونموها، وعائد المساهمين، وآليات ex-dividend، وفحص مصائد العائد، مع تثبيتها باختبارات انحدار للمهارات المضمنة. تركز خارطة الطريق العامة الآن على Research Autopilot وData Bridge وOptions Lab وPortfolio Studio وAlpha Zoo وResearch Delivery وTrust Layer ومشاركة Community.

  • 2026-05-01 🔥 خريطة ارتباط حرارية وOpenAI Codex OAuth ومرشح A-share pre-ST: لوحة/API ارتباط جديدة تحسب ارتباطات العوائد المتحركة وتعرض خريطة حرارية ECharts لتحليل المحافظ والرموز (#64). يدعم مزود OpenAI Codex الآن ChatGPT OAuth عبر vibe-trading provider login openai-codex مع بيانات Settings واختبارات انحدار للمحول (#65). أضيفت وعُززت مهارة ashare-pre-st-filter لفحص مخاطر ST/*ST في أسهم A، مع فلترة صلة عقوبات Sina حتى لا تضخم إشارات حسابات الأوراق المالية عدادات E2 (#63).

  • 2026-04-30 ⚙️ Web UI Settings وتعزيز validation CLI: صفحة Settings جديدة لمزود/نموذج LLM، وbase URL، وreasoning effort، وبيانات اعتماد مصادر البيانات، مدعومة بواجهات settings API محلية/محمية وببيانات مزودين قابلة للتكوين (#57). كما تعزز python -m backtest.validation <run_dir> حتى تفشل المدخلات الناقصة أو الفارغة أو المشوهة أو غير الموجودة أو غير الدليل برسائل واضحة قبل بدء التحقق (#60).

  • 2026-04-28 🚀 إصدار v0.1.6 (pip install -U vibe-trading-ai): إصلاح إرجاع vibe-trading --swarm-presets فارغاً بعد pip install / uv tool install (#55)، حيث أصبحت ملفات preset YAML مضمنة داخل حزمة src.swarm ومثبتة بستة اختبارات انحدار. كما أصبح محمل AKShare يوجه ETFs مثل 510300.SH والفوركس مثل USDCNH إلى النقاط الصحيحة مع fallback registry معزز. يجمع الإصدار كل ما بعد v0.1.5: لوحة مقارنة معيارية، بث /upload وحدود الحجم، محمل Futu (HK + A-share)، مهارة تصدير vnpy، تعزيز أمني، وتحميل واجهة كسول من 688KB إلى 262KB.

  • 2026-04-27 📊 لوحة مقارنة معيارية وأمان الرفع: مخرجات الاختبار الرجعي تتضمن الآن لوحة مقارنة معيارية (ticker / benchmark return / excess return / information ratio) مع حل عبر yfinance لـ SPY وCSI 300 وغيرها (#48). كما تبث /upload جسم الطلب في أجزاء 1 MB وتتوقف بعد MAX_UPLOAD_SIZE، مما يحد الذاكرة تحت العملاء الضخمين/المشوهين (#53)، ومثبتة بأربعة اختبارات انحدار.

  • 2026-04-22 🛡️ تعزيز وتكاملات جديدة: فرض احتواء المسارات في safe_path وصندوق أدوات journal/shadow، وإرسال .env.example / الاختبارات / ملفات Docker في sdist عبر MANIFEST.in، وتصغير الحزمة الأولية للواجهة من 688KB إلى 262KB عبر التحميل الكسول على مستوى المسارات. إضافة محمل Futu لأسهم HK وA-share (#47) ومهارة تصدير vnpy CtaTemplate (#46).

  • 2026-04-21 🛡️ مساحة العمل والوثائق: تطبيع run_dir النسبي إلى دليل التشغيل النشط (#43). أمثلة استخدام README (#45).

  • 2026-04-20 🔌 Reasoning وSwarm: الحفاظ على reasoning_content عبر جميع مسارات ChatOpenAI، لتعمل أفكار Kimi / DeepSeek / Qwen من البداية للنهاية (#39). بث Swarm وإيقاف Ctrl+C نظيف (#42).

  • 2026-04-19 📦 v0.1.5: النشر إلى PyPI وClawHub. رفع حد python-multipart لسد CVE، وربط 5 أدوات MCP جديدة (analyze_trade_journal + 4 أدوات shadow-account)، وإصلاح سجل pattern_recognition → pattern، ومطابقة تبعيات Docker، ومزامنة بيان SKILL (22 أداة MCP / 71 مهارة).

  • 2026-04-18 👥 Shadow Account: استخرج قواعد استراتيجيتك من سجل وسيط → اختبر الظل عبر الأسواق → تقرير HTML/PDF من 8 أقسام يوضح ما تتركه على الطاولة (خرق القواعد، الخروج المبكر، الإشارات الفائتة، الصفقات المضادة). 4 أدوات جديدة، ومهارة واحدة، و32 أداة إجمالاً. أمثلة Trade Journal + Shadow Account موجودة الآن في شاشة ترحيب Web UI.

  • 2026-04-17 📊 محلل سجل التداول وقارئ ملفات شامل: ارفع صادرات الوسطاء (同花顺/东财/富途/generic CSV) → ملف تداول تلقائي (أيام الاحتفاظ، معدل الربح، نسبة PnL، التراجع) + 4 تشخيصات سلوكية (disposition effect، الإفراط في التداول، مطاردة الزخم، anchoring). أصبح read_document يوجه PDF وWord وExcel وPowerPoint والصور (OCR) و40+ صيغة نصية خلف استدعاء موحد.

  • 2026-04-16 🧠 Agent Harness: ذاكرة دائمة عبر الجلسات، بحث جلسات FTS5، مهارات ذاتية التطور (CRUD كامل)، ضغط سياق بخمس طبقات، وتجميع أدوات القراءة/الكتابة. 27 أداة، و107 اختبارات جديدة.

  • 2026-04-15 🤖 Z.ai + MiniMax: مزود Z.ai (#35)، وإصلاح temperature في MiniMax وتحديث النموذج (#33). 13 مزوداً.

  • 2026-04-14 🔧 استقرار MCP: إصلاح خطأ Connection closed في أداة الاختبار الرجعي على نقل stdio (#32).

  • 2026-04-13 🌐 اختبار رجعي مركب عبر الأسواق: محرك CompositeEngine جديد يختبر محافظ مختلطة الأسواق (مثل أسهم A + crypto) بمجمع رأس مال مشترك وقواعد لكل سوق. كما أصلح fallback لمتغيرات قالب السرب ومهلة الواجهة.

  • 2026-04-12 🌍 تصدير متعدد المنصات: يصدر /pine الاستراتيجيات إلى TradingView (Pine Script v6)، وTDX (通达信/同花顺/东方财富)، وMetaTrader 5 (MQL5) بأمر واحد.

  • 2026-04-11 🛡️ الموثوقية وتجربة المطور: إعداد .env عبر vibe-trading init (#19)، وفحوصات مسبقة، وfallback لمصادر البيانات وقت التشغيل، ومحرك اختبار رجعي معزز. README متعدد اللغات (#21).

  • 2026-04-10 📦 v0.1.4: إصلاح Docker (#8)، وأداة MCP web_search، و12 مزود LLM، وتبعيات akshare/ccxt. النشر إلى PyPI وClawHub.

  • 2026-04-09 📊 الموجة الثانية للاختبار الرجعي: محركات ChinaFutures وGlobalFutures وForex وOptions v2. تحقق Monte Carlo وBootstrap CI وWalk-Forward.

  • 2026-04-08 🔧 اختبار رجعي متعدد الأسواق مع قواعد لكل سوق، وتصدير Pine Script v6، و5 مصادر بيانات مع fallback تلقائي.


✨ الميزات الرئيسية

text
<h3>🐝 فرق تداول متعددة الوكلاء</h3>
  
    • فرق استثمار وكمّ وكريبتو ومخاطر
    • تقدم مباشر وتقارير محفوظة
    • وكلاء مؤسسون على بيانات سوق مجلوبة
  




  
  <h3>📊 بيانات واختبارات رجعية عبر الأسواق</h3>
  
    • أسهم A/HK/US وكندا والهند وكوريا، وكريبتو، وعقود آجلة، وفوركس
    • fallback للبيانات واختبارات مركبة
    • بيانات PIT، وتحقيق، وبطاقات تشغيل
  


  
  <h3>👥 Shadow Account</h3>
  
    • تشخيص سلوكي لسجلات الوسطاء
    • مقارنات Shadow Account قائمة على القواعد
    • تقارير تدقيق وكود استراتيجية قابلان للتصدير

💡 ما هو Vibe-Trading؟

Vibe-Trading مساحة عمل بحثية مفتوحة المصدر تحول الأسئلة المالية إلى تحليل قابل للتشغيل. يربط المطالبات باللغة الطبيعية بمحملات بيانات السوق، وتوليد الاستراتيجيات، ومحركات الاختبار الرجعي، والتقارير، والتصدير، وذاكرة البحث الدائمة.

صُمم للبحث والمحاكاة والاختبار الرجعي — وعند اختيارك، يتيح أيضاً تداولاً مستقلاً عبر وسيط تُصرّح به بنفسك (مثل Robinhood Agentic Trading). لا يحتفظ بأي أموال، ولا يتداول أبداً خارج الحدود التي تضعها، ويمكنك إيقافه فوراً.


✨ ما الذي يمكنك فعله؟

المهمة الناتج
طرح سؤال تداول بحث سوقي باستخدام الأدوات والبيانات والمستندات وسياق جلسة قابل لإعادة الاستخدام.
اختبار فكرة استراتيجية رجعياً كود استراتيجية، ومقاييس، وسياق معياري، ومخرجات تحقق، وبطاقات تشغيل.
مراجعة صفقاتك الخاصة قراءة سجلات الوسطاء، وتشخيص السلوك، واستخراج القواعد، ومقارنات Shadow Account.
قراءة المستندات والرسوم البيانية تحليل ملفات PDF / DOCX / XLSX / PPTX / الصور عبر OCR قابل للتوصيل (read_document)، وقراءة لقطات الرسوم البيانية دلالياً بنموذج رؤية (analyze_image).
قراءة إفصاحات المؤسسات ومحافظ الصناديق حيازات SEC 13F مع فروق المراكز ربعاً بربع، ومكوّنات ETF عبر الأسواق، والاحتمال الضمني لعقود الأحداث، واستخراج العوامل من arXiv / OpenAlex — كلها للقراءة فقط ومن مصادر عامة مجانية.
تحسين الأبحاث المتكررة الذاكرة الدائمة والمهارات القابلة للتحرير تحول الروتينات المفيدة إلى تدفقات قابلة لإعادة الاستخدام.
تشغيل فرق محللين مراجعات بحث متعددة الوكلاء لتدفقات الاستثمار والكم والكريبتو والماكرو والمخاطر.
وصل الأبحاث بقنوات IM إدارة بيئة جلسة واحدة عبر WebSocket وTelegram وSlack وDiscord وMatrix وWhatsApp وSignal وQQ/NapCat وWeChat/WeCom وFeishu/Lark وDingTalk وTeams وemail وMochat من CLI وREST وWeb UI.
إنتاج مخرجات قابلة للاستخدام تقارير، وTradingView Pine Script، وTDX، وMetaTrader 5، وأدوات MCP، وجلسات بحث لاحقة.
bench ألفا zoo جاهزة تشغيل IC + IR + تصنيف alive/reversed/dead عبر 462 ألفا (Qlib 158 + Kakushadze 101 + GTJA 191 + academic + PIT-safe fundamental) بسطر أوامر واحد على universe الخاص بك.
رصد أنظمة الارتباط جدول زمني قائم على كثافة الحواف + التباطؤ (hysteresis) على واجهة /correlation يُظهر متى تندمج الأسواق في كتلة واحدة — سياق مخاطر وصفي، لا إشارة تداول.

⚡ مثال سريع

bash
pip install vibe-trading-ai

# بحث بلغة طبيعية
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024, summarize return and drawdown, then export the report"

# bench لـ alpha zoo جاهز بسطر واحد
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20
bash
vibe-trading --upload trades_export.csv
vibe-trading run -p "Analyze my trading behavior, extract my shadow strategy, and compare it with my actual trades"

👥 حساب الظل

ينطلق Shadow Account من سجلات تداولك أنت، لا من قالب استراتيجية عام.

ارفع تصديراً من وسيطك، ودع الوكيل يلخص سلوكك، ثم قارن مسار التداول الحقيقي باستراتيجية ظل قائمة على قواعد.

الخطوة ناتج الوكيل
1. قراءة سجلك يقرأ صادرات الوسطاء من 同花顺 و东方财富 و富途 وصيغ CSV العامة.
2. بناء ملف سلوكك أيام الاحتفاظ، ومعدل الربح، ونسبة PnL، والتراجع، وdisposition effect، والإفراط في التداول، ومطاردة الزخم، وفحوصات anchoring.
3. استخراج قواعدك يحول أنماط الدخول/الخروج المتكررة إلى ملف استراتيجية صريح بدلاً من ملخص ضبابي.
4. تشغيل الظل يختبر القواعد المستخرجة رجعياً ويبرز خرق القواعد، والخروج المبكر، والإشارات الفائتة، ومسارات التداول البديلة.
5. تسليم التقرير ينتج تقرير HTML/PDF يمكن فحصه أو أرشفته أو تحسينه في جلسة لاحقة.
bash
vibe-trading --upload trades_export.csv
vibe-trading run -p "Analyze my trading behavior, extract my shadow strategy, and compare it with my actual trades"

🧪 سير البحث

تتبع أغلب التشغيلات مسار أدلة واحداً: توجيه الطلب، تحميل سياق السوق المناسب، تنفيذ الأدوات، التحقق من المخرجات، وإبقاء المخرجات قابلة للفحص.

الطبقة ما يحدث
Plan يختار المهارات المالية والأدوات ومصادر البيانات وإعداد السرب الملائمة عند الحاجة.
Ground يجلب أسهم A، وأسهم HK/US/كندا، والكريبتو، والعقود الآجلة، والفوركس، والمستندات، أو سياق الويب عبر المحملات المتاحة.
Execute يولد كود استراتيجية قابل للاختبار، ويشغل الأدوات، ويستخدم محرك الاختبار الرجعي أو سير التحليل المناسب.
Validate يضيف المقاييس، والمقارنة المعيارية، وMonte Carlo، وBootstrap، وWalk-Forward، وبطاقات التشغيل، والتحذيرات عند اللزوم.
Deliver يعيد التقارير والمخرجات وآثار الأدوات والتصديرات إلى TradingView وTDX وMetaTrader 5 وعملاء MCP أو جلسات لاحقة.

📡 مصادر البيانات والتراجع الذكي

استدعاء واحد لـ get_market_data، 23 مصدر بيانات سوقية مجانية (إضافة إلى سوق مدفوع اختياري QVeris). اضبط source: "auto" — يختار المُحمّل حسب الرمز، ثم يسير عبر سلسلة لكل سوق مرتبة بحسب خطر حظر عنوان IP: المصادر العامة التي لا تُحظر أبداً أولاً، والمصادر المُقيّدة أو المحمية بمفتاح أخيراً. بلا أي إعداد، ولا نقطة فشل واحدة.

Source Markets Auth Role
tencent · mootdx A-share + HK none never IP-banned (mootdx = 通达信 TCP)
eastmoney A / US / HK none OHLCV + deep fundamentals & flow tools (throttled)
baostock · akshare A (+ US/HK/futures/macro/fx) none free fallbacks
tushare A / HK / futures / fund / macro token richest A-share
yahoo US / HK / كندا none direct chart/quotes/options؛ TSX .TO / TSXV .V
sina · stooq US none K-line to 1984 · EOD CSV
yfinance US / HK / كندا none wrapper؛ تمر لواحق TSX .TO / TSXV .V كما هي
longbridge US / HK App Key + App Secret + Access Token مصدر OHLCV تاريخي اختياري؛ ثبّت الـ SDK الاختياري
finnhub · alphavantage · tiingo · fmp US key optional providers
qveris أصول عالمية متعددة key · credits سوق مدفوع — 63+ مزوداً بمفتاح واحد (اختيار صريح فقط، خارج التراجع التلقائي)
okx · ccxt · binance crypto none OKX + 100+ exchanges + Binance historical / USD-M perps
futu HK / A OpenD optional local FutuOpenD
mt5 الفوركس / المعادن طرفية MT5 طرفية MetaTrader 5 محلية اختيارية (Windows) — تغذية وسيطك الفعلية كما هي، مع حلّ لواحق الرموز بأسلوب Exness تلقائياً
pykrx كوريا (KRX: KOSPI/KOSDAQ) لا شيء أشرطة يومية لـ KOSPI / KOSDAQ لرموز .KS / .KQ (إضافة krx اختيارية)
india_broker الهند (NSE/BSE) تسجيل دخول الوسيط قراءة فقط لأشرطة Shoonya / Dhan لرموز .NS / .BO (ذيل سلسلة التراجع)
local any none your own CSV / Parquet / DuckDB via local: prefix

سلاسل التراجع (بحسب خطر حظر عنوان IP):

  • أسهم A → tencent · mootdx · eastmoney · baostock · akshare · tushare · local
  • أسهم US → yahoo · stooq · sina · eastmoney · yfinance · tiingo · fmp · finnhub · alphavantage · longbridge · akshare · local
  • أسهم HK → tencent · eastmoney · yahoo · futu · akshare · yfinance · tushare · longbridge · local
  • أسهم الهند (NSE/BSE) → yahoo · yfinance · india_broker · local
  • كوريا (KOSPI/KOSDAQ) → pykrx · yahoo · yfinance · local
  • الكريبتو → okx · ccxt · binance · yfinance · local
  • الفوركس / المعادن → mt5 · yfinance · akshare · local  ·  (العقود الآجلة / الصناديق / الاقتصاد الكلي → tushare/akshare → local)

استخدام Longbridge صراحةً

Longbridge محمّل اختياري لبيانات OHLCV التاريخية للأسهم الأمريكية والهونغ كونغية. لتثبيت الـ SDK:

bash
pip install "vibe-trading-ai[longbridge]"

اضبط بيانات الاعتماد الثلاثة في .env:

dotenv
LONGBRIDGE_APP_KEY=...
LONGBRIDGE_APP_SECRET=...
LONGBRIDGE_ACCESS_TOKEN=...

في الاختبار الرجعي، حدّد source داخل config.json:

json
{
  "codes": ["QQQ.US"],
  "start_date": "2025-01-01",
  "end_date": "2025-01-10",
  "interval": "1D",
  "source": "longbridge"
}

وفي محادثة الوكيل اطلبها صراحةً: «استخدم Longbridge لجلب بيانات QQQ.US التاريخية.» هذا الطلب الصريح منفصل عن source: "auto"؛ إذ يُبقي auto على سلسلة التراجع المعتادة لكل سوق.

إلى جانب OHLCV، تصل 22 أداة بيانات للقراءة فقط إلى الأساسيات والتدفقات — تدفق الأموال، والتنين والنمر، والتدفق الشمالي، والهامش، والصفقات الكتلية، وعدد المساهمين، وفترة الإغلاق، والقطاعات، وتقارير الأبحاث، والأخبار، وإيداعات SEC، والقوائم المالية، وسلاسل الخيارات، وملف الشركة، وفحص السوق، والبحث عن الرموز، والاقتصاد الكلي، وiwencai، والحيازات المؤسسية (13F)، وتفكيك محافظ ETF، وأسواق التنبؤ، والأوراق البحثية — وكلها مكشوفة عبر MCP. ولا يتراجع رمز local: صريح أبداً وبصمت إلى مصدر شبكي.

💎 بيانات مدفوعة اختيارية — QVeris

البيانات المجانية هي الافتراضي، والمدفوعة عند الحاجة. تبقى المصادر الـ23 المدمجة مجانية مع تراجع ذكي بحسب خطر الحظر، بلا مفتاح ولا تكلفة. عبر QVeris يفتح مفتاح واحد 63+ مزوداً و10,000+ capabilities (per QVeris) للـ options Greeks، والأساسيات المتقدمة، وبيانات الصين/هونغ كونغ/العالم، والماكرو، والكريبتو، والأخبار، والـ filings؛ ولا تُحتسب المكالمات الفاشلة. فعّله من Settings → QVeris أو vibe-trading data mode paid.

QVeris disclosure: التسجيل عبر رابط إحالة Vibe-Trading يمنحك +1,000 رصيداً إضافياً ويدعم المشروع.


🔩 القدرات التفصيلية

القوائم التفصيلية مطوية أدناه حتى يبقى README سهل القراءة. افتحها عندما تريد فحص اللبنات المتاحة.

مكتبة المهارات المالية 90 مهارة عبر 9 فئات

  • 📊 90 مهارة مالية متخصصة منظمة في 9 فئات
  • 🌐 تغطية كاملة من الأسواق التقليدية إلى الكريبتو وDeFi
  • 🔬 قدرات شاملة من مصادر البيانات إلى البحث الكمي
الفئة المهارات أمثلة
Data Source 10 data-routing, tushare, yfinance, okx-market, akshare, mootdx, ccxt, eastmoney, sec-edgar, qveris
Strategy 19 strategy-generate, cross-market-strategy, technical-basic, candlestick, ichimoku, elliott-wave, smc, multi-factor, ml-strategy
Analysis 23 factor-research, correlation-regime, macro-analysis, global-macro, valuation-model, investor-lenses, credit-analysis, dividend-analysis
Asset Class 9 options-strategy, options-advanced, convertible-bond, etf-analysis, asset-allocation, sector-rotation
Crypto 7 perp-funding-basis, liquidation-heatmap, stablecoin-flow, defi-yield, onchain-analysis
Flow 8 hk-connect-flow, us-etf-flow, edgar-sec-filings, financial-statement, adr-hshare
Tool 10 backtest-diagnose, report-generate, pine-script, doc-reader, web-reader, vnpy-export, trade-journal
Research 3 alpha-zoo, strategy-dev-manager, strategy-discovery
Risk Analysis 1 ashare-pre-st-filter

مصدر بيانات مخصص سجّل loader تاريخيًا خاصًا بك لبيانات OHLCV

تحتاج إلى سوق أو مزوّد لا نوفّر له loader جاهزًا؟ أضِف loader تاريخيًا خاصًا بك
واخترْه عبر source="<name>". الخطوات التالية تعدّل مصدر الحزمة، لذا شغّلها من
نسخة clone (pip install -e .).

  1. اكتب الـ loader —— أنشئ agent/backtest/loaders/<name>_loader.py مع صنف
    يحقّق DataLoaderProtocol (duck-typed، دون صنف أساس) ووسمه بـ @register:

    python
    import pandas as pd
    from backtest.loaders.registry import register
    
    @register
    class DataLoader:
        name = "mysource"            # the value you pass as source=
        markets = {"us_equity"}      # a_share/us_equity/hk_equity/crypto/futures/fund/macro/forex
        requires_auth = False
    
        def is_available(self) -> bool:
            return True              # token present? network reachable?
    
        def fetch(self, codes, start_date, end_date, *, interval="1D", fields=None):
            # return {symbol: DataFrame indexed by trade_date,
            #         columns: open, high, low, close, volume}
            ...
  2. سجّل الوحدة كي يعمل @register —— أضِف "backtest.loaders.<name>_loader"
    إلى _loader_modules في agent/backtest/loaders/registry.py.

  3. اسمح بالاسم ليجتاز التحقق من الإعدادات —— أضِف "mysource" إلى
    _VALID_SOURCES في agent/backtest/runner.py.

  4. (اختياري) أدرِجه ضمن FALLBACK_CHAINS لأحد الأسواق في registry.py كي
    يصل إليه source="auto".

  5. استخدمه —— source="mysource" في إعداد الباك-تست، أو عبر CLI / agent.

بيانات الـ ticks اللحظية / عمق دفتر الأوامر خارج نطاق الـ loaders —— طبقة
الـ loader تتعامل فقط مع الأشرطة التاريخية point-in-time. تتدفق بيانات السوق
اللحظية عبر broker connectors بدلًا من ذلك: okx / binance / ccxt
للعملات المشفّرة، وfutu / tiger للأسهم.

موصّلات الوسطاء 13 وسيطاً — قراءة + حساب ورقي، وتداول حي محدود حيثما يُدعم

ملفات تعريف قائمة على الموصّل. يوفّر معظم الموصّلات قراءةً وتنفيذ أوامر على حساب ورقي (paper) — أما IBKR فللقراءة فقط، وRobinhood حيّ فقط (بلا حساب ورقي)، وTrading 212 يرفض تنفيذ الأوامر كلياً بما فيها الورقية؛ أما تنفيذ الأوامر الحية فمحدود بتفويض يحدّده المستخدم (قائمة رموز مسموح بها، وحدود لحجم الأمر / الانكشاف، وحد يومي للصفقات، ومفتاح إيقاف فوري) ولا يحتفظ الموصّل بأي أموال — الوسيط هو من ينفّذ. تبقى أدوات تنفيذ الأوامر خارج MCP (عبر agent + CLI فقط). ومسارات البحث / الاختبار الرجعي محظورة بنيوياً من أي نقطة نهاية حية.

الوسيط الأسواق القدرات
IBKR عالمي TWS / Gateway محلي، قراءة فقط
Robinhood US Agentic MCP (OAuth عبر سطح المكتب) — قراءة + تداول حي محدود
Tiger US / HK / A قراءة + ورقي + تداول حي محدود
Alpaca US قراءة + ورقي + تداول حي محدود (+ وضع عزل الاعتماد TAP)
OKX · Binance crypto قراءة + ورقي + تداول حي محدود
Futu HK / US / A قراءة + ورقي + تداول حي محدود
eToro global قراءة + ورقي + تداول حي محدود (Public API؛ مفاتيح demo لا تصل بنيويًا إلا إلى مسارات /demo، مع دعم تدفقات التداول بالنسخ)
MetaTrader 5 forex / CFD قراءة + ورقي + تداول حي محدود (بأسلوب Exness؛ حارس هوية demo ⇔ paper)
Longbridge · Dhan · Shoonya US / HK · الهند (NSE/BSE) قراءة + ورقي فقط — لا يوجد مُميِّز وقت-تشغيل بين paper/live، لذا يُرفض تنفيذ الأوامر الحية بشكل صارم
Trading 212 UK / EU قراءة فقط بالكامل — تَرفض place_order / cancel_order حتى الورقي بشكل صارم

التمييز بين الورقي والحي هو حارس بنيوي على مستوى وقت التشغيل لكل وسيط (صيغة معرّف الحساب، أو فصل المضيف، أو علامة demo، أو بيئة التداول)، وليس مجرّد إعداد يمكن للوكيل تبديله. أي وسيط لا يكشف عن هذا المُميِّز يُحصَر في الورقي + القراءة فقط.

فرق تداول جاهزة 30 إعداد سرب مسبق

  • 🏢 30 فريق وكلاء جاهزاً للاستخدام
  • ⚡ تدفقات مالية مهيأة مسبقاً
  • 🎯 إعدادات للاستثمار والتداول وإدارة المخاطر
الإعداد سير العمل
investment_committee مناظرة صعود/هبوط → مراجعة مخاطر → قرار مدير المحفظة النهائي
global_equities_desk باحث أسهم A + HK/US + كريبتو → استراتيجي عالمي
crypto_trading_desk تمويل/أساس + تصفية + تدفق → مدير مخاطر
earnings_research_desk أساسيات + مراجعات + خيارات → استراتيجي أرباح
macro_rates_fx_desk أسعار فائدة + FX + سلع → مدير محفظة ماكرو
quant_strategy_desk فرز + بحث عوامل → اختبار رجعي → تدقيق مخاطر
technical_analysis_panel TA كلاسيكي + Ichimoku + harmonic + Elliott + SMC → إجماع
risk_committee تراجع + مخاطر ذيل + مراجعة نظام → اعتماد
global_allocation_committee أسهم A + كريبتو + HK/US → تخصيص عبر الأسواق

بالإضافة إلى أكثر من 20 إعداداً متخصصاً آخر — شغل vibe-trading --swarm-presets لاستكشافها كلها.

Alpha Zoo 462 ألفا كمّي جاهز عبر 5 families

  • 🧬 462 ألفا cross-sectional، مع منع lookahead على طبقة العوامل (operators)
  • 📈 IC + IR + تصنيف alive/reversed/dead بأمر CLI واحد
  • 🔬 بوابة نقاء AST + اختبار حماية lookahead بـ 300 صف + قاطع شبكة عبر pytest-socket
  • 📦 إسناد Apache-2 لـ Qlib؛ ملف LICENSE.md لكل zoo يصرّح بأن الصيغ محتوى رياضي
  • 🤝 سير عمل توقيع Developer Certificate of Origin (DCO) لمساهمات المجتمع
Zoo العدد المصدر الرخصة
qlib158 154 Microsoft Qlib Alpha158 (Apache-2.0، مثبّت على commit) Apache-2.0
alpha101 101 Kakushadze (2015)، "101 Formulaic Alphas"، arXiv:1601.00991 الصيغ محتوى رياضي
gtja191 191 Guotai Junan (2014)، "191 Short-period Trading Alpha Factors" الصيغ محتوى رياضي
academic 12 Fama-French 5 + Carhart momentum (proxy قائم على الأسعار) + Jegadeesh reversal + George-Hwang 52-week-high + Amihud illiquidity + Harvey-Siddique skew + Frazzini-Pedersen betting-against-beta + correlation-rewiring stability أدبيات أكاديمية عامة
fundamental 4 بيانات SEC company facts آمنة PIT — earnings yield وROE وgross profitability وasset growth (مثبّتة على filed-date) بيانات مالية عامة

شغّل vibe-trading alpha list للتصفح، وvibe-trading alpha show للحصول على الصيغ + المصدر، وvibe-trading alpha bench --zoo X --universe Y --period Z لتقييم zoo كاملة، وvibe-trading alpha compare --all لترتيب الـ zoos جنباً إلى جنب.

محرّكات الاختبار الرجعي 10 محرّكات + محفظة خيارات، ومركّب عبر الأسواق

المحرّك السوق ملاحظات
ChinaA أسهم A T+1، وحدود السعر، ومرشّح ما قبل ST
GlobalEquity US / HK / كندا تداول في الجلسة نفسها؛ أحجام وخطوات سعرية وتكاليف حسب السوق
IndiaEquity الهند (NSE/BSE) T+1، ونطاقات القاطع (circuit)، وحزمة تكاليف STT / الدمغة / SEBI / GST قابلة للتهيئة
KoreaEquity كوريا (KRX: KOSPI/KOSDAQ) شراء فقط، ونطاق ±30% يُحكم عليه لحظة التنفيذ على شبكة الخطوة السعرية الموحّدة، وضريبة تداول 0.20% لعام 2026
VietnamEquity فيتنام (HOSE) شراء فقط، واحتجاز تسوية T+2، ونطاق ±7% على شبكة الخطوة السعرية 10/50/100 دونغ، ولوت 100 سهم، وضريبة 0.1% على البيع
Crypto crypto فوري / عقود USD-M الدائمة تسويات التمويل، وفصل سعر التنفيذ عن سعر العلامة
ChinaFutures · GlobalFutures العقود الآجلة الهامش، ومضاعِفات العقد
Forex FX / المعادن عبر مُحمّل mt5
Composite عبر الأسواق تجمّع رأس مال مشترك واحد عبر الأسواق (source="auto")
options_portfolio الخيارات متعدد الأرجل، وGreeks، وpayoff/scenario

أشرطة داخل اليوم: 1m / 5m / 15m / 30m / 1H / 4H / 1D. 15 مقياساً + مقارنة معيارية، و5 محسّنات محفظة (equal-volatility / risk-parity / mean-variance / max-diversification / turnover-aware)، و3 أدوات تحقق (Monte Carlo / Bootstrap / Walk-Forward).

Quant Library 265 دالة مختبَرة عبر 19 وحدة، قابلة للاستدعاء من كل المسارات

يحتفظ src/quantlib بتنفيذ مختبَر واحد فقط لكل قطعة من الرياضيات المالية التي
يحتاجها الـ agent. صارت الـ skills تستورد هذه الدوال بدلاً من حمل الصيغ داخل كتل
شيفرة في markdown — فإن وجدت صيغة تسعير تعيش داخل SKILL.md فتلك علة، لا نمط.

الوحدة ما تغطّيه
options تسعير Black-Scholes + greeks، وعكس التقلب الضمني
fixedincome رياضيات السندات، ومواءمة منحنى Nelson-Siegel / Svensson
credit Altman Z-score، ومسافة التعثّر Merton / KMV
timeseries السكون، والتكامل المشترك، وGARCH، وbootstrap
risk · var_backtest VaR / CVaR / EVT واختباراتها الرجعية
attribution تفكيك Brinson-Fachler
performance · fundmath TWR / MWR / Modified Dietz؛ XIRR / MOIC / DPI / TVPI
factormodel · eventstudy انحدارات العوامل، ودراسات الأحداث
multipletesting · crossvalidation ضبط الدلالة المتعددة، وpurged CV
impact نماذج أثر السوق

تصل الأداة quantlib_call للقراءة فقط إلى كل ذلك عبر عقد واحد، فتعمل الرياضيات المالية
على CLI وWeb UI وREST API وMCP حيث يكون bash مُقفلاً. وهي بنيوياً ليست shell — قائمة وحدات
مسموحة، وإرسال عبر __all__ فقط، ورفض export_*. يحتاج جانب الاقتصاد القياسي إضافة
stats (pip install "vibe-trading-ai[stats]")، وتستورد تلك الدوال بتكاسل وتسمّي الناقص.

التقييم والبحث المؤسسي DCF ونظائر وثلاث قوائم مترابطة، وستة أوامر بحثية

محرك تقييم يرفض اختلاق مدخلاته. القاعدة الوحيدة في contracts.py: المدخل الناقص يجعل
النموذج غير قابل للتشغيل (NOT RUNNABLE) ولا يُملأ ضمنياً بقيمة افتراضية
— فكل قيمة
افتراضية في نموذج تقييم هي رأي يرتدي ثوب ثابت.

النموذج سلوك يستحق المعرفة
run_dcf جسر FCFF، وبناء WACC، والخصم منتصف السنة، وجسر صافي الدين، وشبكة حساسية WACC×g. قيمة نهائية مزدوجة: كل طريقة تُراجَع مقابل المضاعف الضمني ومعدل النمو الضمني للأخرى
run_comps جسر EV، وتقويم LTM + السنة التقويمية، ومصفوفة المضاعفات. النظير ذو المقام غير الموجب يُستبعد ويُبلَّغ عنه، ولا يُدمج أبداً كمضاعف سالب في المتوسط
threestatement إسقاط مترابط مع تأكيد توازن صارم، وسدّ ائتماني صريح، ودورة فائدة↔دين تكرارية يجب أن تتقارب وإلا رفعت خطأ

تُجزّأ المخرجات بتجزئة المدخلات وتُدار بالإصدارات، مع تصدير xlsx / pptx.

تقود ستة أوامر مائلة سير العمل — /comps /dcf /attrib /memo /earnings /screen
— يحمل كل منها هيكل خطوات ومثالاً محلولاً متسقاً حسابياً (تفكيك Brinson يُجمَع بدقة
إلى العائد النشط، وجسر الأرباح يُجمَع بدقة إلى فرق EPS). وتُكدّس skill investor-lenses
أطر تفكير مستثمرين معروفين كطبقات تحليل: كل عدسة هي إجراء تشغيلي — إشارات أولوية، وشروط
استبعاد، وسوء استخدام شائع — لا سيرة ذاتية، ولا تسمّي أي أداة.

وخارج الأشرطة، يستوعب src/entities تدفقات نقدية بتواريخ غير منتظمة (صافي قيمة الأصول،
ونداءات رأس المال، والكوبونات)، ويقدّم cashflow_performance فوقها XIRR / MOIC / DPI /
TVPI / TWR / Modified Dietz / MWR. هذا المسار موازٍ عن قصد لمحركات الأشرطة، حتى لا يصل
عمود nav إلى أحدها فيُسعَّر كإغلاق.

الحوكمة وأثر التدقيق الإجابة عن: «أي منهجية أنتجت ذلك الرقم؟»

يكتب كل تشغيل manifest يجزّئ الموجّه ومحتوى الـ skills وسجل الأدوات وإصدارات الحزم،
فيبقى رقم أُنتج قبل شهر قابلاً للتتبّع إلى المنهجية الدقيقة التي أنتجته.

ويربط سجل التدقيق كل قيد بتجزئة سابقه ويُجري fsync، فيصبح تعديل قيد أو حذفه قابلاً
للكشف — وحتى التعديل الذي يعيد حساب تجزئته يُضبَط عند القيد التالي عبر
prev_hash_mismatch. الطوابع الزمنية يوفّرها المتصل دائماً؛ ولا تستدعي أي وحدة هنا
datetime.now().

وتنقيح التتبّع حسب المصرف (sink): وسائط استدعاء الأدوات وسجل التدقيق الحي تستخدم
مصرفاً fail-closed يبقى فيه content منقّحاً، بينما يُفرج مصرف نتائج الأدوات عنه ويغسل
أوراقه النصية بالأنماط. ولا يُفرَج عن env في أيٍّ منهما.

🎬 العرض التوضيحي


🚀 البدء السريع

تثبيت بسطر واحد (PyPI)

bash
pip install vibe-trading-ai

ثم شغل أول مهمة بحثية:

bash
vibe-trading init
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024 and summarize return and drawdown"

هل تُحدِّث من إصدار أقدم؟ انتقل الإصدار 0.1.10 إلى LangChain 1.x. إذا انكسرت عمليات الاستيراد بعد تشغيل pip install -U vibe-trading-ai فوق تثبيت أقدم من 0.1.10 (مثل فشل استيراد langgraph)، فأعد إنشاء الـ venv أو شغّل pip install --force-reinstall vibe-trading-ai. التثبيت الجديد غير متأثر.

اسم الحزمة مقابل الأوامر: حزمة PyPI هي vibe-trading-ai. بعد التثبيت تحصل على ثلاثة أوامر:

الأمر الغرض
vibe-trading CLI / TUI تفاعلي
vibe-trading serve تشغيل خادم ويب FastAPI
vibe-trading-mcp بدء خادم MCP (لـ Claude Desktop وOpenClaw وCursor وغيرها)
bash
vibe-trading init              # interactive .env setup
vibe-trading                   # launch CLI
vibe-trading serve --port 8899 # launch web UI
vibe-trading-mcp               # start MCP server (stdio)

أو اختر مساراً

المسار الأنسب لـ الوقت
A. Docker التجربة الآن، دون إعداد محلي دقيقتان
B. تثبيت محلي التطوير والوصول الكامل إلى CLI 5 دقائق
C. MCP plugin وصله بوكيلك الحالي 3 دقائق
D. ClawHub أمر واحد دون استنساخ دقيقة واحدة

المتطلبات المسبقة

  • مفتاح API لنموذج LLM من أي مزود مدعوم — أو التشغيل محلياً عبر Ollama (لا يحتاج مفتاحاً)
  • Python 3.11+ للمسار B
  • Docker للمسار A
  • يمكن استخدام OpenAI Codex أيضاً عبر ChatGPT OAuth: اضبط LANGCHAIN_PROVIDER=openai-codex، ثم شغل vibe-trading provider login openai-codex. هذا لا يستخدم OPENAI_API_KEY.

مزودو LLM المدعومون: OpenRouter, Requesty, OpenAI, Anthropic (Messages API الأصلي), DeepSeek, Gemini, Groq, DashScope/Qwen, Zhipu, Moonshot/Kimi, MiniMax, SiliconFlow (CN + Global), Xiaomi MIMO, Novita AI, iFlytek Spark, Z.ai, NVIDIA NIM, ModelScope, GitHub Copilot, Ollama (local). عند عدم ضبط أي *_BASE_URL، يتراجع كل مزوّد إلى نقطة نهايته القانونية، فيكفي مفتاح واحد. راجع .env.example للإعداد.

نصيحة: تعمل كل الأسواق دون مفاتيح API بفضل fallback التلقائي. yfinance/Yahoo (HK/US/كندا)، وOKX (crypto)، وmootdx (أسهم A، اتصال TCP مباشر بدون قيود IP)، وAKShare (A-shares, US, HK, futures, forex) كلها مجانية. رمز Tushare اختياري — mootdx هو الـ fallback الموصى به لأسهم A بدون رمز، بينما يوفر AKShare احتياطياً أوسع تغطية.

المسار A: Docker (دون إعداد)

bash
git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
cp agent/.env.example agent/.env
# Edit agent/.env — uncomment your LLM provider and set API key
docker compose up --build

افتح http://localhost:8899. الخلفية والواجهة الأمامية داخل حاوية واحدة.

ينشر Docker الخلفية على 127.0.0.1:8899 افتراضياً ويشغل التطبيق كمستخدم حاوية غير root. إذا كنت تقصد تعريض API خارج جهازك، فاضبط API_AUTH_KEY قوياً وأرسل Authorization: Bearer <key> من العملاء.

المسار B: التثبيت المحلي

bash
git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
python -m venv .venv

# Activate
source .venv/bin/activate          # Linux / macOS
# .venv\Scripts\activate.bat       # Windows CMD
# .venv\Scripts\Activate.ps1       # Windows PowerShell

pip install -e .
cp agent/.env.example agent/.env   # Edit — set your LLM provider API key
vibe-trading                       # Launch interactive TUI

[!NOTE]
على Windows: الأمر cp هو اسم بديل لـ Copy-Item في PowerShell، لذا تعمل الأوامر أعلاه كما هي في PowerShell. أما في CMD فلا وجود لـ cp، فاستخدم بدلاً منه copy agent\.env.example agent\.env (وينطبق ذلك أيضاً على أمر Docker أعلاه). وإذا رفض PowerShell تشغيل Activate.ps1، فشغّل أولاً Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned؛ ويسري هذا الإعداد على جلسة الطرفية الحالية فقط.

تشغيل واجهة الويب (اختياري)

bash
# Terminal 1: API server
vibe-trading serve --port 8899

# Terminal 2: Frontend dev server
cd frontend && npm install && npm run dev  # يتطلب Node >= 22.22

افتح http://localhost:5899. تمرر الواجهة الأمامية استدعاءات API إلى localhost:8899.

وضع الإنتاج (خادم واحد):

bash
cd frontend && npm run build && cd ..
vibe-trading serve --port 8899     # FastAPI serves dist/ as static files

[!NOTE]
يرتبط vibe-trading serve بالعنوان 0.0.0.0 لكنه يثق فقط بطلبات loopback افتراضيًا: فتح الواجهة على نفس الجهاز (http://localhost:8899) يعمل دون أي إعداد. إذا تصفّحت من جهاز آخر أو مضيف جهاز افتراضي أو هاتف على شبكتك المحلية، فستُعيد النقاط الحساسة الرمز 403 وتظهر في المحادثة رسالة “Remote API access requires an API key” — عيّن مفتاح API_AUTH_KEY قويًا في agent/.env، ثم أعد التشغيل وأدخل المفتاح نفسه مرة واحدة في Settings. (بوابة مضيف Docker Desktop: عيّن VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1 مع الإبقاء على ربط المنفذ الافتراضي 127.0.0.1.)

المسار C: MCP plugin

راجع قسم MCP Plugin أدناه.

المسار D: ClawHub (أمر واحد)

bash
npx clawhub@latest install vibe-trading --force

تُنزل المهارة وإعداد MCP إلى مجلد مهارات وكيلك. راجع تثبيت ClawHub للتفاصيل.


🧠 متغيرات البيئة

انسخ agent/.env.example إلى agent/.env وأزل التعليق عن كتلة المزود التي تريدها. يحتاج كل مزود إلى 3-4 متغيرات:

المتغير مطلوب الوصف
LANGCHAIN_PROVIDER نعم اسم المزود (openrouter, deepseek, groq, ollama, إلخ)
_API_KEY نعم* مفتاح API (OPENROUTER_API_KEY, DEEPSEEK_API_KEY, إلخ)
_BASE_URL نعم عنوان URL لنقطة نهاية API
LANGCHAIN_MODEL_NAME نعم اسم النموذج (مثل deepseek-v4-pro)
TUSHARE_TOKEN لا رمز Tushare Pro لبيانات أسهم A (يرجع إلى AKShare عند الحاجة)
TIMEOUT_SECONDS لا مهلة استدعاء LLM، الافتراضي 120s
API_AUTH_KEY موصى به للنشر الشبكي Bearer token مطلوب عندما يكون API قابلاً للوصول من عملاء غير محليين
VIBE_TRADING_ENABLE_SHELL_TOOLS لا تفعيل صريح للأدوات القادرة على shell في نشر API/MCP-SSE البعيد
VIBE_TRADING_ALLOWED_FILE_ROOTS لا جذور إضافية مفصولة بفواصل لاستيراد المستندات وسجلات الوسطاء
VIBE_TRADING_ALLOWED_RUN_ROOTS لا جذور إضافية مفصولة بفواصل لأدلة تشغيل الكود المولد
VIBE_TW_STOCK_DB لا مسار لقطة SQLite لسوق تايوان؛ تُسجَّل أداة taiwan_stock_data للقراءة فقط عندما يكون المخطط صالحًا
VIBE_TRADING_EXTRA_CORS_ORIGINS لا أصول تُضاف إلى إعدادات CORS الافتراضية للحلقة المحلية، مفصولة بفواصل (بينما CORS_ORIGINS تستبدلها)
CONTENT_FILTER_WARNING_THRESHOLD لا عتبة نسبة التحذير من مرشّح المحتوى (الافتراضي 0.05 = 5%). عندما تتجاوز نسبة استجابات النموذج المحجوبة بالإشراف على المحتوى هذه القيمة، تُنبّهك بطاقة التشغيل إلى تبديل المزوّد.

* لا يحتاج Ollama إلى مفتاح API. يستخدم OpenAI Codex ChatGPT OAuth ويخزن الرموز عبر oauth-cli-kit، لا داخل agent/.env.

بيانات مجانية (دون مفتاح): أسهم A عبر AKShare، وأسهم HK/US عبر yfinance، والكريبتو عبر OKX، وأكثر من 100 بورصة كريبتو عبر CCXT. يختار النظام تلقائياً أفضل مصدر متاح لكل سوق.

🎯 النماذج الموصى بها

Vibe-Trading وكيل كثيف الأدوات؛ المهارات والاختبارات الرجعية والذاكرة والأسراب كلها تمر عبر استدعاءات أدوات. اختيار النموذج يحدد مباشرة هل سيستخدم الوكيل أدواته أم سيصطنع إجابات من بيانات التدريب.

المستوى أمثلة متى تستخدمه
الأفضل anthropic/claude-opus-4.7, anthropic/claude-sonnet-4.6, openai/gpt-5.5-pro, google/gemini-3.5-flash أسراب معقدة (3+ وكلاء)، جلسات بحث طويلة، تحليل بمستوى ورقة علمية
النقطة المثلى (افتراضي) deepseek-v4-pro, deepseek/deepseek-v4-pro, x-ai/grok-4.20, z-ai/glm-5.1, moonshotai/kimi-k2.6, qwen/qwen3-max-thinking الاستخدام اليومي، tool-calling موثوق بنحو عُشر التكلفة
تجنبها لاستخدام الوكيل *-nano, *-flash-lite, *-coder-next, small / distilled variants tool-calling غير موثوق؛ سيبدو الوكيل وكأنه "يجيب من الذاكرة" بدلاً من تحميل المهارات أو تشغيل الاختبارات الرجعية

يأتي agent/.env.example افتراضياً مع DeepSeek official API + deepseek-v4-pro; ويمكن لمستخدمي OpenRouter استخدام deepseek/deepseek-v4-pro.


🖥 مرجع CLI

bash
vibe-trading               # interactive TUI
vibe-trading run -p "..."  # single run
vibe-trading serve         # API server
vibe-trading alpha list    # استعرض 462 ألفا جاهز؛ متاح show / bench / compare / export-manifest
vibe-trading playbook list # خمسة قوالب بحث مجدولة؛ متاح show / create
vibe-trading channels status --local  # فحص إعدادات قنوات IM وتلميحات التثبيت
vibe-trading provider doctor  # طباعة تشخيصات المزود/الوكيل/الحزم بعد إخفاء الأسرار

أوامر الشرطة المائلة داخل TUI

الأمر الوصف
/help عرض اختصارات لوحة المفاتيح وقائمة الأوامر
/model تبديل مزوّد LLM والنموذج
/memory عرض / إدارة الذاكرة الدائمة
/history تصفّح الجلسات السابقة واستئنافها
/goal بدء / فحص هدف بحث مالي
/search بحث نصي كامل عبر كل الجلسات
/swarm إعدادات متعددة الوكلاء (لجنة / كمّي / مخاطر)
/skill سرد / تحميل / إلغاء تحميل المهارات
/show عرض تشغيل سابق بالمعرّف
/clear مسح المحادثة الحالية
/pine تصدير الاستراتيجية الحالية كـ Pine Script
/journal تحليل ملف CSV لسجل التداول
/shadow تدريب / عرض الحساب الظلّي
/export تصدير الجلسة الحالية (md / json)
/debug تبديل لوحة التشخيص (استهلاك التوكن / زمن الاستجابة)
/comps تحليل الشركات المماثلة (مضاعفات النظراء ← نطاق ضمني)
/dcf تقييم بالتدفقات النقدية المخصومة مع شبكة حساسية
/attrib إسناد Brinson-Fachler (التوزيع مقابل الانتقاء)
/memo مذكرة استثمار — الأطروحة، الرأي المخالف، السيناريوهات، معايير الخروج
/earnings مراجعة الأرباح — جسر المفاجأة من الإيرادات إلى ربحية السهم
/screen فرز منهجي للأفكار — الفرضية، القمع، قائمة الناجين
/playbook قوالب البحث المجدولة (سرد / تشغيل / جدولة)
/connector ملفات موصّلات التداول (الحالة / التشغيل / الإيقاف)
/halt مفتاح الإيقاف — أوقف كل التداول الحي فوراً
/resume إلغاء مفتاح الإيقاف (إعادة تفعيل التداول الحي)
/data وضع توجيه البيانات
/quit خروج (أيضاً q و exit و :q)

تشغيل واحد والخيارات

bash
vibe-trading run -p "Backtest BTC-USDT MACD strategy, last 30 days"
vibe-trading run -p "Analyze AAPL momentum" --json
vibe-trading run -f strategy.txt
echo "Backtest 000001.SZ RSI" | vibe-trading run
bash
vibe-trading -p "your prompt"
vibe-trading --skills
vibe-trading --swarm-presets
vibe-trading --swarm-run investment_committee '{"topic":"BTC outlook"}'
vibe-trading --list
vibe-trading --show <run_id>
vibe-trading --code <run_id>
vibe-trading --pine <run_id>           # Export indicators (TradingView + TDX + MT5)
vibe-trading --trace <run_id>
vibe-trading --continue <run_id> "refine the strategy"
vibe-trading --upload report.pdf
bash
vibe-trading alpha list --zoo gtja191 --limit 10
vibe-trading alpha show gtja191_171
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20

قنوات IM

تصل محولات IM تطبيقات الدردشة الخارجية ببيئة الجلسة نفسها التي يستخدمها Web UI وCLI. اضبط المحولات المفعّلة تحت channels في ~/.vibe-trading/agent.json. المحولات المعتمدة على SDK اختيارية عبر extras، وعند غياب SDK تعرض تلميحات استرداد بدلاً من إسقاط runtime.

bash
vibe-trading channels status --local   # فحص config وتلميحات SDK الناقصة دون API
vibe-trading channels status           # الاستعلام عن API runtime الجاري
vibe-trading channels start            # بدء المحولات المفعّلة عبر API
vibe-trading channels stop             # إيقاف المحولات المفعّلة عبر API
vibe-trading channels login weixin     # تشغيل hook تسجيل الدخول عند الحاجة
vibe-trading channels pairing --channel telegram list

تشمل المحولات المدمجة websocket وtelegram وslack وdiscord وmatrix وwhatsapp وsignal وqq وnapcat وweixin وwecom وfeishu وdingtalk وmsteams وemail وmochat. يمكنك تثبيت منصة محددة مثل pip install "vibe-trading-ai[telegram]" أو تثبيت المجموعة كاملة عبر pip install "vibe-trading-ai[channels]".

أوامر الشرطة داخل المحادثة (مستقلة عن القناة، تعمل في جميع المحولات الـ 16):

الأمر الوصف
/new إعادة تعيين الجلسة الحالية — الرسالة التالية تبدأ محادثة جديدة
/reset اسم مستعار لـ /new
/newsession اسم مستعار لـ /new
/pairing list عرض طلبات sender pairing المعلقة

الأوامر لا تحس بحالة الأحرف ويجب إرسالها كرسالة كاملة (مثلاً hello /new تُعامل كرسالة عادية وليس كأمر إعادة تعيين).


💡 أمثلة

الاستراتيجيات والاختبار الرجعي

bash
# Moving average crossover on US equities
vibe-trading run -p "Backtest a 20/50-day moving average crossover on AAPL for the past year, show Sharpe ratio and max drawdown"

# RSI mean-reversion on crypto
vibe-trading run -p "Test RSI(14) mean-reversion on BTC-USDT: buy below 30, sell above 70, last 6 months"

# Multi-factor strategy on A-shares
vibe-trading run -p "Backtest a momentum + value + quality multi-factor strategy on CSI 300 constituents over 2 years"

# After backtesting, export to TradingView / TDX / MetaTrader 5
vibe-trading --pine <run_id>

bench ألفا zoo جاهز بسطر واحد:

bash
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20

استعرض الكتالوج وافحص ألفا مفردة:

bash
vibe-trading alpha list --zoo gtja191 --theme reversal --limit 10
vibe-trading alpha show gtja191_171

ركّب إشارة متعدد العوامل من ألفات zoo (Python):

python
from src.skills.multi_factor.zoo_signal_engine import ZooSignalEngine
engine = ZooSignalEngine.from_zoo(["gtja191_171", "gtja191_111", "gtja191_163"])
panel = ...  # your wide OHLCV panel
signal = engine.compute_signal(panel)

بحث السوق

bash
# Equity deep-dive
vibe-trading run -p "Research NVDA: earnings trend, analyst consensus, option flow, and key risks for next quarter"

# Macro analysis
vibe-trading run -p "Analyze the current Fed rate path, USD strength, and impact on EM equities and gold"

# Crypto on-chain
vibe-trading run -p "Deep dive BTC on-chain: whale flows, exchange balances, miner activity, and funding rates"

تدفقات السرب

bash
# Bull/bear debate on a stock
vibe-trading --swarm-run investment_committee '{"topic": "Is TSLA a buy at current levels?"}'

# Quant strategy from screening to backtest
vibe-trading --swarm-run quant_strategy_desk '{"universe": "S&P 500", "horizon": "3 months"}'

# Crypto desk: funding + liquidation + flow → risk manager
vibe-trading --swarm-run crypto_trading_desk '{"asset": "ETH-USDT", "timeframe": "1w"}'

# Global macro portfolio allocation
vibe-trading --swarm-run macro_rates_fx_desk '{"focus": "Fed pivot impact on EM bonds"}'

ذاكرة عبر الجلسات

bash
# Save your preferences once
vibe-trading run -p "Remember: I prefer RSI-based strategies, max 10% drawdown, hold period 5–20 days"

# The agent recalls them in future sessions automatically
vibe-trading run -p "Build a crypto strategy that fits my risk profile"

رفع المستندات وتحليلها

bash
# Analyze a broker export or earnings report
vibe-trading --upload trades_export.csv
vibe-trading run -p "Profile my trading behavior and identify any biases"

vibe-trading --upload NVDA_Q1_earnings.pdf
vibe-trading run -p "Summarize the key risks and beats/misses from this earnings report"

🌐 خادم API

bash
vibe-trading serve --port 8899
الطريقة نقطة النهاية الوصف
GET /runs عرض التشغيلات
GET /runs/{run_id} تفاصيل التشغيل
GET /runs/{run_id}/pine تصدير مؤشرات متعدد المنصات
POST /sessions إنشاء جلسة
POST /sessions/{id}/messages إرسال رسالة
GET /sessions/{id}/events بث أحداث SSE
POST /upload رفع PDF/ملف
GET /swarm/presets عرض إعدادات السرب
POST /swarm/runs بدء تشغيل سرب
GET /swarm/runs/{id}/events بث SSE للسرب
GET /alpha/list قائمة ألفات مع تصفية حسب zoo/theme/universe
GET /alpha/{alpha_id} بيانات وصفية + الكود المصدري للألفا
POST /alpha/bench بدء مهمة bench (يعيد job_id)
GET /alpha/bench/{job_id}/stream تدفق تقدّم SSE
GET /settings/llm قراءة إعدادات LLM في Web UI
PUT /settings/llm تحديث إعدادات LLM المحلية
GET /settings/data-sources قراءة إعدادات مصادر البيانات المحلية
PUT /settings/data-sources تحديث إعدادات مصادر البيانات المحلية
GET /channels/status قراءة حالة IM channel runtime والمحولات
POST /channels/start بدء محولات IM configured
POST /channels/stop إيقاف محولات IM configured
POST /channels/pairing/command تنفيذ أمر sender-pairing على shared store
POST /scheduled-runs إنشاء مهمة بحث مجدولة (interval-ms أو cron)
GET /scheduled-runs سرد المهام المجدولة
DELETE /scheduled-runs/{job_id} إلغاء مهمة مجدولة
GET /scheduled-runs/playbooks سرد قوالب البحث
GET /scheduled-runs/playbooks/{slug} عرض قالب واحد ومتغيّراته
POST /scheduled-runs/playbooks/{slug} جدولة مهمة من قالب
POST /sessions/{id}/cancel إيقاف التشغيل الجاري للجلسة (يُسجَّل كإلغاء لا كفشل)
POST /sessions/{id}/title/auto توليد عنوان الجلسة من أول تبادل (لا يستبدل تسمية يدوية)
GET /correlation/regime الخط الزمني لنظام كثافة حواف الارتباط
GET /agents.json · POST /v1/query جسر OpenBB Workspace — يُسجَّل فقط مع إضافة openbb الاختيارية، و/v1/query يتطلب مصادقة

توثيق تفاعلي: http://localhost:8899/docs

الإعدادات الأمنية الافتراضية

للتطوير على localhost، يبقي vibe-trading serve سير المتصفح بسيطاً. لأي عميل غير محلي، تتطلب نقاط API الحساسة API_AUTH_KEY؛ استخدم Authorization: Bearer <key> لطلبات JSON/الرفع. تتعامل Web UI مع تدفقات Browser EventSource بعد إدخال المفتاح نفسه مرة واحدة في Settings.

الأدوات القادرة على shell (bash / background_run / cancel_background) مفعّلة فقط لواجهة CLI المحلية التفاعلية. أما بقية الأسطح — واجهة HTTP/SSE و MCP server على جميع وسائط النقل (بما في ذلك stdio) — فتبقى معطّلة ما لم تفعّلها صراحة عبر VIBE_TRADING_ENABLE_SHELL_TOOLS=1 (أو تمرير --enable-shell-tools إلى vibe-trading-mcp). نوع وسيط النقل لا يمنح صلاحية shell ضمنيًا أبدًا. قارئات المستندات والسجلات محدودة افتراضياً بجذور الرفع/الاستيراد؛ ضع الملفات تحت ~/.vibe-trading/uploads أو ~/.vibe-trading/runs أو ./uploads أو ./data (أو المسارين القديمين agent/uploads / agent/runs)، أو أضف دليلاً مخصصاً عبر VIBE_TRADING_ALLOWED_FILE_ROOTS. تُخزَّن الجلسات ونتائج التشغيل وتشغيلات swarm والمرفوعات وفهرس sessions.db كلها تحت ~/.vibe-trading (يمكن نقلها بالكامل عبر متغير البيئة VIBE_TRADING_HOME)، ويُنقَل السجل القديم تلقائياً عند أول تشغيل.

إعدادات Web UI

تتيح صفحة Settings في Web UI للمستخدمين المحليين تحديث مزود/نموذج LLM، وbase URL، ومعلمات التوليد، وreasoning effort، وبيانات اعتماد السوق الاختيارية مثل رمز Tushare. تُحفظ الإعدادات في agent/.env؛ وتُحمّل قيم المزودين الافتراضية من agent/src/providers/llm_providers.json.

قراءات Settings بلا آثار جانبية: لا تنشئ GET /settings/llm ولا GET /settings/data-sources ملف agent/.env، ولا تعيدان إلا مسارات نسبية للمشروع. قد تكشف قراءات وكتابات Settings حالة بيانات الاعتماد أو تحدث بيانات الاعتماد/بيئة التشغيل، لذلك تتطلب API_AUTH_KEY عند ضبطه. إذا كان API_AUTH_KEY غير مضبوط في وضع التطوير، فلا يقبل الوصول إلى Settings إلا من عملاء loopback.

تحتوي صفحة Settings نفسها على لوحة قنوات IM للمشغل المحلي. تستطلع /channels/status، وتعرض حالات configured/enabled/available/loaded/running وتلميحات استرداد المحولات، ويمكنها بدء أو إيقاف channel runtime configured دون العودة إلى الطرفية.

البحث المجدول (Scheduled research)

شغّل prompt بحثي أو backtest وفق جدول متكرر — من صفحة المجدولة في واجهة الويب أو عبر REST. المنفّذ الخلفي معطّل افتراضياً — شغّل الخادم بـ VIBE_TRADING_ENABLE_SCHEDULER=1 لتفعيله:

bash
VIBE_TRADING_ENABLE_SCHEDULER=1 vibe-trading serve --port 8899

ثم أنشئ المهام عبر REST. الحقل schedule إما عدد صحيح بسيط (الفاصل بـالمللي ثانية) أو تعبير cron من 5 حقول (دقيقة ساعة يوم شهر يوم-الأسبوع؛ يقبل كل حقل * و*/n وأرقاماً وقوائم بفواصل ونطاقات مثل 1-5). يُقيَّم cron وفق الساعة الحائطية لـ timezone الاختيارية للمهمة (مفتاح IANA)، فيبقى الإيقاع ثابتاً عبر تغييرات التوقيت الصيفي — يُتخطى الوقت غير الموجود في الربيع، ويُنفَّذ الوقت المكرر في الخريف مرة واحدة عند أول ظهور. المهام بدون timezone تحتفظ بدلالات UTC كما هي:

bash
# كل 6 ساعات (cron)
curl -X POST http://localhost:8899/scheduled-runs \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Scan CSI300 for momentum breakouts and backtest the top 5","schedule":"0 */6 * * *"}'

# أيام العمل 23:30 بتوقيت أوكلاند المحلي — ثابت عبر التوقيت الصيفي
curl -X POST http://localhost:8899/scheduled-runs \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Pre-open scan of NZX names","schedule":"30 23 * * 1-5","timezone":"Pacific/Auckland"}'

# السرد / الإلغاء
curl http://localhost:8899/scheduled-runs
curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>

كل تشغيل ينفّذ prompt في جلسة agent جديدة (تُوضع معلمات backtest الاختيارية في config)، وتُحفظ المهام تحت ~/.vibe-trading/ فتبقى بعد إعادة التشغيل. بدون هذه الراية، تسجّل نقاط /scheduled-runs المهام لكن لا يُطلق شيء. أضف -H "Authorization: Bearer <key>" لكل طلب عند ضبط API_AUTH_KEY.

يأتي المجدول ومعه خمسة قوالب بحث جاهزة للجدولة — premarket-brief وearnings-season-tracker وportfolio-checkup وa-share-money-flow وinstitutional-holdings-diff. يصرّح كل قالب بالبيانات التي يحتاجها بلغة طبيعية بدل تسمية أداة بعينها، فيظل صالحاً مع توسّع مجموعة الأدوات، ويُطلب منه ذكر أي مُدخل مفقود بدل ملئه من الذاكرة. يمكن الوصول إليها من CLI أو REST أو عبر /playbook داخل واجهة TUI:

bash
vibe-trading playbook list                     # القوالب الخمسة
vibe-trading playbook show premarket-brief     # النص والمتغيرات المعلنة والوتيرة المقترحة
vibe-trading playbook create premarket-brief \
  --var home_market="US equities" --var watchlist="AAPL, MSFT, NVDA" \
  --timezone America/New_York

curl http://localhost:8899/scheduled-runs/playbooks
curl http://localhost:8899/scheduled-runs/playbooks/premarket-brief
curl -X POST http://localhost:8899/scheduled-runs/playbooks/premarket-brief \
  -H "Content-Type: application/json" \
  -d '{"variables":{"home_market":"US equities","watchlist":"AAPL, MSFT, NVDA"}}'

إرسال {} يجدول القالب على وتيرته المقترحة بقيمه الافتراضية المعلنة. يصبح النص المُصاغ هو prompt المهمة حرفياً، ويُرفض أي متغير غير معلن بدل تجاهله بصمت.


🔌 MCP Plugin

يعرض Vibe-Trading 74 أداة MCP لأي عميل متوافق مع MCP. يعمل كعملية stdio فرعية، دون إعداد خادم. أدوات البحث الأساسية تعمل دون أي مفاتيح API لأسواق HK/US/crypto؛ وأدوات connector للتداول تستخدم profile الموصل المختار، ويحتاج run_swarm وحده إلى مفتاح LLM.

متغيرات البيئة: العميل هو من يشغّل الخادم بنفسه، لذا لا يصل إليه export من الـ shell أبداً —— اضبطها في كتلة env الخاصة بالعميل. كود الاختبار الخلفي المولَّد محصور ضمن جذور التشغيل المسموح بها، لذا تحتاج إلى VIBE_TRADING_ALLOWED_RUN_ROOTS لكتابة النتائج في دليل عمل خاص بك:

json
{
  "mcpServers": {
    "vibe-trading": {
      "command": "vibe-trading-mcp",
      "env": { "VIBE_TRADING_ALLOWED_RUN_ROOTS": "C:\\Users\\me\\research" }
    }
  }
}

Claude Desktop

أضف إلى claude_desktop_config.json:

json
{
  "mcpServers": {
    "vibe-trading": {
      "command": "vibe-trading-mcp"
    }
  }
}

OpenClaw

أضف إلى ~/.openclaw/config.yaml:

yaml
skills:
  - name: vibe-trading
    command: vibe-trading-mcp

Cursor / Windsurf / عملاء MCP آخرون

bash
vibe-trading-mcp                   # stdio (default)
vibe-trading-mcp --transport http  # Streamable HTTP (spec default) at /mcp
vibe-trading-mcp --transport sse   # legacy SSE (deprecated)

أدوات MCP المعروضة (74): list_skills, load_skill, start_research_goal, get_research_goal, add_goal_evidence, update_research_goal_status, backtest, factor_analysis, alpha_zoo, alpha_bench, analyze_options, analyze_options_payoff, pattern_recognition, read_url, read_document, web_search, write_file, read_file, list_strategies, query_strategies, get_strategy_evidence, refresh_strategy_evidence, trading_connections, trading_select_connection, trading_check, trading_account, trading_positions, trading_orders, trading_quote, trading_history, list_swarm_presets, run_swarm, get_market_data, get_fund_flow, get_dragon_tiger, get_northbound_flow, get_margin_trading, get_block_trades, get_shareholder_count, get_lockup_expiry, get_sector_info, get_research_reports, get_stock_news, get_sec_filings, get_financial_statements, get_options_chain, get_stock_profile, screen_market, search_symbol, get_macro_series, iwencai_search, qveris_search, qveris_inspect, qveris_execute, get_institutional_holdings, etf_holdings, prediction_market, research_papers, get_swarm_status, get_run_result, list_runs, reap_stale_runs, retry_run, analyze_trade_journal, extract_shadow_strategy, run_shadow_backtest, render_shadow_report, scan_shadow_signals, quantlib_call, cashflow_performance, orderbook_depth, sentiment, technical_indicators, get_fundamentals.

أدوات MCP الخارجية في SWARM

يمكن لعمّال run_swarm استدعاء أدوات من خوادم MCP خارجية بعد موافقة المشغّل. اضبط قائمة السماح على جانب الخادم في VIBE_TRADING_SWARM_AGENT_CONFIG أو ~/.vibe-trading/swarm-agent.json أو الملف الاحتياطي ~/.vibe-trading/agent.json، ثم اذكر الأدوات البعيدة داخل إعداد swarm باسم الغلاف المحلي مثل mcp_internal_kb_search. تبقى variables التي يمرّرها المستدعي بيانات قوالب فقط، ولا يمكنها حقن روابط MCP أو أوامر أو متغيرات بيئة أو تجاوزات لقائمة السماح.

التثبيت من ClawHub (أمر واحد)

bash
npx clawhub@latest install vibe-trading --force

--force مطلوب لأن المهارة تشير إلى واجهات API خارجية، مما يطلق فحص VirusTotal الآلي. الكود مفتوح المصدر بالكامل وآمن للفحص.

ينزل هذا المهارة وإعداد MCP إلى مجلد مهارات وكيلك. لا حاجة للاستنساخ.

تصفح على ClawHub: clawhub.ai/skills/vibe-trading

OpenSpace — مهارات ذاتية التطور

كل المهارات المالية الـ 90 منشورة على open-space.cloud وتتطور ذاتياً عبر محرك التطور الذاتي في OpenSpace.

للاستخدام مع OpenSpace، أضف خادمي MCP إلى إعداد وكيلك:

json
{
  "mcpServers": {
    "openspace": {
      "command": "openspace-mcp",
      "toolTimeout": 600,
      "env": {
        "OPENSPACE_HOST_SKILL_DIRS": "/path/to/vibe-trading/agent/src/skills",
        "OPENSPACE_WORKSPACE": "/path/to/OpenSpace"
      }
    },
    "vibe-trading": {
      "command": "vibe-trading-mcp"
    }
  }
}

سيكتشف OpenSpace كل المهارات الـ 90 تلقائياً، مما يتيح auto-fix وauto-improve والمشاركة المجتمعية. ابحث عن مهارات Vibe-Trading عبر search_skills("finance backtest") في أي وكيل متصل بـ OpenSpace.

MetaTrader 5 (Exness وغيره من وسطاء MT5)

يتصل بـطرفية MT5 تعمل محلياً عبر حزمة MetaTrader5 الرسمية (Windows فقط):

bash
pip install "vibe-trading-ai[mt5]"

اضبط ~/.vibe-trading/mt5.json (يُنشأ يدوياً، وبـ chmod 600 حيثما كان ذلك مدعوماً):

json
{
  "login": 12345678,
  "password": "...",
  "server": "Exness-MT5Trial8",
  "symbol_suffix": "m",
  "max_order_volume": 1.0,
  "max_order_notional_usd": 10000
}

ثم:

bash
vibe-trading connector use mt5-paper-sdk
vibe-trading connector check
vibe-trading connector account
vibe-trading connector quote EURUSD
vibe-trading connector history EURUSD
Profile الحساب الأوامر
mt5-paper-sdk demo قراءة فقط
mt5-live-sdk-readonly real قراءة فقط
mt5-paper-trade demo مباشر (تسري حدود الحجم الخاصة بالموصل)
mt5-live-trade real خاضع لبوابة التفويض (mandate) + مفتاح الإيقاف (kill-switch)

حدود الأمان: "paper" هو حساب demo لدى الوسيط، ويُتحقق من ذلك عند كل استدعاء — إذ تعيد الطرفية account_info().trade_mode ورقم تسجيل الدخول، لذا يُرفض رفضاً قاطعاً أي profile ورقي مربوط بحساب أموال حقيقية (أو العكس). يحدد MT5 أحجام الأوامر بوحدة اللوت (1 لوت EURUSD = 100,000 EUR)؛ وتسعّر بوابة التفويض في وضع live اللوتات عبر hook التسعير بالدولار الأمريكي في الموصل، كما تسري حدود max_order_volume / max_order_notional_usd الخاصة بالموصل على demo وlive معاً، وتفشل مغلقةً (fail-closed) إذا تعذّر تسعير القيمة الاسمية. ملاحظة لحسابات التحوط (وهي الوضع الافتراضي لدى Exness): أي أمر بالاتجاه المعاكس يفتح تحوطاً — أغلق المراكز عبر التذكرة (trading_cancel_order مع تذكرة المركز)، فذلك يثبّت الصفقة على المركز ولا يمكنه إلا تقليل الانكشاف. مسار التراجع/الإيقاف: يمنع مفتاح الإيقاف أوامر live الجديدة؛ وتبقى الإلغاءات متاحة وتُسجَّل في سجل التدقيق. حدود التفويض بالدولار الأمريكي؛ أما عملات الحسابات غير الدولارية فتُفرض هوامشها لدى الوسيط بعملة الحساب.

يتشارك مُحمّل بيانات السوق mt5 (رأس سلسلة تراجع الفوركس) ملف mt5.json نفسه — ومن دون هذا الملف يرتبط للقراءة فقط بآخر طرفية مستخدمة ومسجَّلة الدخول.


🔌 موصّل eToro Public API

يتصل بـ eToro Public API لحسابات التجربة والحسابات الحقيقية عبر زوج مفاتيح (x-api-key + x-user-key). بيئتا التجربة والحقيقة مفصولتان بنيويًا: مفاتيح التجربة لا تصل إلا إلى مسارات /demo.

اضبط ~/.vibe-trading/etoro.json (أنشئه بنفسك، مع chmod 600 حيثما يُدعم):

json
{
  "api_key": "YOUR_PUBLIC_API_KEY",
  "user_key": "YOUR_USER_KEY",
  "profile": "paper"
}

بدلاً من ذلك يمكنك ضبط ETORO_API_KEY وETORO_USER_KEY في ~/.vibe-trading/.env.

ثم:

bash
vibe-trading connector use etoro-paper-sdk
vibe-trading connector check
vibe-trading connector account
vibe-trading connector positions
vibe-trading connector quote BTC
الملف التعريفي الحساب الأوامر
etoro-paper-sdk تجربة قراءة فقط
etoro-live-sdk-readonly حقيقي قراءة فقط
etoro-paper-trade تجربة إرسال مباشر على مسارات التجربة
etoro-live-trade حقيقي مُقيَّد بالتفويض ومفتاح الإيقاف

يستخدم البحث عن الرموز خاصية internalSymbolFull في eToro (مثلاً BTC ← معرّف الأداة 100000). استخدم أداة الوكيل etoro_search_instruments لحل الرموز قبل التداول.

حدود الأمان: التجربة والحقيقة مفصولتان بالمسار ومقيّدتان بالمفتاح (paper_guard: path_separated_key_bound). الإجراءات الحقيقية التي تزيد المخاطر (الفتح وبدء/زيادة النسخ) تتطلب تفويضًا مُصرَّحًا به، وحالة إيقاف صافية، وحسابًا بالدولار مُتحقَّقًا منه لفرض القيمة الاسمية للنسخ. أما الإغلاق الكامل والجزئي المُتحقَّق منه، وإلغاء الأوامر المعلّقة، وإنهاء النسخ فتبقى متاحة أثناء الإيقاف وتُسجَّل في سجل التدقيق. إلغاء إغلاق معلّق وتعديل وقف الخسارة للمركز عمليتان للتجربة فقط: المسار الحقيقي يفشل مغلقًا لأنهما قد يزيدان الانكشاف أو ينقلان هامشًا إضافيًا دون بيانات API كافية لقياس المخاطر الدولارية الإضافية. مبالغ النسخ مُقوَّمة بعملة حساب eToro، ويتطلب كل بدء/تعديل نسخ معرّفًا مرجعيًا آمنًا للروابط من 1 إلى 35 حرفًا يوفّره المتصل من أجل الاستعلام. أدوات الكتابة الخاصة بـ eToro (etoro_close_position وetoro_copy_* وغيرها) هي أدوات وكيل فقط — غير مُعرَّضة عبر MCP أو CLI. التراجع: أعِد إلغاء التزامات الموصّل أو عطّل الملفات التعريفية؛ ويمنع الإيقاف أي إجراء حقيقي جديد يزيد المخاطر.


🔌 تحميل الأدوات من خوادم MCP خارجية (وضع MCP Client)

هذا هو الاتجاه المعاكس لقسم MCP Plugin أعلاه.
يتيح MCP Plugin لوكلاء آخرين استدعاء أدوات Vibe-Trading.
أما هذا القسم فيتيح لوكيل Vibe-Trading المدمج استدعاء أدوات من خوادم MCP الخاصة بك.

بداية سريعة

أنشئ الملف ~/.vibe-trading/agent.json:

json
{
  "mcpServers": {
    "my-server": {
      "command": "uvx",
      "args": ["my-mcp-server"]
    }
  }
}

ثم شغّل أي أمر CLI — تُحقَن أدوات الخوادم الخارجية العادية تلقائياً في سجل الوكيل بعد الأدوات المحلية:

bash
vibe-trading run "use my-server to do X"

مسبار MCP الرسمي من IBKR للقراءة فقط

يستطيع Vibe-Trading الاتصال مباشرةً بنقطة نهاية MCP البعيدة الرسمية لدى Interactive Brokers في وضع
القراءة فقط. أضف ما يلي إلى ~/.vibe-trading/agent.json:

json
{
  "mcpServers": {
    "ibkr": {
      "type": "streamableHttp",
      "url": "https://api.ibkr.com/v1/api/mcp",
      "auth": {
        "type": "oauth",
        "scopes": ["mcp.read"],
        "clientName": "Vibe-Trading",
        "cacheDir": "~/.vibe-trading/live/ibkr/oauth"
      },
      "enabledTools": ["*"]
    }
  }
}

ثم ابدأ تدفق OAuth عبر المتصفح:

bash
vibe-trading connector authorize ibkr-live-official-mcp-readonly

لا يُقبل الرمز الشامل * إلا مع مسبار mcp.read من IBKR. والترخيص لهذا الملف يؤكد الوصول إلى نطاق
القراءة الرسمي لدى IBKR فحسب؛ أما استدعاءات trading_account وtrading_positions العامة فتبقى معطّلة
إلى أن تنشر IBKR أسماء أدوات قراءة مستقرة يمكن لـ Vibe-Trading ربطها بأمان. وأي إعداد يضيف mcp.write
يجب أن يثبّت قائمة أدوات صريحة، ويظل مع ذلك مارّاً عبر حارس الأوامر الحية.

وإذا أصدرت IBKR عميل OAuth مُسجَّلاً مسبقاً، فأضف clientId وclientSecret داخل auth.

موصّلات التداول: أسرع مسار

لمن لا يستطيع انتظار موافقة عميل OAuth من IBKR، اتصل بجلسة TWS أو IB Gateway محلية. تبقى بيانات الاعتماد
داخل تطبيق IBKR على سطح المكتب، ولا يتصل Vibe-Trading إلا بـ 127.0.0.1 ويعرضه كملف موصّل.

ثبّت الـ SDK الاختياري:

bash
pip install "vibe-trading-ai[ibkr]"

افتح TWS للتداول الورقي أو IB Gateway الورقي، وفعّل API socket clients، ثم شغّل:

bash
vibe-trading connector list
vibe-trading connector use ibkr-paper-local
vibe-trading connector configure ibkr-paper-local --yes
vibe-trading connector check
vibe-trading connector account
vibe-trading connector positions
vibe-trading connector orders
vibe-trading connector quote AAPL
vibe-trading connector history AAPL --duration "30 D" --bar-size "1 day"

المنافذ المحلية الافتراضية:

التطبيق ورقي حيّ للقراءة فقط
TWS 7497 7496
IB Gateway 4002 4001

يعرض الوكيل أدوات بنطاق الموصّل بأسماء trading_connections وtrading_select_connection و
trading_check وtrading_account وtrading_positions وtrading_orders وtrading_quote و
trading_history. ولا تُسجَّل أدوات MCP الخام لوسطاء التداول الحي مباشرةً بصيغة mcp__*،
ولا تُسجَّل أي أداة لتنفيذ الأوامر لدى IBKR.

🔐 وضع TAP — عزل كامل لبيانات الاعتماد وكتابة بموافقة بشرية

اختياري ومعطّل افتراضياً. إن لم تُضبط متغيرات TAP_* أدناه، يتصرف الموصّل تماماً كما كان
(اتصال مباشر بـ SDK الوسيط) ولا يتغير شيء.

TAP (Tool Authorization Protocol) وسيط لبيانات الاعتماد: لا يحمل الوكيل أبداً
المفتاح السري الخام لواجهة الوسيط، وتخضع عمليات الكتابة ذات الأثر لموافقة بشرية. ومع تفعيل وضع TAP
يُرسَل كل استدعاء لـ Alpaca — تنفيذ الأمر والإلغاء وكذلك القراءات
(account/positions/orders/quote/bars) — إلى نقطة النهاية /forward في وسيط TAP بدل SDK الوسيط؛ فيحقن
TAP المفتاح الحقيقي على جانب الخادم ثم يمرّر الطلب إلى المصدر.

  • لا تحمل عملية الوكيل أي مفتاح لـ Alpaca إطلاقاً — ولا تحتاج حتى إلى alpaca-py — لأن كامل حركة
    الخروج تمرّ عبر TAP. يُشار إلى السر بالاسم (<CREDENTIAL:alpaca.key_id>) ويستبدله TAP.
  • تتوقف عمليات الكتابة بانتظار موافقة بشرية. لا يصل أمر أو إلغاء إلى الوسيط دون موافقة إنسان؛ وحتى
    عبارة «اشترِ الآن» المحقونة عبر التوجيه تُحتجَز، ورفضها يعني أنها لن تصل إلى Alpaca أبداً. وتحمل الأوامر
    معرّف client_order_id حتمياً، فتُلغى تكرارات إعادة المحاولة عند تسابق الموافقة بدل تنفيذ الأمر مرتين.
  • تُعتمد القراءات تلقائياً. فـ account/positions/orders/quote/bars كلها طلبات GET يمرّرها TAP دون
    خطوة بشرية — وهذا عزل لبيانات الاعتماد (لا مفتاح داخل العملية) لا بوابة، فلا احتكاك إضافي تقريباً.
  • يثبّت allowed_hosts على اعتماد TAP الجهات التي يجوز إرسال المفتاح إليها، فيُرفض أي هدف مُتلاعَب به
    (403) قبل الحقن.

كيفية التفعيل:

  1. في لوحة TAP، أنشئ اعتماداً متعدد الأسرار باسم alpaca يحمل زوج مفاتيح Alpaca في الحقلين
    key_id وsecret_key، وأسنِده إلى وكيلك، مع allowed hosts تشمل paper-api.alpaca.markets
    (أو المضيف الحي api.alpaca.markets) وdata.alpaca.markets (مضيف بيانات السوق الذي تستخدمه
    quote/bars). واستخدم اعتمادَي TAP منفصلين للورقي والحي (مثل alpaca-paper / alpaca-live،
    يُختاران عبر TAP_ALPACA_CREDENTIAL)، كلٌّ منهما بـ allowed_hosts مثبّت على مضيف واجهته الخاصة —
    عندئذ يرفض TAP بنيوياً إرسال المفتاح الورقي إلى المضيف الحي والعكس، فيبقى الفصل بين الورقي والحي
    واضحاً من طرف إلى طرف.
  2. أضف إلى agent/.env:
المتغير إلزامي الوصف
TAP_PROXY_URL نعم عنوان وسيط TAP الأساسي (مثل https://proxy.tap.human.tech)
TAP_AGENT_KEY نعم مفتاح واجهة وكيل TAP الخاص بك (سرّي)
TAP_ALPACA_CREDENTIAL لا اسم اعتماد TAP الخاص بـ Alpaca (الافتراضي alpaca)
TAP_APPROVAL_TIMEOUT لا عدد الثواني لانتظار قرار بشري (الافتراضي 300)

عند إجراء عملية كتابة، وافق عليها أو ارفضها من قناة TAP لديك (Telegram / اللوحة). يُمرَّر الأمر أو
الإلغاء المُوافَق عليه إلى Alpaca، أما المرفوض أو الذي انتهت مهلته فيعيد خطأ ولا يُرسَل إطلاقاً.

قيد معروف — تسابق الموافقة. إذا وافق الإنسان تماماً عند حدّ TAP_APPROVAL_TIMEOUT، فقد يمرّر TAP
الأمر بينما يكون الاستطلاع قد استسلم بالفعل: عندها تُبلّغ البوابة عن خطأ رغم وصول الأمر إلى الوسيط،
ويَعُدّ عدّاد max_trades_per_day صفقةً أقل. ويمنع client_order_id الحتمي إعادةَ المحاولة من تنفيذ
الأمر مرتين؛ لكن إن كنت تعتمد على حدّ يومي ضيّق للصفقات، فتحقّق من الأوامر المفتوحة بعد خطأ مهلة TAP
قبل إعادة المحاولة.

النطاق: يغطي تنفيذ أوامر Alpaca وإلغاءها والقراءات الخمس جميعها — أي كامل حركة خروج الموصّل،
فلا تحمل العملية مفتاحاً على أي مسار. أما الوسطاء الذين يوقّعون بـ HMAC (Binance/OKX) فمتروكون لمرحلة
لاحقة (التوقيع على جانب العميل لا يناسب حقن الخروج الصِّرف). وهذه الخطّافات إضافية: تعيش داخل موصّل
Alpaca وتترك بوابة التفويض الحي كما هي.

مرجع الإعدادات

الحقل النوع الافتراضي الوصف
type string يُستنتج لـ stdio، وإلزامي لـ HTTP يُحذف مع stdio، ويُضبط على sse / streamableHttp للخوادم القائمة على URL.
command string إلزامي لـ stdio الملف التنفيذي الذي يُشغَّل لخوادم stdio. غير صالح لخوادم sse / streamableHttp.
args array [] وسائط سطر الأوامر لخوادم stdio فقط.
env object {} متغيرات بيئة إضافية تُدمج في بيئة العملية الفرعية، لخوادم stdio فقط.
url string إلزامي لـ sse / streamableHttp عنوان نقطة النهاية البعيدة SSE / streamable HTTP. لا يُستخدم مع stdio.
headers object {} ترويسات HTTP إضافية لخوادم sse / streamableHttp فقط.
toolTimeout number 30 مهلة استدعاء الأداة الواحدة بالثواني
initTimeout number غير مضبوط (max(toolTimeout, 30)) مهلة تهيئة MCP / ترخيص OAuth بالثواني. استخدمها للترخيص البطيء عبر المتصفح دون توسيع مهلة الاستدعاءات العادية.
enabledTools array ["*"] قائمة الأدوات المسموح بها. استخدم ["*"] لعرض كل أدوات الخادم

موقع ملف الإعدادات: ~/.vibe-trading/agent.json (بصيغة JSON أو YAML).

ومع وسائط النقل القائمة على URL يكون type إلزامياً؛ إذ لم يعد الوكيل يخمّن بين SSE و streamable HTTP
من لاحقة العنوان.

تجاوزات على مستوى الجلسة (API)

عند إنشاء جلسة عبر الواجهة البرمجية يمكنك تمرير mcpServers داخل session.config لتوسيع الإعداد العام
أو تجاوزه لتلك الجلسة وحدها:

json
{
  "config": {
    "mcpServers": {
      "research-server": {
        "command": "uvx",
        "args": ["research-mcp"],
        "enabledTools": ["search", "fetch"]
      }
    }
  }
}

تسمية الأدوات

تُعرض الأدوات البعيدة العادية بأسماء مستقرة على الصيغة mcp_<server>_<tool>.
أما خوادم MCP لوسطاء التداول الحي فتبقى خلف واجهة الموصّلات trading_*.

وإذا أنتج اسما خادمين البادئةَ نفسها الآمنة بترميز ASCII (مثل foo-bar وfoo_bar اللذين يصيران
foo_bar)، تُضاف لاحقة تجزئة حتمية على مستوى مقطع الخادم للحفاظ على تفرّد الأسماء، ويصل المشغّل تحذير:

text
WARNING: Configured MCP server 'foo-bar' collides with another server after local name
normalization. Using local tool prefix 'mcp_foo_bar_<hash>_<tool>' to keep generated
tool names unique. Rename the server in agent config if you want a different prefix.

حدود الإصدار v1

الحد التفصيل
وسائط النقل stdio و SSE و streamable HTTP
التنفيذ تسلسلي فقط — لا تدخل أدوات MCP مسار القراءة المتوازي
الأسطح الأدوات فقط (الموارد والتوجيهات خارج نطاق v1)
إعادة التحميل الساخن غير مدعومة — أعد تشغيل العملية لالتقاط تغييرات الإعداد
مسار Swarm لا تتوفر أدوات MCP داخل سجلات عمّال Swarm في v1

📁 هيكل المشروع

انقر للتوسيع

text
/* Detailed source-code truncated for AI context efficiency. */

🏛 النظام البيئي

Vibe-Trading جزء من نظام وكلاء HKUDS:

| NanoBot
Ultra-Lightweight Personal AI Assistant | AI-Trader
Agent-Native Signal & Copy Trading Platform | CLI-Anything
Making All Software Agent-Native | OpenSpace
Self-Evolving AI Agent Skills | ClawTeam
Agent Swarm Intelligence |

| --- | --- | --- | --- | --- |


🗺 خارطة الطريق

نشحن على مراحل. تنتقل العناصر إلى Issues عندما يبدأ العمل.

المرحلة الميزة الحالة
Trust Layer بطاقات تشغيل قابلة لإعادة الإنتاج تُنتج وتظهر في Run Detail؛ يضيف v1 آثار الأدوات والاستشهادات v0 شُحن
Hypothesis Registry فرضيات بحثية دائمة مع حالة lifecycle ومصادر بيانات ومهارات وروابط run-card وملاحظات إبطال Backend MVP شُحن
Research Autopilot حلقة بحث يدوية أولاً: فرضية → اختبار رجعي حتمي → تقرير أدلة المراحل 1–3 شُحنت
Data Bridge أحضر بياناتك: موصلات CSV/Parquet/SQL محلية مع schema mapping المُحمِّل المحلي شُحن
Options Lab سطح تقلب، ولوحة Greeks، ومستكشف payoff/scenario مخطط
Portfolio Studio أشعة مخاطر، وقيود، ومحسن يراعي الدوران، وملاحظات إعادة توازن محسن يراعي الدوران تم الإطلاق 0.1.11؛ الباقي مخطط
Alpha Zoo 462 ألفا كمّي جاهز (Qlib 158 + Kakushadze 101 + GTJA 191 + academic + fundamental)، سطر أوامر واحد للـ bench، تكامل agent، وواجهة Web تم الإطلاق 0.1.8، موسّع حتى 0.1.12
Strategy Development Manager تسجيل الأوراق البحثية / أبحاث الوسطاء كعوامل واستراتيجيات مع مخزن دائم + دورة حياة آلية لاضمحلال IC/Sharpe تم الإطلاق 0.1.11
Correlation Regime جدول زمني لنظام الارتباط قائم على كثافة الحواف + التباطؤ (hysteresis) فوق /correlation — رصد متى تندمج الأسواق في كتلة واحدة تم الإطلاق 0.1.12
Research Delivery موجزات مجدولة وجلسات بحث حي عبر Slack / Telegram / قنوات IM شبيهة بالبريد المُجدوِل + IM Runtime شُحنا
Community مهارات وإعدادات مسبقة وبطاقات استراتيجية قابلة للمشاركة قيد الاستكشاف

المساهمة

نرحب بالمساهمات! راجع CONTRIBUTING.md للإرشادات.

المشكلات الجيدة للمبتدئين موسومة بـ good first issue — اختر واحدة وابدأ.

هل تريد المساهمة بشيء أكبر؟ راجع خارطة الطريق أعلاه وافتح issue للنقاش قبل البدء.


المساهمون

شكراً لكل من ساهم في Vibe-Trading!

مساهمو واعتمادات دورة v0.1.14 الأخيرة:

  • @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/success tool-result envelopes (#1052) and truncates oversized results with the shared notice (#1110), MCP gains offset paging for SEC filings and statements (#1138), routes load_skill through the registry so oversized skills page (#1137) and carries market-data provenance on get_market_data (#1131), plus excess_return consistency (#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: xirr and 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 ChatLLM closed to stop a pooled-connection leak (#1145) and the same for one-shot clients (#1153), gross_profit derived from revenue minus COGS when the SEC tag is absent (#1111), and vibe-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 Response for the scheduled-runs DELETE 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: .VN no 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 orders rendering broker_sdk rows, with SDK enum reprs stripped and class-B tickers left intact (#1150)
  • @lukiod — .env.partial created 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)

مساهمو دورة v0.1.12

  • @santhreal — جولة تصحيح واسعة عبر 30 PR: تقوية strict-JSON / الأرقام المنتهية عبر المقاييس والعوامل والأنماط والخيارات (#764/#765/#766/#767/#739/#740/#744)، وصحّة المحمّل (#761 شموع yahoo بدقّة 1m)، ومتانة الجلسة / السجل (#762/#763/#768/#769/#770)
  • @xkam7ar — موثوقية واسعة عبر التحزيم والويب والمجدول والـ swarm والـ CLI (#584)، والإلغاء قبل أول تكرار لـ AgentLoop (#641، يغلق #638)، وميزانية جلسة QVeris + محاسبة أرصدة ذرّية (#685/#686)، وبوابات CI / OOS (#630/#632)، وإصلاحات مرشّح شهر السجل / تحليل الاتجاه (#626/#628)
  • @shadowinlife — مهارة مدير تطوير الاستراتيجيات (#457، يغلق #455)، واستخراج OCR قابل للتوصيل + رؤية LLM (#548)، ومركزية اعتمادات المزوّدين (#563)، والتوجيه المتجهي لمحاذاة الإشارات بتسريع 80× (#698)، وتخزين مؤقت لاكتشاف swarm MCP (#704)
  • @ebujinovch — نقطة نهاية الجدول الزمني لنظام الارتباط + الواجهة (#756، يغلق #719)، ومهارة correlation-regime المرتبطة بها (#557)، إضافةً إلى عامل academic_corr_rewire (#705)
  • @honginp — توجيه Binance USD-M مع فصل التنفيذ/سعر mark (#470/#716)، وفصل شريحة الصيانة maintenance-bracket الذي يُبقي الاختبارات الرجعية لـ -PERP بلا اعتمادات (#757)
  • @StaniellG — موصّل وسيط MetaTrader 5 (Exness) + مصدر بيانات mt5 (#481)
  • @tyj147454413-cmd — محمّل fallback لـ Binance (#643)، وتاريخ OKX محدود مع معالجة حدّ المعدل rate-limit (#644)، وتصنيف فشل بثّ codex (#663)
  • @Marnie0415 — fallback لمحرّك فرعي مركّب للرموز غير المعروفة (#734)، وإصلاح تسابق DOM أثناء البث لـ insertBefore في الواجهة الأمامية (#717)
  • @YZY0108 — إصلاح انحياز الاستشراف look-ahead عبر كل محسّنات المحفظة الخمسة (#487)
  • @UNHNQ — مزوّدا SiliconFlow الصيني + العالمي (#565)
  • @FenjuFu — مزوّد iFlytek Spark (#537)
  • @jelech — محوّل Anthropic Messages API الأصلي (#695)
  • @octo-patch — نقاط نهاية API الإقليمية لـ MiniMax (#731)
  • @Thibaultjaigu — مزوّد بوابة Requesty المتوافق مع OpenAI (#474)
  • @Robin1987China — مقاييس دوران المحفظة المحقّقة لكل محسّن (#478)
  • @YogeshModi24 — عامل Frazzini-Pedersen الأكاديمي للمراهنة ضد بيتا (betting-against-beta) (#480)
  • @0xZKnw — وضع TAP الاختياري لـ Alpaca (#377)
  • @sambazhu — قائمة السماح _VALID_ZOOS لحديقة العوامل الأساسية (#707)
  • @nareshkps — توصيل account_number في موصّل Robinhood (#726)
  • @darkknight4563 — اكتشاف دليل إعدادات swarm المسبقة الخاصة بالمستخدم (#570)
  • @MikeCer — تجمّع اتصالات IBKR المحلي للخيط thread-local + عروض أسعار لقطية snapshot (#636)
  • @Shizoqua — إعادة أخذ عيّنات الفترات الزمنية في محمّل local (#467)
  • @roberttidball — توافق استيراد نقل FastMCP (#469)
  • @yxhuang — حسم الرموز المجرّدة bare-ticker في مصفوفة الارتباط (#472، يغلق #471)
  • @Bortlesboat — إصلاح تبديل المزوّد عند تقادم OPENAI_BASE_URL (#484، يغلق #482)
  • @ananaymital — إصلاح ذاكرة EnvConfig المؤقتة المتقادمة في الفحص المسبق (#479، يغلق #477)
  • @GabbaTauchi — أبلغ عن خلل البثّ الأصلي / base-URL في zai (#758)
  • @warren618 / Haozhe Wu — تكامل خلفية نظام الارتباط، وإصلاح بثّ مزوّد zai + حسم base-URL (#758)، وتكامل الإصدار، وفرز الـ PR/issue المفتوحة

مساهمو دورة v0.1.11

  • @shadowinlife — تتويج تحديث وحدات api_server (من 1,103 إلى 371 سطراً، #424 يغلق #331)، ومركزية إعداد البيئة مع بوابة CI المعتمدة على AST (#440)، ومطابقة بروتوكول fetch() في المحمّلات (#437)، وRFC لمدير تطوير الاستراتيجيات قيد المراجعة (#455/#457) — 12 PR مدموجاً هذه الدورة
  • @Robin1987China — إغلاق حلقة Research Autopilot (المرحلة 3) (#267)، و4 عوامل ألفا أكاديمية قياسية (#277)، وشروط دخول Shadow Account الآمنة زمنياً (PIT-safe) (#302/#314/#316)، ومحسّن المحفظة الذي يراعي الدوران (#466)، واختبارات مسارات scheduled-research (#452)، ودفعات تغطية اختبارية لطبقات trade-journal / pattern / loader (#268/#269/#276)
  • @muku314115 — دعم الأسهم الهندية (NSE/BSE) من الدرجة الأولى: محرك IndiaEquityEngine، وحزمة التكاليف، وتوجيه .NS/.BO، وجسر india_broker (#305)
  • @mvanhorn — مُنفِّذ الأبحاث المجدولة من طرف إلى طرف (#278)، وموصّل Trading 212 للقراءة فقط (#321)، وحسم النموذج الافتراضي لـ OpenAI (#319)، والتحقق من إعداد Robinhood (#320)
  • @fei-moss — أداة الرؤية analyze_image (#464)، وإقران NapCat DM (#463)، وتقرير allowed-roots لوسائط IM (#465)
  • @sambazhu — طقم أدوات الاستثمار القيمي: أدوات الصرامة المالية + تدقيق التقارير، و4 مهارات، وإعداد value_investing_committee المسبق (#407/#408)
  • @Elfsa-Miranda — استكشاف خط أنابيب أبحاث ألفا المقيّد بالأدلة (#405/#416، أُعيد تحديد نطاقه لاحقاً ضمن #442)
  • @Hinotoi-agent — رفض CSRF على الاسترجاع (#293)، وطلبات واجهة same-origin البعيدة المصادَقة (#304)
  • @dpersek — مهلة رد IM قابلة للتهيئة (#413)، وإصلاح redirect في provider preflight (#404)
  • @digger-yu — أوامر setup/dev عبر المنصات (#292)، وفحوص مسبقة لتبعيات التطوير (#349)
  • @skloxo — توسيع التلدة (~) + تراجع أمان لجذور الملفات (#299)، وتوطين zh-CN تفاعلي (#301)
  • @kadaliao — دليل المبتدئين (#393)، وبطاقات Alpha Library الاجتماعية (#396)
  • @morluto — الحفاظ على أول رسالة عند استئناف CLI (#448)، والنموذج الافتراضي لـ Codex OAuth (#446)
  • @yxhuang — مزوّد Kimi for Coding (#435)، والتشخيص الدقيق لـ #433 خلف التراجع عن governance stack
  • @isaveall — إصلاح دليل artifacts لـ validation.json (#429)، وأخطاء --swarm-run أوضح (#428)
  • @mustafakamal88 — طوابع زمنية UTC واعية بالمنطقة الزمنية (#397)
  • @irfanallana-oss — حارس الأوامر ذات الحجم الصفري في trading_place_order (#417)
  • @Shizoqua — حارس المحمّل المركزي لثوابت OHLC (#274)
  • @hobostay — تقوية حارس SSRF لنطاقات CGNAT/mesh + إصلاح redirect لوسائط QQ (#389)
  • @aeonframework — رفع حدود CVE الدنيا لـ Pillow / langchain (#390)
  • @hannibal-lee — إصلاح قيد إصدار pandas (#329)
  • @MarkfuGod — عدّ مصادر البيانات الديناميكي + microcompaction محكوم بالـ tokens (#296)
  • @gyx09212214-prog — مخرجات تحقق JSON صارمة (#306)
  • @LemonCANDY42 — مكتبة تقارير الاختبار الخلفي (#224)
  • @fanfpy — تسلسل Longbridge Decimal→float (#459)
  • @asahikiko — مزامنة عدّ القدرات في SKILL.md المحزوم + اختبار حارس المانيفست (#461)
  • @wison1717-maker — مربع التأكيد الثاني للتفويض + توحيد رسائل الأخطاء (#453)
  • @imsankz — تعيينات مزوّد opencode (#444)
  • @flash1234pku — إصلاح code-fence في مراجع tushare (#449)
  • @Penn-Live — تقرير انهيار route-iteration عند بدء Docker (#450)
  • @warren618 / Haozhe Wu — طبقة العوامل الأساسية (panels SEC آمنة زمنياً PIT-safe)، ومسار QVeris المدفوع، وبيئة تشغيل قنوات IM، ومراجعة تكامل الأسهم الهندية، وfallback البحث الصيني، وتكامل الإصدار

مساهمو دورة v0.1.10

  • @Hinotoi-agent — موجة تقوية أمنية: مصادقة الإيقاف المحلي (#241)، ورفض إعادة ربط مضيف الاسترجاع (#242)، وتفعيل صريح لأدوات shell للوكيل (#243)، ومصادقة كتابة الإعدادات (#245)، واحتواء mandate proposal-id (#256)، والتحقق من أنواع الذاكرة الدائمة (#257)، واحتواء MCP swarm run-id (#258)
  • @mvanhorn — ذاكرة تخزين بيانات محلية اختيارية (#177)، وذهاب وإياب Gemini thoughtSignature عبر استدعاءات أدوات متوافقة مع OpenAI (#176)، ودليل مصدر بيانات مخصّص (#194)، واسم بديل لمزوّد glm/zhipu + استنتاج اسم النموذج (#247)
  • @gyx09212214-prog — متانة المحمّل أمام متغيّرات بيئة مهلة crypto/RSSHub المشوّهة (#227، #240)، وتضمين تاريخ النهاية المطلوب في yfinance (#226)، وJSON صارم لمقاييس run-card غير المنتهية (#238)، وتغطية إعادة محاولة ddgs (#239)
  • @BillDin — عرض حالة وكيل swarm في واجهة الدردشة (#188)، ومعالجة أسماء preset الصريحة (#189)، وأداة بيانات السوق المعتمدة على المحمّل لعمّال swarm (#199)، واستمرارية سياق preset (#200)
  • @Robin1987China — جسر الفرضية-الهدف لـ Research Autopilot (#260)، ومحمّل بيانات CSV/Parquet/DuckDB المحلي (#252)، وإصلاح assistant-prefill + User-Agent قابل للضبط لـ Kimi (#248)
  • @LemonCANDY42 — لوحة حالة وقت التشغيل للقراءة فقط (#210)، وحفظ منتجات استخدام AgentLoop (#223)، وحمولات مخططات Run Detail الاختيارية (#225)
  • @zwrong — إعادة هيكلة trace.jsonl بلا اقتطاع + offload (#206)، وعرض session-id عند الخروج + resume <session-id> (#218)
  • @forge-builder — دليل المساهم بالذكاء الاصطناعي (#173)، ووثائق اختبار OpenClaw MCP للقراءة فقط (#165)
  • @skloxo — توطين الواجهة الأمامية بالصينية (zh-CN) (مُعتمد من #217)
  • @LeeCQiang — docstrings صينية عبر جميع عوامل Alpha Zoo الـ 452 (#180)
  • @KaiLuettmann — نشر صورة GHCR مُسبقة البناء عند الإصدار (#187)
  • @ngoanpv — الحفاظ على Gemini thought_signature عبر مسار dict في AgentLoop (#184)
  • @ShahNewazKhan — الوصول إلى Ollama المضيف عبر host.docker.internal (#196)
  • @sambazhu — مزامنة الواجهة الأمامية لمحاولات الدردشة المكتملة (#236)
  • @bhlt — دعم تنسيق رمز baostock الأصلي (#230)
  • @octo-patch — ترقية نموذج MiniMax M3 الافتراضي (#162)
  • @warren618 / Haozhe Wu — طبقة البيانات العالمية (8 مصادر + 18 أداة بيانات للقراءة فقط)، و10 موصّلات وسطاء SDK، وحزمة alpha compare الكاملة، وإصلاح موثوقية المزوّدين، وfallback متعدد المحركات لـ web_search، وStop تفاعلي + إعادة اتصال SSE، وتكامل الإصدار

إخلاء المسؤولية

Vibe-Trading برنامج للبحث والتداول. ليس نصيحة استثمارية، ولا يحتفظ بأي أموال، ولا يشغّل أي منصة تنفيذ. يحدث التداول فقط عبر قناة وسيط تُصرّح بها صراحةً (مثل Robinhood Agentic Trading)، ضمن الحدود التي تضعها، ويمكنك إيقافه في أي وقت. قدرة التداول عبر الوسيط هذه تجريبية ولم نتحقق منها على حساب وسيط حقيقي — استخدمها على مسؤوليتك. الأداء السابق لا يضمن النتائج المستقبلية.

الرخصة

رخصة MIT — راجع LICENSE