56 Commits

Author SHA1 Message Date
zhulinsen
afca4fb732 docs: update SerpApi sponsorship links (#2339) 2026-09-13 17:17:08 +08:00
zhulinsen
e75c4bb657 docs: link arXiv paper and add citation metadata (#2301) 2026-08-28 21:08:20 +08:00
zhulinsen
3b98aa1d77 docs: update AIHubMix referral links to InferEra (#2182) 2026-08-10 21:18:03 +08:00
zhulinsen
bcb7ae4e13 feat: 将参考 AlphaSift 的选股实现纳入主项目 (#2136)
* feat: integrate built-in stock screening engine

* test: verify screening routes via public contract

* refactor: make screening integration fully native

* fix(review-feedback-2136): [Verification blocker] 当前 Head 的阻断型 CI 已最终失败:backend-gate。请在本地运行对应

* feat: persist screening runs and reuse DSA analysis

* fix(review-feedback-2136): 对选股重排应用统一的模型参数兼容逻辑

* fix(review-feedback-2136): 将字段缺失计入数据源失败

* fix(review-feedback-2136): 评审结论 - 代码检查 :当前整个 PR 仍有 3 个未关闭的高置信度代码 blocker。最新复核摘要:当前整个 PR 仍有 3

* fix(review-feedback-2136): 延迟写入候选直到覆盖率通过校验 and 将 DSA 日线成功结果写入 last-good 缓存

* fix(review-feedback-2136): 将直连日线源纳入统一调用超时 and 将新增的选股缓存目录加入桌面更新备份

* fix(review-feedback-2136): 保留完整热点缓存而非请求切片 and 遵守 DSA 上下文声明的候选上限

* fix(review-feedback-2136): 补一条端到端回归:把真实 ScreenResult 经 ScreeningService.screen 落到 /history 和

* fix(review-feedback-2136): 补一个 refresh=true 且 live fetch 失败时返回 stale cache 的回归测试,避免当前只更新 stale
2026-08-01 14:13:23 +08:00
zhulinsen
267c2139ae docs: clarify data source configuration (#1935) 2026-07-05 20:57:42 +08:00
Gach-Coder
a43daa4331 Merge pull request #1889 from Gach-Coder/docs/add-data-source-guide
docs: 在 README 快速开始中添加行情数据源配置说明 (get259#1775)
2026-07-05 19:17:13 +08:00
zhulinsen
52afa95103 docs: 更新台股支持文档入口 (#1884)
* docs: update Taiwan stock support docs

* docs: simplify README market coverage
2026-07-02 22:50:02 +08:00
mumu
f61c5362a6 docs: update Trendshift badge and PR workflow rules (#1736) 2026-06-21 15:02:52 +08:00
mumu
a1cae3e614 docs: 补充日韩股票支持说明 (#1729)
* docs: update supported market coverage

* fix(review-feedback-1729): add 日股/韩股 to this homepage capability row, it now reads as though
2026-06-20 13:10:00 +08:00
mumu
3902670f02 docs: add README tutorial links (#1676) 2026-06-13 15:19:04 +08:00
mumu
47f938f32d feat: add mainstream analysis strategy skills (#1332) 2026-05-17 23:02:12 +08:00
mumu
9e02f3f72e docs: tidy README presentation (#1259) 2026-05-10 21:46:08 +08:00
mumu
6c5a17a48d docs: align README preview assets with docs directory (#1258) 2026-05-10 20:16:08 +08:00
mumu
595908c81a chore: reorganize root files (#1257)
* chore: reorganize root files

* fix: mark moved docs assets as binary
2026-05-10 19:50:22 +08:00
mumu
7d44cd0fa7 docs: remove transient PR notes (#1255) 2026-05-10 15:17:41 +08:00
mumu
153a468266 docs: add documentation index and polish README contact section
Add the Chinese documentation center, refresh the English documentation index, and update README navigation links.

Polish the README contact sections across Chinese, Traditional Chinese, and English docs by splitting long email details, aligning contact rows, and adding the Xiaohongshu QR image.

Validation:
- git diff --check
- GitHub CI passed: ai-governance, backend-gate, docker-build
- PR Review passed: security check, static check, AI review, review report
2026-05-10 13:38:57 +08:00
zhulinsen
631cd9d210 docs: keep README badges inline 2026-05-10 10:01:40 +08:00
mumu
469609e6a5 docs: sync Anspire Open docs and deployment guides (#1195) 2026-05-05 21:13:00 +08:00
mumu
695365b3d8 feat: add Anspire Open LLM support (#1193)
* feat: add Anspire Open LLM support
2026-05-04 23:53:22 +08:00
Jonty Wang
07b4fe5795 feat: Add Hong Kong market support (#1068)
* fix: update report title from 'A股智能分析报告' to '股票智能分析报告'

* feat: add support for Hong Kong market in market review and analysis features

* fix: update daily_analysis workflow name and adjust region check in market analyzer

* fix: enhance market region handling in run_market_review and compute_effective_region functions

* test: add Hong Kong market support in MarketReviewLocalizationTestCase

* fix: update market review region handling to include Hong Kong support in documentation and logic

* fix: update daily_analysis workflow name to Chinese and adjust Hong Kong index symbols in yfinance_fetcher

* fix: refactor market review execution to use run_market_review for improved handling

* fix: implement trading day filtering in MarketCommand to skip reviews on market holidays

* fix: update changelog and README to reflect market command enhancements and support for multiple regions

* fix: update YfinanceFetcher to include HK index symbol mappings for improved data retrieval

Co-authored-by: Jonty <jonty.wang@hk.com.sg>
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com>
2026-04-28 22:25:29 +08:00
mumu
66c273eafb docs: add related projects to readmes (#1135) 2026-04-27 22:47:52 +08:00
mumu
e480fccf50 docs: streamline README documentation (#1120)
* docs: streamline readme documentation
2026-04-25 18:17:22 +08:00
mumu
3dceb1eca8 Fix: multi-agent AGENT_MAX_STEPS not respecting user override & skill agent graceful degradation (#1031)
* Fix multi-agent AGENT_MAX_STEPS not respecting user override and skill agent failure handling

- Fix AGENT_MAX_STEPS ceiling-only logic: when user raises value above default
  (10), all sub-agents now adopt the global value instead of being capped at
  their per-agent defaults (fixes #1026)
- Fix skill agent failure aborting entire pipeline: specialist/skill agents now
  degrade gracefully like intel/risk stages
- Improve max-steps-exceeded error message with AGENT_MAX_STEPS guidance
- Sync config descriptions in README, .env.example, and config_registry
2026-04-10 20:52:01 +08:00
Tom
abde35bbf9 集成Anspire search (#982)
* 集成Anspire search

* fix: add anspire_api_keys to config and handle safely

* fix: add anspire_api_keys to config and handle safely

* 修改单元测试文件、硬编码问题、systemConfigI18n描述

---------

Co-authored-by: xiaowei <4775987@qq.com>
2026-04-07 12:01:39 +08:00
mumu
6eab96f8e1 fix: use per-agent max_steps as ceiling instead of override (#1001)
* fix: use per-agent max_steps as ceiling instead of override

_prepare_agent() previously replaced every agent's max_steps with the
orchestrator-level value (AGENT_MAX_STEPS, default 10).  This inflated
specialised agents far beyond their designed limits:
- TechnicalAgent: 6 -> 10
- IntelAgent: 4 -> 10
- DecisionAgent: 3 -> 10

In standard mode this allowed up to 30 LLM calls instead of the intended
13, which is the primary cause of quota exhaustion and timeouts in
multi-agent pipelines.

Now max_steps = min(agent.max_steps, orchestrator.max_steps), so the
global setting acts as a ceiling that never inflates per-agent defaults.
2026-04-05 10:20:19 +08:00
Rules
dd89d06a7d feat:修复美股数据丢失,新增长桥数据源 (#981)
* fix:新增长桥数据源,补充美港股数据

* ci: Actions 注入 LONGBRIDGE_* 环境变量并增加数据源检查;full-guide 补充 CI 配置说明

Made-with: Cursor

* fix:长桥参数初始化时机调整

* fix:添加长桥初始化调试日志

* fix:调整数据源优先级

* Update tests/test_search_searxng.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update data_provider/base.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update data_provider/longbridge_fetcher.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_CHT.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_CHT.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(longbridge): 使用 get_config() 替代不存在的 config 导入(_is_available)

* fix:CHANGELOG、联调脚本重命名、繁中 README 英文链接、PRINT_QUOTE_PACKAGES 默认值已对齐。

* fix:调整审核中的问题

---------

Co-authored-by: xuxiong <xiong.xu@xsgames.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-02 23:05:08 +08:00
mumu
65fe0446aa feat: 隐藏 LiteLLM 实现细节,简化用户侧模型接入体验 (#875) (#925)
* chore(issue-875): [feature]-隐藏-litellm-实现细节,简化用户侧模型接入体验
2026-04-01 16:02:07 +08:00
mumu
a3a820db83 fix: 为 Discord Webhook 请求补充签名验证 (#896) (#934)
* fix(issue-896): [bug]-为-discord-webhook-请求补充签名验证
2026-04-01 11:43:32 +08:00
mumu
87d60e9daa fix: 修复断点续传按自然日判断数据存在性的逻辑 (#880) (#900)
* fix(issue-880): [bug]-修复断点续传按自然日判断数据存在性的逻辑

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix: remove transient pr draft from pr-900

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(issue-880): [bug]-修复断点续传按自然日判断数据存在性的逻辑

* fix(review-feedback-900): address latest review comments

---------

Co-authored-by: AutoCode Bot <autocode@example.com>
2026-04-01 11:22:17 +08:00
mumu
7f201f3b27 fix: restore #648/#649 agent capabilities on main (#822)
* feat: bot commands & async dispatch — /ask, /chat, /history, /strategies, NL routing (#648)

* feat: bot commands & async dispatch — /ask, /chat, /history, /strategies, NL routing

- CommandDispatcher with dispatch_async() and NL routing
- /ask multi-stock analysis (parallel execution, portfolio overlay)
- /chat free-form conversation with session persistence
- /history per-user session isolation (colon delimiter format)
- /strategies with category grouping and activation status
- Two-layer NL routing: regex pre-filter → LLM intent parsing
- Async webhook handler for FastAPI integration
- Feishu stream: capped ThreadPoolExecutor replaces unbounded threads
- DingTalk stream: direct async handler awaiting

* fix: address PR #648 review comments

- ask.py: simplify validate_args error message, add _merge_code_args() for comma+space separated codes
- chat.py: simplify validate_args error message
- feishu_stream.py: shutdown ThreadPoolExecutor in stop()
- test_ask_command.py, test_bot_dispatcher_async.py: replace sys.modules litellm hack with litellm_stub

* fix(bot): preserve ask strategy args and serialize Feishu replies

* fix(strategies): remove activate() side-effect from /strategies command

/strategies is a read-only listing command but was calling
sm.activate() which mutates the skill manager state.  Replace with
a config-based set lookup (configured_active) to derive /
status without any write operations.  This makes the command
purely read-only and eliminates the risk of altering subsequent
/ask or /chat agent skill sets.

(cherry picked from commit a472b824a8)

* feat: deep research agent & event monitor — /research command, alert rules, scheduler integration (#649)

* feat: deep research agent & event monitor — /research command, alert rules, scheduler integration

- ResearchAgent with 3-phase approach (decompose → research → synthesise)
- Token budget tracking for deep research queries
- /research bot command with aliases (/深研, /deepsearch)
- REST endpoint POST /api/v1/agent/research
- EventMonitor with PriceAlert/VolumeAlert rules
- Scheduler background task system for periodic alert polling
- EventMonitor config validation in system_config_service
- main.py: EventMonitor wiring into schedule mode
- Unsupported rule type rejection at config and runtime level

* fix: address PR #649 review comments

- events.py: fix to_dict_list docstring, validate created_at as float, raise ValueError on non-dict rules
- research.py: remove unused import uuid
- agent.py: replace nested ThreadPoolExecutor with asyncio.wait_for, use Field(default_factory=list), pass stock_code context
- scheduler.py: clamp minimum interval_seconds to 30s
- test_multi_agent.py: reduce sleep 3s→0.05s and timeout 1s→0.01s to speed up tests

* fix: normalize price alert direction and tighten research ticker regex

- events.py from_dict_list: .lower() on deserialized direction so
  _check_price matches correctly (fixes silent missed alerts for
  mixed-case config like {"direction":"Above"})
- research.py: restrict US ticker auto-detection to 1-4 chars
  (was 1-5); avoids misclassifying common words (MACRO, TREND)
  as stock codes in /research topic queries

(cherry picked from commit 28126db5bd)

* fix: reconcile recovered agent features with current main

* fix: address review feedback and backend gate failures

* fix: address remaining review feedback

* fix: restore bot agent gating and research timeout handling
2026-03-27 21:29:50 +08:00
zhulinsen
067ee38eb4 docs: update README donation section to Xiaohongshu QR codes 2026-03-25 23:07:22 +08:00
LouisHong
f7101b447d #730 [PR2] 股票输入框自动补全 - 拓展索引生成脚本,支持 A股/港股/美股三市场 (#798)
* feat(autocomplete): refactor index generator to support Tushare and multi-market

* docs: update changelog and README for multi-market autocomplete

- Add Unreleased entries for Tushare stock list fetcher, multi-market
  index generation scripts, and updated index data
- Update README to reflect A-share/HK/US coverage instead of
  A-share-only first phase
- Add examples for HK and US stock autocomplete (tencent, aapl)
- Reference TUSHARE_STOCK_LIST_GUIDE.md for index update workflow

* fix: deduplicate US autocomplete symbols
2026-03-22 20:34:34 +08:00
mumu
6bef880465 refactor: align agent skills with mainstream skill bundles (#780)
* refactor: align agent skills with mainstream skill bundles

* refactor: derive default agent skills from metadata

* fix: harden skill-first compatibility

* docs: clarify strategy-facing skill terminology

* fix: stop implicit bull-trend skill layering

* fix: use bull-trend as the single implicit default skill

* fix: preserve legacy skill config compatibility

* fix: harden skill metadata compatibility
2026-03-20 15:48:31 +08:00
Xinyao Qiu
14d3b746fe feat: add Slack as a first-class notification channel (#747)
* feat: add Slack as a first-class notification channel

* fix: guard Slack image delivery with _should_use_image_for_channel()

* fix: require SLACK_CHANNEL_ID in workflow config check

* docs: add Slack channel entry to CHANGELOG and fix README_CHT nav link

* fix: use Slack new file upload API for image delivery

* fix: update Slack image test for new upload API, add slack to md2img example

* fix: send raw bytes to Slack upload URL and unify bot/webhook precedence

* docs: unify Slack Bot > Webhook precedence across all docs

* docs: add Slack config entries and setup guide to full-guide (zh/en)

Add SLACK_BOT_TOKEN, SLACK_CHANNEL_ID, SLACK_WEBHOOK_URL rows to both
config tables (GitHub Actions + local run) and a dedicated Slack setup
section with Bot-first precedence, mirroring the existing Discord
section structure. Applied to both full-guide.md and full-guide_EN.md.

* feat: register Slack config fields in config_registry for Web settings

Add SLACK_BOT_TOKEN, SLACK_CHANNEL_ID, SLACK_WEBHOOK_URL to
_FIELD_DEFINITIONS (display_order 36-38, between Discord and Pushover)
so /api/v1/system/config/schema and the Web settings page can expose
them. Add SLACK to _infer_category() notification prefix list.

New test file test_config_registry.py (6 cases) verifies field
registration, sensitivity flags, display ordering, and schema response
inclusion — prevents future channels from shipping without UI exposure.

* fix: use password control for SLACK_WEBHOOK_URL to prevent plaintext leak

SLACK_WEBHOOK_URL was marked is_sensitive=True but ui_control was text,
inconsistent with DISCORD_WEBHOOK_URL and other sensitive Webhook fields.
The Web settings page would display the URL in plaintext.

Also added a registry-wide regression test: any is_sensitive field must
use ui_control=password, preventing future channels from repeating this.
2026-03-20 11:41:09 +08:00
mumu
ef328e906b feat: add configurable report language (#764)
* feat: add configurable report language

* Fix review follow-ups for history and fallback localization

* fix: prefer .env report language at startup

* fix: address report language review feedback

* fix: address latest report language review feedback
2026-03-19 22:55:17 +08:00
Alfred
3eabeda06c feat: 支持 SearXNG 公共实例自动发现与受控轮询 (#752) (#769)
* feat: support SearXNG public instance discovery (#752)

* fix: back off cold-start failures for public searxng (#752)
2026-03-19 12:40:21 +08:00
Alfred
216a77f6a2 fix: decouple agent and analysis primary models (#692) (#741)
* fix #692: decouple agent and analysis primary model selection

* fix #692: preserve yaml alias for agent primary model

* docs #692: sync agent primary model in EN/CHT readmes
2026-03-18 19:08:36 +08:00
mumu
cf33bac432 docs: add Trendshift badge to localized readmes (#733)
* docs: add Trendshift badge to localized readmes

* docs: add HelloGitHub badge beside Trendshift

* docs: switch HelloGitHub badge to neutral theme

* docs: move community badges below status badges
2026-03-17 22:15:57 +08:00
mumu
d42952ef5e Improve analysis API async contracts and startup helpers (#656)
* Improve analysis API async contracts and startup helpers

* Fix rebased analysis API contract regressions

* fix: align frontend report type union with full responses
2026-03-15 20:54:04 +08:00
Xavier Zhou
7b7eff7187 fix: support legacy Discord channel env alias and align docs (#659) 2026-03-15 19:09:14 +08:00
Haode Du
049e7e8f59 feat: add MiniMax Coding Plan web search provider (#493)
* feat: add MiniMax Coding Plan web search provider

- Add MiniMaxSearchProvider class with POST API to api.minimaxi.com
- Priority: Bocha > MiniMax > Tavily > Brave > SerpAPI
- Dual time-filtering: query augmentation + client-side date filtering
- Circuit breaker: 3 consecutive failures -> 300s cooldown
- New MINIMAX_API_KEY env var (supports multiple keys, comma-separated)
- Update config.py, search_service.py, .env.example

* docs: add MiniMax search provider to all documentation

- .env.example: add MINIMAX_API_KEY and BOCHA_API_KEYS with priority note
- README.md: update tech stack table and secrets table
- docs/full-guide.md: add MiniMax to config tables and search service section
- docs/full-guide_EN.md: add MiniMax to config tables and search service section
- docs/README_EN.md: update tech stack and secrets tables
- docs/README_CHT.md: update tech stack and secrets tables
- docs/DEPLOY.md: add MiniMax to env var tables
- docs/DEPLOY_EN.md: add MiniMax to env var tables
- docs/docker/zeabur-deployment.md: add MiniMax to analysis config table
- docs/CHANGELOG.md: add MiniMax provider to Unreleased section

* update doc

* refactor(search_service): 调整搜索提供者初始化顺序及参数位置

将MiniMax搜索提供者的参数位置和初始化顺序调整到最后,保持代码逻辑清晰

* 添加其他多处minimax_api_keys支持并调整参数顺序

* 增加 Bocha 和 Minimax 的前端配置

* fix: 将MINIMAX_API_KEYS改为单数形式

* docs(CHANGELOG): 调整MiniMax搜索提供商的优先级顺序

更新CHANGELOG.md中MiniMax搜索提供商的优先级描述,从Bocha > MiniMax > Tavily > Brave > SerpAPI调整为Bocha > Tavily > Brave > SerpAPI > MiniMax

* fix: 统一 MINIMAX_API_KEY 为 MINIMAX_API_KEYS 以保持命名一致性

---------

Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com>
2026-03-09 21:29:56 +08:00
zhulinsen
4098e10e39 docs: add email 2026-03-08 22:27:43 +08:00
mumu
cddb6baeda feat: add agent strategy chat across API, bot, and web UI #minor (#367)
* feat: add agent strategy chat across API, bot, and web UI #minor
- add /api/v1/agent endpoints for strategies and streaming chat
- route pipeline to agent mode when specific skills are configured
- persist multi-turn conversation history in database
- add web chat page, bot /ask command, built-in strategies, and tests

* fix(agent): improve session handling, progress messaging, and chat type safety #patch

Generate UUID session IDs for stream chat requests and use running loop API.

Persist user messages even on failed runs, and store assistant error notes for context continuity.

Add contextual thinking messages after tool calls in agent executor.

Fix strategy display name lookup in bot ask command.

Refine ChatPage TypeScript types and error handling for SSE parsing.

Use SQLAlchemy select+execute for conversation history query.

* docs: add Agent strategy chat to README and CHANGELOG #skip

* fix(tests): update strategy count assertions 6->11; clean up CHANGELOG [Unreleased] section #patch

* chore: update readme and fix unitest

* feat: optimize tools

* fix: Fix hard-coded test values and resolve nested mapping in Dashboard

* update changelog

* refactor(agent): extract shared factory, cache ToolRegistry/SkillManager, fix Gemini model name

* - CRITICAL: fix 4 wrong tool names in AGENT_SYSTEM_PROMPT and
  CHAT_SYSTEM_PROMPT (get_k_history→get_daily_history,
  get_technical_analysis→analyze_trend, get_chip_analysis→
  get_chip_distribution, search_news→search_stock_news)
- fix _THINKING_TOOL_LABELS: update 7 stale keys, add calculate_ma
  and get_analysis_context (13 tools now fully mapped)
- add isinstance(dict) guard in _parse_dashboard to reject non-dict
  JSON (arrays, scalars) that would crash downstream dict access
- use getattr() for config.agent_skills in pipeline.py (AttributeError safety)
- move  to top-level, remove unused imports (get_config,
  Callable, Any/Dict/Optional)
- add phased workflow directives to both system prompts to enforce
  sequential tool calling across analysis stages
- expand .env.example AGENT_SKILLS with all 11 built-in strategies
  and usage examples
- fix factory.py docstring referencing non-existent comprehensive_analysis
2026-02-23 13:24:01 +08:00
mumu
8f30f9093d fix: report signal accuracy, data source reliability, and market revi… (#275)
* fix: report signal accuracy, data source reliability, and market review quality #patch

- Fix signal emoji mismatch for compound advice and *ST markdown escaping
- Inject structured data (indices/stats/sectors) into market review
- Fix tushare return type and API endpoint; auto-inject realtime priority
- Add search cache (500-cap FIFO), limit supplement requests to 1
- Fix analysis API report=None and ReportStrategy type inconsistency
- Update CHANGELOG for v3.0.1 ~ v3.0.5

* fix:  F821 undefined name 'UnifiedRealtimeQuote'
2026-02-08 18:21:33 +08:00
[ZE]
dbe1cd7cae feat(backtest): add backtest engine with evaluation pipeline and WebUI (#269)
Add a complete backtest/evaluation system that measures the accuracy of
AI-generated stock analysis recommendations against actual market outcomes.

Backend:
- Backtest engine (src/core/backtest_engine.py) with direction inference,
  stop-loss/take-profit simulation, and outcome classification (win/loss/neutral)
- Repository layer (src/repositories/backtest_repo.py) with SQLite persistence
  for backtest_results and backtest_summaries tables
- Service layer (src/services/backtest_service.py) orchestrating evaluation runs
  with configurable window days, neutral band, and min-age filters
- REST API endpoints: POST /run, GET /results, GET /performance, GET /performance/{code}
- Pydantic schemas for request/response validation

Frontend (apps/dsa-web):
- New Backtest page with performance dashboard sidebar showing direction
  accuracy, win rate, simulated returns, SL/TP trigger rates, and W/L/N counts
- Paginated results table with outcome badges, direction indicators, and
  color-coded return percentages
- Stock code filter and one-click "Run Backtest" trigger
- Full TypeScript types and API client matching backend schemas

Direction mapping fix:
- "Wait/observe" (观望) advice now maps to direction_expected="down" instead
  of "flat", correctly reflecting that "wait" means "stay out due to downside
  risk" rather than predicting a flat market

Tests:
- 21 unit tests covering engine logic, service orchestration, and summary
  aggregation (all passing)

Docs:
- Updated README, full-guide, and translations with backtest feature docs
2026-02-08 14:49:50 +08:00
mumu
52917baa02 feat!: replace legacy WebUI with unified FastAPI architecture #major (#267)
* feat!: replace legacy WebUI with unified FastAPI architecture #major

- Remove legacy WebUI (web/ package based on ThreadingHTTPServer)
- Unify CLI commands: --webui now seamlessly launches the new FastAPI service
- Migrate task service from web/services.py to src/services/task_service.py
- Update documentation to reflect the new simplified usage

* refactor(service): support parameterized query source in TaskService
2026-02-06 22:06:01 +08:00
[ZE]
13b556e79e feat(search): add Brave Search API support (#255)
* feat(search): add Brave Search API support

- Add BraveSearchProvider class with multi-key load balancing
- Support time-based filtering (freshness: pd/pw/pm/py)
- Priority order: Bocha > Tavily > Brave > SerpAPI
- Configure via BRAVE_API_KEYS environment variable
- US stock optimized (English language, US region)

* docs: add Brave Search API to documentation

- Update README.md (CN)
- Update docs/full-guide.md
- Update docs/README_EN.md
- Update docs/README_CHT.md
2026-02-05 20:40:46 +08:00
Hopeless
b0c6825ed9 feat: 增加ServerChan³(Server酱³)推送通道 (已更新文档) (#238)
* update serverchan3 config

* update serverchan3 config

* Add Server酱3 notification channel support

* Add support for SERVERCHAN3 notification channel

* Add SERVERCHAN3_SENDKEY to configuration options

* Add SERVERCHAN3_SENDKEY to deployment documentation

* Add SERVERCHAN3_SENDKEY to notification options

* Fix formatting for SERVERCHAN3_SENDKEY entry

* Add SERVERCHAN3_SENDKEY to README_CHT.md

* Add SERVERCHAN3_SENDKEY to daily_analysis.yml

* Add SERVERCHAN3_SENDKEY to README_EN.md

* Fix typo in SERVERCHAN3_SENDKEY description
2026-02-04 20:09:58 +08:00
Baojunjie
3bab8b0a26 feat(telegram): 支持发送消息到子话题 (#235)
新增 TELEGRAM_MESSAGE_THREAD_ID 配置选项,允许将通知发送到 Telegram 群组中的特定子话题(Topic)。更新了配置文件、文档和 GitHub Actions 工作流以支持此功能。
2026-02-03 21:23:23 +08:00
Krane
76478fa43b feat: 增加分析历史存储 (#225)
* feat: 添加分析历史存储

* docs: /analysis/history 文档更新

* docs: marge doc

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: CR db except;

* fix: CR default query_source

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-02 22:04:01 +08:00