mcpField
S
StockSharp Odysseus

StockSharp Odysseus

ローカル
github.com/StockSharp金融データ03 週間前に更新

StockSharp Odysseus について

StockSharp Odysseusは、定量分析向けのローカルMCPサーバーで、形式化した仮説をC#戦略に変換してバックテストします。市場データと未公開の過去期間に対する一度限りの測定を管理し、結果を示しますが、戦略の評価は行いません。

主な機能

  1. 01市場履歴データの取り込みと分析
  2. 02仮説からC#戦略への変換
  3. 03戦略のコンパイルとバックテスト
  4. 04パラメーター探索とウォークフォワード実行
  5. 05未公開データでの一度限りの測定
  6. 06実行結果と研究ファイルの記録

活用シーン

  1. 01取引仮説を実行可能な戦略に変換
  2. 02バックテストでコストと成績を比較
  3. 03複数の過去期間で戦略を検証
  4. 04研究時に参照できないデータで結果を測定

MCP 対応

ローカルMCPサーバーを通じて、プロジェクト、データ、仮説、候補戦略、バックテストの研究ツールをAIエージェントに公開します。コマンドラインツールとは別に実行できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetStockSharp.Odysseus.Mcp1.0.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Odysseus

MCP on NuGet CLI on NuGet

あらゆる AI エージェントをクオンツリサーチャーに変え、結果に意味を持たせるための規律を守らせる MCP サーバーです。

C# の名前空間は StockSharp.Odysseus をルートとしています。MCP サーバーは名前として StockSharp.Odysseus、表示タイトルとして StockSharp Odysseus を報告します。以下のクライアント設定では odysseus を使用します。

MCP Registry への公開および Claude Desktop 拡張機能については、MCP の配布をご覧ください。

ご自身のエージェントのそばでローカル実行します。市場の実データをダウンロードして、すべてのプロジェクトが共有する 1 つの StockSharp ストレージに保存し、実際に格納されているデータを測定し、形式化された仮説を実際の StockSharp Strategy クラスに変換してコンパイルし、コストを含めてバックテストし、パラメーターを探索して、すべての実行結果を報告します。

測定はします。判断はしません。 スコアも、しきい値も、採用か却下かの判定もありません。ドローダウンに耐えられるか、リターンに価値があるかは、何を調査しているかによって異なります。それを判断するのはあなたであり、サーバーではありません。


MCP サーバーを使う理由

エージェントこそがリサーチャーであり、すでに存在しているからです。

チャットウィンドウ付きのバックテスト製品には、モデル、会話機能、インターフェース、そして優れた戦略とは何かについての見解を用意する必要があります。この製品にはそのどれもありません。推論はあなたのエージェントに任せ、この製品はエージェント単独では苦手な部分を担います。結果によってデータがひそかに変化しない実データ、仮説を毎回同じコードに変換するトランスレーター、スプレッドをコストとして計上するエミュレーター、そして最後まで参照を許されない履歴データの一部です。

最後の要素こそが重要です。収益性の高い戦略を探すようエージェントに頼めば、エージェントは戦略を見つけます。発見と探索を分ける唯一のものは、探索からアクセスできなかったデータです。


できること

create_project
  → import_history          real bars, into the shared storage
  → analyze_market          what the instrument does, before you propose anything for it
  → propose_spec            the hypothesis, as a formal document
  → build_candidate         translated to C#, compiled, hashed
  → evaluate_candidate      six fixed runs, reported in full
  → measure_on_closed_data  once, against data nobody was allowed to see
  → complete_strategy       you decide; the server keeps the code and every number behind it

合計 48 個のツールがあります。プロジェクト、コネクター、データ、銘柄の検索、仮説、候補、および同じ候補が 2 回同じ答えを返すかの検証、バックテスト、評価、シード付き遺伝的探索とそのウォークフォワード検証、クローズドデータの測定、ブローカーのペーパーアカウントを使ったペーパートレード、完了した作業の記録、そしてオペレーターが有効にした場合に限り、サーバーが動作するマシンへの StockSharp 製品のインストールに対応しています。

analyze_market はプロジェクトのデータセットを測定します。銘柄の値動きの大きさ、値動きが継続するか反転するか、そして戦略が取引するであろうイベントの後に何が起きたかを調べます。何かを提案する前に読んでください。ブレイクアウトが起きてもその後に何も起こらない銘柄に対するブレイクアウト仮説は、反証するために候補の世代を 1 つ消費しますが、これらの数値はそのことを事前に示します。

データの規律

バーは、すべてのプロジェクトで共有する StockSharp のマーケットデータストレージに保存されます。専用フォルダーは ODYSSEUS_MARKET_DATA(デフォルトでは ./market-data)です。プロジェクトがバーをコピーすることはありません。データセットはシンボルのリスト、ローソク足の長さ、期間で構成され、実行時には共有ストレージからその期間のデータを読み取ります。実行記録には読み取った内容、つまり銘柄、ローソク足の長さ、開始日、終了日が記録されるため、同じ期間を再度インポートすると、その期間を対象にすでに行われたすべての実行が見つかります。

データセットは時間で3つに分割されます。最初の60%は仮説の構築に、次の20%はその測定に使い、最後の20%は未使用のまま閉じておきます。describe_split で各部分の範囲を確認できます。最後の部分を未使用に保つ仕組みは、そのバーを渡すツールがなく、測定が一度だけ行われることです。プロジェクトごとに一度ではなく、プロジェクトのそばにある台帳に記録された履歴の区間ごとに一度です。2つ目のプロジェクトを開始して同じ日付をインポートしても、その結果が未確認のものになるわけではないためです。台帳は測定の確認と記録を1つの手順で行うので、同時に測定を求める2つのプロジェクトが両方とも実行できてしまうことはありません。

測定の内容

実行は常に同じ6つです。開発用の期間、検証用の期間、コストをさらに50%高くした場合の検証用期間、そして開発用の期間を連続する3つの区間に分け、同じ数値を使って実行します。利益、ドローダウン、取引数、勝率、エクスポージャー、結果のうち単一の取引に依存する割合、各区間の結果のばらつき、コスト増加後に維持された結果を確認します。結論は示しません。その判断はあなたが行います。

3つの区間で、結果が履歴全体にわたって得られたものか、ある1つの区間で生じたものかを確認します。区間ごとに数値を選ぶわけではありません。それを行うのは run_walk_forward です。ある区間で指定された数値を検索し、その次の区間で選択結果を検証しながら、区間ごとに順次進めます。

シグナルは、そのバーが確定した時点で有効になり、注文はその時点で市場に示されていた価格で約定します。エントリーが1バー遅れた場合にも結果が維持されるか、つまりシグナルを確認した時点の価格を使わなかった場合にどのような結果になるかは、baseline と costsX15 に加えて、entryOneBarLater シナリオで run_backtest を実行して別途確認します。


実行方法

NuGet から

.NET 10 SDK を使って、NuGet からいずれかのツールをインストールします。

パッケージコマンド用途
StockSharp.Odysseus.Mcpodysseus-mcpAI エージェント向け MCP サーバー
StockSharp.Odysseus.Cliodysseusターミナルから利用する同じ調査ツール
dotnet tool install --global StockSharp.Odysseus.Mcp
dotnet tool install --global StockSharp.Odysseus.Cli

各パッケージには、ワーカーとランナーがそれぞれのフォルダーに含まれているため、どちらのツールも単独でインストールできます。以下の MCP 接続では、サーバー実行ファイルへのパスの代わりに "command": "odysseus-mcp" を使用できます。

リリースから

.NET 10 runtime が必要です。リリース一覧からお使いのシステム用のアーカイブ(Windows x64、Linux x64、または Apple シリコン搭載 Mac)をダウンロードして展開します。フォルダーにはサーバー Odysseus.Server とコマンドライン odysseus が含まれており、それらが起動するワーカーとランナーも隣のフォルダーに格納されています。そのため、まとめて移動・削除できます。macOS では、初回起動前にダウンロードファイルにブラウザーが付与するフラグを解除します。xattr -dr com.apple.quarantine odysseus。

ソースから

.NET 10 SDK が必要です。

git clone https://github.com/StockSharp/StockSharp.git "StockSharp (GitHub)"
git clone https://github.com/StockSharp/Odysseus.git
cd Odysseus
dotnet build -c Release

取引プラットフォームはソースからビルドされるため、このリポジトリの隣にある、ビルドが参照するフォルダーへそのリポジトリをクローンします。別の場所に置く場合は、Directory.Build.props と同じ場所にある Directory.Build.local.props で、その場所を StockSharpSource として指定します。

これにより、src/Odysseus.Server/bin/Release/net10.0/Odysseus.Server.exe と、その隣にコマンドライン src/Odysseus.Cli/bin/Release/net10.0/odysseus.exe が生成されます。

エージェントの接続

stdio 経由でサーバーに接続するよう、エージェントを設定します。

{
  "mcpServers": {
    "odysseus": {
      "command": "path/to/Odysseus.Server.exe",
      "env": {
        "ODYSSEUS_PROJECTS_ROOT": "path/to/where/projects/should/live",
        "ODYSSEUS_MARKET_DATA": "path/to/the/shared/market-data/storage"
      }
    }
  }
}

次に、import_demo_dataset を実行して仮説を検証するよう指示します。付属のデータセットは生成されたものなので、そこから得られた測定結果は、どの市場についても何も示しません。このデータセットは、アカウントなしで仕組みが動作することを確認するためのものです。

ワークスペースのファイル

1 つの MCP プロセスが 1 つのワークスペースを所有し、その場所は ODYSSEUS_PROJECTS_ROOT で指定します。同じフォルダーに対して CLI でリサーチコマンドを使う前に、そのプロセスを停止してください。独立したワークスペースは、それぞれ独立して実行できます。1 つのプロセス内では、メタデータを更新するリクエストは順番に処理されます。

プロジェクト、予算、候補、実行、測定、監査イベントは、読み取り可能な JSON ファイルとして保存されます。記録ファイル名には挿入順が含まれ、更新しても名前は変わりません。スコープ付き操作キーは operations.json に、クローズ済みの履歴は closed-history.json に保存され、どちらもプロジェクトフォルダーと同じ場所に置かれます。これらのジャーナルは再起動後も保持されるため、サーバーを再起動したり別のプロジェクトを作成したりしても、リサーチの上限はリセットされず、クローズ済みの期間を再び利用できるようにはなりません。データベースサービスやネイティブの SQLite ライブラリは必要ありません。

仕様、生成されたソース、アセンブリ、完了した戦略は、プロジェクト内のファイルとして保存されます。市場履歴は StockSharp のファイルストレージ ODYSSEUS_MARKET_DATA に保存され、プロジェクトのメタデータにはコピーされません。各トレーディングランナーは独自のファイルを保持し、MCP プロセスの終了後も実行を続けられます。

古い SQLite バージョンで作成されたワークスペースについては、一度限りの移行を参照してください。

実データを使う場合

実データは StockSharp コネクターを通じて取得します。サーバーは特定のコネクターに対してコンパイルされていません。 コンパイルすることはできません。実行中のサーバーが自身をコンパイルすることはできないため、コネクターは公開済みの NuGet パッケージとして提供され、サーバーがダウンロードして専用のコンテキストに読み込みます。 どのコネクターを使うかは、あなたが指定します。

コネクターに必要な認証情報をファイルに記述します。

key: ...
secret: ...

そして、ODYSSEUS_BROKER_KEYS にそのファイルへのパスを設定します。値そのものではなくパスを使うのは、環境変数の値はすべての子プロセスに引き継がれるためです。候補を実行するワーカーも例外ではなく、プロセス一覧にも表示されます。

次に、使用するコネクターを指定します。ODYSSEUS_BROKER_CONNECTOR が指すファイルに記述する方法があります。

{ "packageId": "StockSharp.Binance", "settings": {} }

または、サーバーの実行中に list_connectors、describe_connector、select_connector を使う方法もあります。 describe_connector は、パッケージが受け付けるすべての設定と、それぞれに指定可能な値を報告します。そのため、ドキュメントではなく、コネクター自身の説明に基づいて選択できます。

ダウンロードできるものを制限する環境変数が、さらに2つあります。これら3つのツールは、いずれもダウンロードしたコードを実行するためです。コネクターが何に使われるか、ペーパートレード口座であると伝えられるかどうかは、インスタンスの特性です。そのため、パッケージを読み込むと、インスタンス内にアダプターが構築されます。ODYSSEUS_CONNECTOR_SOURCES(フィード。デフォルトは https://api.nuget.org/v3/index.json)と、ODYSSEUS_CONNECTOR_ALLOW(パッケージ名のプレフィックス。デフォルトは StockSharp.)です。どちらも起動時に決定され、ツールから変更することはできません。許可リストが設定されていて空になった場合は、すべてを許可するのではなく、何も許可しません。--hosted を指定して起動したサーバーでは、3つすべてのツールが拒否されます。コネクターはプロセスの起動時に選択されるためです。

コネクターがなくても、それ以外の機能は引き続き動作します。デモデータセット、analyze_market、すべてのバックテスト、クローズドデータの計測、complete_strategy は、すでにインポート済みの履歴を読み取ります。利用できるのが製品のどちらの部分かは、describe_server で確認できます。

履歴はブローカーではなく、リモート StockSharp ストレージサーバー(Hydra)から取得することもできます。ODYSSEUS_REMOTE_STORAGE が指すファイルに、接続先を記述します。

{ "address": "10.0.0.5:5002", "login": "...", "password": "..." }

import_history はこのサーバーからバーを読み込み、共有ローカルストレージに保存します。すべての実行では、そこからローカルに保存されたデータを読み取ります。サーバーへの接続には StockSharp.Fix パッケージを使用します。このパッケージはコネクターと同様にダウンロードして読み込むため、ODYSSEUS_CONNECTOR_ALLOW で許可する必要があります。ブローカーを指定している場合でも、ペーパートレードにはそのブローカーが使われます。

ペーパー口座のみが対象であり、申告だけでなく確認も行います。すべてのコネクターは設定前にデモモードに切り替えられ、設定後にも再確認されます。デモモードがないコネクターや、デモモードを維持できないコネクターは、慎重に使用するのではなく拒否されます。

デプロイは開始したセッションが終わった後も存続します

deploy_candidate は独立したプロセスを起動します。デプロイごとにプロセスが1つあり、エージェントが切断された後も、MCP サーバーが終了した後も、何かによって停止されるまでそのプロセスは取引を続けます。これは製品の動作における最も重要な変更であり、良い面と悪い面の両方があります。接続が切れても何も強制終了されなくなり、誰かが停止しない限り、戦略は動き続けます。

存続するのは、プロジェクトルート配下のディレクトリです。

projects/runners/<deploymentId>/
    launch.json      what to run and how to reach the broker
    runner.json      how to find the process, and how to tell it from a reused process number
    strategy.dll     the exact assembly being traded
    journal.jsonl    one line per state change, including what it was holding
    runner.log       what the runner has to say to a person

後のセッション(別のエージェント、別のプロセス、翌週など)は、メモリ上に保持されている情報ではなく、このディレクトリを読み込みます。list_deployments は、記録された内容と、プロセスを探した際に見つかった内容を報告します。この4つの結果は、それぞれ異なる意味を持ちます。

runner意味
attached接続され、応答しています。数値は最新です。
goneプロセスは存在しません。ブローカー上で保持していたものは、そのままの状態で残されています。
unresponsiveプロセスは稼働していますが、応答していません。ポジションを保持したまま、取引を続けている可能性があります。
unknown記録が存在しないか、このビルドでは対応していない記録です。

gone と unresponsive の違いは、誰もポジションを保持していない状態と、誰かがポジションを保持している状態の違いです。そのため、値は2つではなく4つあります。gone のランナーを停止すると、ジャーナルの最終行とともに中断として記録されます。unresponsive のランナーの停止は拒否され、何も記録されません。取引を続けている可能性のあるプロセスについて「停止した」と記録することは、この製品が避けるべき唯一の嘘だからです。

停止はポジションに関する判断であり、その答えを伴います。終了はそうではありません。クラッシュ、シグナル、マシンの再起動、委任期間の終了のいずれも、ポジションをそのままの状態に残し、ポジションを決済することはありません。再起動後に自動で再開されることもありません。復元されるのは記録であって、取引ではありません。

実務上の影響は2つあります。

  • デプロイに必要なのは、コネクターの指定であり、バインドではありません。 ランナーは独自のプロセス内で独自のコネクターを読み込むため、サーバーはコネクターを読み込んでいなくてもデプロイできます。ただし、select_connector または ODYSSEUS_BROKER_CONNECTOR のいずれでも指定されていない場合は拒否されます。
  • ルートが2つあれば、レジストリも2つになります。 ODYSSEUS_PROJECTS_ROOT の値が異なるシェルと MCP サーバーには、互いに見えないランナーがあります。describe_server は使用中のルートを報告します。

ランナーを強制終了できるツールはありません。これは意図的な仕様です。ランナーを強制終了できるツールがあれば、ポジションを監視するものが何もない状態にしてしまうからです。強制終了はターミナルから人が行う操作です。odysseus runner kill <deploymentId> は、開いたままにする内容を表示してから識別子の入力を求めます。またはタスクマネージャーを使用してください。

オペレーター向けのライブ取引

上記のすべてはペーパーアカウントで取引され、MCP サーバーにはそれ以外のことはできません。ライブ取引は、プロセスが起動時から置かれる状態です。取引を行うプロセスにオペレーターが指定したファイルによって決まり、設計上、エージェントチャネルからは到達できません。

  • モードを受け取るツールはなく、設計を変更せずに追加することもできません。
  • MCP サーバーは、別の方法を指定できる唯一の呼び出し箇所で、ペーパー取引の指示をリテラルとして渡します。
  • MCP サーバーは、起動するすべての子プロセスの環境から ODYSSEUS_LIVE_MANDATE と ODYSSEUS_LIVE_PHRASE を削除し、前者は呼び出し元が明示的に渡したパスからのみ設定します。サーバーは常にこれを空のままにし、後者は何からも設定しません。サーバーを起動したシェルでどちらかをエクスポートしていたオペレーターも、サーバーから起動したランナーはペーパー取引になります。
  • ランナーはファイルを使って、自身の時計で有効期限、実際に読み込んだコネクターのビルド、銘柄、最終価格でのポジション、ブローカーが報告する口座など、すべてを自ら再確認します。不一致があれば、何も起動しません。
  • ファイルを持っているだけでは許可になりません。 戦略が始まる前に、ファイルに記されたフレーズを、ファイルからは提供できないチャネルを通して入力する必要があります。

指示は JSON 形式で、この製品のどの部分も指示ファイルを書き出すことはありません。odysseus mandate template は保存用の例を標準出力に出力し、標準エラー出力にはその使い方を表示します。そのため、odysseus mandate template > mandate.json を実行すれば、正しく解析できるファイルが作成されます。

{
  "schema": 1,
  "phrase": "trade real money on U1234567 until the thirtieth",
  "account": "U1234567",
  "connector": {
    "packageId": "StockSharp.Example",
    "packageVersion": "1.2.3",
    "adapter": "StockSharp.Example.ExampleMessageAdapter"
  },
  "symbols": ["AAPL"],
  "maxPositionNotional": 5000,
  "expiresAt": "2026-09-30T00:00:00Z"
}

すべてのフィールドが必須で、各フィールドが許可の範囲をさらに限定します。口座は1つ、コネクターのビルドは1つ、銘柄は少数に限定され、ポジションには上限が設けられます。また、有効期限を設けることで、誰も取り消すのを忘れた許可が自動的に効力を失います。

したがって、ランナーをライブモードにするには、以下のすべてが必要です。各手順で、誰かが判断を下します。

  1. 自分で指示を作成し、自分だけが書き込める場所に保存します。ツールも、エージェントも、この製品のどの部分も指示ファイルを書き出しません。ソフトウェアが作成できるファイルは、作成するようにそそのかされる可能性があるからです。
  2. これからランナーを起動するシェルで、ODYSSEUS_LIVE_MANDATE にそのファイルのパスを指定します。設定されているのに読み取れない場合は、拒否となり、ペーパー取引へのフォールバックはありません。これを設定したオペレーターは実口座を意図しているため、その戦略をデモ口座で実行するのは、安全であっても不誠実です。
  3. Odysseus.Runner を自分で起動し、作業に使用するランナーホームを指定します。MCP サーバーが起動したランナーにはどちらの変数もないため、これが唯一の方法です。
  4. フレーズを入力し直します。 ターミナルから起動すると、ランナーは口座、銘柄、上限、有効期限を表示し、指示ファイルに記されたフレーズの入力を求めます。照合は完全一致です。スペースや大文字・小文字の扱いも記載どおりで、前後の空白除去、大文字・小文字の統一、ロケールによる等価判定は行われません。また、コピーできるようフレーズを表示することもありません。入力を求められるターミナルがない場合は、代わりに同じフレーズを ODYSSEUS_LIVE_PHRASE に設定する必要があります。
  5. ランナーは応答したブローカーに対してすべてを再確認し、すべてが一致した場合にのみ戦略を開始します。

フレーズが一致しない場合も、入力を求める相手がおらず ODYSSEUS_LIVE_PHRASE も設定されていない状態で起動した場合も、使用できない他の指示ファイルと同じ結果になります。何も起動せず、ジャーナルにはポジションゼロで拒否されたことが記録され、気づかれないままペーパー取引に切り替わることもありません。

ライブランナーは、あらゆる場所でその状態を明示し、まず最初に伝えます。起動時のあいさつ、各状態レポート、runner.json に記録します。そのため、接続できないセッションでも「ライブ、到達不能」と報告されます。これは人の対応が最も必要な状態です。さらに、デプロイ行と監査ログにも記録します。

StockSharp 製品のインストール

6 つのツールで、サーバーの稼働マシン上に StockSharp 独自のアプリケーション(Designer、Terminal、Hydra など)をインストール、更新、削除、一覧表示できます。これらはデフォルトで無効になっており、ほとんどのマシンではまったく使用できません。これは通常の状態であり、障害ではありません。次の 3 つの条件をすべて満たす必要があります。get_installer_state を使えば、何もインストールせずに 3 つすべての状態を確認できます。

  • インストーラーのコンソールがこのマシンにあること。 Odysseus はプロセスとして StockSharp.Installer.Console を実行します。ベンダーのインストーラーライブラリをリンクせず、 プログラムをダウンロードすることもありません。リンクすると、リポジトリ間の依存関係、 StockSharp アカウント、ライセンス、プライベートフィードが、公開パッケージを匿名で取得するサーバーに 持ち込まれてしまいます。ODYSSEUS_INSTALLER に実行ファイルのパスを指定するか、サーバーと同じ場所にある installer フォルダーに実行ファイルを配置してください。
  • オペレーターが操作を許可する製品を指定していること。 ODYSSEUS_PRODUCT_ALLOW は、 数値の製品 ID をセミコロンで区切ったリストです。Designer、Terminal、Runner の場合は 9;10;1137 です。 未設定の場合はどの製品も許可されません。これは ODYSSEUS_CONNECTOR_ALLOW のデフォルトとは逆で、 意図的な設定です。製品の半分はコネクターを必要とし、リサーチのワークフローには StockSharp 製品が 一切必要ありません。
  • このマシンで StockSharp アカウントにサインインしていること。 インストーラーはアカウント情報を %USERPROFILE%\Documents\StockSharp\credentials.json から読み込みます。この設定はマシン全体に適用され、 切り替え手段はありません。ここからアカウントを渡す方法はありません。アカウント情報がない場合、 インストーラーはメールアドレスのキーボード入力を待つため、ツールは処理が止まるのを避けてエラーになります。

製品はプロジェクトのルートにある products/<id> に配置されます。どのツールにもディレクトリは指定できません。 引数として渡されたパスに、どこにでも書き込めてしまうためです。各呼び出しの出力全体は products/invocations/ に保存され、結果にはその末尾が含まれます。プログラムには機械可読な出力がないため、 読み取れなかった内容も破棄されず、テキストとして返されます。--hosted を指定して起動したサーバーでは、 6 つすべてのツールが拒否されます。

ローカルの操作に見えても、どちらの一覧表示にもネットワークが必要です。インストーラーは呼び出しごとに 製品カタログ全体を再読み込みし、オフラインモードもありません。

ターミナルから

同じリサーチ内容を JSON ではなく列で表示します。サービスも数値も同じですが、パーサーではなく人が 読める形式に並べています。

調査を進めるコマンドライン

dotnet run --project src/Odysseus.Cli -- new "my study"
dotnet run --project src/Odysseus.Cli -- demo
dotnet run --project src/Odysseus.Cli -- propose samples/hypothesis.json
dotnet run --project src/Odysseus.Cli -- build
dotnet run --project src/Odysseus.Cli -- backtest
dotnet run --project src/Odysseus.Cli -- measure
dotnet run --project src/Odysseus.Cli -- closed
dotnet run --project src/Odysseus.Cli -- complete "why you believe it"

リリース版を使う場合もコマンドは同じです。展開したフォルダーで odysseus new "my study" などを実行します。

samples/hypothesis.json は実際の仕様です。出来高で確認するブレイクアウトに、ATR ストップを設定し、 セッション終了時にクローズします。上のウォークスルーで提案されている内容であり、テストではサーバー独自の チェックと公開スキーマの両方に照らして検証します。

バックテストでは、得られた利益だけでなく、実行にかかったコストも報告します。2 種類のコストのうち、 取引の仕方で変わるのは一方だけだからです。保有期間が長いほどスプレッドを支払う回数は減りますが、 手数料はどちらの場合も出来高に応じて発生します。

請求されたコストと、実行中の口座の推移を表示したバックテスト

実行結果は、月、セッションの時間帯、ポジションの保有期間、方向別に切り分けられます。どの切り分けでも 同じ取引が対象なので、それぞれを合計すると実行結果全体に戻ります。特定の月、あるいはその日の最後の 30 分間から生じた結果なら、6 週間のペーパートレードを待たずにここで確認できます。

同じ実行結果を 4 つの方法で切り分けたもの


行わないこと

  • 戦略が優れているとは伝えません。 何が起きたかを報告し、その解釈はお客様に委ねます。
  • エージェントチャネルから実資金で取引することはありません。 MCP サーバーが起動するデプロイはすべてペーパーアカウント上で行われます。また、それを変更できる引数、仕様フィールド、保存値は存在しません。ライブ取引は、サーバーが作成できないプロセスが起動時に読み込むファイルによって決定されます。オペレーターはそのようなプロセスを自分で起動できますが、ツールから到達できるものは何もありません。
  • 何かが停止したからといって、ポジションを決済することはありません。 ポジションに関する判断はストップが担います。クラッシュ、シグナル、再起動、期限切れの委任は決済判断を担わず、デフォルトでその役割を引き継ぐこともありません。
  • 決済済みの部分を二度測定させることはありません。 それこそがこのツールの価値です。
  • バックテストを結果であるかのように装うことはありません。 エミュレーターはバーに対して約定を行います。約定しないことは、バックテストと口座で最もよく見られる違いです。

契約

ツールが返す内容は、意図的にどこにも文書化されていません。 ツール自身がその内容を説明します。すべてのツールには、事前に試すことなくツールを選ぶ必要があるエージェント向けに書かれた説明があり、すべての引数にはその内容が記載され、記載がない場合はテストスイートが失敗するテストが用意されています。接続して tools/list を呼び出してください。それが契約であり、古くなることはありません。出力形式を静的に複製しても、出力を生成するコードとのずれが生じるだけです。

ツール一覧はこのページに照らして確認されます。テストでは tools/list の応答を、上記とまったく同じグループ分けによる明示的なリストと比較します。そのため、ツールを追加、削除、改名すると、このページの件数を修正するまでテストスイートが失敗します。

文書化されているのは、入力する内容です。 これは、サーバーに渡す前に正しくしておく必要があるためです。

  • strategy-spec.schema.json — 仮説ドキュメントです。語彙に含まれるすべての式の種類を網羅しています。テストでは、同梱サンプル、すべての種類を一度に使用する仕様、サーバーが書き戻す内容を検証します。また、サーバーが拒否する仕様もスキーマが同様に拒否すること、列挙値がコードで宣言されているものと一致することを、別のテストで確認します。
  • error.schema.json — すべてのエラーが返される形式です。カテゴリの語彙が、サーバーの分岐処理で使われる列挙値と一致することをテストで確認します。

誰かが実行するのを覚えているときにしか動かないのであれば、これらに価値はありません。そのため、build.yml がテストを実行します。プッシュとプルリクエストのたびに依存関係を復元し、ソリューション全体を Release でビルドします。警告はエラーとして扱われるため、このステップがテスト開始前のゲートになります。その後、すべてのテストを実行し、実行時にテストアセンブリごとの JUnit レポートを保存します。テストが失敗すると、ビルドも失敗します。また、MCP ツールと CLI ツールをパッケージ化し、そのパッケージからインストールしたうえで、生成データを使ったバックテストで CLI を実行し、MCP のハンドシェイクを確認します。合格にあたって設定は不要です。ブローカーアカウントを必要とする少数のテストは認証情報を探し、見つからなければスキップされます。

リリースワークフローでは、NuGet.org と GitHub にアップロードする前にパッケージとアーカイブを検証します。リリースのセットアップと検証では、Trusted Publishing ポリシーとドライランモードについて説明しています。


ライセンス

すべての StockSharp リポジトリと同じく、StockSharp Custom License Notice が適用されます。LICENSE と、そこから参照される EULA をご確認ください。コネクターは実行時に NuGet パッケージとして取得され、独自の利用条件に従います。StockSharp のソース、バイナリ、キーは、いずれもこのリポジトリに含まれません。

テレメトリーはありません。新規インストール時には、ブローカーへの接続を求められた場合に限り、ブローカーへの通信が発生します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。