Calibrain Harnessとは?
Calibrain Harnessは、高速分類モデル向けのオープンソースのフォワードテストシステムです。対応モデルを無期限先物市場データに接続し、確定した各バーについてラベル付け可能な質問を行い、返された確率を期待値に変換します。また、条件を満たす取引をBybitテストネットのみで任意に実行できます。
このプロジェクトは、取引ボットとモデル評価ハーネスという関連する2つのツールを組み合わせています。取引につながらなかった予測も含め、すべての予測が保存され、後から市場の結果と比較されます。これにより、手数料、スリッページ、約定、ポリシールールの影響とモデル品質を分離できます。
重要:Calibrain Harnessは現在も活発に開発中であり、金融助言ではなく研究用ソフトウェアです。取引ホストはBybitテストネットにハードコードされており、メインネットへの切り替え機能はありません。インターフェース、デフォルト設定、質問セットはコミットごとに変更される場合があります。
システムの仕組み
ハーネスは、モデルに「買い、売り、または保有」と回答させるのではなく、後の価格データから客観的にラベル付けできる質問を行います。たとえば、固定期間内にどちらの境界に先に到達するか、つまりプラスの目標値かマイナスのストップかを問います。
- メインネットの公開市場データ、ニュース、マクロ経済コンテキスト、板情報、デリバティブデータを収集します。
- 特徴量ビルダーが、単位を付けた簡潔な状態を作成し、対象銘柄とブラケットに関する過去のベースレートを追加します。
- KairosまたはJevが状態と、型付きでラベル付け可能な7つの質問を受け取ります。
- レスポンスを厳密に検証します。無効なレスポンスは、否定的な予測として解釈せず、エラーとして記録します。
- キャリブレーション層を通じて、モデル確率と過去のベースレートを融合します。
- ポリシーがR単位で期待値を計算し、エントリー条件を適用して、リスク量を決定します。
- 自動取引が有効な場合、条件を満たす注文をBybitテストネットへ送信します。
- 評価とレポート作成のため、リクエスト、レスポンス、ラベル、実行結果、取引をSQLiteに保存します。
テストネットの市場データは合成データまたは乖離したデータである可能性があるため、シグナルとラベルにはメインネットのデータを使用します。ただし、注文はテストネットでのみ発注し、その利用可能な板の厚みに応じて数量を決定します。
主な機能
複数の分類モデル
現在、ハーネスはMinara Cloud経由でDMindが提供するKairosと、TypeSafeが提供するJevに対応しています。どちらも同じSystem Oneのリクエスト形式、質問セット、検証、ポリシー、評価パイプラインを使用します。
意思決定、キャリブレーションの重み、評価、レポートはモデルごとに分離されています。稼働中のモデルを切り替えると新しい実行が開始されます。結果に異なるモデルが混在しないよう、ボットのポジションがない場合にのみ切り替えが許可されます。
ブルームバーグ風ターミナル
Next.jsターミナルは1つのWebSocketを通じてライブ更新を受信します。チャート、モデルシグナル、キャリブレーション済みおよび未調整の期待値、ポジション、口座情報、板と深度ビュー、マーケットマップ、ニュース、清算、デリバティブデータ、さらに各モデルのリクエストとレスポンスを含む意思決定ブロッターを表示します。
組み込みのキャリブレーションと評価
Calibrain Harnessは、w · model + (1 − w) · base ratesという式を使い、モデル確率と銘柄固有のベースレートを融合します。重みは0.5から始まり、質問に少なくとも100件のラベル付き結果が蓄積された後、15分ごとに再適合されます。
評価には、ブライアスコアと順位確率スコア、気候値および提供されたベースレートに対するスキル、AUC、信頼性、期待キャリブレーション誤差、確率積分変換分析、EVランキング、一貫性プローブ、約定品質、実行ごとの取引結果が含まれます。
テストネットの約定制御
エントリーではIOC指値注文を使用し、テストネットの最良価格を基準に上限を設定します。目標値はreduce-only指値注文として板に置くことができます。一方、管理対象のストップはメインネットの約定可能価格を使って発動し、テストネット上の上限付きreduce-only IOC注文で決済されます。システムには、時間ストップ、マーク価格によるバックストップ、1日の損失上限、ポジション上限、ポートフォリオのリスク上限、キルスイッチも含まれます。
前提条件
インストール前に、次のものを準備してください。
- Python 3.12。
- npmを含むNode.js 20以降。
- Minara CloudのKairos APIキー、またはTypeSafeコンソールのJev APIキー。
- BybitテストネットのAPI管理から取得したBybitテストネットのAPI認証情報。
Bybitキーには、注文とポジションのためのContract権限が必要です。出金権限は付与しないでください。
Calibrain Harnessのインストール
1. リポジトリをクローンする
git clone https://github.com/zadescoxp/calibrain-harness.git
cd calibrain-harness
2. Python環境を作成する
Python 3.12の仮想環境を作成し、依存関係をインストールして、サンプル設定をコピーします。
python3.12 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env
認証情報を.envに追加するか、後でターミナルのKEYSコマンドから入力します。アプリケーションはこのファイルからキーを読み込みます。このファイルはgitignoreの対象で、所有者のみがアクセスできる権限であることが想定されています。キーがデータベースに保存されたり、完全な形でブラウザに送信されたりすることはありません。
3. ターミナルUIをビルドする
cd web-next
npm ci
npm run build
cd ..
これにより、静的なターミナルがweb-next/outに作成されます。PythonサービスがUI、API、WebSocketを提供するため、本番用のNode.jsプロセスを別途起動する必要はありません。
4. サービスを起動する
.venv/bin/python -m ctb.server
http://127.0.0.1:8800を開きます。サーバーはローカルのみにバインドされ、クロスオリジンの書き込みを拒否します。
UIがまだビルドされていない場合、このアドレスにはビルドコマンドを含む短いページが表示されます。APIとライブWebSocketは引き続き利用できます。
モデルと認証情報を設定する
.envのCTB_MODEL_PROVIDERでKairosまたはJevを選択します。
CTB_MODEL_PROVIDER=kairos
KAIROS_API_KEY=your_kairos_key
Jevの場合は次を使用します。
CTB_MODEL_PROVIDER=jev
TYPESAFE_API_KEY=your_typesafe_key
CTB_JEV_MODEL=jev-1.14.0
文書化されているJevモデルはjev-1.14.0に固定されていますが、CTB_JEV_MODELで上書きできます。Kairosの認証情報は、Kairosが有効なMinara Cloudグループに属している必要があります。
.env.exampleに記載されている変数名を使って、Bybitテストネットの認証情報を追加します。.envやdata/配下のファイルは絶対にコミットしないでください。
まず観測専用モードで実行する
ボットは注文を発注しない状態で起動します。このモードでは、市場データの収集、選択したモデルの呼び出し、判断の記録、予測のラベリングが継続されます。テストネットでポジションを建てずに接続を確認し、モデルの挙動を調べられるため、最初にこのモードを使うことを推奨します。
- Pythonサービスを起動します。
127.0.0.1:8800でターミナルを開きます。- 市場データとモデルの判断が表示されることを確認します。
- LOG画面とEVAL画面でエラーとレイテンシを確認します。
- セットアップが正しく動作している場合にのみ、AUTO-TRADEを有効にします。
ターミナルを使う
主な画面
- MON、F1: ウォッチリスト、チャート、モデルのマーカー、アカウント、ポジション、マーケットマップ、板情報、ニュース、デリバティブ、フローデータ、判断記録を表示します。
- EVAL、F2: キャリブレーション、分析結果、EVランキング、質問スコア、一貫性プローブ、運用メトリクス、損益、執行品質を表示します。結果はモデル、実行、シンボル、質問セット、時間枠で絞り込めます。
- TRADES、F3: 参照価格、約定、スリッページ、正確なRを含む個別の実行と取引を一覧表示します。
- NEWS、F4: ヘッドラインとKairosの
news_return予測を表示します。ニュースリターン予測はKairosでのみ利用できます。 - LOG、F5: システムイベントとエラーを表示します。
コマンドラインの例
/を押すとターミナルのコマンドラインが開きます。主なコマンドは次のとおりです。
- シンボルを読み込むには
BTCまたはETH。 - モデルに即時クエリを送り、一貫性プローブを実行するには
ASKまたはPRB。 - チャートの時間枠を変更するには
1Mから4H。 - 取引時間枠を設定するには
TF 5M。 - シンボルユニバースを選択するには
UNIV。 - ポジションの最大数を設定するには
POS 10。 - 認証情報を管理するには
KEYS。 - ターミナルヘルプを表示するには
HELP。
ファンクションキーのバーにあるMODELからKairosとJevを切り替えられます。切り替える前に、ボットのポジションをすべて解消しておく必要があります。
テストネット取引を慎重に有効にする
判断を観察し、セットアップを検証したら、コマンドバーのAUTO-TRADEを使ってテストネット注文を許可します。厳格モードでは、最小期待値、セットアップ品質、方向性の一致、リターン分布の一致、取引所間の乖離、ポジション状態、ショート側の許可など、設定されたすべてのゲートをキャリブレーション済み予測が通過した場合にのみ取引します。
探索モードはデフォルトで無効です。CTB_EXPLORATION=1を設定すると、厳格なゲートに阻まれた場合でも、リスクを抑えてモデルが好む側で取引できるようになります。目的は実際の執行データを収集することであり、厳格なポリシーがプラスのエッジを見つけたことを示すものではありません。
テストネットの流動性は非常に薄い場合があり、メインネットとは異なる挙動をする可能性があります。プロジェクト初期のフォワードテストでは、執行品質がテストネットの損益を大きく左右する可能性が確認されました。テストネットの結果は、将来の収益性の証拠ではなく、調査データとして扱ってください。
キルスイッチを使う
ターミナルのKILLボタンは、ボットのポジションを決済し、注文をキャンセルして、システムを停止します。同じ操作をプロジェクトディレクトリから実行できます。
touch KILL
テストネットで手動で開いたポジションは通常表示されますが、ボットによる管理対象にはなりません。キルスイッチは文書化された例外です。
テストとスモークチェックを実行する
ネットワークアクセスなしでユニットテストを実行します。
.venv/bin/python -m pytest -q tests
アクティブなモデルに実際のリクエストを1件送り、応答を検証します。
.venv/bin/python scripts/kairos_smoke.py SOLUSDT
Jevを明示的に指定します。
.venv/bin/python scripts/kairos_smoke.py SOLUSDT --model jev
ロングポジションを開き、ストップを確認してから決済することで、最小サイズのテストネット執行経路をテストします。
.venv/bin/python scripts/testnet_smoke.py SOLUSDT long
これらのスモークスクリプトは外部に実際のリクエストを送信するため、実行前に選択したシンボルと認証情報を確認してください。
重要な設定オプションを理解する
判断タイミングとブラケット
CTB_DECISION_TFのデフォルト値は 5 で、5分足の確定バーに基づいて意思決定します。CTB_HORIZON_BARSのデフォルト値は 24 で、デフォルトの時間足では2時間の予測期間になります。- ストップ幅の算出に使用する
CTB_ATR_TFのデフォルト値は 15 です。 CTB_SL_ATRとCTB_TP_ATRのデフォルト値は、それぞれ 1.5 ATR と 2.5 ATR です。CTB_MIN_SL_BPとCTB_MAX_SL_BPは、デフォルトでストップ幅を40~300ベーシスポイントに制限します。
厳格なポリシーゲート
CTB_MIN_EDGE_R=0.15は、デフォルトの最小キャリブレーション済みエッジを設定します。CTB_MIN_SETUP_QUALITY=1.5は、セットアップ品質のしきい値を制御します。CTB_MIN_DIRECTION_MARGIN=0.03は、キャリブレーション済みの方向が、指定したマージン以上で提案側と一致することを要求します。
リスク制限
CTB_RISK_PER_TRADE_PCT=0.5は、ストップに到達した場合に失う想定の資産比率を定義します。CTB_MAX_POSITIONS、CTB_MAX_SAME_SIDE、CTB_MAX_OPEN_RISK_PCTは、ポートフォリオのエクスポージャーを制限します。CTB_MAX_LEVERAGE=3とCTB_MAX_NOTIONAL_USDT=5000は、デフォルトで強制的な上限を設けます。CTB_DAILY_LOSS_LIMIT_PCT=3は、デフォルトの日次損失上限を設定します。
コストと執行
CTB_TAKER_FEE_BP=5.5とCTB_SLIPPAGE_BP=2は、期待値とラベルに使用するコストモデルに反映されます。CTB_MAX_ENTRY_SLIP_BP=10は、デフォルトのエントリー価格上限を設定します。CTB_EXIT_MODE=managedは、文書化された管理型の決済プロセスを有効にします。
ポリシーを比較する際は、一度に1つの設定グループだけを変更し、新しい実行を開始してください。各実行では設定のスナップショットが保存されるため、後から分析しやすくなります。
高度な評価のヒント
モデルをベースラインと比較する
利益が出ているように見える予測が、必ずしも有用とは限りません。モデルが、気候学的ベースラインおよび入力に含まれる正確な過去のベースレートを上回っているか確認してください。ラベル付き結果からモデルの追加情報が少ないことが示された場合、キャリブレーション層がモデルの影響を抑えます。
予測スキルと取引結果を分けて考える
取引だけでなく、ラベル付けされたすべての意思決定を EVAL で確認してください。予測指標はモデルの確率的スキルを測定する一方、テストネットの P&L は、モデル、ポリシー、コスト、リスク量、執行による複合的な影響を測定します。
重複する意思決定を考慮する
ラベルは各意思決定後の最初の1分足から始まり、先読みを防ぎます。1本のバーが利確目標とストップの両方に触れた場合、ラベルはストップとして扱われます。ただし、連続する意思決定では予測期間が重複する可能性があるため、サンプル数だけを見ると統計的な独立性を過大評価する場合があります。README では、結論を出す前に、シンボルごとに数百件のラベル付き意思決定を蓄積することを推奨しています。
一貫性を確認する
反復プローブを使って決定性を測定し、ミラープローブを使って強気・弱気の市場特徴量を反転した際に、モデルの回答が適切に変化するか確認してください。また、単一の指標だけに依存せず、ロングとショートの整合性も確認します。
レポートをエクスポートする
EVAL で EXPORT MINARA REPORT を使用すると、評価結果を含む Markdown レポートを書き出せます。比較を解釈する前に、モデル、実行、シンボル、質問セット、時間足でフィルターしてください。
シンボルと実行を管理する
UNIV コマンドは、テストネットに上場されている USDT 無期限契約のうち、出来高上位100件までを一覧表示します。板の厚みとスプレッドの情報を含み、薄い板や株式・コモディティの無期限契約にはフラグを付けます。モデルのリクエスト予算の範囲内で、最大30シンボルを選択できます。ユニバースの変更を適用するため、サービスは自動的に再起動します。
すべての意思決定と取引は、アクティブな実行に割り当てられます。プログラムから実行を作成するには、ボット取引が開いていない状態で POST /api/runs/start を送信します。モデル、質問、リスクルール、執行設定を変更する際は、実行を分けると便利です。
UI の作業
変更を取得した後、またはフロントエンドを編集した後は、静的エクスポートを再ビルドします。
cd web-next && npm run build
その後ブラウザを再読み込みしてください。Python サーバーを再起動する必要はありません。
ライブリロード開発では、Python サーバーを起動したまま、Next.js を別に起動します。
cd web-next && npm run dev
http://localhost:3000 を開きます。開発 UI は 127.0.0.1:8800 の API および WebSocket と通信します。
フロントエンドの型チェックには、次を実行します。
cd web-next && npx tsc --noEmit
安全性と運用上の実践
- ホストが
api-testnet.bybit.comのままであることを確認してください。このプロジェクトには意図的にメインネット取引への切り替え機能がありません。 - 最初は監視専用モードで開始し、テストネット注文を有効にする前にモデルのエラーを確認してください。
- 出金権限のない Bybit 認証情報を使用してください。
.envとdata/ディレクトリをバージョン管理の対象外にしてください。- P&L だけで判断せず、取引所間の乖離、約定率、レイテンシ、スリッページ、決済理由を監視してください。
- 執行をテストする前に、キルスイッチの手順をすぐ確認できる状態にしてください。
- 変更を提出する前に、Python テストとフロントエンドの型チェックを実行してください。
まとめ
Calibrain Harness は、高速な分類モデルが無期限市場の予測に測定可能な情報を追加するかどうかを判断するための体系的な方法を提供します。客観的な質問、過去のベースレート、確率キャリブレーション、厳格な検証、テストネット執行、詳細な評価を、1つのローカルターミナルに統合しています。
まずサービスをインストールし、KairosまたはJevのいずれかを設定して、観測のみの判断を収集します。データとモデルのパイプラインが安定したら、Bybit testnetで慎重に実行をテストし、実行結果を分けて管理します。短期的なP&Lだけに頼らず、十分なサンプルを用いてモデルをベースラインと比較・評価してください。
