owl-strategy について
owl-strategyは、混雑した取引とその失速兆候を暗号資産の無期限先物から探し、逆張りエントリーのシグナルを出すSenpiスキルです。プロデューサーデーモンがシグナルを送り、実行とポジション管理はランタイムが担います。
主な機能
- 01混雑度と失速のスコアリング
- 02継続性とマクロトレンドのゲート
- 03OIで絞り込む無期限先物ユニバース
- 04逆張りシグナルの送信
- 05ランタイムによるリスク制限
活用シーン
- 01失速の兆候がある混雑取引の検出
- 02BTCの大きな値動き時に逆張り候補を除外
- 03逆張り候補シグナルのランタイムへの送信
MCP 対応
プロデューサーはSenpiClient.mcp_call()で市場データとポジショニングを取得し、SenpiClient.push_signal()で逆張りシグナルを送信します。ランタイムがシグナルを検証して処理します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ senpi-ai/ senpi-skills --skill owl-strategyインストール後、Claude Code で/owl-strategyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdruntime.yamlconfig/owl-config.jsonreferences/skill-attribution.mdscripts/owl_config.pyowl-producer.py詳細
🦉 OWL v8.0 — 純粋な逆張り。Helpers ネイティブ。メイカー決済。
群衆が過剰にポジションを傾けるまで待ちます。勢いが尽きるまで待ちます。そして、その清算を刈り取ります。
一つのテーゼ:群衆は間違っています。 フリート内の他のすべてのスキルは、勢いに乗り、トレンドに沿い、スマートマネーとともにポジションに入ります。OWL だけが、群衆に逆らってポジションに入ります。優位性の源は、混み合ったトレードが激しく、予測可能な形で巻き戻ることです。
v8.0.0 での変更点
配管のみの移行です。テーゼの変更はありません。 v7.1 の混雑度/枯渇度スコアリング、永続性ゲート、MACRO_TREND_GATE、確信度に応じたレバレッジ、DSL プリセットはすべてそのまま維持されています。
@senpi-ai/runtime 1.1.0 での6層の配管変更です(Wolverine/Lemon/Cheetah の v3.0 以降への移行と同じパターンです)。
| 層 | v7.1 | v8.0 |
|---|---|---|
| MCP 呼び出し | mcporter サブプロセス | SenpiClient.mcp_call() による直接 HTTPS |
| シグナル送信 | openclaw senpi external-scanner ingest サブプロセス | SenpiClient.push_signal() による直接 HTTP POST |
| 再入可能性 | producer.lock に対する手動実装の fcntl flock | producer_daemon.scanner_lock(古い PID を自動復旧) |
| ティックのスケジューリング | openclaw cron と agentTurn | 長時間稼働する producer_daemon プロセス |
| /state alive_check | なし | wallet=/scanner= kwargs → runtime/scanner が削除されると daemon が自動終了 |
| シグナルタイプのタグ付け | ペイロードから推定 | signal_type="OWL_CONTRARIAN_FADE" を明示的に渡す |
v8.0 の理由: Owl をフリートの他の構成要素と同じ配管に統一します。ティックごとのサブプロセスのオーバーヘッドを解消します(約30~60秒 → 約1~3秒のティック)。テーゼの変更はありません。v7.1 がテーゼに関する最新の作業です。
テーゼ(v7.1/v6.2 から維持)
- 混雑度スコア: 資金調達率の極端さ(0~4)+ SM 傾斜(0~3、資金調達率を裏付ける場合は +1)+ OI 集中度(0~2)。下限は6です。
- 持続性: 下限を1時間以上超過し、ノイズに対して2ティックまで許容します(v5.3)。
- 枯渇度スコア: 出来高の減少+価格の停滞+出来高急増後の追随なし+ RSI ダイバージェンス。異なるシグナルが2つ以上、スコアが5以上です。
- 合計スコアが12以上で発動します。
- マクロトレンドゲート:
|BTC 4h move|が3%を超える場合、暗号資産の逆張りをブロックします(v7.1)。 - 損失後は資産ごとに6時間のクールダウンを設けます。
- 対象ユニバース: OI が300万ドルを超えるすべての暗号資産パーペチュアル(v6.1 で拡大、上位30件への切り捨てなし)。
- XYZ は禁止です(巻き戻りの動きが異なるため、個別の調整が必要です)。
ファイル
| ファイル | 用途 |
|---|---|
runtime.yaml | ランタイム仕様(スキャナー、アクション、出口 DSL、guard_rails)— スキーマバージョン 1.8.0 |
scripts/owl-producer.py | 長時間稼働する Helpers ネイティブのプロデューサーデーモン(15分間隔) |
scripts/owl_config.py | 共有 MCP ヘルパー+_wrapper_client プロキシ+アトミックな状態 I/O |
config/owl-config.json | オペレーターが調整できるデフォルト値(参考情報。プロデューサーの定数が優先されます) |
プロデューサーの動作
15 分ごとに実行されます(長時間稼働するデーモンであり、openclaw cron ではありません)。各ティックで次を行います。
- ウォレットを解決します(環境変数
OWL_WALLETを使用し、未設定の場合はconfig.walletにフォールバックします)。両方とも空の場合は、エラーを明確に出して停止します。 - アカウント価値を読み取ります。サイズ計算と動的上限設定のため、
strategy_get_clearinghouse_stateを使用します。 - 動的な日次上限を適用します(ランタイムの
guard_railsと併せて多層防御を行います)。 - 対象銘柄を取得します。
market_list_instrumentsを使用し、OI が 300 万ドルを超える約 80〜100 の暗号資産無期限先物を取得します。 - SM ポジショニングマップを取得します(すべての資産で共有する MCP 呼び出しを 1 回行います)。
- MACRO_TREND_GATE:
|BTC 4h move|が 3% を超える場合は、ティックをスキップします。 - 銘柄ごとに群集度をスコアリングし、継続性の履歴を更新します。
- 継続性のある候補に絞り込みます(群集度が下限以上の状態が 1 時間以上)。
- 継続性のある候補のみ枯渇を検出します(MCP 呼び出しを節約します)。
- 合計スコアが 12 以上で、銘柄ごとのクールダウンが終了しているものに絞り込みます。
- 確信度に応じたレバレッジ(スコアに応じて 7/8/10)で、最上位の逆張り候補を
cfg._wrapper_client.push_signal(..., signal_type="OWL_CONTRARIAN_FADE", ...)を介して通知します。 - 群集度の履歴とクールダウン状態を
state/<wallet-hash>/に保存します。
執行コードはありません。ポジション追跡もありません。DSL の状態もありません。これらはすべてランタイムが管理します。
方向は群集の方向と反対です。 これがエッジのすべてです。群集度に逆らうのは Owl だけです。
エントリーフロー
Producer daemon tick (every 900s)
↓ Crowding score >= 6, persisted >= 1h
↓ Exhaustion score >= 5 with >= 2 signals
↓ Combined score >= 12
↓ SenpiClient.push_signal(scanner="owl_signals", signal_type="OWL_CONTRARIAN_FADE", ...)
Runtime (127.0.0.1:8787)
↓ Schema-validates fields against runtime.yaml
↓ LLM gate (decision_model = ${OWL_DECISION_MODEL})
↓ Pass-through unless malformed; rejects if direction == crowdDirection
↓ OPEN_POSITION via FEE_OPTIMIZED_LIMIT (maker-only, 60s, NO taker fallback)
DSL (runtime-managed)
↓ Phase 1 max_loss 35% / single-breach (wide for contrarian retrace)
↓ Phase 2 6-tier ladder starting at 5% trigger (Lemon-pattern first leg)
↓ hard_timeout 480m, weak_peak 120m@2%, dead_weight 30m
↓ Exit via FEE_OPTIMIZED_LIMIT (maker-first, 60s, taker fallback)
必須の環境変数
ランタイム YAML では、次の置換を使用します。
| 変数 | 用途 |
|---|---|
${WALLET_ADDRESS} | ストラテジーのウォレットアドレス |
${TELEGRAM_CHAT_ID} | 通知用の Telegram チャット ID |
${OWL_DECISION_MODEL} | LLM ゲート用のモデル名のみ。プロバイダーのプレフィックスは付けません。 |
プロデューサーが読み取る環境変数は次のとおりです。
| 変数 | 用途 | デフォルト |
|---|---|---|
SENPI_AUTH_TOKEN | MCP 呼び出しとシグナルの POST に必須です | —(必須。未設定の場合、プロデューサーはエラーを明確に出して停止します) |
OWL_WALLET | ウォレット(ランタイム YAML のウォレットと一致させる必要があります)。エージェントごとに設定する仕様です。Turbine v2.0.9 の混入防止修正によるものです。 | config.wallet にフォールバックします |
OWL_MARGIN_PCT | スロットごとのアカウント価値の割合 | 0.25 |
OWL_MIN_OI_USD | OI の下限を上書きします | 3000000 |
リスク範囲(宣言的に定義し、ランタイムが適用)
| 設定 | 値 |
|---|---|
| スロット数 | 2 |
| スロットあたりの証拠金 | アカウント価値の 25%(1,000 ドルの場合、デフォルトで約 250 ドル) |
| デフォルトのレバレッジ | 8x(確信度別の段階:12〜13 で 7x、14〜15 で 8x、16 以上で 10x) |
| 日次損失による停止 | 10% |
| ドローダウンによる停止 | 25%(プロデューサー側のサーキットブレーカーとしても適用) |
| 1 日あたりの最大エントリー数 | 4(ランタイムの上限)。プロデューサー側では損益に応じて動的に制限します |
| 連続損失の最大数 | 4 |
| 銘柄ごとのクールダウン | 360 分(損失後 6 時間) |
| 資産の対象範囲 | OI が 300 万ドルを超えるすべての暗号資産無期限先物(XYZ は禁止) |
動的な日次上限(プロデューサー側、v6 から引き継ぎ):
| アカウントの状態 | 1 日あたりの最大エントリー数 |
|---|---|
| PnL < -25% | 0(ハードストップ。ランタイムも停止します) |
| PnL < -15% | 1 |
| PnL < -5% | 2 |
| 当日の実現 PnL < +$150 | 2(基本) |
| 当日の実現 PnL ≥ +$150 | 3 |
| 当日の実現 PnL ≥ +$400 | 4 |
予想される動作
| 指標 | 予想 |
|---|---|
| スキャンごとの群集銘柄数 | 下限を超える銘柄が 5〜15 |
| 1 時間以上継続する銘柄 | 通常は 1〜3 |
| 枯渇の合流条件 | スキャンごとに 0〜1 |
| 1 日あたりの取引数 | 0〜2 |
| 平均保有時間 | 1〜8 時間 |
| 目標勝率 | 60〜70%(タイミングが適切な場合、逆張りによるポジション解消は安定した成果が期待できます) |
何もしないのが正解です。 Owl は群集状態と枯渇トリガーの両方が揃うまで待ちます。ほとんどの日は、どちらか、または両方が揃いません。独自の判断で動かないでください。
v8.0.0 変更履歴
- 配線のみの変更です。 Wolverine v5.0/Lemon v2.0 のテンプレートに従って、6 層を切り替えました。主旨は v7.1 から一字一句変更していません。
owl_config.py:mcporter_call()がSenpiClient.mcp_call()(HTTPS 直接接続)経由で呼び出されるようになりました。push_signal()用に_wrapper_clientプロキシを公開します。owl-producer.py:fcntlロックファイルとsubprocess.run([...ingest])を削除しました。producer_daemon(fn=main, interval_seconds=900, ...)とcfg._wrapper_client.push_signal(signal_type="OWL_CONTRARIAN_FADE", ...)を使用します。runtime.yaml:スキーマのバージョンを 1.7.1 から 1.8.0 に引き上げました。説明文を改訂しました。DSL プリセット、スキャナーowl_signals、アクションowl_entry、consecutive_breaches_required: 1に変更はありません。- 状態ファイルに変更はありません。
crowding-history.json/asset-cooldowns.json/trade-counter.jsonは引き続きstate/<wallet-hash>/に保存されます。
ライセンス
Apache-2.0 — Senpi(https://senpi.ai)が開発しました。派生物には帰属表示が必要です。 ソース:https://github.com/Senpi-ai/senpi-skills
スキルの帰属表示
戦略を作成するときは、呼び出しに skill_name と skill_version を含めてください。詳細は references/skill-attribution.md を参照してください。