7 Commits
Author SHA1 Message Date
Simon Lin ed0c416907 fix: 裸跑 CLI 被打断 / 时区误判 / README 口径不符(codex 第四轮)
🔴 裸跑 tradingagents 被 v0.5.2 打断(升级即破坏)
   Typer 只有一个命令时是"单命令模式",加了 performance 子命令后切换成命令组
   模式,裸跑直接报 Missing command 退出——而 README 和所有文档写的都是裸跑,
   每个现有用户升级后第一条命令就失败。加 invoke_without_command callback 保住
   默认路径,--checkpoint 等原参数照常可用。

时区误判
   _is_historical 用主机本地日期。主机在 UTC+9 以东(如新西兰)时当地已过零点
   而上海还在前一天,当天分析被判成"复盘历史":实时资金流被略去、快照工具打出
   莫须有的未来函数警告。改为固定按 Asia/Shanghai 市场时区计算。

README 口径与实际输出不符
   v0.5.6 已把指标改名为 direction_accuracy / up_rate / outperform_rate,README
   仍写"胜率 / alpha 胜率"——而这恰恰是 v0.5.6 要纠正的误导。中英文已同步。

测试:新增 5 例(含一例断言 callback 注释写明了后果,防止重构时被误删),
334 passed / 13 skipped / 0 failed。版本 → v0.5.9
2026-08-09 14:43:23 +12:00
Simon Lin cdca5e1f8f feat: 决策绩效统计 + 修复中英混排评级被静默判成 Hold (#61)
新增 tradingagents performance
  决策与真实收益一直都在记忆日志里(store_decision → 下次分析同一只票时自动拉
  行情回填 raw/alpha),缺的只是汇总——此前全仓连一个胜率都算不出来。零 LLM 调用。
  - 整体胜率 / alpha 胜率 / 平均与中位收益,按评级、按标的分组
  - 评级区分度检验:五档从 Buy 到 Sell 平均 alpha 是否单调递减;仅在五档都有
    样本时给结论
  - --json 输出

  三条不许骗人的设计:收益解析不出来的记录跳过而非计 0%;样本 <20 条报告自己标
  注是噪音;结尾写明这不是回测(窗口重叠、无仓位管理、未计成本、可能有选择偏差)。
  刻意不算夏普/年化——离散且重叠的决策点年化没有意义。
  指标口径参考 Vibe-Trading(MIT)的 agent/backtest/metrics.py。

修复:`最终评级:Buy` 被静默判成 Hold
  中文标签 + 英文评级词的混排躲过了原有每一条规则(英文标签规则要 "rating";
  中文标签规则只认中文词;裸英文词扫描按空白切分,全角冒号 strip 不掉)。
  决策评级被悄悄改写且报告里看不出来,是 #78/#80 的未修变种。这个洞会直接污染
  上面的绩效统计,是用真实数据验证报告时撞出来的。

测试:新增 20 例,全量回归 277 passed
2026-08-06 20:48:57 +12:00
Simon Lin 531176ac31 feat: 可配置技术分析回溯窗口 / 按月分析 (v0.2.21, #16)
此前回溯天数由模型自选(工具默认~30),用户无法控制分析区间。

- default_config: 新增 market_lookback_days(默认None=保持原行为)
- market_analyst: 读 get_config 注入 prompt, 显式要求 get_stock_data/get_indicators 传该 look_back_days, 必采清单"近N日"联动
- Web 侧栏加"数据起始日期"(默认本月首日) + CLI Step2b, 据起始→分析算天数(下限5)写入 config
- 单独干净落地, 未夹带 PR #18 的字体/主题; 感谢 @hejingchi 定位参数
- 新增 test_market_lookback.py
2026-07-23 16:25:19 +12:00
Simon Lin a195edc3b5 feat: 新增 openai_compatible 通用 provider (v0.2.20, #77 #81)
接任意 OpenAI 兼容网关(9Router/AI Router/自建代理): 自填 base_url+model+通用key, 无厂商写死默认。

- factory: openai_compatible 加入 OpenAI 兼容路由
- openai_client: 新分支 base_url 必填 + key 从 OPENAI_COMPATIBLE_API_KEY(回退 OPENAI_API_KEY) + 走 Chat Completions(非 Responses API) + model 自由填
- validators: openai_compatible 接受任意 model 不告警
- Web 侧栏 + CLI 各加一档(自定义 model ID + base_url 必填)
- README .env 方案H + FAQ + 供应商计数; 新增 test_openai_compatible_provider.py
2026-07-23 14:23:32 +12:00
simon 72aa2d2002 fix: v0.2.13 — CLI 路径穿越安全加固 (#51)
CLI 是唯一未对 ticker 做路径组件校验的入口(Web UI/a_stock/checkpointer/
stockstats_utils 早已统一走 safe_ticker_component)。ticker 拼进
results_dir/<ticker>/<date> 和报告路径,../../tmp/evil 可越界写。

- cli/utils.py normalize_ticker_symbol: 委托 safe_ticker_component 校验+返回安全值
- cli/main.py get_ticker: 输入即校验,非法则重新询问,返回安全/解析值
- cli/main.py 保存: save_path 先 resolve,cwd 外需确认,拒绝则取消
- 实测 11 个穿越载荷全拒 / 7 个正常代码全过(保留交易所后缀)

报告 + 修复方向由 @mituxunzhi 提供 (#51),采纳并改进(返回解析值/重试而非硬退出)。
2026-06-04 00:03:51 +08:00
simon 5ad5b891cf fix: 全链路合规免责声明 — 消除证券法踩线风险
- Agent prompt 去敏感词:投资建议→分析结论、交易建议→信号研判
- 示例案例文件顶部加免责声明(比亚迪/宁德时代/贵州茅台)
- CLI 终端输出和保存报告加免责声明
- Trader prompt 补充"不构成投资建议"
- PDF 每页页脚增加免责声明文字
2026-05-21 22:52:50 +08:00
simon c567f8aee9 feat: TradingAgents-Astock v0.2.4 — A股深度特化版
- 适配A股数据源(mootdx+腾讯财经+akshare),全免费无积分墙
- 新增3个A股特化分析师(政策/游资/解禁),共7位AI分析师
- A股交易规则约束(T+1/涨跌停/最小手数/ST标识)
- 内置Streamlit Web UI + PDF报告导出
- 支持MiniMax/DeepSeek/智谱/通义/OpenAI/Anthropic等多家LLM
- 沪深300基准替代SPY
2026-05-13 08:23:58 +08:00