mcpField
T
trader-backtest

trader-backtest

github.com/ruvnet其他80.0k745 次安装今天更新
代码仓库

关于 trader-backtest

trader-backtest 是使用 neural-trader 执行历史策略回测并保存结果的技能,面向交易策略验证流程。它可对回测产物进行 Ed25519 签名,缺少签名密钥时会明确以未签名模式存储。

主要功能

  1. 01运行历史策略回测
  2. 02收集回测表现指标
  3. 03按策略参数去重旧结果
  4. 04Ed25519 签名回测产物
  5. 05将结果保存至 trading-backtests

适用场景

  1. 01比较策略在历史数据上的表现
  2. 02为回测结果提供篡改证据
  3. 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 模式)。

步骤:

  1. 确保 neural-trader 已可用: npm ls neural-trader 2>/dev/null || npm install --ignore-scripts neural-trader
  2. 检查是否有已保存的策略配置: 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 })
  3. 通过 neural-trader CLI 运行回测:
    npx neural-trader --backtest --strategy <name> --symbol <TICKER> --period <range> --walk-forward
    
    对于多指标策略:
    npx neural-trader --backtest --strategy multi-indicator --position-sizing kelly --symbol SPY --period 2020-2024
    
  4. 从输出中提取性能指标:总回报、年化回报、Sharpe 比率、Sortino 比率、最大回撤、胜率、利润因子、交易次数。
  5. 在存储新的回测前,去重同一 (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 的结果是确定的。)
  6. 对制品签名(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()。
    • 解析见证签名密钥。该技能按以下顺序读取密钥路径;第一个成功解析的路径优先:
      1. RUFLO_WITNESS_KEY_PATH 环境变量 — 指向包含 { "privateKey": "<hex>" } 的 JSON 文件。
      2. 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." — 并以未签名状态存储正文。绝不要静默回退。
  7. 将(可能已签名的)制品存储到规范的 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)。
  8. 如果 Sharpe > 1.5,将其存储为成功模式: mcp__plugin_ruflo-core_ruflo__agentdb_pattern-store({ pattern: "profitable-STRATEGY_TYPE", data: "PARAMS_AND_RESULTS" })
  9. 根据结果训练 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