x2strategy は何をしますか?
あらゆる金融関連インプット → 戦略仕様 → 実行可能コード → バックテスト → 診断。
機能
| 機能 | 説明 | 詳細 |
|---|---|---|
| paper2spec | あらゆる文書(PDF/MD/DOCX/TXT)→ 構造化戦略仕様 | references/paper2spec.md |
| spec2code | 戦略仕様 → Backtraderコード → 検証 → バックテスト → 診断 | references/spec2code.md |
入力形式は拡張子から自動検出されます:
| 形式 | 拡張子 | 備考 |
|---|---|---|
| PDF(論文) | .pdf | PyMuPDF → モードA(直接)またはモードB(FAISS) |
| Markdown(ドラフト) | .md, .markdown | テキスト直接読み取り |
| DOCX(レポート) | .docx | python-docx(要 uv sync --extra docx) |
| プレーンテキスト | .txt | 直接読み取り |
対話の原則
あなたは実行者です。ユーザーは依頼者です。
- ツールは静かに実行し、結果と洞察は自然言語で提示してください。
- ユーザーが尋ねない限り、CLIコマンド(
uv run python scripts/...)を決して表示しないでください。 - 次のアクションを会話形式で提案してください:「2つ目の戦略も実装しましょうか?」
結果を報告する際は、何を見つけたかに焦点を当て、どのように実行したかには注目しないでください:
❌ 悪い例:「`uv run python scripts/analyze.py paper.pdf` を実行し、3つの戦略を取得しました。」
✅ 良い例:「この論文には3つの独立した戦略が含まれています:[1] 最小距離法、[2] ADF定常性、[3] Johansen共和分。どれを実装しましょうか?」
インタラクティブツールを積極的に使用してください。 プラットフォームがインタラクティブな質問ツール(VS Code Copilotの vscode_askQuestions、Claude Codeの AskUserQuestion、または同等のもの)を提供している場合は、ユーザー向けの選択すべてにそれらを使用してください。インタラクティブツールはクリック可能なオプションを提示するため、ユーザーに入力を求めるよりも速く、エラーが発生しにくくなります。
インタラクティブツールを適用する場面:
- 初回セットアップ時の選択(ワークスペースパス、APIプロバイダー、キー入力)
- 入力確認(続行 / 明確化追加 / 設定調整)
- レビューチェックポイントと実装承認
- 抽出または修復後の
needs_human_review解決 - 検索結果の選択(番号付きリストから論文を選択)
- ユーザーがオプションから選択するあらゆるシナリオ
インタラクティブツールが利用できない場合は、番号付きテキストメニューにフォールバックしてください。
進捗マーカープロトコル
ツールは静かに実行しますが、長いパイプラインは追跡可能にしてください。8ステップのワークフローを進める際、ステータス行には3つの構造化マーカーのいずれかを接頭辞として付け、ユーザー(および外部パーサー)が生のコマンド出力を読まなくてもフェーズの進捗を追跡できるようにします。マーカーは規律をもたらします。周囲の散文は自然言語のままです。
| マーカー | 発行タイミング | 形式 |
|---|---|---|
[PROGRESS] | ワークフローステップの開始または終了時 | [PROGRESS] <ステップ> — <1行のステータス> |
[ARTIFACT] | 具体的なファイルが書き込まれた時 | [ARTIFACT] <ワークスペース相対パス> — <説明> |
[ERROR] | ステップが失敗した、またはチェックに合格しなかった時 | [ERROR] <ステップ> — <失敗内容> — <次のアクション> |
ルール:
- 1行に1つのマーカーを行頭に配置し、その後は平易な言葉で記述します。
- すべての
[ARTIFACT]は、実際に書き込まれた具体的なワークスペース相対パスを指定する必要があります(これにより、後述の出力パス契約を満たします)。 [ERROR]の後には、次に何を行うかを必ず記述してください(1回再試行する、停止して報告する、ユーザーに尋ねる)— 単なる失敗報告ではいけません。- マーカーは自然言語での報告を補足するものであり、代替するものではありません。何を見つけたかを説明し続けてください。どのように実行したかではありません。CLIコマンドは決して表示しないでください。
例:
[PROGRESS] paper2spec/extract — content.jsonから戦略仕様を抽出中
[ARTIFACT] library/upsa/spec.json — 1戦略、4指標、3論理ステップ
[PROGRESS] HITLレビュー — 1つのneeds_human_review項目が未解決です。解決を依頼中
イテレーションと再試行の規律
生成と修復には上限を設ける必要があります。バックエンドのハードターンゲート(--max-turns)をエージェントの規律に変換します:
- 1回生成し、最大で1回のスモークテスト修復ラウンドを行います。 コードを書き、検証し、実行します。失敗した場合は、1回の対象を絞った修正ラウンドを適用し(references/spec2code.mdのトリアージフローを参照)、再実行します。
- その1回の修復ラウンド後も失敗する場合は、停止して報告します。
[ERROR]行を発行し、何が失敗したか、最も可能性の高い根本原因を要約し、ユーザーにどう進めるか尋ねます。インクリメンタルなパッチを続けてはいけません。 - 1つのランタイムエラーカテゴリに対して、最大3回の修正試行を行います。 同じエラークラスが続く場合、戦略ロジック自体に根本的に異なるアプローチが必要である可能性が高いため、それ以上調整するのではなく、その旨を伝えます。
- 決して静かにループさせてはいけません。各再試行は
[PROGRESS]または[ERROR]マーカーで可視化し、ユーザーがゲートの動作を確認できるようにします。
初回応答契約
paper2code、研究-to-コード、または「このスキルを使用する」リクエストの場合、最初の応答ですぐに実装を約束してはいけません。まず、可視化された入力を特定し、インタラクティブなダイアログを使用してセットアップ状況、入力ファイル、追加の指示/明確化、および意図されたワークフロースコープを確認します。その確認が完了してから作業を進めてください。
初回セットアップ
初回使用時は、3つのステップを実行します。ステップがすでに設定されている場合は、検出された値を報告し、ユーザーに確認または変更を求めます。抽出または実装の前に、常にタスクスコープを確認してください。すべての選択内容は .env(gitignore対象)に保存し、セッション間で安定させます。
ステップ1 — ワークスペースの場所
インタラクティブツールで選択肢を提示:
./library/(デフォルト、推奨)- カスタムパス
PAPER2SPEC_LIBRARY_PATH=/absolute/path を .env に書き込みます。
以前の分析を検出するために、ディレクトリ内の既存の metadata.json をスキャンします。
ステップ2 — LLM APIキー
環境変数 DEEPSEEK_API_KEY、OPENROUTER_API_KEY、OPENAI_API_KEY、または ANTHROPIC_API_KEY を確認します。
見つからない場合は、インタラクティブツールで以下を提示:
戦略抽出とコード生成にはLLM APIキーが必要です。推奨オプション:
1. DeepSeek(コストパフォーマンス最良、論文あたり約0.7人民元)→ https://platform.deepseek.com
2. OpenRouter(1つのキーで複数モデルにアクセス)→ https://openrouter.ai/keys
APIキーと、それがどのプロバイダーに属するかをお知らせください。
受信後、キーと対応するモデルを .env に書き込み、次を実行して確認します:
uv run python -c "from paper2spec.llm import chat; print(chat('Say OK'))"。
プロバイダーごとの .env 形式の例については、references/skill-internals.md を参照してください。
ステップ3 — Python環境
cd <skill-path>
uv sync --all-extras # 推奨:すべてをインストール
uv が利用できない場合:pip install -e ".[codegen,agent,dev]"。
スクリプトの実行には常に uv run を使用してください(正しいvenvを自動的にアクティブ化します)。
選択的なインストールオプションとuv以外の代替手段については、references/skill-internals.md を参照してください。
完了
設定後、例を用いて自然に確認します:
✅ セットアップ完了。次のようなタスクを直接依頼できます。
• 「この論文を分析して」 + PDFファイルを添付
• 「モメンタムトレーディングに関する論文を検索して」
• 「この論文に基づいて戦略を実装して」 + ファイルパスを提供
• 「Markdownで戦略ドラフトを作成しました。仕様を抽出してコードを生成してください」
• 「これら2つの論文の戦略の違いを比較してください」
やりたいことを教えてください。残りは私が処理します。
シングルワークフロー
すべてのタスクに1つのワークフローを使用します。競合するルーターを選択しないでください。
- セットアップ —
.env、ライブラリパス、必要に応じてAPIキー、Python環境、ユーザーが選択したスコープを確認します。 - 入力確認 — 論文/仕様/データ/指示ファイルまたは検索結果を特定し、明確化、制約、選択されたプランの好み、既知の落とし穴、参照ファイルを追加するかどうかを尋ねます。
- paper2spec: PDF/テキストをコンテンツに — 選択された文書を解析し、根拠のあるコンテンツアーティファクトにします。
- paper2spec: 抽出 — コンテンツとユーザー指示から候補となる戦略仕様/プランを抽出します。
- paper2spec: 修復/レビュー —
references/extraction_quality.mdを読み、高リスクの数式が存在する場合に関連するオペレーターの落とし穴を取得し、選択されたプラン/仕様のみを根拠のある証拠に基づいて修復します。 - HITLレビュー — 修復後、常に
needs_human_reviewを検査します。項目が存在する場合は、インタラクティブダイアログで提示し、回答されるか明示的に受け入れられるまで続行しません。項目がない場合でも、レビューで未解決項目が見つからなかったことを報告し、実装の承認を求めます。 - spec2code — HITL承認後、実装ターゲットを確認し、そのターゲットのコードを生成します。
- 検証/バックテスト/診断 — 生成されたコードを検証し、利用可能なチェック/バックテストを実行し、期待される出力または参照出力と比較し、不一致を要約して、次に何をするか尋ねます。
迂回禁止:抽出→修復→実装を静かにチェーンしてはいけません。ユーザー提供の論文、指示、データファイル、既存の仕様、参照出力は証拠であり、レビューやHITLをスキップする許可ではありません。
以前のCopilot、VS Code、またはエージェントのログが言及された場合、それらを使用する前に、参照されたパスが存在し、必要なファイルが含まれていることを確認してください。パスがない、空、または不完全な場合は、ログの要約に頼るのではなく、元の論文/指示/データから必要なアーティファクトを再生成してください。
出力パス
デフォルトの生成アーティファクトは PAPER2SPEC_LIBRARY_PATH/<slug>/ の下に配置されます。 はユーザーと確認した論文またはタスクのスラッグです。カスタム出力パスが要求された場合は、ファイルを書き込む前に確認します。
期待されるアーティファクトパス:
content.jsonおよびcontent.md(paper2specの解析結果)spec.jsonおよびspec.md(抽出と修復の結果)operator_pitfall_context.md(落とし穴取得が使用された場合)strategy.py、strategy_1.py、またはspec2codeからユーザーが確認した実装ファイル名data/(生成された戦略コードで使用されるデータ用)results/backtest_output.txt、results/metrics.json、results/diagnosis_report.md(検証/バックテスト/診断の結果)results/portfolio_vs_assets.csvおよびresults/portfolio_vs_assets.png:1つの画像で戦略ポートフォリオ価値を、使用されたすべての株式/ETF/資産の同一資本バイアンドホールド曲線と比較します。資産曲線は識別可能な色とシンボルラベル/凡例エントリを使用し、SPYとポートフォリオは太字にする必要があります(1つの画像で0%、0.01%、0.05%の手数料での同一パラメータポートフォリオ曲線を比較)results/key_pred/:戦略で使用される主要な観測可能因子ごとに1つのCSVと1つのPNG
ファイル生成後の各ステータス更新では、書き込まれた具体的なワークスペース相対パスを指定する必要があります。
Spec2Codeメトリクス
実行可能なすべての戦略について、spec2codeは少なくとも以下を計算して報告する必要があります:シャープレシオ、最大ドローダウン、総収益率、収益額/最終ポートフォリオ価値。戦略がブローカー接続戦略として実行できない場合は、その理由を報告し、確認された研究/バックテスト契約にとって意味のあるメトリクスを計算します。
Spec2Codeで生成されたコードは、すべてのネットワークデータをローカルにキャッシュし、ヘッドレスセーフな視覚的診断を保存し、使用されたすべての資産価格を一緒にプロットし、戦略アカウント価値を同一資本のバイアンドホールド曲線と比較し、トレーディング戦略には0% / 0.01% / 0.05%の手数料のエクイティカーブ比較を含め、3つの手数料ポートフォリオ曲線すべてがすべての資産バイアンドホールド曲線とともにプロットされた複合ポートフォリオ対資産チャートを含める必要があります。
米国株式戦略の場合、SPYを含め、資産およびポートフォリオ対資産プロットで市場ベースラインとして強調表示する必要があります。必要なデータキャッシュおよび可視化契約については、references/spec2code.md および references/data_sources.md を参照してください。
エージェントパイプラインフロー
1. セットアップ:環境、ライブラリパス、必要に応じてキー、タスクスコープを確認
2. 入力確認:論文/仕様/データ/指示/検索結果 + 明確化
3. paper2spec:PDF/テキスト/docをコンテンツアーティファクトに解析
4. paper2spec:候補仕様/プランを抽出
5. paper2spec:ターゲットプラン/仕様を選択し、extraction_quality + 一致した落とし穴で修復
6. HITL:needs_human_reviewを検査し、インタラクティブダイアログで解決
7. spec2code:出力契約を確認し、コードを生成、検証、チェック/バックテストを実行
8. 結果を診断し、次のアクションを尋ねる
コード生成パターンについて:references/spec2code.md Backtraderパターンについて:references/backtrader_patterns.md
内部ツールチェーン
エージェント専用。静かに実行し、結果は自然言語で提示します。
# 文書 → 仕様
uv run python scripts/analyze.py <file> -o library/<slug>/
# ステップバイステップのpaper2spec
uv run python scripts/parse.py <file> -o content.json
uv run python scripts/extract.py content.json -o spec.json
# 修復/レビューのための一致したオペレーター落とし穴コンテキスト
uv run python scripts/operator_pitfalls.py spec.json -o operator_pitfall_context.md
# 生成されたコードの検証
uv run python scripts/validate_strategy.py library/<slug>/strategy_1.py
# バックテストの実行
uv run python library/<slug>/strategy_1.py
# 論文の検索
uv run python scripts/search.py "<クエリ>" -n 5
すべてのフラグ、出力形式、ライブラリ管理について: references/skill-internals.md
設定
| 変数 | デフォルト | 目的 |
|---|---|---|
PAPER2SPEC_LIBRARY_PATH | ./library | 出力ルート |
PAPER2SPEC_MODEL | openai/gpt-4o-mini | デフォルトLLM(litellm対応) |
DEEPSEEK_API_KEY | — | DeepSeek(推奨) |
OPENROUTER_API_KEY | — | OpenRouter(マルチモデル) |
OPENAI_API_KEY | — | OpenAI直接 |
PAPER2SPEC_ARXIV_MIN_INTERVAL | 3.0 | arXivリクエスト間の秒数 |
PAPER2SPEC_SEARCH_MAX_RETRIES | 3 | HTTP 429/5xxでの再試行回数 |
litellm対応モデル はすべて動作します。
任意のスクリプトの --model フラグは PAPER2SPEC_MODEL をオーバーライドします。