Codex 股票分析与研究:用 AGENTS.md 规范 akshare 量化回测流程
1. 为什么用 Codex 做股票研究总在“回测作弊”上翻车先说清楚 Codex 在这件事里的定位它是研究助理加代码工人负责取数、算指标、跑回测、写报告、盯监控。买卖决策、仓位、止损这些永远是你自己拍板。AI 荐股本身不合规也不可靠代客荐股、承诺收益在没有牌照的情况下就是违法。这条红线先钉死后面所有流程都围绕“只做研究、不做决策”展开。我见过太多人用 Codex 写量化策略第一版回测曲线漂亮得不像话年化 80%、最大回撤 5%结果一上模拟盘就原形毕露。问题几乎都出在同一件事上回测口径没定死代码里悄悄用了未来信息。比如财报数据用了 report_date 而不是公告日 announce_date等于你提前知道了还没公布的业绩比如信号在 T 日收盘生成成交价却用了 T 日收盘价等于用同一根 K 线既看信号又成交再比如交易日历直接用 pandas 的 bdate_range把停牌日、节假日全算进去了。这些坑单靠人眼 review 代码很难全堵住因为 Codex 每次生成的实现细节都不一样。解决办法不是每次重新叮嘱而是把口径写进一个 Codex 每次都会读的文件——AGENTS.md。这个文件相当于给 Codex 立的“项目宪法”它定义了数据怎么取、指标怎么算、回测怎么成交、代码有哪些红线。每踩一个坑就往里加一条时间长了这套体系就是你量化研究的根基。这篇要讲的就是怎么用 AGENTS.md 把 akshare 拉行情、算因子、跑回测这条链路规范住让 Codex 产出的代码可复现、可核对、不掺未来函数。适合已经会用 Python 做数据分析、想用 Codex 提效但被回测结果反复打脸的人。全文不构成任何投资建议只讲工程流程。2. 前置准备TaoToken 接入 Codex 与 akshare 环境搭建要让 Codex 稳定读 AGENTS.md 并按规范干活得先把它接到一个可靠的模型服务上。我用的是 TaoToken 的 Coding Plan它兼容 Anthropic 的接口协议Codex 这类工具配置起来比较顺。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 注意 API 地址不带 UTM 参数。接入需要三件套Base URL、API Key、Model ID。Base URL 填 https://taotoken.net/api API Key 去控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 生成Model ID 按你选的模型填。如果你用的是 Claude Code 这类工具配置方式类似文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 有说明。Python 环境这边akshare 负责拉 A 股日线行情tushare 拉财务数据需要 token海外数据可以用 yfinance。装依赖pip install akshare tushare pandas numpy pyarrow vectorbtakshare 的好处是免费、接口全A 股日线、指数成分、财务指标都能拿。缺点是部分接口偶尔抽风所以取数一定要落本地缓存别每次回测都重新拉。我习惯用 parquet 存读取快、体积小。目录结构建议这样project/ AGENTS.md data/ calendar.csv cache/ factors/ momentum.py research/ run_backtest.pydata/calendar.csv 是交易日历从 akshare 的 tool_trade_date_hist_sina 拉一次存下来后面所有日期判断都以它为准禁用 pandas 的 bdate_range。这一步看着小但能挡掉一大批“把非交易日算进持仓天数”的隐性错误。环境搭好后先跑一个最小取数验证确认 akshare 能正常返回数据再让 Codex 按 AGENTS.md 生成正式代码。顺序别反否则报错时你分不清是环境问题还是代码问题。3. 可复制配置AGENTS.md 规范 akshare 取数与回测口径AGENTS.md 是整个流程的核心Codex 每次开工前都会读它。下面这份可以直接复制路径放在项目根目录和 data/、factors/ 同级。内容分四块数据口径、回测口径、代码红线、合规声明。# AGENTS.md — 股票量化研究项目规范 ## 数据口径 - A股价格一律使用前复权(qfq)禁止混用后复权(hfq)或不复权 - 交易日历以 data/calendar.csv 为准禁用 pandas bdate_range - 财报数据使用公告日 announce_date禁止使用报告期 report_date - 所有行情数据落 parquet 缓存到 data/cache/禁止每次回测重新拉取 - akshare 接口调用失败时重试 3 次仍失败则报错退出禁止静默跳过 ## 回测口径 - 信号在 T 日收盘后生成T1 日开盘价成交禁止用 T 日收盘价成交 - 手续费双边万3卖出额外加千1印花税 - 滑点按当日振幅的 10% 计算 - 每个分组样本数不得少于 40 只不足则跳过该期 - 回测必须输出净值曲线、IC 序列、换手率、扣费后多空年化 ## 代码红线 - 禁止使用 .shift(-n) 等任何前视操作 - 每个新因子必须配一个未来函数检查用例 - 因子计算与决策逻辑分离factors/ 下只算因子不做买卖判断 - 所有涉及日期的逻辑必须引用 data/calendar.csv ## 合规 - 只输出研究结论不构成投资建议 - 禁止输出具体买卖点位、仓位建议、收益承诺这份配置里数据口径和回测口径是防回测作弊的关键。前复权保证价格序列连续公告日保证财报信息不提前泄露T1 开盘成交保证信号和成交不在同一时点。代码红线里的 .shift(-n) 是未来函数最常见的来源一个负向 shift 就能让因子“看到”未来价格。因子文件按规范只算因子比如动量因子# factors/momentum.py import pandas as pd def momentum_20d(close: pd.DataFrame) - pd.DataFrame: 20日收益率因子只计算不决策 return close.pct_change(20)回测脚本引用因子和缓存数据按 AGENTS.md 的口径成交# research/run_backtest.py import pandas as pd from factors.momentum import momentum_20d def load_calendar(pathdata/calendar.csv): return pd.read_csv(path, parse_dates[trade_date]) def run(cache_pathdata/cache/close.parquet): close pd.read_parquet(cache_path) factor momentum_20d(close) # 信号 T 日生成T1 开盘成交此处按规范实现 signal factor.rank(axis1, pctTrue) 0.9 return signal配置写好后Codex 生成代码时会自动对齐这些口径。你不需要每次重复叮嘱只要在提问时让它“读 AGENTS.md”即可。这一步做完回测结果的可信度会明显上一个台阶。4. 验证请求跑一次完整回测并核对结果配置就位后用三段式提问让 Codex 生成完整回测。提问模板【背景与口径】读取 AGENTS.md。检验假设中证500成分股中过去20日收益率排名前10%的股票未来5日是否有超额收益。 【交付物】三个文件data/loader.py 取数落缓存 / factors/momentum.py 只算因子 / research/run_backtest.py 用 vectorbt 跑十分组回测输出净值曲线和 IC。 【验收】自查a) 因子是否用到 T 日后信息 b) 每组样本是否稳定 40 只以上 c) 换手率多少扣手续费后多空年化还剩多少。Codex 生成后先跑取数脚本验证 akshare 接口python data/loader.py正常会看到类似输出确认数据落到了 data/cache/拉取中证500成分股... 500 只 拉取日线行情 2020-01-01 至 2024-12-31 缓存写入 data/cache/close.parquet共 500 列然后跑回测python research/run_backtest.py输出应该包含净值曲线数据、IC 序列、换手率和扣费后收益。核对时重点看三个数IC 均值是否显著大于 0、换手率是否高得离谱、扣费后多空年化相比扣费前缩水多少。如果扣费前年化 30%、扣费后只剩 5%说明策略换手太高实盘基本没法用。敏感度扫描是防过拟合的必修课。让 Codex 测几组参数权重组合测 50/25/25、30/30/40、等权持股数测前10/20/30每组真实回测输出年化、回撤、索提诺对比表。不要帮我挑“最好”参数我要看结论对参数敏不敏感。如果参数一换结果天翻地覆说明是拟合出来的不能用。稳定的策略应该在合理参数范围内表现接近。这一步做完你手里才有一个能拿去做模拟盘的候选策略。模拟盘跑 1 到 3 个月再考虑实盘实盘代码还要让 Codex 做安全审计检查重复下单、风控缺失、网络异常处理。5. 常见报错排查401、local proxy failed 与 reading choices接入和回测过程中有几类报错特别常见逐个说清楚。401 未授权通常是 API Key 没配对或过期。检查三件套Base URL 是不是 https://taotoken.net/api API Key 是不是从控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 新生成的Model ID 有没有填错。三者任一不对都会 401。如果用的是 Claude Code配置里 Base URL 和 Key 要对应同一套。local proxy failed这个报错一般出现在本地网络环境有额外转发设置时。先确认你的请求地址是直连 https://taotoken.net/api 没有经过其他中间层。如果工具配置里填了额外的代理地址去掉再试。这个报错和账号权限无关纯粹是请求路径问题。reading choices 报错多出现在模型返回格式和工具预期不一致时。常见原因是 Model ID 填了一个不支持当前接口协议的模型。换一个兼容的 Model ID 重试或者检查请求体里 stream 参数是否和工具预期匹配。Codex 这类工具对返回结构比较敏感Model ID 选错就会在读 choices 字段时崩。OAuth 相关报错出现在用账号授权登录而非 API Key 的场景。如果你走的是 API Key 方式不该触发 OAuth 流程。检查配置里是不是混用了两种认证方式统一成 API Key 即可。akshare 取数报错常见的是接口超时或返回空。按 AGENTS.md 的规范重试 3 次仍失败就报错退出别静默跳过否则回测样本会悄悄变少。另外注意 akshare 部分接口有频率限制批量拉取时加个 sleep。未来函数自查报错如果你按规范写了检查用例跑出来发现因子用了 T 日后信息先看是不是用了 .shift(-n)再看财报数据是不是误用了 report_date。这两个是最高频的来源。排查顺序建议先确认三件套配置再确认网络路径最后看代码逻辑。大部分报错在前两步就能定位。6. 把研究流程日常化从周检到策略体检流程跑通后可以把它日常化。持仓周检对照监控清单输出逻辑变强还是变弱附上证据财报季扫雷把新公告按重要度排序估值跟踪看 PE、PB 分位数标出低估区间策略体检跑未来函数用例全过才更新信号。这些都可以挂定时任务让 Codex 按 AGENTS.md 的口径自动产出。需要长期跑编码和 Agent 任务的可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。想先验证模型效果的用模型对话https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。最后提醒一句AGENTS.md 是活的每踩一个坑就加一条。回测口径定得越死Codex 产出的代码越可信。漂亮曲线大概率是过拟合敏感度扫描和样本外测试不能省。所有数字标注出处拿不准标未核实人工抽查不能停。这套流程的价值不在于让 AI 替你决策而在于把重复的取数、算指标、跑回测标准化让你把精力放在逻辑判断上。

相关新闻

Spring Boot+Vue+ElementUI人力资源系统实现与部署避坑指南

Spring Boot+Vue+ElementUI人力资源系统实现与部署避坑指南

简介:面向计算机专业毕业生与Java进阶学习者,基于Spring BootVue.jsElementUI构建的人力资源管理系统完整源码,定位于毕业设计、课程设计与期末大作业场景。项目覆盖员工信息管理、部门维护、权限控制等典型HR业务模块,前后端分离…

2026/10/9 15:24:04 阅读更多 →
校园一卡通管理系统设计与实现:从数据库建模到并发交易落地

校园一卡通管理系统设计与实现:从数据库建模到并发交易落地

简介:一套面向计算机科学与技术等专业本科毕业设计场景的校园一卡通信息管理系统设计文档,内容围绕 ASP.NET 与 SQL Server 技术路线,完整呈现从需求分析、E-R 图规划、数据库实现到消费跟踪、实时监管等关键模块的设计思路,适用于…

2026/10/9 15:24:04 阅读更多 →
手指静脉识别实战:Python+OpenCV预处理与特征提取避坑指南

手指静脉识别实战:Python+OpenCV预处理与特征提取避坑指南

简介:本资源为基于Python与OpenCV实现的手指静脉识别毕业设计完整资料包,面向生物特征识别方向的本科生、研究生及需要课程设计参考的开发者。内容围绕红外手指静脉图像展开,涵盖图像预处理、特征提取、模型训练与识别匹配等环节,…

2026/10/9 15:24:04 阅读更多 →

最新新闻

鸿蒙Flutter中使用dns_client实现DoH防DNS劫持实践指南

鸿蒙Flutter中使用dns_client实现DoH防DNS劫持实践指南

1. 先聊聊:你的 DNS 请求是怎么被“拐走”的1.1 DNS 劫持的常见路径很多开发者都有过这种体验:明明输入的是正常网址,页面里却出现了不该出现的广告横幅,或者访问一个机构官网时被弹窗引导去了某个营销落地页。这时候十有八九是 D…

2026/10/9 16:02:09 阅读更多 →
436页机器学习算法课件高效阅读法:从通读到精读再到算法卡片

436页机器学习算法课件高效阅读法:从通读到精读再到算法卡片

简介:机器学习常用算法课件大全以436页的篇幅,由浅入深地系统梳理了机器学习入门与进阶的核心算法体系,适合正在学习机器学习基础、希望结合案例掌握算法原理的学生或开发者使用。内容覆盖K近邻、线性回归、逻辑回归、决策树、集成学习及聚类…

2026/10/9 16:02:08 阅读更多 →
鸿蒙 Flutter 下 dns_client 适配:DoH 安全解析实战指南

鸿蒙 Flutter 下 dns_client 适配:DoH 安全解析实战指南

1. 为什么要在鸿蒙上做 dns_client 的适配 先聊一个很多 Flutter 开发者都会遇到的场景:你在鸿蒙设备上跑起一个 Flutter 应用,功能一切正常,但部分网络请求总是莫名卡顿、加载缓慢,或者偶尔出现页面被插入广告、接口返回了完全不…

2026/10/9 16:02:08 阅读更多 →
普源示波器波形滞后原因与排查:触发、采集、探头补偿全解析

普源示波器波形滞后原因与排查:触发、采集、探头补偿全解析

1. 波形滞后不是示波器坏了,而是你没搞懂它的时间基准很多人第一次遇到普源示波器上波形"慢半拍"的情况,第一反应是设备出故障了。屏幕上的波形明明应该和信号源同步跳变,结果却总是延迟那么一截,或者触发点跟实际信号对…

2026/10/9 16:02:08 阅读更多 →
物联网四层架构全解析:从感知层到应用层的端到端实践指南

物联网四层架构全解析:从感知层到应用层的端到端实践指南

1. 物联网到底在解决什么问题1.1 从一个真实场景说起我最早接触物联网这个概念,是在一个做仓储管理的朋友那里。他当时遇到一个特别头疼的问题:仓库里几千个托盘,每天进出库全靠人工扫码登记,一到旺季就乱套,货找不到了…

2026/10/9 16:02:08 阅读更多 →
基于PCA9422与MK51的嵌入式系统电源管理方案设计

基于PCA9422与MK51的嵌入式系统电源管理方案设计

最近在调一块带外部电源管理芯片的板子,核心器件组合是 PCA9422 这颗 PMIC 和 MK51DN512CLQ10 这颗 MCU。MK51DN512CLQ10 是 Kinetis 家族里的 K5 系列,Cortex-M4F 内核,512KB Flash,100 pin LQFP 封装,资源对中高端工…

2026/10/9 16:01:07 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →