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. 04バックテスト成果物へのEd25519署名
  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 署名を付与します。これにより、ペーパーからライブへの昇格ゲートに暗号学的な改ざん検知機能を追加します(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. 出力からパフォーマンス指標を取得します:総リターン、年率リターン、シャープレシオ、ソルティノレシオ、最大ドローダウン、勝率、プロフィットファクター、取引数。
  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)は、アーティファクトをライブに昇格する前に、必ず verifyBacktestArtifact(artifact, trustedPublicKey) を呼び出す必要があります。
  8. シャープレシオが 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 key は 32 バイトの Ed25519 秘密鍵です。RUFLO_WITNESS_KEY_PATH で指定された JSON ファイルに { "privateKey": "<64-hex-chars>" } として保存します。リポジトリには絶対に含めないでください。ローカル開発では、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 に書き込みます。
  • 本番環境へのデプロイでは、対応する公開鍵をプロジェクト設定に固定し、verifyBacktestArtifact(...) に trustedPublicKey として渡します。アーティファクト自体の witnessPublicKey フィールドは絶対に信頼しないでください(CWE-347 / #1922)。
  • 鍵のローテーション:既存のバックテストエントリーを新しい鍵で再署名するか、ローテーション前のアーティファクトを昇格対象外として明示的にマークします。ADR-103 と同じパターンです。

コメント