Skip to content

Releases: TauricResearch/TradingAgents

TradingAgents v0.7.0

Choose a tag to compare

@Tauric-Research Tauric-Research released this 16 Oct 21:38
e8f5503

Runs on your ChatGPT plan, backtests scored from the first close after each decision, a note at start-up when a newer release is out, and a wheel attached to each GitHub release.

Added

  • Your ChatGPT plan. The chatgpt provider runs TradingAgents on a ChatGPT Plus or Pro plan instead of an API key, through OpenAI's sign-in for open-source apps. Choose "Subscription" in the CLI's provider menu; for unattended runs, Docker and Python (llm_provider="chatgpt"), sign in once with tradingagents login chatgpt. tradingagents logout chatgpt revokes the sign-in. The CLI lists the plan's models, and reasoning effort applies as it does for OpenAI. (#1194, #1475)
  • What's new at start-up. The interactive CLI mentions a newer release, with the command that upgrades this install when it can tell how TradingAgents was installed, and notices from Tauric Research for the running version. It checks at most once a day in the background, so a run never waits on it; runs without a terminal never check, and TRADINGAGENTS_NO_UPDATE_CHECK=1 turns it off.
  • Release downloads. Each GitHub release carries the source archive and a wheel, so a version installs with pip install from its release page without cloning.

Upgrading from 0.6.0

  • cryptography 42 and packaging 24 or later are installed.
  • Decisions are now scored from the first close after their date. Outcomes already settled in a memory log keep the earlier entry, the close of the decision date, so a backtest resumed with run_id mixes the two; start a new run to compare like with like.

Fixed

  • A decision is no longer scored against news it could not have traded on: a run dated d reads news published after the close on d, so the memory log and backtests enter it at the first close after d, not the close of d. (#1518)
  • A run without a terminal, such as a scheduled job or CI, no longer contacts the announcements server before it starts.
  • A model tier on another provider keeps its configured reasoning effort, thinking level or Claude effort when the main provider has none. (#1440)

Contributors

@LeonWTW, @OleksanderSS, @sovorn-c.

TradingAgents v0.6.0

Choose a tag to compare

@Tauric-Research Tauric-Research released this 03 Oct 21:30
1394a3f

HTML reports, a provider per model tier, past decisions settled for every ticker while the analysts work, and company news read while Yahoo's news feed is down.

Added

  • HTML report. A saved report also includes complete_report.html, the report as one page with its sections listed beside the text, that reads well in a browser, on a phone and in print. Answering the save question at the prompt also asks about the page and can open it in your browser; --no-html or save_reports(..., html=False) skips it. The page is self-contained: it loads nothing and runs nothing. (#1419)
  • A provider per model tier. The quick and deep models can run on different providers, for example the managers on Claude while the analysts run on OpenAI: set deep_think_provider or quick_think_provider (TRADINGAGENTS_DEEP_THINK_PROVIDER, TRADINGAGENTS_QUICK_THINK_PROVIDER) with the tier's model. The report header names each tier's provider. (#1440)
  • Past decisions settle alongside the analysts. While a run's analysts work, every logged decision whose holding period has passed is settled, for any ticker, not only the one being analyzed. If settling fails, the run goes on and the report header says so. (#1428, #1445)
  • Crypto on Reddit. For a crypto ticker the Sentiment Analyst reads r/CryptoCurrency and r/CryptoMarkets, plus r/Bitcoin, r/ethereum or r/solana for those coins, instead of the stock subreddits. (#1461)
  • settle_all_pending() settles every due decision without running an analysis, for a scheduled job; it and settle_pending() return the decisions settled and any that could not be. (#1445)
  • The report header names the run's rating.
  • Euro-area macro series by name: ecb_deposit_rate, ecb_main_refi_rate, euro_hicp, euro_core_hicp, euro_real_gdp, germany_10y, france_10y and eur_usd. (#1465)

Models

  • A Gemini call times out after 600 seconds, as OpenAI and Anthropic calls do, so a stalled call no longer hangs the run. (#1417)

Upgrading from 0.5.2

  • markdown-it-py 4.0 or later is installed.
  • A saved report also writes complete_report.html; pass --no-html, or html=False to save_reports(), to keep only the Markdown.
  • A run no longer settles its ticker's decisions before it starts; the Memory Log step settles every ticker's during the run.
  • settle_pending() returns a Settlement with settled and failed (was None).
  • Checkpoints from 0.5.2 are not resumed.

Fixed

  • Company news is read from Yahoo search while Yahoo's news feed returns nothing. When Yahoo has no article about the symbol, its news is reported unavailable, not absent, and a configured next news vendor is tried. (#1467, #1469)
  • A rating quoted from someone else, such as "Consensus rating: Buy", no longer replaces the Portfolio Manager's own. (#1466)
  • A Yahoo news article with a null field no longer loses the ticker's news. (#1458)
  • A start date a model writes with stray characters is sent back to it to correct, instead of failing the news or price request. (#1476)
  • A request Alpha Vantage rejects is reported as unavailable, not served as data; the API key is kept out of every Alpha Vantage error. (#1442)
  • Yahoo fundamentals print each money figure in its own currency: London prices in GBp, market cap and per-share figures in GBP, and an ADR's income figures in its reporting currency, such as TWD for TSMC. (#1456)
  • Jev screening uses the endpoint TYPESAFE_BASE_URL names, so it can run through OpenRouter. (#1416)
  • Runs sharing a memory log settle each decision once, and an interrupted settlement keeps the outcomes it finished.
  • The report header names the sentiment analyst sentiment, as the CLI does.
  • requirements.txt says the dependencies are declared in pyproject.toml.

Contributors

@amitbhansali, @AyushJain-601, @BichengWang, @byte7m, @Dangerboi, @davidalmeida90, @Jackzigen, @jhill-cmd, @Recnelis0, @seaaxe, @vaegev.

TradingAgents v0.5.2

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 29 Sep 05:59
v0.5.2
5eb5085

Parallel analysts, unattended CLI runs, reports that record what produced them,
and past runs served only what was known on their date.

Added

  • Parallel analysts. The selected analysts run at the same time, so the analyst phase takes about as long as the slowest one; the CLI shows each analyst's progress and time as it finishes, and the debate starts when all reports are in. (#1255, #433)
  • Unattended CLI runs. Flags answer the per-run questions, and TRADINGAGENTS_* variables the rest, so a scheduled job or script asks nothing: tradingagents --ticker NVDA --date 2026-09-26 --analysts market,news --save --no-show. Without a terminal, a missing answer stops the run before it starts and names what to set. (#1127, #1133)
  • Reports record what produced them. Each report opens with the analysis date, version, provider, models, analysts, rounds and data vendors; the state log keeps them as run_settings. (#752, #1197)
  • Docker data folder. TRADINGAGENTS_DATA_DIR keeps results, reports and the memory log in a host folder. (#865)
  • A cap on an analyst's tool calls. After max_tool_rounds rounds (default 20, TRADINGAGENTS_MAX_TOOL_ROUNDS) the analyst writes its report from what it has. (#1420)
  • tradingagents backtest shows each cell as it starts and the --run-id to continue; --analysts accepts sentiment.
  • Benchmarks for Taiwan, Korea, Singapore and the main European exchanges. (#1392)
  • Python 3.14 support; the Docker image runs Python 3.13.

Models

  • deepseek-flash is treated as a thinking model, so structured output works. (#1388)

Upgrading from 0.5.1

  • Python 3.11 or later is required; pandas 3 is installed.
  • Minimum versions: yfinance 1.7.0, langchain-core 1.6.5, langchain-openai 1.6.6, langchain-anthropic 1.7.4, langchain-google-genai 4.4.0, langgraph 1.2.12, langgraph-checkpoint-sqlite 3.1.1, langchain-aws 1.7.9 (bedrock extra).
  • Statements default to SEC EDGAR, then Yahoo (fundamental_data = "sec_edgar,yfinance").
  • A past-dated run gets no Yahoo or Alpha Vantage statements or insider trades, which carry no filing date, and only the company's current name, marked as such.
  • The memory log is the tradingagents.memory package (was tradingagents.decision_log); settlement and reflection moved there from tradingagents.graph, and Reflector is no longer exported from tradingagents.graph.
  • process_signal is removed; the rating is propagate()'s second value or final_state["final_rating"].
  • A rating is read only from its Rating: label; a free-text decision without one is REVIEW.
  • Data-layer functions take as_of_date= (was curr_date=); build_instrument_context and resolve_instrument_context take trade_date=.
  • VendorRateLimitError is VendorUnavailableError.
  • Data tools take the instrument from the run's state; tool calls no longer carry symbol or ticker.
  • State log: trader_investment_plan (was trader_investment_decision), judge_decision removed, final_rating and run_settings added.
  • Checkpoints from 0.5.1, or saved under different settings, are not resumed.

Fixed

  • Data tools serve the run's instrument, even when the model passes another symbol.
  • A failed vendor request is reported as unavailable, not as a missing or delisted symbol; one vendor's "no data" no longer speaks for a chain in which another failed. (#1386)
  • The rating is the Portfolio Manager's own, not one its thesis quotes (#1383); its line keeps an English label in other output languages (#1435).
  • Backtest cells given twice run once (#1415), and settlement compares a decision with its benchmark over the same dates.
  • A snapshot for a symbol with no prices no longer ends the run.
  • Concurrent runs no longer drop memory log entries.
  • SEC EDGAR quarterly figures filed only year to date are served, labelled with their span.
  • Yahoo dividend yield and debt-to-equity print as percentages. (#1414)
  • The FRED change line names the dates it spans. (#1397)
  • stream_run serves the graph's own config to its tools.
  • The test suite stays off the network and out of the user's files, and passes in any order; integration tests run with -m integration. (#1395)

Contributors

@1Wizzy, @BichengWang, @Chaoqi31, @davidalmeida90, @djconnexion77, @fuzing, @hailampy123, @hesam-shams, @HEYALT, @Jackzigen, @kagura-agent, @loulanyue, @mannubaveja007, @olivergpt, @rita112025-cpu, @shuyan-code, @SingTheCode, @sjq597, @xiaodu55, @Youholdme.

TradingAgents v0.5.1

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 24 Sep 07:51
v0.5.1
35543d0

A package layout organised by what each module holds, social posts screened by
TypeSafe's Jev when a key is set, GPT-6 Sol and Luna as the default models, and
fixes to run isolation, SEC EDGAR statements and historical runs.

Upgrading from 0.5.0

Some modules moved, and the old import paths are gone. Update imports as follows:

  • tradingagents.dataflows.interface is tradingagents.dataflows.router, and dataflows.symbol_utils is dataflows.symbols. dataflows.utils is gone: get_current_date is in dataflows.date_window, safe_ticker_component in dataflows.symbols.
  • Vendor modules live under tradingagents.dataflows.vendors: yahoo (ohlcv, market, fundamentals, news, snapshot, from the former stockstats_utils, y_finance, yfinance_news and market_data_validator), alpha_vantage (a package, from the alpha_vantage_* modules), and sec_edgar, fred, polymarket, reddit, stocktwits.
  • tradingagents.agents.utils is gone: the agent tools are in agents.tools, and agent_utils, agent_states, rating and structured are agents.context, agents.state, agents.rating and agents.structured.
  • The decision log is tradingagents.decision_log (was agents.utils.memory), and cli.utils is cli.prompts.
  • backtest.summarize takes a run_backtest result or the path of a decision log, in place of a TradingMemoryLog.
  • Removed: SignalProcessor (the rating is parsed by process_signal), the create_social_media_analyst alias (use create_sentiment_analyst), the unused project_dir config key, and the graph attributes curr_state, ticker and log_states_dict, which held the previous run's state.

Added

  • Jev post screening. With TYPESAFE_API_KEY set, TypeSafe's Jev reads each StockTwits and Reddit post the Sentiment Analyst fetches: posts that are not about the company are dropped, and each source opens with a count of the rest by stance. Without the key nothing changes. (#1376)
  • B3 tickers (.SA) are benchmarked against the Ibovespa. (#1366)

Models

  • GPT-6 Sol and GPT-6 Luna are the default deep and quick models, and Claude Opus 5.5 replaces Opus 5 in the picker. Opus 5 and GPT-5.4 Mini remain valid model IDs.

Fixed

  • Several graphs in one process each read their own data vendors. (#1369)
  • SEC EDGAR cash flow statements find capital expenditure for filers that moved it to purchases of productive assets (NVIDIA since fiscal 2022, Amazon since 2016), whose recent periods read as empty. (#1370)
  • SEC EDGAR annual statements list fiscal years only.
  • A historical run is no longer told today's date, or a date after the run, in coverage notices and the instrument context.
  • The Fundamentals Analyst can call the insider transactions tool.
  • An unreachable Yahoo on insider transactions is reported as unavailable, not as a symbol without data.
  • A graph reused across runs, as in a backtest, no longer keeps every run's full state.
  • A checkpointed CLI run says whether it resumed or started fresh.
  • A blank path variable (TRADINGAGENTS_RESULTS_DIR and the like) keeps the default path.
  • StockTwits messages reach the prompt as plain text rather than HTML-escaped.
  • The test suite is independent of the developer's .env, time zone and network. (#1368, #1372)

Contributors

Thanks to everyone who reported these or sent a fix:

@codify88, @davidalmeida90, @duongylinh, @jccl2, @yuina368.

TradingAgents v0.5.0

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 18 Sep 05:43
v0.5.0
2d17df8

Summary

Point-in-time integrity across every dated path, decisions recorded as they were made, backtesting over a grid of tickers and dates, the caller's portfolio as run input, and SEC EDGAR fundamentals served as filed.

Fundamentals as filed

  • SEC EDGAR serves US company statements as they stood on the run's date: a period that has ended but has not been filed is not served, and a figure restated later still reads as first reported. Keyless, opt-in via the vendor chain.
  • A historical run is no longer served a present-day company profile by either fundamentals vendor (#1300).

Point-in-time and honest attribution

  • Dated tools take the run's date from graph state, so an omitted or later date cannot reach a vendor (#1331, #1319, #1118).
  • Insider filings and prediction-market odds are bounded by the run date, and insider rows state that a trade becomes public when its Form 4 is filed.
  • A vendor failure is reported as a vendor failure: yfinance raises instead of returning its errors as text, an outage is not reported as a company with no data, and a chain where every vendor is unavailable says so instead of ending the run.
  • A feed that never observed a window reports it as unavailable rather than as an absence, across news, Reddit and StockTwits.

Decisions and evaluation

  • Backtesting: run_backtest runs the pipeline over a ticker and date grid into its own decision log, and summarize scores the settled cells (#1234).
  • Portfolio context: propagate(..., portfolio=...) and --portfolio let the trader, risk and portfolio agents size against real holdings; a run without one is never treated as a flat book.
  • Decisions are recorded as made: an unreadable decision is flagged for review instead of becoming a tradeable Hold, and a rating argued against is no longer read as the call.
  • Scoring reads the direction each rating claimed, and the outcome window is configurable (holding_period_days).

CLI

  • tradingagents backtest, with --run-id to continue an interrupted sweep (#1234).
  • The previous run's selections come back as prompt defaults (#1236, #920).
  • A run with no readable rating says so, and the live view no longer scrolls (#649, #784).

Models

  • Current lineups for every provider: GPT-6 Astra and the GPT-5.6 family, Gemini 3.8 Flash, Claude Opus 5 and Fable 5.1, Grok 4.6, DeepSeek Flash, Qwen 3.8, GLM-5.3, MiniMax M3, Kimi K3 and the current Mistral snapshots.
  • Every provider accepts a model ID the picker does not list.
  • GLM traffic goes to the platform its key belongs to, and Ollama structured output no longer sends a tool_choice it rejects (#1062).

See CHANGELOG.md for the full list, including contributor acknowledgments.

TradingAgents v0.4.0

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 31 Aug 03:10
v0.4.0
2448d0a

Summary

Look-ahead and point-in-time fixes across the data and memory layers, clearer decision signals, working CLI checkpoint resume, and the GPT-5.6 / GLM-5.3 models.

Point-in-time / look-ahead integrity

  • FRED macro requests now pin the data vintage to the as-of date, so a backtest no longer sees later revisions (#1275).
  • Social sentiment (StockTwits, Reddit) is trimmed to the analysis window instead of showing today's chatter, via one shared UTC window rule reused by news (#1220).
  • Decision-log memory records when each outcome became known and only injects lessons resolved by the trade date (#1251); a decision is no longer settled before its holding window fully trades (#1169).
  • The latest OHLCV bar is no longer silently dropped when its close is NaN, and dates are normalized DST- and non-US-market safe (#1201).

More honest decision signals

  • An unparseable Portfolio Manager rating surfaces a REVIEW sentinel instead of a tradeable Hold (#1170).
  • Debate openers no longer fabricate the opponent's argument when none has been made (#1176).
  • The Trader now receives the technical market report, so entry/stop levels anchor to real price structure (#1167).

Execution robustness

  • --checkpoint actually resumes on the CLI path, and a resume no longer duplicates messages (#1249).
  • A configurable output-token cap (TRADINGAGENTS_MAX_TOKENS) bounds a model that emits unbounded reasoning (#1204).
  • DeepSeek routed through OpenRouter (deepseek/<id>) now reuses the native DeepSeek capabilities (#1199).

Models

  • Added the GPT-5.6 family (gpt-5.6 / gpt-5.6-terra / gpt-5.6-luna) and GLM-5.3 (glm-5.3, glm-5.3-flash); the defaults are now gpt-5.6 (deep) / gpt-5.6-luna (quick).

See CHANGELOG.md for the full list, including contributor acknowledgments.

TradingAgents v0.3.1

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 05 Jul 14:32
v0.3.1
01477f9

Summary

TradingAgents v0.3.1 is a correctness and stability patch on top of v0.3.0.

Fixed

  • Alpha Vantage look-ahead filter now runs. The fundamentals payload is a JSON string, so the dict-only guard silently skipped filtering and future-dated reports leaked into historical runs. (#1115, @zachthebird)
  • News analyst prompt matches the tool. It advertised get_news(query, ...) while the tool takes a ticker, so the model hallucinated free-text query calls. (#1116, @shcheuk)
  • Shared debate/risk routers can't crash mid-run. Both routers returned more targets than any one edge mapped; every edge now shares the complete path map. (#1088, @Fr3ya, @sa7an7, @Sushanth012)
  • Checkpoint resume respects graph shape. The thread id folds in selected analysts, debate/risk depth, and asset mode, so a resume under different choices no longer continues the wrong graph. (#1089, @bossjoker1, @Ghraven)
  • Crypto sentiment sources resolve. StockTwits lists crypto as <BASE>.X (Yahoo's BTC-USD 404s) and Reddit needs the base symbol; the social path now maps crypto for both. (#1113, @suremadoreai)

Added

  • Configurable LLM retry budget. llm_max_retries / TRADINGAGENTS_LLM_MAX_RETRIES, forwarded to every provider so a transient 429 burst doesn't abort a run. (#1091, @yanggaome)
  • Bedrock API-key auth. AWS_BEARER_TOKEN_BEDROCK authenticates Amazon Bedrock without AWS access keys and takes precedence over an ambient AWS_PROFILE. (#1103, @praxstack)
  • Latest Claude models. Added Claude Sonnet 5 (claude-sonnet-5) and Fable 5 (claude-fable-5); effort control now covers the Claude 5 line.

See CHANGELOG.md for the full list.

TradingAgents v0.3.0

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 22 Jun 02:05
v0.3.0
85946c2

Summary

TradingAgents v0.3.0 is a stabilization and extensibility release: a verified data-access contract, an expanded provider and data-vendor registry, a current-generation model catalog, and a CI gate.

Verified Data-Access Contract

Symbol normalization now runs on every vendor path (identity, returns, CLI, news). The configured vendor list is the exact resolution chain (no silent fallback to unselected vendors), and failures surface through a typed VendorError taxonomy. News windows are look-ahead-safe, stale OHLCV is rejected instead of reported as current, and yfinance fetches include the requested end date. A verified market-data snapshot grounds price and indicator claims, and deterministic ticker-to-company resolution stops the wrong-company hallucination.

Provider Registry

OpenAI-compatible providers register behind a single spec, and a generic openai_compatible endpoint covers vLLM, LM Studio, and relays. Adds NVIDIA NIM, Kimi (Moonshot), Groq, and Mistral, plus a native Amazon Bedrock client.

Data Vendors

FRED macro indicators and Polymarket event probabilities are surfaced to the news and macro analysts. Optional vendors degrade to a no-data sentinel instead of aborting a run.

Model Catalog

Refreshed to current-generation lineups across providers; retired gpt-4.1, Claude Sonnet 4.5, and the Gemini 2.5 line. Reasoning depth is configurable via TRADINGAGENTS_OPENAI_REASONING_EFFORT, TRADINGAGENTS_GOOGLE_THINKING_LEVEL, and TRADINGAGENTS_ANTHROPIC_EFFORT, each gated to the models that accept it.

Configuration and CLI

An explicit TRADINGAGENTS_* value or CLI flag now wins over interactive defaults for debate and risk round counts, --checkpoint / --no-checkpoint, and the Docker provider profile; invalid boolean env values fail loudly. Analyst prompts lead with the current date so tool-call date ranges anchor to the run date.

Tooling

GitHub Actions runs the pytest suite across Python 3.10-3.13, strict ruff, and a clean-install smoke that imports the package and CLI. TradingAgentsGraph.save_reports() writes the same report tree the CLI produces, for headless and API runs.

See CHANGELOG.md for the full list, including contributor acknowledgments.

TradingAgents v0.2.5

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 11 May 09:27

Summary

TradingAgents v0.2.5 ships the grounded Sentiment Analyst, Qwen/GLM/MiniMax dual-region support, `TRADINGAGENTS_*` env-var configurability with API-key auto-detection, remote Ollama support, configurable alpha benchmarks for non-US tickers, and a ticker path-traversal fix.

Sentiment Analyst

The renamed Sentiment Analyst now reads real Yahoo News, StockTwits, and Reddit data before generating its report, replacing the prior flow that could fabricate social posts under prompt pressure. The new name flows through the CLI dropdown, status panel, and final reports; `AnalystType.SOCIAL = "social"` is kept for saved-config back-compat.

Provider Coverage

  • MiniMax with the full M2.x catalog (204K context), plus dual-region Global (`MINIMAX_API_KEY`) and China (`MINIMAX_CN_API_KEY`).
  • Dual-region Qwen and GLM with separate keys per region (`DASHSCOPE_`, `ZHIPU_`), chosen via a secondary region prompt so the main provider dropdown stays clean.
  • Catalog refresh across every provider: GPT-5.5 frontier, Claude Opus 4.7, Gemini 3.1 Flash-Lite GA, Grok 4.20, Qwen 3.6 line. Versioned IDs only; auto-shifting aliases moved to a "Custom model ID" option.
  • Structured output now works on DeepSeek V4 / reasoner and MiniMax M2.x — those providers reject `tool_choice`; the binding flow now skips it automatically.

Configuration via Environment

`TRADINGAGENTS_*` env vars override `DEFAULT_CONFIG` keys with type-aware coercion (string / int / bool) — `llm_provider`, deep/quick model IDs, `backend_url`, `output_language`, debate-round counts, the checkpoint flag, and the benchmark ticker. When a selected provider's API key is missing, the CLI prompts for it and persists the value to `.env` so the run continues without restart.

Ollama

`OLLAMA_BASE_URL` makes remote `ollama-serve` first-class for both the CLI and programmatic users. The CLI prints the resolved endpoint after selecting Ollama and warns on common malformed inputs. A new "Custom model ID" option lets users pick any model they have pulled via `ollama pull`.

Reflection

Alpha is now computed against a regional benchmark for non-US tickers — `.NS` (^NSEI), `.T` (^N225), `.HK` (^HSI), `.L` (^FTSE), `.TO` (^GSPTSE), `.AX` (^AXJO), `.BO` (^BSESN), SPY for US listings. Eliminates FX drift dominating the alpha figure for non-USD listings. `benchmark_ticker` overrides the suffix map when set explicitly.

News-fetch parameters (per-ticker article limit, macro headline limit, lookback window, macro search queries) are now exposed via `DEFAULT_CONFIG` for strategy-specific tuning.

Multi-language

`output_language` now propagates to every user-facing agent — researchers, risk debators, research manager, and trader — ending the previous partial-localization reports where only analysts and the portfolio manager respected the setting.

Fixes

  • Security: ticker path-traversal validation at every filesystem-path site.
  • `pip install .` installations now pick up the project `.env` when running the CLI as a console script.
  • Reports save end-to-end — streamed chunks were previously dropped from `complete_report.md`.
  • Ticker prompt preserves exchange suffixes (`.SH`, `.SZ`, `.SS`, `.HK`, `.T`, etc.).
  • Docker permission errors no longer block first-run write to `~/.tradingagents/`.
  • Config state no longer leaks between runs when sub-dicts are mutated.
  • `max_recur_limit` config actually applies to the propagator.
  • Missing-API-key error names the exact env var to set.
  • Quieter startup — suppressed the noisy upstream langgraph-checkpoint deprecation warning.

See CHANGELOG.md for the full per-item list with PR / issue references.

TradingAgents v0.2.4

Choose a tag to compare

@Yijia-Xiao Yijia-Xiao released this 25 Apr 22:33
7c37249

Summary

TradingAgents v0.2.4 ships structured-output decision agents, opt-in checkpoint resume, a persistent decision log with outcome-grounded reflections, four new LLM providers, and a Docker image.

Structured-Output Decision Agents

  • Research Manager, Trader, and Portfolio Manager use llm.with_structured_output(Schema) on their primary call and return typed Pydantic instances.
  • Each provider's native structured-output mode is selected automatically (json_schema for OpenAI / xAI, response_schema for Gemini, tool-use for Anthropic, function-calling for OpenAI-compatible providers).
  • Render helpers preserve the existing markdown shape, so memory log, CLI display, and saved reports keep working unchanged.
  • Five-tier rating scale (Buy / Overweight / Hold / Underweight / Sell) used consistently across Research Manager, Portfolio Manager, signal processor, and the memory log.

Persistence & Recovery

  • LangGraph checkpoint resume via --checkpoint. State is saved after each node so crashed or interrupted runs resume from the last successful step. Per-ticker SQLite databases under ~/.tradingagents/cache/checkpoints/.
  • Persistent decision log replaces the per-agent BM25 memory. Decisions are stored automatically at the end of every analysis; the next same-ticker run resolves prior pending entries with realised return, alpha vs SPY, and a one-paragraph reflection.
  • Optional memory_log_max_entries config caps resolved entries; pending entries are never pruned.

Provider Coverage

  • DeepSeek, Qwen (Alibaba DashScope), GLM (Zhipu), and Azure OpenAI providers added.
  • Dynamic OpenRouter model selection.
  • Default backend_url is now None so each provider client falls back to its native endpoint instead of leaking the OpenAI URL into Gemini and other clients.

Cross-Platform & Deployment

  • Docker support with multi-stage build for cross-platform deployment.
  • Cache and log directories moved to ~/.tradingagents/ to resolve Docker permission issues.
  • All file I/O passes explicit encoding="utf-8", so Windows users no longer hit UnicodeEncodeError.

Stability

  • Empty memory no longer triggers fabricated past-lessons; the redesigned memory layer makes this structurally impossible.
  • SignalProcessor reads the rating from the rendered Portfolio Manager markdown via a deterministic heuristic, eliminating an extra LLM call per analysis.
  • OpenAI structured-output calls default to method="function_calling" to avoid noisy Pydantic serialization warnings from langchain-openai's Responses-API parse path.
  • Tool-call logging processes every chunk message; memory score normalization handles empty arrays.
  • Pytest fixtures (lazy LLM client imports plus placeholder API keys) so the test suite runs cleanly without credentials.

Acknowledgments

We thank the community contributors who shaped this release. The full list is in the CHANGELOG.