# Alpha Transformer () 基于AI的Alpha变种自动生成器,将一个种子Alpha转换为多个具有不同逻辑和参数的新Alpha表达式。 ## 功能概述 ****的核心思想是:给定一个种子Alpha作为参考,结合大量已知的Alpha模板和AI能力,自动生成多个具有不同策略逻辑的新Alpha表达式。这些变种可以用于: - 策略多元化(避免单一策略风险) - 参数优化(探索最优参数组合) - 逻辑变体(发现新的市场规律) ## 工作原理详解 ### 整体流程 ``` 种子Alpha → 获取详情 → AI生成模板 → 填充参数 → 验证输出 ↓ ↓ ↓ ↓ ↓ 原始ID settings 逻辑变体 表达式组合 JSON结果 expression + expression datafields ``` ### 第一阶段:获取种子Alpha信息 当用户输入Alpha ID后,系统会: 1. **连接BRAIN平台** - 使用提供的用户名密码认证 2. **获取Alpha详情** - 通过API获取以下信息: - `settings`: Alpha的配置参数(region, universe, delay等) - `expression`: Alpha的具体表达式代码 - `description`: Alpha的策略描述 - `operators`: 使用的算子列表(ts_mean, group_rank等) - `data_fields`: 使用的数据字段(close, volume等) 3. **解析表达式结构** - 分析Alpha代码中的: - 占位符类型(数据字段、时间窗口、分组方式等) - 算子组合模式 - 数据依赖关系 ### 第二阶段:AI生成模板 这是**的核心**。系统会: 1. **构建提示词** - 将以下内容发送给LLM: ``` 种子Alpha详情(settings + expression + 使用的算子) + 模板摘要(template_summary.md中的90+个模板) + 生成指令(要求生成X个变种模板) ``` 2. **LLM推理** - AI根据以下信息生成新模板: - 种子Alpha的核心逻辑是什么? - template_summary中有哪些类似或可组合的模板? - 如何创造性地变形生成新模板? 3. **模板输出** - LLM返回的每个模板包含: - `template_expression`: 使用占位符的模板表达式 - 例如:`group_rank( / ts_mean(, ))` - `template_explanation`: 模板的核心思想和逻辑说明 ### 第三阶段:模板填充 对每个生成的模板,系统会: 1. **识别占位符** - 解析模板中的所有``: ```python # 常见的占位符类型 # 数据字段(如 close, volume, pe_ratio) # 时间窗口(如 20, 60, 120) # 分组方式(如 industry, sector) # 操作符(如 ts_mean, rank) ``` 2. **获取候选数据** - 从BRAIN API获取: - 符合条件的数据字段列表(top_n个) - 可用的窗口参数 - 支持的分组方式 3. **组合生成** - 笛卡尔积组合所有候选: ```python # 如果模板有2个和3个 # 则生成 50 * 50 * 3 = 7500 个表达式(示例) # 实际会限制总数,避免组合爆炸 ``` 4. **设置继承** - 新生成的表达式会继承种子Alpha的: - Region(地区) - Universe(股票池) - Delay(延迟) - Neutralization(中性化方式) ### 第四阶段:验证与输出 1. **表达式验证** - 验证生成的表达式是否合法: - 语法检查 - 数据依赖检查 - 算子兼容性检查 2. **结果分类** - 分成三类输出: - **Alpha_candidates.json**: 模板级别的结果 - 包含模板表达式和每个占位符的候选列表 - 可用于进一步手动编辑或参数调整 - **Alpha_generated_expressions_success.json**: 成功生成的表达式 - 具体的、可直接使用的Alpha表达式 - 可导入BRAIN或回测器 - **Alpha_generated_expressions_error.json**: 失败的表达式 - 生成或验证过程中出错的表达式 - 用于排查模板问题 ## template_summary.txt 的作用 ### 文件内容 `template_summary.md`是一个包含**90+个精选Alpha模板**的文档,每个模板包含: 1. **Hypothesis(假设)** - 策略的核心思想 ``` "After news is released, if a stock takes a longer time to rise, it may show strong evidence of upward momentum" ``` 2. **Expression(表达式)** - 具体的Alpha代码 ``` `ts_backfill(vec_avg(nws12_prez_4l),504)` ``` 3. **Settings(设置)** - 推荐使用的配置 ``` Region: USA, Universe: TOP500, Delay: 1 ``` 4. **逻辑链深度解析** - 为什么这个Alpha有效 ``` - 时序相对性: ts_backfill处理新闻数据的稀疏性 - 算子深意: vec_avg聚合多维情绪 ``` 5. **优化方向** - 如何进一步改进 ``` - 去噪: 增加winsorize或rank - 从属信号: 叠加Social Media Effect ``` ### 模板分类 文件中的模板来自多个来源: 1. **Learn系列** - BRAIN官方教程中的示例 - Learn101: 基础Alpha示例 - Learn102: 中级Alpha示例 - Learn103: 高级Alpha示例 2. **《151 Trading Strategies》** - 学术论文中的策略 - 动量策略 - 价值策略 - 波动率策略 3. **社区精选** - 论坛中高评分的Alpha ### 为什么修改它能生成不同结果? **是的,这是生成不同Alpha变种的关键!** 当你修改`template_summary.md`时: | 修改内容 | 影响 | |---------|------| | **增加新模板** | LLM有更多参考,生成更多样化的变种 | | **删除旧模板** | 生成的变种会集中在剩余模板上 | | **修改模板说明** | LLM对模板的理解改变,生成的变种逻辑不同 | | **调整模板格式** | 可能影响LLM的解析和理解 | ### 如何优化template_summary **建议策略:** 1. **按主题分类** - 如果你想生成某类策略的变种 ```markdown ## 动量策略 [相关的5-10个模板] ## 价值策略 [相关的5-10个模板] ``` 2. **加入自己的Alpha** - 如果你有成功的Alpha ```markdown ## 我的成功策略 **Expression**: `group_rank(close / ts_mean(close, 20))` **核心思想**: 均线偏离策略 ``` 3. **保持格式一致** - 确保每个模板都包含: - 清晰的假设 - 具体表达式 - 逻辑解析 4. **定期更新** - 随着策略进化,不断添加新的有效模板 ## 快速开始 ### 1. 安装依赖 ```bash cd /Users/jack/source/mySpace/mycode/my_project/py/alpha/WqApp/simple72 pip install -r requirements.txt ``` ### 2. 启动服务 ```bash python main.py ``` 服务将在 http://localhost:8000 启动 ### 3. 使用Web界面 1. 打开浏览器访问 http://localhost:8000 2. 填写表单: - **Alpha ID**: 输入种子Alpha的ID(格式如 `ak2YPVxv`) - **LLM API Key**: 你的LLM服务API密钥 - **LLM Base URL**: LLM服务地址 - Kimi: `https://api.moonshot.cn/v1` - OpenAI: `https://api.openai.com/v1` - 其他: `https://your-llm-service.com/v1` - **LLM Model**: 模型名称(如 `kimi-k2.5`, `gpt-4`) - **BRAIN Username/Password**: 你的BRAIN平台账号 3. 点击"生成变种" 4. 等待处理完成(通常3-10分钟) 5. 查看或复制JSON结果 ### 4. 使用API ```bash curl -X POST http://localhost:8000/api/generate \ -H "Content-Type: application/json" \ -d '{ "alpha_id": "ak2YPVxv", "llm_api_key": "your-api-key", "llm_base_url": "https://api.moonshot.cn/v1", "llm_model": "kimi-k2.5", "brain_username": "your-brain-user", "brain_password": "your-brain-pass", "top_n_datafield": 50 }' ``` ## API端点 ### GET / - **功能**: 主页面 - **返回**: HTML页面 ### POST /api/generate - **功能**: 生成Alpha变种 - **请求体**: ```json { "alpha_id": "string (必填)", "llm_api_key": "string (必填)", "llm_base_url": "string (必填)", "llm_model": "string (必填)", "brain_username": "string (必填)", "brain_password": "string (必填)", "top_n_datafield": "int (可选,默认50)", "user_region": "string (可选)", "user_universe": "string (可选)", "user_delay": "int (可选)", "user_category": "string (可选)", "user_data_type": "string (可选,默认MATRIX)" } ``` - **响应**: ```json { "success": true, "alpha_id": "种子Alpha ID", "candidates": [...], "expressions_success": [...], "expressions_error": [...] } ``` ### GET /api/health - **功能**: 健康检查 - **响应**: `{"status": "healthy", "service": "alpha-transformer"}` ## 项目结构 ``` simple72/ ├── main.py # FastAPI应用入口 ├── requirements.txt # 依赖清单 ├── Tranformer/ # Transformer核心模块 │ ├── Transformer.py # 主逻辑(~5000行) │ │ ├── generate_alpha_description() # 获取Alpha详情 │ │ ├── generate_new_alphas() # 生成新Alpha │ │ ├── propose_alpha_templates() # LLM生成模板 │ │ ├── populate_template() # 填充模板 │ │ └── validate_expression() # 验证表达式 │ ├── ace_lib.py # BRAIN API客户端 │ ├── helpful_functions.py # 辅助函数 │ ├── validator.py # 表达式验证器 │ ├── template_summary.md # 模板摘要(可自定义) │ └── output/ # 输出目录 │ ├── Alpha_candidates.json │ ├── Alpha_generated_expressions_success.json │ └── Alpha_generated_expressions_error.json └── templates/ └── index.html # 前端页面 ``` ## 高级配置 ### 调整生成数量 修改`top_n_datafield`参数: - 值越大 → 生成的表达式越多,但处理时间越长 - 值越小 → 生成更快,但可能错过好的变种 - 建议值:30-100之间 ### 自定义模板摘要 编辑`Tranformer/template_summary.md`: - 添加你认为有效的Alpha模板 - 按策略类型分类整理 - 保持每个模板的格式一致性 ### 限制生成范围 通过可选参数限制生成范围: - `user_region`: 只在特定地区生成 - `user_universe`: 只在特定股票池生成 - `user_delay`: 只使用特定的延迟设置 ## 常见问题 ### Q: 生成失败怎么办? A: 检查以下几点: 1. BRAIN账号密码是否正确 2. LLM API Key是否有效 3. Alpha ID是否存在且可访问 4. 查看返回的error字段 ### Q: 生成的结果都是类似的? A: 尝试: 1. 修改`template_summary.md`,添加更多样化的模板 2. 调整`top_n_datafield`,增加数据字段候选 3. 使用不同的种子Alpha ### Q: 生成时间太长? A: 这是正常的,因为: - LLM调用需要时间 - BRAIN API查询数据字段 - 表达式组合和验证 可以: - 减少`top_n_datafield` - 简化`template_summary.md` - 使用本地部署的LLM ## 技术栈 - **后端**: FastAPI + asyncio - **LLM调用**: OpenAI SDK (AsyncOpenAI) - **BRAIN连接**: requests Session - **前端**: 原生HTML/CSS/JavaScript - **验证**: 自定义表达式验证器 ## 许可证 MIT License ## 参考资源 - [WorldQuant BRAIN 文档](https://www.worldquantbrain.com/) - [BRAIN表达式语法](https://www.worldquantbrain.com/data/expressions) - [BRAIN算子列表](https://www.worldquantbrain.com/data/operators)