关于 alpaca-trading-backtest
alpaca-trading-backtest 是供交易者、开发者和研究人员使用的技能,可让 AI Agent 通过 Alpaca CLI 和本地工作区代码运行历史回测。它强调先确认策略规则、保存可复现的运行产物,并明确记录假设与注意事项。
主要功能
- 01编码前将策略整理为明确规则
- 02通过 Alpaca CLI 获取历史数据
- 03生成针对单次运行的本地脚本
- 04保存可复现的数据与结果产物
- 05报告指标、假设和注意事项
适用场景
- 01在历史日期范围内测试明确策略
- 02将模拟结果与基准进行比较
- 03记录变更并重新运行策略变体
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alpacahq/ alpaca-skills --skill alpaca-trading-backtest安装后在 Claude Code 中输入/alpaca-trading-backtest确认已加载。
附带文件reference.md
详细介绍
交易 API 回测
当你希望 AI Agent 使用 Alpaca CLI 和本地工作区代码运行特定的历史回测时,请使用此技能。此版本针对单次运行进行了优化:你的 Agent 会为已确认的策略编写最少且易读的代码,保存准确的产物,并向你报告结果。
此技能面向通过 AI Agent 调用它的你。你指的是要求 Agent 运行回测的交易者、开发者、研究人员或操作人员。你的 Agent 应直接与你沟通,清楚地重述假设,并明确展示每项解读选择。
strategy idea -> formalized rules -> confirmed assumptions -> CLI data fetch -> local script -> artifacts -> report
这并不意味着策略在实盘市场中一定有效。这是一套可复现的研究工作流。
必要披露
每份报告、notes.md、report.md、笔记本、仪表板或导出结果都应包含:
重要披露
此回测是历史假设模拟,不代表实际交易表现。回测结果不保证未来表现。结果取决于市场数据质量、数据源选择、公司行动处理、费用、滑点、流动性、税费、执行假设和实现细节。此材料仅用于研究和教育目的,不构成投资建议、推荐、要约,也不构成买卖证券、期权、加密货币或任何其他金融产品的招揽。所有投资均涉及风险,且可能贬值。请查看 Alpaca 的披露和协议:alpaca.markets/disclosures。
如果工作流中涉及模拟交易,请添加:
模拟交易是在模拟环境中进行的,不涉及真实资金或实际证券交易。模拟结果可能与实盘交易不同,原因包括成交假设、市场影响、流动性、延迟、数据差异、订单处理、费用和其他市场状况。
当回测对 Alpaca 证券交易活动费用进行建模时,notes.md、summary.json 和 report.md 应链接到 Alpaca Brokerage Fee Schedule PDF:
https://files.alpaca.markets/disclosures/library/BrokFeeSched.pdf
记录 PDF 修订日期、提取时间戳、建模的费用类别,以及有意排除的任何费用项目。
CLI 先决条件
Alpaca CLI
你的 Agent 应使用 Alpaca CLI 访问市场数据。
检查是否已安装:
alpaca version
需要时使用 Go 安装:
go install github.com/alpacahq/cli/cmd/alpaca@latest
在 macOS 或 Linux 上使用 Homebrew:
brew install alpacahq/tap/cli
确保二进制文件目录位于 PATH 中;Go 安装通常使用 ~/go/bin。
本地执行权限
Alpaca CLI 命令应在你的本地工作区中运行,以便访问 Alpaca 配置文件、环境变量、网络连接和已保存的产物。一些 Agent 运行时会将其表示为:
required_permissions: ["all"]
在你的 Agent 环境中使用等效的权限模型,以便 CLI 能访问本地身份验证和配置,并写入运行产物。
连接和身份验证检查
运行任何回测前,请验证 CLI 和凭据:
alpaca doctor
如果身份验证失败,你的 Agent 应停止运行,并向你显示可用的登录或帮助命令:
alpaca profile login --help
交互式模拟账户设置:
alpaca profile login
API 密钥设置:
alpaca profile login --api-key
自动化场景优先使用环境变量,因为这样无需将密钥写入生成的代码:
export ALPACA_API_KEY=PK...
export ALPACA_SECRET_KEY=...
export ALPACA_QUIET=1
你的 Agent 绝不能打印你的密钥、将其提交到文件中、将其包含在报告里,或以会暴露密钥的方式将其传入命令,导致其出现在 shell 历史记录中。
机器可读输出
对于输出将由代码解析的命令,请使用 --quiet:
alpaca account get --quiet
alpaca data bars --symbol SPY --start 2024-01-01 --end 2024-12-31 --timeframe 1Day --quiet
使用已安装 CLI 的帮助信息和架构作为标志及响应字段的准确信息来源:
alpaca --help-all
alpaca data bars --help
alpaca data bars --schema
alpaca data quotes --schema
由于 CLI 根据 API 规范生成且可能发生变化,你的 Agent 应优先采用当前的 --help、--schema 和 alpaca doctor 输出,而不是过时示例。
必需工作流
你的 Agent 应遵循以下工作流:
- 收集必需输入:开始日期、结束日期、策略概念或策略文件。
- 收集或推断其余信息:资产类别、标的或范围、时间周期、初始现金、仓位规模、数据源、复权模式、执行假设、基准。
- 逐项处理运行注意事项:订单模拟、指标、股息、拆股、费用、滑点、价差、市场时段、日历处理和验证。
- 将你的自由形式想法转换为精确的数学规则。
- 在编写代码前,向你展示形式化后的解释,除非你的请求已经足够精确地用数学表述。
- 检查工作区中可复用的数据、先前运行记录和现有工具。
- 创建一个独立的运行文件夹。
- 编写
notes.md、strategy_spec.json、config.json和一个可读的、针对本次运行的脚本。 - 通过 Alpaca CLI 获取历史数据,保存 CLI 原始输出,筛选所选市场时段内的数据,并计算数据指纹。
- 运行本地模拟。
- 写入产物。
- 返回 Teaching Five、首笔和末笔交易、假设、注意事项、数据指纹和产物路径。
工作区感知
在生成新代码或获取数据之前,你的 Agent 应检查工作区。
数据复用
查找符合以下条件的先前原始数据文件或缓存的标准化数据:
symbol
asset class
feed
adjustment mode
timeframe
start/end range
calendar filter
regular-hours or extended-hours setting
只有在数据指纹匹配时才复用数据。如果指纹不同,你的 Agent 应将这些运行视为使用了不同的输入数据。
运行沿袭
如果本次运行是先前运行的变体,notes.md 应说明变更内容:
changed RSI threshold from 30/70 to 25/75
changed fill model from next_open bar proxy to quote-aware fill
changed slippage from 5 bps to 10 bps
extended date range from 2020-2024 to 2018-2025
现有代码
如果工作区中已有符合策略要求的回测引擎或共享工具,你的 Agent 可以复用。否则,默认在运行文件夹中创建一个易读的 run.py。
运行文件夹和产物规范
此技能中的产物路径使用 raw/ 和 normalized/ 作为规范名称。
每次运行都应创建类似以下结构的文件夹:
runs/YYYY-MM-DD_symbol_strategy_timeframe/
notes.md
strategy_spec.json
config.json
run.py
requirements.txt or pyproject.toml when needed
raw/
bars_SYMBOL.json
quotes_SYMBOL.json
trades_SYMBOL.json
calendar.json
corporate_actions.json
normalized/
bars_SYMBOL.csv
quotes_SYMBOL.csv
summary.json
report.md
trades.csv
round_trips.csv
equity.csv
benchmark_equity.csv
data_fingerprint.json
warnings.json
fee_source.json
notes.md
notes.md 应包含你的原始请求、已确认的策略解释、每项推断或设为默认值的假设、指标定义、成交模型、费用模型、数据源和复权模式、股息和拆股处理、基准定义、日历和市场时段处理、警告和注意事项,以及 Alpaca 披露信息和费用表链接。
其他产物
请参阅 reference.md,了解 summary.json、strategy_spec.json、data_fingerprint.json 和 fee_source.json 的架构。
代码生成规则
对于针对单次运行的 CLI 回测,你的 Agent 应生成脚本,而不是可复用的框架。默认使用单文件 run.py。
代码应易于阅读:
fill_price = bar_open * (1 + friction_pct)
而不要使用难以审计产物的压缩表达式。
生成的代码应:
- 从运行文件夹读取原始文件或标准化文件;
- 精确实现已确认的策略;
- 精确实现所选指标定义(参见 指标公式);
- 将信号时间与成交时间分开处理;
- 根据已确认的假设计算费用、滑点、价差和结算;
- 生成所有必需的产物;
- 包含确定性排序和时区处理;
- 除非明确记录,否则在获取数据后避免隐藏的网络调用。
默认使用 Python 3。如果可用,优先使用标准库以及 pandas/numpy。只有在能显著提升正确性或可读性时才添加依赖。
策略转换
你的 Agent 应在生成代码前将你的想法形式化。
每条规则都应明确:数据字段、触发条件、上下界是否包含端点、指标变体和参数、预热行为、仓位规模和舍入方式、现金处理、订单类型、成交模型和基准。
确认示例:
I interpreted your strategy as:
- Symbol: SPY
- Timeframe: 1Day
- Data: Alpaca CLI bars, feed=sip, adjustment=split
- Indicator: SMA(50) and SMA(200), simple arithmetic mean of completed daily closes
- Entry: fast SMA crosses above slow SMA
- Exit: fast SMA crosses below slow SMA
- Signal timing: completed bar close
- Fill timing: next trading day's open
- Fill model: next_open bar proxy with 5 bps slippage unless quotes are available
- Sizing: invest 100% of available cash, fractional shares allowed when supported
- Benchmark: SPY buy-and-hold with same assumptions
确认后,代码应与已确认的解释一致。
成交模型
在确认信息和 notes.md 中使用这些模型名称。实现细节见 Fill model rules。
next_open(默认):在 T 日 K 线收盘时发出信号;在 T+1 日开盘时成交,或在 T+1 日开盘时间戳对应的报价上成交。time_based:在确认的某个时刻成交;有报价时使用买入价/卖出价。same_bar:仅在明确请求时使用;在notes.md和报告中说明前视风险。- 限价单和止损单:适用 OHLC K 线的成交资格规则;当止损价和目标价在同一根 K 线上都被触及时,采用保守的盘中冲突处理策略。
报告格式
report.md 应以 Performance vs Benchmarks 开篇:
| | Total Return | Ann. Return | Max Drawdown | Sharpe | Final Equity |
|---|---:|---:|---:|---:|---:|
| **Strategy** | ...% | ...% | ...% | ... | $... |
| Benchmark | ...% | ...% | ...% | ... | $... |
表格之后,应包含策略配置、标的/时间周期/数据源/复权方式、成交模型和摩擦成本、首笔和末笔交易、详细指标、基准说明、假设、数据指纹、注意事项,以及披露部分。
指标定义见 reference.md。
聊天回复标准
先给出 Teaching Five:
- 相对于基准的总回报;
- 最大回撤;
- 交易次数;
- 胜率;
- 相对于基准的夏普比率。
然后包括:年化回报、盈利因子、已支付费用、首笔交易、末笔交易、所作假设、数据指纹摘要、产物路径,以及最重要的注意事项。
如果没有发生交易,应直接说明,并解释原因是预热期、没有信号、现金不足、数据缺失,还是日历筛选。
运行注意事项清单
运行前,Agent 应逐项确定:
- 订单模拟和成交时机;
- 是否使用感知报价的成交,还是 K 线代理成交;
- 股息处理;
- 拆股和反向拆股处理;
- 执行摩擦成本;
- 从 PDF 得出的交易活动费用;
- 市场交易时段及是否纳入盘前盘后时段;
- 基于日历的决策;
- 基准选择;
- 前视偏差;
- 幸存者偏差;
- 参数调优的样本外或滚动验证;
- 多次尝试不同变体带来的过拟合风险。
对于订单模拟、股息、拆股、费用、日历和基准,如你未指定,应在 notes.md 中记录所作选择。
安全与质量防护要求
Agent 必须避免:
- 在信号生成中使用未来数据;
- 在没有记录
same_bar模型并发出警告的情况下,使用同一根 K 线做出决策并成交; - 隐瞒执行假设;
- 将复权 K 线与单独的拆股调整混用;
- 假装含糊的规则已得到完整说明;
- 运行后丢弃生成的代码;
- 除非你提出要求,否则纳入盘前盘后时段的 K 线;
- 悄悄替换指标变体;
- 将开盘价、收盘价、最高价、最低价、VWAP 和报价推导出的价格视为可互换的成交代理价格;
- 报告标注为日夏普比率,却使用每根 K 线的回报来计算;
- 在要求使用样本标准差(N-1)计算夏普比率时,使用总体标准差;
- 将实盘订单作为历史回测的一部分提交;
- 声称支持不受支持的产品——期权需要明确选择合约并制定成交逻辑;
- 绕过 Alpaca CLI,改用直接 HTTP 调用;
- 在没有本地身份验证和文件系统访问权限的沙盒中运行 Alpaca CLI 命令;
- 实现偏离 Fill model rules 的成交逻辑,却不在
notes.md中记录偏差; - 对信号触发条件中的
close、high和low混用; - 悄悄在交叉逻辑和阈值信号逻辑之间自行选择;
- 在单文件脚本足以满足需求时生成多模块引擎。
可选的模拟盘前向验证交接
历史回测完成后,如果你提出要求,Agent 可以准备模拟盘前向验证套件:
paper_config.json
strategy_runtime.py
risk_limits.json
alpaca_order_adapter.py
reconciliation_plan.md
这与历史回测相互独立。该套件应使用明确的风险限额、供自动化使用的客户端订单 ID,并核对预期与实际模拟盘成交情况。
故障排除
command not found: alpaca
Check PATH and Go install location, commonly ~/go/bin.
alpaca doctor reports auth failure
Re-run alpaca profile login or set ALPACA_API_KEY and ALPACA_SECRET_KEY.
CLI output includes non-data text
Use --quiet or set ALPACA_QUIET=1.
Parsed fields changed
Run <command> --schema and update the parser for the current CLI response.
Rate limited
Respect Retry-After, reduce request frequency, and use cached data where fingerprints match.
Pagination missing data
Check next_page_token and fetch all pages.
相关参考
实用命令:
alpaca version
alpaca update --check --quiet
alpaca doctor
alpaca --help-all
alpaca data bars --help
alpaca data bars --schema
alpaca data quotes --schema
alpaca calendar --help
披露链接:
https://alpaca.markets/disclosures
https://files.alpaca.markets/disclosures/library/BrokFeeSched.pdf
CLI 数据采集、指标公式、费用模型、指标、基准和 JSON 架构:reference.md。