← 返回开源列表

coreytrading

多智能体美股交易系统:领域智能体运行在可互换的模型运行时上,所有状态变更都由代码掌控

查看项目详解 →
Python pandas Claude Code Codex CLI exchange-calendars pytest
Coreychen4444/coreytrading License: MIT Language: Python

关于

这是我个人美股交易流程背后的软件。Claude 与 Codex 作为领域智能体,负责技术分析、风险和估值;Python 主控程序掌管数据接入、计算、限额、校验以及所有状态变更,并通过受控写入器应用经过审核的卡片更新。下单始终由人工完成。公开仓库包含代码、测试、任务提示词和合成示例数据;私有持仓、规则和运行时状态不在其中。它是软件与研究基础设施,不构成投资建议。

核心技术亮点

1

角色与模型解耦:agents/routing.json 把每个角色(技术、风险、估值)映射到 Claude Code 或 Codex CLI 配置,每次调用都显式指定模型和推理强度

2

工作进程只拿到冻结并哈希过的证据快照,返回结构化 JSON;它们无法访问工作区、调用券商接口、发送消息或下单

3

卡片更新先通过策略、新鲜度和版本检查,再由受控写入器执行,写入前保存前像备份和预备回执;结果不确定的写入按哈希对账,绝不盲目重试

4

共享调用预算(2 个并发、滚动一小时内 12 次),定时任务按纽交所(XNYS)交易日历放行:盘前简报、收盘后状态转换、关口阶梯、每周复盘

5

每次收盘后由代码渲染宏观视角:不调用模型,也没有交易权限

6

pytest 测试覆盖角色/提供方互换、契约边界、证据绑定、受控写入、恢复和公开脱敏

coreytrading

以领域 Agent、可替换模型运行器和可执行交易规则为基础的美股交易运营系统。Codex 与 Claude 协作研究,宿主控制器校验结果并提交通过复核的卡片更新,订单由人工执行。

English · Agent 运行手册 · 代码架构 · 定时任务 · 业务资料 · AI 搭建指南

所有模型共用的项目合同是 AGENTS.md(Codex 与 Claude Code ≥ 2.1.277 原生读取);CLAUDE.md 只是一行 @AGENTS.md 导入垫片,给旧版 Claude Code 运行时。

交易范围为美股与现有美股期权流程。跨资产宏观数据只用于环境观测与研究输入,不因此成为额外的交易市场。

架构

系统按领域划分职责。每个角色的方法、证据要求和输出权限,与它使用的模型分别定义。将某个角色从 Codex 换成 Claude,只需调整路由;角色契约和交易规则继续生效。

flowchart TD
    Trigger["定时任务 / 交互请求"] --> Jobs["宿主控制器:jobs 与 pipeline"]
    Sources["券商与市场缓存 / 可选情报 / 估值账本"] --> Inputs["冻结证据与领域视图"]
    Rules["结构、仓位与退出规则的代码真源"] --> Inputs
    Inputs --> Jobs
    Routes["角色与模型路由:Codex / Claude"] --> Jobs
    Jobs --> Workflow["技术 → 风控 → 有限追问"]
    Lens["宏观透镜(代码判读,零模型)"] --> Inputs
    Workflow --> Reports["研究报告、分歧与未知项"]
    ValTask["独立估值任务"] --> ValFlow["刷新与冻结 → 估值计算与研究"]
    ValFlow --> ValReport["独立估值报告"]
    Jobs --> Card["单卡技术提案"]
    Card --> Review["另一运行器独立复核"]
    Review --> Submit["政策、时效、版本与写入检查"]
    Rules --> Submit
    Submit --> Writer["受控卡片 writer"]
    Writer --> State["更新后的卡片与提交回执"]
    State --> Plan["机械入场与退出计划"]
    Reports --> Human["人工审阅与执行"]
    Plan --> Human

模型负责解释证据和跨领域协作,Python 负责取数、金额计算、运行额度、结果校验和状态写入。Worker 只接收冻结输入并返回结构化 JSON,没有工作区访问、券商调用、消息发送或下单权限。

默认 Agent 分工

Agent 运行器(运行时点) 独立复核运行器 职责
技术分析 Claude(每日唯一模型角色;同收盘同卡片版本复用 run) Codex 判读价格结构、gate 与 zone,提出单卡更新提案
风控/仓位管理 每日 = 代码渲染(quant/report/risk_receipt.py);周复盘 = Claude Codex 检查全组合敞口、购买力、退出约束和机械 sizing 收据
估值 Claude(独立日更) Codex 解读财务报表、精简 EPS 包、研究级目标和隐含预期

宏观不是模型角色:宏观透镜由代码每个收盘判读 —— 六盏风险灯(预告波动与回撤深度,不预告方向)、近 40 日最强驱动与市场读法、市场在交易什么、未来方向与情景 β,零模型调用、零授权效力;判别式 quant/core/macro_lens.py,发布器 quant/journal/macro_lens_log.py。其精简先验随每次冻结输入进入技术与估值视图。

agents/routing.json 是配置真源。领域角色、运行器、模型提供方和模型 ID 是四个概念:估值是角色,Codex CLI 是运行器,OpenAI 是模型提供方,某个具体 GPT 版本才是模型。路由 v2 通过 model_profiles 集中定义具体模型,各角色引用主用 profile 与独立复核 profile。

模型 profile 首选模型 次选模型 明确指定的 effort
Anthropic / Claude Code claude-fable-5-1 claude-opus-5 xhigh,即 extra high
OpenAI / Codex CLI gpt-6-astra gpt-5.6-sol high

主用、备用和复核调用都明确传入 model 与 effort,不继承桌面对话中选中的模型。回执分别保存请求参数和 CLI 元数据实际报告的模型 ID;未报告或报告多个模型时,如实记录,不用请求值代替确认结果。请求复核时才调用 reviewer;卡片提交是否需要独立批准由 autopaint.review 决定。

模型有依据地弃权时,系统保留弃权结果。当前生产配置关闭模型备用与独立复核:失败保留为失败,不转交其他模型。控制器保留可配置的故障接管与复核能力,供显式重新启用。明确的 session 额度错误会跳过本次运行中该运行器的其余模型。复核选择与实际研究运行器相反的一方;该方不可用时研究保留为 needs_review,不能提交。复核不批准不触发换模型重问。后续模型迭代按模型维护规则核验版本、完成验证后更新。

Agent 如何协作

  1. 捕获证据。 宿主读取既有状态与缓存,记录 owner、时间和内容 hash,冻结共享快照及各角色视图。捕获不等于刷新,缺失和失效信息会保留。
  2. 领域研究。 交易流程中技术角色分析自己的领域输入(宏观先验由宏观透镜代码提供);独立估值流程按宿主计算、估值研究的顺序执行。输出区分事实观察、假设、风险和未知项,引用绑定捕获时的原始证据。
  3. 组合复核。 风控读取自己的原始输入与本轮技术报告。风控视图覆盖全部受管持仓,包括期权自身退出规则与可用 Greeks;金额来自既有机械计算。
  4. 定向追问。 跨领域请求按接收角色合并,最多追加一轮,未解决的问题留在记录中。同一结论经另一模型转述,不增加独立证据。

当前配置允许单次 workflow 最多 2 个并行调用、8 次模型调用,不自动追问。宿主另设所有任务共享的上限:原生调用并发最多 2 个,滚动一小时内最多 12 次。备用同样消耗预算,并发排队有超时。这些额度约束本系统的工作量,不代表任一模型账户的剩余额度或费用。

execution_transport = desktop 时宿主不启动模型 CLI:数据包写入 var/agent-runs/desktop/,各运行器的 Desktop 会话按 tasks/desktop-research.md 领取、作答并提交;编排、冻结证据、受控提交与 applied 回执仍归宿主。每日循环只跑技术角色,风控收据由代码渲染,技术 + 风控工作流只在周复盘。

复核后的自动写卡

当前配置开启 autopaint.enabled 与 autopaint.apply,autopaint.review=false:技术提案通过宿主证据、revision 与机械政策检查后写入,不做第二模型复核。新研究记录绑定该复核政策,旧记录默认仍要求复核;回执标明模型复核「不需要」,而不是「已批准」。符合条件的缺卡、失效卡可进入自动更新流程。组合报告本身不写卡;每个目标通过独立单卡任务生成技术提案,是否做独立模型复核由宿主政策决定。

宿主检查原始证据、结果与政策绑定、有效期、参数白名单和目标卡当前版本,保存原卡备份及提交准备回执,再调用既有的卡片 writer。券商字段、lots、在途订单和绑定约束继续受到保护。

结果 含义
succeeded 模型研究结果通过契约校验,不证明已经写卡
needs_review 证据、复核或提交检查存在待处理问题
partial 任务已结束,仍有失败或待办事项留在记录中
applied 目标卡片更新具有已确认的提交回执

将 autopaint.apply 改为 false,自动写卡流程回到研究与预览。自动提交前会再次检查开关,包括已经启动但尚未提交的任务;关闭开关不撤销已经完成的写入。通过 submit --apply 明确选择单笔提案,是另一个人工提交入口,具体行为见运行手册。

如果写入结果不确定,系统用准备回执中的 before/after hash 核对当前卡片。恢复只更新收据,不盲目重试写卡。运行产物、卡片备份与健康事件共同保留调查所需的证据。

日常运行

任何能让编码 Agent 执行 prompt 的调度器(桌面任务运行器、配合 CLI Agent 的 cron)都可以触发六个交易任务与宏观透镜发布,Python 控制器独立于调度器选择各领域使用的运行器。

任务 领域工作
heartbeat 券商与状态同步、机械风控和退出告警、健康检查、非阻塞缺卡派发
overnight-briefing 刷新每日输入,运行技术角色(同收盘同卡片版本复用)并附代码渲染风控收据,贴宏观透镜几行,处理重画队列并生成入场计划
postclose-transition 先评估退出,再执行完整收盘后的机械转移,渲染转移达标收据,运行技术研究并附代码渲染风控收据,处理重画
gate-ladder-report 等待同交易日 postclose 完结后,输出机械 gate 阶梯表
macro-lens 实际收盘后 30 分钟,不等盘后处理:刷新跨资产日线,发布代码判读的宏观透镜(读数、账本、全文)并单独推送;当日日线没取到则不发布
chart-read 代码渲染两种可交易形态(抄底 / 趋势确认)已形成或即将形成的清单;零模型调用
weekly-portfolio-review 用既有绩效、技术证据与宏观透镜周回顾完成组合风控复盘,NAV 周变剔除外部现金流

独立的 valuation-daily 任务(tasks/claude/valuation-daily.md;Codex 运行器版 tasks/codex/valuation-daily.md)自行刷新数据并运行估值链(含未验证的研究级 12 个月目标),报告归档在 var/valuation-daily/。盘前与周复盘不运行估值角色。

盘前与盘后流程的关键顺序是:

刷新券商与市场输入
→ 按原卡评估退出
→ 执行机械 regime 转移
→ 领域研究与复核后的卡片更新
→ 刷新提醒线和入场授权组
→ 生成入场计划

同步重画阶段每轮至少处理五张卡,队列更长时按 ⌈N/2⌉ 取整以保证两轮排空,余下目标留在待办中。缺卡检测也可以后台派发,使用同一个单卡控制器与全局额度。

market_sessions.py 通过 XNYS 日历处理休市、半日市和夏令时。每份 prompt 先跑 quant/ops/agent_jobs.py due --kind <kind>;postclose、ladder、chart 分别在实际收盘后 10、20、35 分钟开放运行窗口,统一在收盘后 60 分钟截止。时间放行与上游任务完成是两项独立检查。固定版本的日历当前覆盖 2000–2028 年;数据不可用或超出支持范围时停止判断,不退回按星期几猜。

tasks/ 保存版本管理的提示词。live 副本、应用内注册和实际完成回执是三种不同证据;具体时刻与同步流程统一维护在 tasks/README.md。

交易规则与数据所有权

核心策略仍是技术面优先的趋势跟踪。Gate 标记结构状态转移,zone 描述状态内的参与区间,cap 是授权上限。这三个概念各有含义,由代码执行约束。

判定或数据 单一真源
价格结构、regime 与绑定止损 structure.py 与 regime_transition.py
Gate 预算、敞口与可执行仓位容量 sizing.py 与 book.py
入场计划与机械退出 entry_guard.py 与 exit_guard.py
券商数量、成交与在途订单 quant/sync/;Agent 不写券商真值
技术卡片提案 技术角色、独立复核及受控 writer
宏观与估值证据 信息层上下文,不能覆盖价格结构授权或退出规则
NAV 变动与外部现金流 nav_report.py 读取 cash_flow_sync.py 维护的现金流账本;出入金不是盈亏
策略研究与规则变更 策略 schema(私有规则是被忽略的副本)、研究脚手架 及适用的验证研究

风控 Agent 解读机械收据,不另造 sizing 公式。候选容量共享组合约束,不能相加成一批订单的预算。购买力、工具身份或证据未知时,继续报告未知。新闻与宏观采集属于可选、独立维护的情报工作流;其发布数据位于 trade/intelligence/(本仓只含 README 与合成示例),交易角色只读消费已有归档,缺失时优雅降级。

仓库结构

位置 内容
AGENTS.md 对所有模型生效的项目合同(Codex 与 Claude Code ≥ 2.1.277 原生读取);CLAUDE.md 只是一行 @AGENTS.md 导入垫片,给旧版 Claude Code 运行时
AI_BOOTSTRAP.md / AI_BOOTSTRAP_CN.md 编码 Agent 的 fresh clone 搭建指南
agents/ 领域方法、角色契约、路由和运行手册
quant/ 宿主控制器、数据同步、机械决策、估值和报告
tests/ 合成数据机械验证、契约、隔离和仓库检查
tasks/ 定时任务提示词真源与部署说明
trade/ AI 初始化合同:下表六个数据目录的 README 与合成 *.example.* schema;私有卡片、持仓、事件、缓存、情报数据与规则是被忽略的副本
var/ 被忽略的私有运行状态:组合锁、情报 claim 与投递去重、Agent 运行/额度/租约、独立估值运行
tmp/ 被忽略的临时输出与 heartbeat 冷却状态
.claude/ 专项规则、skills 与宿主集成

trade/ 的六个目录直接位于根下,路径由 quant/core/paths.py 统一定义:

目录 内容
trade/portfolio/ 当前持仓与候选、成交/NAV/现金流账本、评分、人工日志和派生观察
trade/market/ 行情、财报与原始市场输入;可重拉缓存和历史快照分别保留
trade/intelligence/ 可选的新闻来源与报告归档、宏观透镜读数 / 账本 / 全文
trade/valuation/ 人工估值输入、精简 EPS 包与发布记录
trade/strategy/ 交易规则与方法合同
trade/knowledge/ 知识资料与冻结只读的研报库

组合派生判断在 portfolio/observations/,共享写入锁在 var/portfolio/.state.lock。历史持仓 Git 读取与旧情报引用由代码兼容,已发布证据保留原文。宏观/事件量化区分原始证据、可知时点特征、结果标签与实验;当前没有预建空的研究子系统。

Python 依赖继续分层:ops 编排下层,共享契约与数学集中于 core,研究代码不进入实时依赖链。完整规则见 quant/README.md。私有状态和模型产物不作为可复用示例或公开发布材料。

开始使用

Python 版本与依赖 pin 以 pyproject.toml 为准:

python3 -m venv .venv && . .venv/bin/activate
python -m pip install -e '.[dev]'
python -m pytest -q

参考部署环境使用 macOS、已登录的 Claude Code 与 Codex CLI、用于券商与数据同步的 Moomoo OpenD,以及隔离的 Python 环境;当前 Codex runner 的隔离实现依赖 macOS。环境细节见 tools-environment.md,凭据只放在 .env 与本地凭据存储。完整搭建流程,包括从 trade/ 下的示例构建私有工作区,见 AI_BOOTSTRAP_CN.md。

在仓库根目录运行以下命令,可查看配置、输入元数据、调度资格与健康状态,不调用模型:

python3 quant/ops/agent_runtime.py roles
python3 quant/ops/agent_inputs.py --scope portfolio --json
python3 quant/ops/agent_jobs.py due --kind postclose
python3 quant/ops/agent_health.py
python3 quant/ops/agent_doctor.py --json

在交互会话中查看缓存简报,使用只读 pipeline:

python3 quant/ops/pipeline.py --mode briefing --read-only --json

该命令只渲染缓存,跳过同步、转移、通知、journal、Agent 调用和 entry 阶段,不会刷新数据。

要基于已有输入发起技术与风控组合研究:

python3 quant/ops/agent_jobs.py run --kind weekly --json

这条命令会调用模型并保存私有研究产物,不提交卡片更新。单卡研究、提交预览、明确写入和不确定结果恢复,参阅 Agent 运行手册。

验证与扩展

python -m pytest -q
python -m pytest --collect-only -q

测试覆盖角色与 provider 互换、权限契约、证据绑定、过期、并发、独立复核、受控写入和恢复;仓库检查还约束依赖方向、模块覆盖、文档路径有效性、trade/ 脚手架与公开脱敏。

默认测试跳过显式标记的真实数据与宿主状态审计,跳过不算通过;pytest 本身也不提供网络隔离。模型一致或测试通过,不证明研究质量和投资收益。

扩展方式:

  • 调整模型分工: 修改 routing.json,用 agent_runtime.py roles 校验。
  • 调整领域方法: 修改角色定义及证据契约,保持机械规则的代码真源。
  • 接入新 provider: 实现运行器和路由校验,验证同一套契约与隔离边界。
  • 增加角色或权限: 修改显式角色 schema、workflow 和测试;新增 Markdown 文件本身不会注册角色。
  • 修改交易机制: 遵循 AGENTS.md 与相应研究验证要求。

免责声明

本仓库是软件与研究基础设施,不是投资建议或投顾服务。交易可能造成重大甚至全部损失;历史或回测结果不保证未来表现,公开脚手架有意不包含任何收益声明或对任何标的的交易建议。把本框架接入真实资金的人,自行负责独立验证、当地法律与税务要求、券商条款以及每一个执行决定。

许可

MIT。本仓记录一套交易流程,研究与计划不构成投资建议或收益保证。