本番運用ポートフォリオ

戦略が実際の資金で取引する仕組み:金額配分、自動照合、全決済、キルスイッチ。

最終更新 2026-08

概要

取引ポートフォリオは、実際に注文を出すことを許可された戦略の集合です。各戦略には固定の金額が割り当てられ、reconciler デーモンが戦略自身が建てたポジションを合算後の目標に収束させ続けます。これらの注文をあなた自身が出す必要はありません。管理するのは自分が出した注文だけで、手動で建てたポジションは見えず、触れることもありません。

strategy.py ──► state.json ──────────────┐
   (cron)                                ├──► reconciler.py ──► exchange
amounts     ──► portfolio_config.json ───┘

金額ベースのサイジング

ポートフォリオ内の各戦略には、口座通貨(例:USD)建ての金額が割り当てられます。これはシグナルがフルサイズのときに戦略が動かす資金です。銘柄ごとの目標ポジションは全戦略の合計になります:

target[symbol] = Σ ( amount × position )

position は戦略のシグナルで、小数も取れます(ボラティリティ調整型の戦略は 0.5 や 1.8 を出すことがあります)。設定した金額がそのままポジションサイズを決め、口座の純資産に連動して変化することはありません。例外:群益(Capital)の台湾株価指数先物戦略では、金額はドル額ではなく枚数(契約数)です。

manager/portfolio_config.json を手で編集しないでください。金額はワークスペースの「取引設定」ページで設定するか、エージェントに依頼してください。オプティマイザーの配分は manager.py 経由でのみ適用され、デフォルトは dry-run で、確認後に --apply を付けた場合だけ設定を書き込みます。

Reconciler(自動照合)

reconciler は 5 秒ごとにポーリングするデーモンで、次のいずれかの場合に照合を行います:

  • 戦略がシグナルを更新した(state.json が変化した)
  • 「取引設定」で新しい金額を保存した
  • キルスイッチが入った、または解除された
  • 前回の照合から 5 分経過した。ポジションのずれや失効した取引所キーを拾うための安全網です
  • TWAP またはカスタム執行が完了した。残差が 5 分の安全網を待たずに 1 回のポーリング内で収束します

毎回、目標とボット自身の帳簿を比較します。reconciler は取引所の生のポジションを読むのではなく、自分が出したすべての注文の累計(manager/orders.jsonl)を独自の台帳として保持するため、手動で建てたポジションが「すでに保有中」と見なされて増減や決済の対象になることはありません。その後、差分を埋める注文を出します。デフォルトは成行で、各戦略は「取引設定」で成行/TWAP/追従指値/カスタム執行を選べます(群益(Capital)の台湾先物は成行のみ)。$10 未満の差分は無視します(台湾先物は代わりに整数枚単位で照合)。ポジションのドテン(ロング → ショート)はリデュースオンリーの決済と新規建ての 2 本に分割されるため、ヘッジモードの口座で両建てになることはありません。

取引所からポジションを読み取れないとき:取引所の一時的な障害(タイムアウト、混雑、メンテナンス)ではそのラウンドをスキップするだけで、復旧後に自動で再開します。30 分連続で接続できない場合は通知します。キーの失効、権限不足、IP 未登録、判別できないエラーの 3 回連続、または起動時・切断からの復旧時・キー変更時にアカウントの不一致が見つかった場合にだけ、reconciler はキルスイッチを入れます。このスイッチは自動では解除されず、解除するかどうかはあなたが決めます。

全ポジション決済

ワークスペースで「取引を一時停止」を押すと、ダイアログに 2 つの選択肢が出ます。「新規ポジションを一時停止」はキルスイッチを入れるだけです。「一時停止してポジションを決済」(または python3 manager/flatten.py)は戦略が建てたポジションを成行で決済します。対象はボット自身の帳簿にあるものだけなので手動で建てたポジションはそのまま残り、現物も戦略が管理するコインだけを売却し、それ以外の保有には触れません。これは緊急ボタンであり、ポートフォリオ管理の手段ではありません:

  • 先にキルスイッチが入るため、決済後に再び建つことはありません。「取引を開始」を押すまで取引は停止したままです。
  • 取引所の最小数量を下回るポジションは決済できません。端数は記録して残します。
  • すべての決済は取引所が確認した約定とともに注文履歴に記録されます。

キルスイッチ(HALT)

キルスイッチが入っている間、エクスポージャーを増やす注文はコードレベルで拒否されます。決済、損切り/利確、キャンセルは通常どおり通ります。停止によって減らしたいポジションが閉じられなくなることはありません。

ワークスペースの「取引を一時停止」(「一時停止してポジションを決済」を含む)、エージェントへの取引停止の指示、または自動発動(キーや権限のエラー、判別できないエラーの 3 回連続、起動時・切断からの復旧時・キー変更時のアカウント不一致)で入ります(取引所の一時的な障害ではスイッチは入らず、復旧後に自動で再開します)。自動で解除されることはなく、「取引を開始」を押すか、エージェントに明示的に再開を依頼したときだけ取引が再開されます。「取引を開始」にも 2 つの選択肢があります。「開始してポジションを追いつかせる」は各戦略の現在のシグナルに合わせて直ちに成行注文を出します。「開始して新しいシグナルを待つ」は今は注文を出さず、各戦略は次のエントリー、エグジット、またはドテンから取引を始めます。すべての注文試行と拒否は監査ログに記録されます。

注文履歴と約定

実行された注文はすべて manager/orders.jsonl にレッグ付きで追記されます。各レッグには取引所が確認した約定価格と約定数量が記録されます。ポジションのドテンは 2 本のレッグを記録し、決済レッグはエグジット価格、新規レッグはエントリー価格を持ちます。

部分的な失敗も記録されます。反転の決済レッグが約定して新規レッグが失敗した場合、その記録は保持され失敗として印が付きます。実際の資金が動いた注文を履歴が隠すことはありません。ワークスペースの「注文履歴」タブはこのファイルを表示します。