dsl-tight について
dsl-tightは、より厳格な利益保護を必要とする戦略向けのdsl-dynamic-stop-loss用ストップロス設定です。ROEベースの段階、段階別のブリーチ回数、自動計算されるフロア、停滞時の決済をDSL v5スクリプトで扱います。
主な機能
- 01ROEベースの損切り・利益確定基準
- 024段階の利益ロック
- 03上位段階ほど厳しくなるブリーチ回数
- 04エントリー価格とレバレッジによるフロア計算
- 05停滞を条件とする利益確定
活用シーン
- 01戦略に厳格な損切りルールを適用
- 02高値からの利益を段階的に確保
- 03利益の伸びが止まったポジションを決済
MCP 対応
このスキルはMCP clearinghouseを使ってポジションを検出します。DSL v5スクリプトはポジション状態をclearinghouseと照合します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ senpi-ai/ senpi-skills --skill dsl-tightインストール後、Claude Code で/dsl-tightを入力して読み込まれたか確認します。
同梱ファイルdsl-profile.json
詳細
DSL-Tight — 主張の強い損切りプリセット(v5)
利益を積極的に保護するための、より厳格で主張の強い DSL のバリエーションです。DSL v5 と同じスクリプトおよびアーキテクチャ(dsl-v5.py)を使用します。戦略ごとの cron、MCP 清算所、{DSL_STATE_DIR}/{strategyId}/{asset}.json 配下の状態ファイルを使用します。すべての段階のトリガーは ROE ベース(PnL / margin × 100)で、レバレッジは自動的に考慮されます。
デフォルトの DSL v5 との主な違い: DSL v5 は柔軟性を最大限に高めた設定可能なエンジンです。DSL-Tight は「そのまま使える」プリセットで、設定項目を減らし、デフォルトを厳格にし、段階ごとのブリーチ回数、停滞時の決済、自動計算されるフロアを備えています。
基本概念
すべてのしきい値は ROE で定義します。スクリプトが価格レベルに自動変換します:
price_floor = entry × (1 ± lockPct / 100 / leverage)
動作の仕組み
フェーズ 1 — 絶対フロア(損切り)
- ROE 5% のトレーリングフロア
- 連続して 3 回ブリーチした場合に決済
- エントリー価格、レバレッジ、リトレースから絶対フロアを自動計算
フェーズ 2 — 段階的な利益確定
高値更新時の値動きに対する割合を段階的に引き上げながら、4 段階で利益を確保します:
| 段階 | トリガー ROE | 高値更新時の値動きに対するロック率 | 決済までのブリーチ回数 |
|---|---|---|---|
| 1 | 10% | 50% | 3 |
| 2 | 20% | 65% | 2 |
| 3 | 40% | 75% | 2 |
| 4 | 75% | 85% | 1 |
利益が増えるにつれて、段階ごとのブリーチ回数を減らします。段階 4(ROE 75%)では、1 回ブリーチすると即座に決済します。
停滞時の利益確定
以下の場合に自動決済します:
- ROE ≥ 8% かつ
- 高値更新値が 1 時間改善していない
伸び悩んでいる利益ポジションを捉え、反転を待つのではなく利益を確定します。
ブリーチの仕組み
- ハード減衰のみ(回復時にブリーチ回数を 0 にリセット)
- 段階ごとのブリーチ要件(3→2→2→1)を適用し、フェーズ 1/フェーズ 2 のグローバルな区分を置き換えます
- フロアは常に、LONG では
max(tier_floor, trailing_floor)、SHORT ではmin()です
状態ファイルのスキーマ
状態ファイルは DSL v5 の戦略ディレクトリにあります。メイン dex では {DSL_STATE_DIR}/{strategyId}/{asset}.json、xyz dex では {DSL_STATE_DIR}/{strategyId}/xyz--SYMBOL.json です。パスの規則については、dsl-dynamic-stop-loss references/state-schema.md を参照してください。
{
"active": true,
"asset": "HYPE",
"direction": "LONG",
"leverage": 10,
"entryPrice": 28.87,
"size": 1890.28,
"wallet": "0xYourStrategyWalletAddress",
"strategyId": "uuid-of-strategy",
"phase": 1,
"phase1": {
"retraceThreshold": 0.05,
"consecutiveBreachesRequired": 3
},
"phase2TriggerTier": 0,
"phase2": {
"retraceThreshold": 0.015,
"consecutiveBreachesRequired": 2
},
"tiers": [
{"triggerPct": 10, "lockPct": 50, "retrace": 0.015},
{"triggerPct": 20, "lockPct": 65, "retrace": 0.012},
{"triggerPct": 40, "lockPct": 75, "retrace": 0.010},
{"triggerPct": 75, "lockPct": 85, "retrace": 0.006}
],
"breachDecay": "hard",
"currentTierIndex": -1,
"tierFloorPrice": null,
"highWaterPrice": 28.87,
"floorPrice": 28.78,
"currentBreachCount": 0,
"createdAt": "2026-02-23T10:00:00.000Z"
}
phase1.absoluteFloor は省略してください。dsl-v5 がエントリー価格とレバレッジから値を補完します。フェーズ 1 の開始時には、highWaterPrice をエントリー価格に、floorPrice をエントリー価格(または計算済みの絶対フロア)に設定してください。
フィールドの説明
| フィールド | 目的 |
|---|---|
phase1.absoluteFloor | 不要 — エントリー価格、レバレッジ、リトレースから自動計算 |
tiers[].breachesRequired | 段階ごとのブリーチ回数(グローバルな phase2 設定を置き換えます) |
tiers[].retrace | 段階ごとのトレーリングストップの厳しさ |
stagnation.enabled | 停滞時の利益確定を有効にします |
stagnation.minRoePct | 停滞チェックを開始する ROE の最低値 |
stagnation.maxStaleSec | 自動決済するまで高値更新値が停滞できる最大秒数 |
Cron の設定
DSL v5 と同じです: ポジションごとではなく、戦略ごとに 1 つの cron を 3~5 分ごとに実行します。エージェントは、戦略に DSL を設定する際にこれを作成します。
スクリプトのパスの解決: cron を設定する際は、ディスク上で dsl-dynamic-stop-loss スキルを探してください(たとえば、ワークスペース、スキルディレクトリ、または ClawHub のインストール先で、scripts/dsl-v5.py を含む dsl-dynamic-stop-loss という名前のフォルダーを検索します)。cron コマンドでは解決したパスを使用し、固定の相対パスを仮定しないでください。パスを解決した後の例:
DSL_STATE_DIR=/data/workspace/dsl DSL_STRATEGY_ID=strategy-uuid python3 /path/to/dsl-dynamic-stop-loss/scripts/dsl-v5.py
DSL_ASSET は指定しません。スクリプトは MCP 清算所および戦略ディレクトリ内の状態ファイルからポジションを検出します。
時刻に合わせたスケジュール(OpenClaw): 固定された 3 分間隔(例::00、:03、:06…)で実行するには、cron 式を使ってジョブを作成します:"schedule": { "kind": "cron", "expr": "*/3 * * * *", "tz": "UTC" }。詳細は、dsl-dynamic-stop-loss SKILL.md の Cron Setup と references/explained.md §0 を参照してください。
エージェントの責任(DSL v5 と同じ):strategy_inactive の場合は cron を削除して戦略のクリーンアップを実行します。closed=true の場合はユーザーに通知します。pending_close=true の場合はユーザーに通知し、次の実行時に再試行します。
主な安全機能
- DSL v5 と同様に、ストラテジーの有効性チェック、状態とクリアリングハウスの照合、クローズ時の状態削除を行います
- フロアを自動計算することで、手計算によるミスを防ぎます
- ティアごとにブリーチ条件が厳しくなるため、大きな利益を最大限に保護できます
- 停滞時の TP により、伸び悩んだ含み益が損失に転じるのを防ぎます
実行例
$28.87 で 10x のロングポジションにエントリーした場合:
- フェーズ 1:フロアは約 $28.73 に自動計算されます。価格が上昇し、HW が追跡します。
- ティア 1(ROE 10%)($29.16):フロアが約 $29.01 に固定され、クローズまでのブリーチ回数は 3 回です。
- ティア 2(ROE 20%)($29.45):フロアが約 $29.24 に固定され、ブリーチ回数は 2 回になります。
- 停滞:ROE 12% で 65 分間価格が停滞すると、利益がある状態で自動クローズされます。
- ティア 4(ROE 75%)($31.04):フロアは約 $30.71 です。1 回のブリーチで即座にクローズします。
スクリプトと依存関係
dsl-dynamic-stop-loss スキルの dsl-v5.py と dsl-cli.py を使用します。まず、このスキルをインストールしてください。推奨セットアップ:「DSL CLI によるセットアップ」を参照し、--configuration @dsl-tight/dsl-profile.json を指定して dsl-cli.py add-dsl を呼び出してください。cron を設定する場合やスクリプトを実行する場合は、ディスク上で dsl-dynamic-stop-loss スキルを見つけてください(ワークスペース/スキルのインストール先を検索し、scripts/dsl-v5.py と scripts/dsl-cli.py を含むフォルダーを探してください)。そのパスを使用します。状態ファイルは {DSL_STATE_DIR}/{strategyId}/{asset}.json(main)または xyz--SYMBOL.json(xyz)に保存されます。cron のセットアップ、パスの規則、ストラテジーが無効になった場合のクリーンアップ、出力スキーマについては、dsl-dynamic-stop-loss スキルに従ってください。