# AGENTS.md ## 1. 项目定位 AlphaX 是一个以 `Python + FastAPI + SQLite + 静态 HTML` 组成的加密市场机会监控系统,当前核心目标不是做完整交易执行,而是围绕“发现机会 -> 确认机会 -> 跟踪机会 -> 复盘迭代”建立一套可持续优化的研究与提示闭环。 当前仓库是一个 **Docker 化副本**,从 `README_DOCKER.md` 的描述看,它被设计为和线上主实例隔离运行,默认端口、数据库挂载、调度器行为都以“先验证、后放量”为原则。 ## 2. 当前技术栈 - 后端:`FastAPI`, `uvicorn`, `pydantic` - 数据与计算:`sqlite3`, `pandas`, `numpy` - 交易所/行情:`ccxt`, `requests` - 配置:`rules.yaml` + `config_loader.py` - 测试:`pytest` / `unittest` - 部署:`Dockerfile`, `docker-compose.yml` - 前端:`static/*.html` 模板页,由 FastAPI/Jinja2 提供页面壳和 API ## 3. 代码主线 ### 3.1 业务闭环 建议把系统理解为 6 个层次: 1. `altcoin_screener.py` 负责粗筛,基于 Binance 行情、量价/结构等规则找候选币。 2. `altcoin_confirm.py` 负责确认,判断是否形成更可执行的机会,并生成入场计划、上下文和推送候选。 3. `price_tracker.py` 负责跟踪活跃推荐,更新盈亏、止盈止损、趋势衰减、行动状态。 4. `review_engine.py` 负责复盘与策略自迭代,包括信号绩效、漏选复盘、规则候选、版本演进。 5. `event_driven_screener.py` 负责事件/舆情驱动的快速触发检查,属于技术筛选主链路的补充入口。 6. `web_server.py` 负责用户端和管理端 API、页面壳、订阅与认证相关接口。 ### 3.2 数据与状态中心 - `altcoin_db.py` 是交易/推荐/状态的核心数据库层,体量很大,承担了: - 初始化表结构 - recommendation / screening_log / tracking / review 等主表读写 - 推荐状态派生与展示口径整理 - 部分状态迁移与兼容逻辑 - `auth_db.py` 是会员、邀请码、邮箱验证、订阅、订单预留的数据库层。 - `opportunity_lifecycle.py` 是机会生命周期和买点质量闸门的规则中心,决定: - 哪些机会只是观察池 - 哪些机会可以进入“可即刻买入” - 哪些状态应该被视为历史/盈利管理/观察态 ### 3.3 配置中心 - `rules.yaml` 是策略配置单一事实源。 - `config_loader.py` 负责: - 读取/缓存配置 - 暴露各子模块配置访问函数 - 将部分复盘后的参数改写回 `rules.yaml` - 兼容旧信号名 如果要改筛选阈值、确认门槛、止盈止损、动态权重逻辑,优先检查 `rules.yaml` 和 `config_loader.py`,不要直接在业务脚本里硬编码新参数。 ## 4. 目录速览 ### 4.1 核心目录 - `/static` - 页面文件,如 `app.html`, `auth.html`, `subscription.html`, `strategy.html` - `/tests` - 针对状态机、认证订阅、复盘、事件驱动、策略版本等的回归测试 - `/scripts` - 若干结构/状态机/信号时效性校验脚本 - `/docker` - 容器入口与串行调度器 - `/data` - SQLite 数据库存放目录 - `/logs` - 运行日志目录 - `/docs` - 当前只有少量专题文档,不是完整系统文档中心 ### 4.2 根目录关键文件 - [web_server.py](/Users/aaron/Desktop/code/alphax-docker/web_server.py) - [altcoin_db.py](/Users/aaron/Desktop/code/alphax-docker/altcoin_db.py) - [auth_db.py](/Users/aaron/Desktop/code/alphax-docker/auth_db.py) - [altcoin_screener.py](/Users/aaron/Desktop/code/alphax-docker/altcoin_screener.py) - [altcoin_confirm.py](/Users/aaron/Desktop/code/alphax-docker/altcoin_confirm.py) - [price_tracker.py](/Users/aaron/Desktop/code/alphax-docker/price_tracker.py) - [review_engine.py](/Users/aaron/Desktop/code/alphax-docker/review_engine.py) - [event_driven_screener.py](/Users/aaron/Desktop/code/alphax-docker/event_driven_screener.py) - [opportunity_lifecycle.py](/Users/aaron/Desktop/code/alphax-docker/opportunity_lifecycle.py) - [rules.yaml](/Users/aaron/Desktop/code/alphax-docker/rules.yaml) - [config_loader.py](/Users/aaron/Desktop/code/alphax-docker/config_loader.py) - [docker-compose.yml](/Users/aaron/Desktop/code/alphax-docker/docker-compose.yml) - [README_DOCKER.md](/Users/aaron/Desktop/code/alphax-docker/README_DOCKER.md) ## 5. Web/API 观察 `web_server.py` 体量非常大,既包含: - 认证接口 - 订阅接口 - 推荐/筛选/复盘/策略看板接口 - 新闻/舆情接口 - 管理端接口 - 页面路由 如果要改 Web 逻辑,先确认变更属于哪一类: - “数据口径问题”优先去 `altcoin_db.py` / `opportunity_lifecycle.py` - “参数问题”优先去 `rules.yaml` - “页面展示问题”再回到 `static/*.html` 不要第一反应直接在 `web_server.py` 里堆业务分支,否则会继续放大这个文件的复杂度。 ## 6. 调度与运行方式 ### 6.1 Docker 运行 主要服务: - `alphax-web` - 对外提供 FastAPI + 页面 - 宿主机默认映射 `8191 -> 8190` - `alphax-scheduler` - 串行调度任务 - 默认 `ALPHAX_SCHEDULER_DRY_RUN=1` 关键原则: - 调度器是 **串行** 执行任务,用来规避 SQLite 写锁冲突。 - 副本默认不应影响线上实例。 - 数据库挂载路径是 `./data/altcoin_monitor.db`。 ### 6.2 入口 - `docker/entrypoint.sh` - `web` -> 启动 uvicorn - `scheduler` -> 启动 `docker/scheduler.py` - `once` -> 执行单次脚本 - `docker/scheduler.py` - 统一调度 `event_driven_screener.py` - `price_tracker.py` - `altcoin_confirm.py` - `altcoin_screener.py` - `sentiment_monitor.py` - `review_engine.py` ## 7. 测试与验证建议 ### 7.1 优先跑的测试 每次涉及以下模块改动时,至少补跑相关测试: - 状态机 / 展示口径 / 推送条件 - `tests/test_recommendation_state_mainline.py` - `tests/test_recommendation_execution_status.py` - `tests/test_opportunity_lifecycle.py` - 认证订阅 - `tests/test_user_subscription_auth.py` - 舆情事件 - `tests/test_event_driven_screener.py` - 时效性与门控 - `tests/test_confirm_freshness_gate.py` - `tests/test_pa_recency.py` - `tests/test_vp_fly_recency.py` ### 7.2 推荐命令 常用回归命令: ```bash pytest -q python3 scripts/validate_docker_layout.py python3 scripts/validate_state_machine.py python3 scripts/validate_push_state_flow.py python3 scripts/validate_signal_recency.py ``` 如果只是小范围修改,优先跑和改动模块最相关的测试文件,不要盲目只看 `pytest` 是否全绿。 ## 8. 开发守则 ### 8.1 改动前先判断“应该改哪一层” - 调参数:优先 `rules.yaml` - 配置读取/兼容:`config_loader.py` - 状态口径:`opportunity_lifecycle.py` 或 `altcoin_db.py` - DB 表结构/查询:`altcoin_db.py` / `auth_db.py` - API 契约:`web_server.py` - 页面壳和交互:`static/*.html` ### 8.2 SQLite 相关约束 这个项目高度依赖 SQLite,因此要特别注意: - 避免引入并发写入路径 - 避免在不同脚本里制造长事务 - 任何新增 cron/task 设计,都先考虑是否会和现有调度冲突 - 新增写操作时,优先复用已有 `get_conn()` 约定 ### 8.3 状态机不要各写各的 项目已经存在比较强的“状态派生中心化”趋势: - `normalize_action_status` - `derive_display_bucket` - `apply_entry_quality_gate` - `apply_recommendation_state_transition` 新增状态时,必须检查: 1. DB 中的原始状态字段怎么存 2. API 输出怎么派生 3. 前端如何解释 4. 推送是否会误触发 5. 相关测试是否需要补齐 ### 8.4 面向兼容开发 这个仓库里有不少“迭代中兼容旧逻辑”的痕迹,例如: - `config_loader.py` 中的信号别名兼容 - `altcoin_db.py` 中大量 `ALTER TABLE` 迁移兜底 - 多处 `entry_plan_json` / `detail_json` / `*_context_json` 因此改动时应优先做增量兼容,而不是假设数据库、配置、旧数据永远是干净新鲜的。 ## 9. 当前仓库的几个事实 - 当前目录 **不是 git 仓库根目录**,`git status` 会失败;如果后续需要版本管理,请先确认真正的 Git 根目录或重新初始化。 - [DESIGN.md](/Users/aaron/Desktop/code/alphax-docker/DESIGN.md) 当前内容更像一份品牌/样式 YAML,不是这个项目的系统设计文档,阅读时不要误判。 - 根目录存在一些临时/非核心文件,例如 `.tmp_patch_tp1.py`、`.tmp_strategy_v2_marker.txt`、`=`,后续开发前建议先确认这些文件是否仍有保留价值。 - `web_server.py` 和 `altcoin_db.py` 都已经非常大,后续新增功能应尽量避免继续把复杂度集中到这两个文件。 ## 10. 推荐的后续重构方向 后续若继续开发,建议优先考虑这几个方向: 1. 把 `web_server.py` 按认证、推荐、策略、管理端拆分路由模块。 2. 把 `altcoin_db.py` 拆成 schema/init、recommendation、review、analytics、admin 查询几个子模块。 3. 为 `rules.yaml` 建立更明确的 schema 校验,避免配置漂移。 4. 给核心脚本增加更稳定的 CLI 参数入口,而不是依赖脚本内默认行为。 5. 梳理推送链路,把“是否推送”的判断和“推送内容生成”进一步解耦。 ## 11. 给后续 Agent 的工作方式建议 接手这个仓库时,优先按下面顺序理解问题: 1. 先确认问题发生在“筛选 / 确认 / 跟踪 / 复盘 / Web 展示 / 认证订阅”哪一层。 2. 再确认它属于“参数失真、状态派生错误、DB 查询口径不一致、前端展示错误、任务调度副作用”中的哪一类。 3. 修改后至少补 1 个相关测试,最好补到最接近业务口径的那层。 4. 如果变更影响推荐状态或展示桶,务必同时检查 API、前端、推送、历史统计四个面。 --- 这份文档以当前仓库实际代码为准整理。如果后续完成模块拆分、引入新的持久层或把静态页面改造成更现代的前端工程,记得同步更新本文件,而不是让它变成另一份过时说明书。