关于 trader-backtest
trader-backtest 是使用 neural-trader 执行历史策略回测并保存结果的技能,面向交易策略验证流程。它可对回测产物进行 Ed25519 签名,缺少签名密钥时会明确以未签名模式存储。
主要功能
- 01运行历史策略回测
- 02收集回测表现指标
- 03按策略参数去重旧结果
- 04Ed25519 签名回测产物
- 05将结果保存至 trading-backtests
适用场景
- 01比较策略在历史数据上的表现
- 02为回测结果提供篡改证据
- 03保存并检索交易策略回测记录
MCP 相关
通过 Ruflo MCP 工具检索策略配置、查找和删除旧回测记录,并将新产物存入 trading-backtests。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ruvnet/ ruflo --skill trader-backtest安装后在 Claude Code 中输入/trader-backtest确认已加载。
详细介绍
使用 neural-trader Rust/NAPI 引擎运行历史回测,然后对结果进行 Ed25519 签名,为 paper→live 晋级门禁提供具有密码学防篡改能力的证据(ADR-126 Phase 4 + CWE-347 模式)。
步骤:
- 确保 neural-trader 已可用:
npm ls neural-trader 2>/dev/null || npm install --ignore-scripts neural-trader - 检查是否有已保存的策略配置:
mcp__plugin_ruflo-core_ruflo__memory_retrieve({ key: "strategy-STRATEGY_NAME", namespace: "trading-strategies" })如果未找到,列出可用项:mcp__plugin_ruflo-core_ruflo__memory_search({ query: "strategy", namespace: "trading-strategies", limit: 10 }) - 通过 neural-trader CLI 运行回测:
对于多指标策略:npx neural-trader --backtest --strategy <name> --symbol <TICKER> --period <range> --walk-forwardnpx neural-trader --backtest --strategy multi-indicator --position-sizing kelly --symbol SPY --period 2020-2024 - 从输出中提取性能指标:总回报、年化回报、Sharpe 比率、Sortino 比率、最大回撤、胜率、利润因子、交易次数。
- 在存储新的回测前,去重同一
(strategyId, paramsHash)的历史回测(ADR-125 生命周期 / ADR-126 Phase 2 —keep-newest语义):- 搜索:
mcp__plugin_ruflo-core_ruflo__memory_search({ query: "backtest STRATEGY paramsHash:PARAMS_HASH", namespace: "trading-backtests", limit: 10 }) - 对于每个键匹配
backtest-STRATEGY-*且存储的paramsHash等于当前运行哈希的结果,删除它:mcp__plugin_ruflo-core_ruflo__memory_delete({ key: "OLD_KEY", namespace: "trading-backtests" }) - (注意:即使不执行此主动步骤,
@claude-flow/[email protected]中引入的MemoryConsolidator.dedup('keep-newest')后台任务也会每 6 小时运行一次,最终完成收敛。立即执行此步骤可确保重新运行后memory_search的结果是确定的。)
- 搜索:
- 对制品签名(ADR-126 Phase 4):
- 构建
SignedBacktestArtifact正文 —{ strategyId, paramsHash, dataRange: {from,to}, metrics, runsHash, generatedAt }— 其中paramsHash = sha256(canonical params JSON)、runsHash = sha256(canonical runs array JSON),且generatedAt = new Date().toISOString()。 - 解析见证签名密钥。该技能按以下顺序读取密钥路径;第一个成功解析的路径优先:
RUFLO_WITNESS_KEY_PATH环境变量 — 指向包含{ "privateKey": "<hex>" }的 JSON 文件。verification/witness-key.json(若存在,则使用 ADR-103 默认路径)。
- 如果成功解析密钥:调用
plugins/ruflo-neural-trader/src/signed-artifact.mjs中的signBacktestArtifact(body, privateKeyHex)。返回值是一个SignedBacktestArtifact,其中已填充schema、witnessPublicKey: "ed25519:<hex>"和witnessSignature: "<hex>"。 - 如果两个路径都无法解析:记录醒目警告 —
"[WARN] ruflo-neural-trader: no witness signing key found (RUFLO_WITNESS_KEY_PATH unset, verification/witness-key.json missing) — storing backtest artifact in UNSIGNED degraded mode. paper→live promotion will be refused by trader-cloud-backtest until a signed artifact replaces this one."— 并以未签名状态存储正文。绝不要静默回退。
- 构建
- 将(可能已签名的)制品存储到规范的
trading-backtests命名空间:mcp__plugin_ruflo-core_ruflo__memory_store({ key: "backtest-STRATEGY-TIMESTAMP", value: JSON.stringify(signedArtifact), namespace: "trading-backtests" })已签名时,存储值包含witnessSignature+witnessPublicKey;下游使用方(trader-cloud-backtest)在将任何制品晋级到 live 之前,必须调用verifyBacktestArtifact(artifact, trustedPublicKey)。 - 如果 Sharpe > 1.5,将其存储为成功模式:
mcp__plugin_ruflo-core_ruflo__agentdb_pattern-store({ pattern: "profitable-STRATEGY_TYPE", data: "PARAMS_AND_RESULTS" }) - 根据结果训练 SONA:
mcp__plugin_ruflo-core_ruflo__neural_train({ patternType: "trading-strategy", epochs: 10 })
密钥来源与轮换(ADR-103)
- Witness 密钥是一个 32 字节的 Ed25519 私钥,以
{ "privateKey": "<64-hex-chars>" }的形式存储在由RUFLO_WITNESS_KEY_PATH指定的 JSON 文件中。请勿将其存入代码仓库。本地开发时,使用node -e "import('@noble/ed25519').then(async ed=>{const sk=crypto.getRandomValues(new Uint8Array(32));console.log(Buffer.from(sk).toString('hex'))})"生成一次,并将其写入~/.ruflo/witness-key.json。 - 生产环境部署时,应在项目配置中固定对应的公钥,并将其作为
trustedPublicKey传递给verifyBacktestArtifact(...)——切勿信任工件自身的witnessPublicKey字段(CWE-347 / #1922)。 - 密钥轮换:使用新密钥重新签署现有回测条目,或明确将轮换前的工件标记为不可晋级。采用与 ADR-103 相同的模式。
评论
支持 Markdown