trader-backtest について
trader-backtestは、neural-traderで過去の戦略を検証し、結果を保存するスキルです。回測成果物へのEd25519署名に対応し、署名鍵がない場合は未署名で保存することを明示します。
主な機能
- 01過去データでの戦略バックテスト
- 02バックテスト指標の取得
- 03戦略パラメーターによる過去結果の重複排除
- 04バックテスト成果物へのEd25519署名
- 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 署名を付与します。これにより、ペーパーからライブへの昇格ゲートに暗号学的な改ざん検知機能を追加します(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 - 出力からパフォーマンス指標を取得します:総リターン、年率リターン、シャープレシオ、ソルティノレシオ、最大ドローダウン、勝率、プロフィットファクター、取引数。
- 新しいバックテストを保存する前に、同じ
(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)は、アーティファクトをライブに昇格する前に、必ずverifyBacktestArtifact(artifact, trustedPublicKey)を呼び出す必要があります。 - シャープレシオが 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 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 と同じパターンです。
コメント
Markdown 対応