319 Commits
Author SHA1 Message Date
cgycorey 17b9b8b7d9 fix(mcp): bound Alpha Bench requests 2026-08-08 23:59:00 +01:00
Haozhe Wu 63cc3e5b6d docs: add 2026-08-08 project news 2026-08-08 23:49:12 +08:00
yrk eeaefe9e19 feat(providers): add ModelScope as an OpenAI-compatible provider
Signed-off-by: yrk <2493404415@qq.com>
2026-08-07 15:42:05 +08:00
Haozhe Wu b292e09a39 docs: add the 2026-08-07 news entry to all five READMEs
Covers both of today's sessions. The first one's work had not been announced
at all: the grounding masks for scores/windows/indicators and for year-less
dates, the HK fallback routing repair, and four contributor merges.

Keeps three entries visible and moves 2026-08-04 into the collapsed section,
per the convention the other four READMEs already follow.

The sandbox sentence states that both vectors were accepted before, which is
measured against the live scanner rather than asserted, and says src.quantlib
still imports so the line does not read as though the maths layer went with
them.
2026-08-07 14:08:11 +08:00
Haozhe Wuandshadowinlife 8d019e3f0e feat(mcp): expose the three QVeris tools over MCP (closes #964)
Brings in #976. qveris_search / qveris_inspect / qveris_execute join the
key-gated wrapper family beside get_macro_series and iwencai_search, so an
install without QVeris routing gets the tool's own envelope naming
QVERIS_API_KEY and the paid-mode switch rather than a generic "Tool not
found". Also splits that message in two: a missing key and a present key with
paid mode off are different problems with different fixes.

qveris_execute takes tool_id / parameters / search_id / session_id / model /
max_response_size, and deliberately NOT expected_cost or billing_rule. Those
two are the caller-supplied quote that used to short-circuit the marketplace
price lookup (fixed in b4e48039); that fix means an understating quote can no
longer buy a free pass, but the external MCP surface is an arbitrary client
rather than our own agent, so the arguments stay off it entirely. That is the
only substantive difference from #977, which is otherwise equivalent work.

Merged by hand rather than by rebase request because every conflict was in a
count that had moved underneath the PR: the tool surface is 62, not the 58 it
was written against, and the five READMEs had gained
get_institutional_holdings / etf_holdings / prediction_market /
research_papers - which a straight merge would have deleted from those lists,
along with the SWARM external-MCP section in the zh/ja/ko/ar READMEs.

The count assertion in the new MCP test now reads the claim out of
mcp_server's module docstring and compares it against the live surface. That
literal was written as 55, shipped as 58, and was 59 on arrival, so it was a
number nobody was going to maintain by hand; the test now pins that the
docstring and the surface agree, whatever they say.

Co-authored-by: shadowinlife <shadowinlife@gmail.com>
2026-08-07 12:40:52 +08:00
shadowinlife 31869da68c fix(data): repair HK fallback routing + tencent HK source (closes #998, #999) (#1000)
* fix(data): route market-data fallback by the symbol's market

get_market_data picked the fallback chain by source name alone, and
"yahoo" matched the us_equity chain first, so .HK symbols exhausted the
3-attempt budget on the US-only stooq/sina loaders and never reached
eastmoney/akshare — HK fetches failed outright where Yahoo is blocked
(#998).

- resolve the fallback chain from the symbol's market, keeping the old
  first-match lookup for sources outside that market's chain
- group fetches by (source, market) so mixed-market requests each walk
  their own chain
- hk_equity chain: akshare (Eastmoney-backed, never IP-banned) now
  precedes the Yahoo-SDK family; tushare hk_daily joins after the free
  sources (the tushare loader now declares hk_equity)
- default max_fallback_attempts 3 -> 5 so akshare is reachable within
  the budget

Backtest auto routing already walked the full per-market chain and is
unchanged. tencent HK support is tracked in #999.

Signed-off-by: shadowinlife <shadowinlife@gmail.com>

* feat(data): tencent loader HK support, head of the hk_equity chain

Tencent's ifzq.gtimg.cn endpoint serves HK daily bars through the same
fqkline API as A-shares (hk00700 symbol form), and the source has no
observed IP ban — the most reliable mainland-reachable HK source (#999).

- map NNNNN.HK to hkNNNNN (zero-padded) and parse the shared fqkline
  response; daily bars only, matching the loader's A-share contract
- declare hk_equity on the tencent loader
- lead the hk_equity chain with tencent and route .HK auto-detection
  to it, consistent with the A-share routing

Signed-off-by: shadowinlife <shadowinlife@gmail.com>

---------

Signed-off-by: shadowinlife <shadowinlife@gmail.com>
2026-08-07 03:17:31 +08:00
Haozhe Wu 73a21b1560 docs: add the 2026-08-06 news entry to all five READMEs
CI / test (push) Waiting to run
CI / Windows 11 ARM64 / Python 3.14 background lifecycle (push) Waiting to run
CI / Windows Server 2025 x64 / Python 3.14 background lifecycle (push) Waiting to run
Wiki / validate (push) Waiting to run
Deploy Wiki / Deploy to Cloudflare Pages (push) Canceled after 0s
2026-08-06 17:24:18 +08:00
Haozhe Wu c33606a140 docs: close the four section-level gaps between the five READMEs
Until now the five files documented different products. English was missing
the MetaTrader 5 connector entirely while its own tables advertised MT5; the
four translations were missing the Longbridge setup while their data-source
tables advertised longbridge; and the whole MCP-client half of the product —
how to point the built-in agent at your own MCP servers, the IBKR read-only
OAuth probe, the local TWS path, TAP credential isolation, the config
reference and the v1 limits — existed only in English, as did the SWARM
external-tool allowlist that explains why caller-supplied variables cannot
inject an MCP URL.

All five files now carry the same fifty-two headings at the same levels in the
same order.

The new English MT5 section is translated from the Chinese one, so it was
checked against the connector rather than trusted: the four profiles, the
per-call demo/live re-verification, the guards, lot sizing, the hedging-account
close path and the loader's config sharing all match the code. Two claims did
not survive that check and are corrected in every locale:

* the guards are per-order size limits, not position limits — nothing caps
  accumulated exposure on a paper profile, and "position guards" invited the
  opposite reading. Chinese had said 仓位护栏 since the section was written;
  Japanese, Korean and Arabic had it right.
* `close_position` was offered as a way to close a hedge, but it has no
  user-facing path: `service.py` dispatches only place and cancel, and the
  agent surface is `trading_place_order` / `trading_cancel_order`. The
  ticket-pinned `trading_cancel_order` route, which does work, is what remains.

Also backported the guard's fail-closed behaviour on an unpriceable notional
to the four translations, which had dropped it.
2026-08-05 17:19:27 +08:00
Haozhe Wu 99d06ddf79 docs: bring all five READMEs back in line with what the code does
The slash-command table was the worst of it. It documented seven commands
the router does not resolve — `/skills`, `/list`, `/code`, `/trace`,
`/continue`, `/sessions`, `/settings` — which survive only in the legacy REPL
reached when prompt_toolkit fails to import, and it omitted twenty-one real
ones including the `/halt` kill switch. All five tables are now generated from
`SLASH_COMMANDS`: same twenty-seven commands, same order, descriptions taken
from the code.

Corrections, each checked against the code rather than against another
document:

* "18 read-only data tools" is 22, and the sentence listed only 17 labels,
  missing `get_stock_profile` and `iwencai_search` on top of the four that
  landed yesterday.
* The skill count was 88 in six places per file and the Analysis category row
  said 22; the loader reports 89 and the frontmatter tally gives analysis 23.
* "Each connector does read + paper-account order placement" was wrong for
  three of twelve. IBKR is read-only, Trading 212 refuses order placement
  outright, and Robinhood has exactly one profile and it is live — which
  matters most of the three, since a reader who believes Robinhood has a
  paper mode places a real order while trying to rehearse.
* The API endpoint table was missing the three playbook routes the section
  goes on to curl forty lines later.

New documentation for what shipped yesterday: the five scheduled-research
templates with their CLI, REST and `/playbook` entry points; a capability-table
row for the institutional data tools; `vibe-trading playbook` in the CLI
reference.

Locale parity, all pre-existing: two Korean capability rows and the Japanese
broker-connector block were still in English; `provider doctor` was documented
only in English; Japanese used 定時リサーチ against the file's own 定期リサーチ
everywhere else. The Chinese and Japanese renderings of `/memo`'s "variant
view" both said "a changing/variable perspective" rather than a view that
differs from consensus.

Three section-level gaps are deliberately left alone: "Using Longbridge
explicitly" (en/zh only), "MetaTrader 5" (missing from en), and the two
MCP-client sections (en only). They predate this work and come to roughly 340
lines of translation, which is not something to land unreviewed.
2026-08-05 16:32:26 +08:00
Haozhe Wu 95a572331b docs: cut the 2026-08-05 news entry back to the length of its neighbours
The entry ran 2,569 characters in English against roughly 1,250 for the two
below it, and worse in the translations. The convention is about three lines
per entry; this one narrated every design decision instead of saying what
shipped. It keeps the four tools, the one number worth quoting (342 positions
at 98.7% of net assets, against a quarterly top ten), and a single closing
clause for the templates, commands, lenses and agent core.
2026-08-05 15:29:58 +08:00
Haozhe Wu 85de202786 docs: date the feature news to the day it reached main
The institutional-holdings / ETF-look-through / prediction-market / research
entry was written on 2026-08-04 but merged and pushed on 2026-08-05. The news
section records when something became available to readers, so it takes the
landing date. This also separates it from the correctness-pass entry, which
really did ship on 08-04 and keeps its date.
2026-08-05 15:18:12 +08:00
Haozhe Wu 75395771ed docs: correct the MCP tool and skill counts, and hold them there with a test
Every README stated an MCP tool count in three places, and all three had
drifted: the prose said 54, the enumerated list said 55 in English and 54
elsewhere, and the repository tree already said 59. The real number is 59.
The four non-English lists were also missing `analyze_options_payoff`, which
landed on 2026-08-01, on top of the four data tools from yesterday. The skills
badge said 88 across all five files and has said so since `investor-lenses`
shipped.

The counts a reader uses to size up the project are exactly the ones nobody
notices going stale, so they now have a test. It reads the numbers back out of
all five READMEs and compares them with what the code ships — MCP tools by
name and by count, bundled skills, swarm presets, alphas, engines.

The checks anchor on structure rather than wording, since four of the five
files are translated: the tool list is the line with the most backticked
identifiers, the badges are the ones inside a <summary>, and the MCP paragraph
is the non-news line mentioning stdio. Two anchors that looked obvious are
wrong and are documented in the module: a 2026-04-14 news entry also mentions
stdio, and the loose "Plus 20+ specialist presets" badge wraps onto its own
line in English but not in the other four, which puts bare <sub> counting out
of step across locales.
2026-08-05 15:18:05 +08:00
Haozhe Wu c95e0be410 feat(mcp): expose the four new data tools
Institutional holdings, ETF look-through, prediction markets and
research papers were reachable from the agent and the CLI but not from
MCP, so OpenClaw and Claude Desktop could not use them. MCP goes from
55 tools to 59.

Schemas are read off the tool classes rather than restated here, so the
MCP surface cannot drift from the agent surface as the tools change.

A regression test pins the order-placing tools as absent from MCP.
2026-08-04 19:43:29 +08:00
Haozhe Wu 4cfc1f87c0 docs: add the 2026-08-04 feature news to all five READMEs
Covers the four new read-only data tools, the five research playbooks,
the six institutional commands, the investor lenses skill, and the
agent-core output principles plus progressive skill loading.

Each locale keeps three entries above the fold, so the 2026-08-02 row
moves into the folded section.
2026-08-04 19:38:39 +08:00
Haozhe Wu 3a752d5a8e docs: add the 2026-08-04 correctness-pass news to all five READMEs
Covers the SEC period-span fix, A-share corporate-action adjustment,
point-in-time CSI300 membership, the mixed-currency composite guard, the
option-leg volatility fix, whole-record paging of oversized tool results,
and the new tracking-error and benchmark-beta metrics. 2026-08-01 moves into
the collapsed Earlier-news block so three entries stay visible.
2026-08-04 14:59:08 +08:00
Haozhe Wu 539b9ab69c fix(tools): name the allowed roots when a path is refused
A run_dir outside the sandbox was refused with only the name of an
environment variable, so the user had no way to see where the boundary
actually was. Under an MCP client it was a dead end in a second way: the
client spawns the server itself, so exporting the variable in a shell
never reaches it, and none of the READMEs documented an env block for the
MCP config.

Rejections from safe_run_dir, safe_run_id, and the import-root helper now
list the roots that are allowed and say where the variable belongs under
an MCP client. All five READMEs document the env block in the MCP Plugin
section, with VIBE_TRADING_ALLOWED_RUN_ROOTS as the worked example.

Closes #963
2026-08-04 02:18:55 +08:00
Haozhe Wu 1e3600b047 docs: update multilingual README news 2026-08-03 23:17:02 +08:00
Pham Van Ngoan 516ae67ef7 feat(scheduled-research): add timezone-aware local schedules (#954)
Evaluate cron schedules in typed IANA zones with documented DST gap/fold semantics, preserve legacy UTC and interval behavior, and add Scheduled Research Web/i18n/docs coverage.

Closes #953.
2026-08-03 20:46:52 +08:00
Haozhe Wu bfa0133c0d docs: update multilingual README news 2026-08-02 17:06:49 +08:00
Haozhe Wu bec189f2ee docs(readme): add 2026-08-01 news across all 5 READMEs 2026-08-01 23:09:12 +08:00
Haozhe Wu e0b236caae docs(readme): add 2026-07-31 news across all 5 READMEs 2026-07-31 21:37:35 +08:00
Xiaotian JinandClaude Fable 5 c7d2ebaab8 fix: store session and run history under the user runtime root, not the code (#925)
* fix: store session and run history under the user runtime root, not the code (#904)

Sessions, runs, swarm runs, and uploads were resolved relative to the
installed code, so a pip install wrote user history into site-packages
(lost on upgrade) and dev checkouts partitioned history per clone.

- src/config/paths.py: VIBE_TRADING_HOME env override for
  get_runtime_root() (explicit config_path still wins), plus
  get_sessions_dir / get_runs_dir / get_swarm_runs_dir / get_uploads_dir
  as the single source of truth.
- Redirect every code-relative definition site: cli/_legacy.py,
  src/agent/loop.py, src/api/helpers.py, src/api/uploads_routes.py,
  src/swarm/store.py (swarm_runs_root), src/tools/swarm_tool.py, and
  the TraceWriter.find_trace_dir defaults. .swarm/runs becomes
  swarm/runs under the already-hidden runtime root.
- src/config/migrate.py: idempotent one-time move of legacy
  <install>/{sessions,runs,.swarm/runs,uploads} into the runtime root,
  wired into the CLI entry, api_server startup, and vibe-trading-mcp;
  when both sides hold data the new location wins and the legacy dir is
  left in place with a warning, never silently merged.
- path_utils: browser-upload handles (uploads/<name>) resolve to the
  user-level uploads dir, and the file/write/run sandbox allow-lists
  follow VIBE_TRADING_HOME.
- Welcome banner Workspace row now reports the runtime root, so the UI
  shows which store is active.

Fixes #904.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: close the gaps a local multi-agent review of #925 found

- Redirect the eighth definition site the first pass missed:
  src/api/swarm_routes.py built its SwarmStore from the code-relative
  .swarm/runs, so API-started swarms still wrote into site-packages,
  split from CLI/MCP history, and landed outside the run-root sandbox
  allow-list (P03-A regression). It now shares swarm_runs_root().
- Rework migration to child-level merges: autopilot runs and channel
  media already populate ~/.vibe-trading/{runs,uploads}, so the old
  whole-directory "both non-empty -> skip" rule silently stranded all
  legacy history for those users. Each session/run/upload entry now
  moves individually via a .migrating-* staging name plus atomic
  rename (interrupted moves are recovered, never surfaced half-copied),
  only same-named entries are skipped, a directory containing
  __init__.py is never touched (site-packages/runs may be someone
  else's distribution), one failing directory no longer blocks the
  rest, and the emptied legacy .swarm shell is removed.
- Route the sessions.db FTS index, the goal store default, and the CLI
  banner probe through get_runtime_root() so VIBE_TRADING_HOME no
  longer splits the index from the sessions it indexes.
- Reject UNC paths in VIBE_TRADING_HOME, matching the hardening on the
  other root-widening env vars, and keep legacy agent/.swarm/runs in
  the run-root allow-list like the other legacy roots.
- Correct the .env.example rationale (constants bind at process start,
  before .env is read), scope the README claim to what actually
  relocates, sync the zh/ja/ko/ar READMEs, and refresh stale docstrings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 21:30:52 +08:00
Haozhe Wu c095c5948a docs(readme): add 2026-07-30 news and sync the body with this batch
News entry across all five READMEs: the WebUI overhaul, LLM session
titles, Korea (KRX) equity, the OpenBB Workspace bridge, the Taiwan
snapshot tool, execution-time price bands, one-run-per-session, and the
trace/redaction/fail-closed batch. 07-27 rolls into <details>.

The body was stale the moment KRX landed, so it is corrected here too:
markets list gains India and Korea, free data sources 22 -> 23 with a
pykrx row and a Korea fallback chain, backtest engines 8 -> 9 with a
KoreaEquity row, VIBE_TW_STOCK_DB and VIBE_TRADING_EXTRA_CORS_ORIGINS
join the env table, the API table gains /sessions/{id}/cancel,
/sessions/{id}/title/auto, /correlation/regime and the OpenBB bridge
routes, and the project tree reads 8 engines / 24 sources.
2026-07-30 18:01:11 +08:00
Haozhe Wu c8741e34bf docs(readme): add 2026-07-29 news 2026-07-29 16:04:30 +08:00
Haozhe Wu 749c37b09f chore(frontend): declare the Node 22 requirement
React Router 8 requires Node >=22.22.0, so `npm install` now fails for anyone
still on Node 20 with an error that does not name the cause. Declare it in
package.json engines, and say it on the Quick Start line that tells people to
run it, in all five READMEs.
2026-07-28 15:59:33 +08:00
Haozhe Wu bd9a9b70b8 docs(readme): add 2026-07-28 news 2026-07-28 15:58:42 +08:00
Haozhe Wu d528066646 docs(readme): fix Windows install steps in all five READMEs (#888)
CMD has no `cp`, so `cp agent/.env.example agent/.env` fails there; add the
`copy` form and note that PowerShell's `cp` alias already works. Also add the
CMD activation line and the execution-policy hint that blocks Activate.ps1.

Reported by @brady-cec in discussion #29.
2026-07-28 01:54:41 +08:00
Haozhe Wu a69c55944b docs(readme): add 2026-07-27 news 2026-07-27 17:15:06 +08:00
Haozhe Wu f56a3d398f fix(background): prevent Windows host self-termination
Add task-scoped cancellation, reject broad Python process-name kills, expose timeout context, and cover the lifecycle on Windows 11 and Windows x64 with Python 3.14.

Signed-off-by: Haozhe Wu <haozhe_wu@connect.hku.hk>
2026-07-27 02:20:50 +08:00
Haozhe Wu d5ea0ec519 docs(readme): add 2026-07-26 news and ignore workbuddy 2026-07-26 19:13:36 +08:00
Haozhe Wu 93d666c5e6 docs(readme): add 2026-07-25 news across all 5 READMEs, keep 3 visible entries 2026-07-25 23:01:23 +08:00
Haozhe Wu 65bab10f32 docs(readme): add 2026-07-24 news across all 5 READMEs 2026-07-24 22:46:19 +08:00
Haozhe Wu 43c444292c docs(readme): add 2026-07-23 news across all 5 READMEs 2026-07-23 13:44:46 +08:00
Haozhe Wu 761d52155c docs(readme): sync all 5 READMEs to v0.1.12 features + counts
News: 🚀 v0.1.12 entry (3-visible, demote 07-19). Counts synced to code:
462 alphas (academic 12), 88 skills, 23 data sources, 12 broker connectors.
Data Sources: add binance + mt5 rows + forex/metals fallback chain. New
Broker Connectors (12) and Backtest Engines (8) capability tables. Providers
list + native Anthropic / SiliconFlow / NVIDIA. Roadmap: SDM + Correlation
Regime rows. en/ja/ko English descriptions; zh/ar translated.
2026-07-22 22:47:39 +08:00
Haozhe Wu 43331c3221 docs(readme): v0.1.12 contributor credits across all 5 READMEs
Add the v0.1.12 cycle cohort (28 contributors) and demote the v0.1.11 list
into a collapsible block, in en/ja/ko/zh/ar. en/ja/ko keep English
descriptions; zh/ar translated.
2026-07-22 21:13:25 +08:00
Haozhe Wu a44e1be357 docs: add 2026-07-21 news across all 5 READMEs 2026-07-21 14:58:18 +08:00
Haozhe Wu 7abc2a8a03 docs: add 2026-07-20 news across all 5 READMEs
Providers (Anthropic native/SiliconFlow/iFlytek), MetaTrader 5 connector + mt5
source, llm-vision OCR, 80x signal vectorization, USD-M funding data, reliability
consolidation (#584, 13 issues), options partial-close fix, and more. Keeps 3
entries visible; 2026-07-17 moved into the earlier-news details.
2026-07-20 19:07:11 +08:00
Haozhe Wu 11b4f62340 Merge PR #481: feat: MetaTrader 5 (Exness) broker connector + mt5 market-data source
Red-lines verified PASS (mandate gate, structural trade_mode discriminator, no MCP
order exposure, sandbox-barred loader). Resolved additive conflicts: registry (mt5
loader alongside longbridge), pyproject (mt5 extra), CHANGELOG (kept both entries);
README/SKILL counts reconciled in the news pass. market_data =F/=X (yahoo) and mt5
forex routing coexist.
2026-07-20 18:48:32 +08:00
Haozhe Wu 97e762e51c docs: add 2026-07-19 news across all 5 READMEs
Real US/HK Yahoo Finance news articles (#730), MCP factor_analysis contract
fix (#715/#635), Kimi K-series temperature=1 forcing (#701), and inverted/
degenerate-input fail-fast across split_message/PDF pages/journal filters
(#727-#729). Keeps 3 entries visible; 07-16 moves into the details block.
2026-07-19 19:50:02 +08:00
Haozhe Wu b79e4c54bd docs: add July 18 news (Binance loader + parallel-exec / correctness fixes) 2026-07-18 22:39:31 +08:00
Haozhe Wu 106edbdb41 fix(mcp): stop stdio transport from force-enabling shell tools (GHSA-6wjh)
MCP stdio previously force-enabled bash/background_run with no opt-out and the
module-level default was fail-open. Default to fail-closed and gate every
transport behind explicit opt-in (--enable-shell-tools flag or
VIBE_TRADING_ENABLE_SHELL_TOOLS). Local CLI is unaffected (still opts in
explicitly). Also shrinks the network-reachable surface of the bash
OS-command-injection sink (GHSA-m768). Adds regression tests + doc alignment.
2026-07-18 21:46:43 +08:00
Haozhe Wu d9cbce553b docs: add July 17 project news (correlation-regime skill + correctness pass) 2026-07-17 23:05:35 +08:00
Haozhe Wu db2ff578ae docs: add July 16 project news 2026-07-16 20:12:02 +08:00
Haozhe Wu bd51782647 docs: add July 15 project news 2026-07-15 21:06:04 +08:00
Haozhe Wu 7cd7dad3f1 docs: add July 14 project news 2026-07-14 13:46:31 +08:00
HUANG Cheng 06d742c4b6 feat(mcp): add Streamable HTTP transport for modern clients
Add --transport http exposing the MCP Streamable HTTP transport (spec 2025-03-26+) as a single POST/GET /mcp endpoint, alongside the existing stdio and legacy SSE transports. The legacy sse transport is unchanged.

Modern clients (e.g. QwenPaw) negotiate by POSTing an InitializeRequest; the deprecated two-endpoint SSE transport rejects that POST on /sse with 405 Method Not Allowed. Streamable HTTP accepts POST on its single endpoint.

FastMCP 3.4.4 (already a dependency) provides the transport via mcp.run(transport=streamable-http). Adds a --host option scoped to the http transport (default 127.0.0.1).

Signed-off-by: HUANG Cheng <cheng@duck.com>
2026-07-14 11:38:36 +08:00
Haozhe Wu 8855e654ed docs: log today's security-hardening + PR batch in CHANGELOG and news
Covers issue #476 (all 10 audit findings), #377/#478/#480/#487/#479/#484.
Propagated to all 5 locale READMEs' News section (3 visible + moved
2026-07-10 into <details>, per convention).
2026-07-13 12:55:36 +08:00
Yogesh ModiandYogesh Modi 4f0d5aa04a feat(factors): add Frazzini-Pedersen betting-against-beta (BAB) to ac… (#480)
Adds Frazzini-Pedersen (2014) "Betting Against Beta" to the academic zoo,
following the existing OHLCV-only proxy pattern: rolling 252-day per-stock
beta against an equal-weighted cross-sectional market return, cross-sectional
z-scored negative (so low-beta names rank highest, matching the long leg of
the original long-short construction). Proxy limitations vs. the original
(equal- vs value-weighted market, single window vs separate 1y-vol/5y-corr,
no explicit leverage) are disclosed in both the module docstring and
academic/LICENSE.md, matching the zoo's existing disclosure convention.

Verified locally: full purity + lookahead suites green (923 passed, 5
pre-existing skips), env-var CI gate passes, ruff clean.

One thing the PR's own test plan missed (it only ran the purity/lookahead
suites): SKILL.md has a manifest guard test
(test_alpha_zoo_counts_match_factor_modules) asserting the documented alpha
count matches the actual factor-module count. Adding a 461st alpha without
updating it fails that test. Folded in a fix bumping the count in SKILL.md
(460->461, academic 10->11) and propagated to all 5 locale READMEs' current-
state references (left the historical changelog entries describing past
counts untouched).

Co-authored-by: Yogesh Modi <YogeshModi24@users.noreply.github.com>
2026-07-13 12:47:58 +08:00
staniell 7296ef9ca7 docs: propagate MT5 connector + data source to all 5 locale READMEs
zh/ja/ko/ar gain the mt5 data-source table row, the forex/metals
fallback-chain bullet, the source-count bump (19 -> 20), and the full
translated MetaTrader 5 connector section. zh/ja/ko/ar lack the English
MCP Client Mode chapter, so the connector section anchors at the end of
the MCP Plugin section in all four (consistent placement). Also bumps
the QVeris paragraph built-in-source count to 20 in all 5 READMEs.

Signed-off-by: staniell <giostaniell12@gmail.com>
2026-07-13 00:37:15 +08:00
Haozhe Wu 2f4ba89733 docs: remove dead Star History badge from all 5 READMEs
GitHub restricted the stargazers API on 2026-06-30 to repo admins/
collaborators only; api.star-history.com's SVG badge renders server-side
and can't authenticate as a collaborator on every embedding repo, so the
badge now fails with a server timeout instead of rendering (confirmed
live, no fix path per star-history.com's own postmortem).
2026-07-12 18:41:59 +08:00