关于 dsl-tight
dsl-tight 是 dsl-dynamic-stop-loss 技能的止损预设,面向需要更严格利润保护的策略。它使用基于 ROE 的分层阈值、逐层违约计数、自动计算的止损线,并由 DSL v5 脚本处理停滞退出。
主要功能
- 01基于 ROE 的止损与止盈阈值
- 02四级分层利润锁定
- 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 — 绝对底线(止损)
- 5% ROE 移动底线
- 需要连续越界 3 次
- 根据入场价、杠杆和回撤自动计算绝对底线
阶段 2 — 分层锁定利润
4 个层级,逐级锁定高水位变动的更大比例:
| 层级 | 触发 ROE | 锁定高水位变动的比例 | 平仓所需越界次数 |
|---|---|---|---|
| 1 | 10% | 50% | 3 |
| 2 | 20% | 65% | 2 |
| 3 | 40% | 75% | 2 |
| 4 | 75% | 85% | 1 |
随着利润增长,每层的越界次数逐渐减少——达到第 4 层(75% ROE)时,越界一次即可立即平仓。
停滞止盈
满足以下条件时自动平仓:
- ROE ≥ 8%,并且
- 高水位已连续 1 小时没有提高
捕捉停滞的盈利仓位——直接锁定利润,而不是等待行情反转。
越界机制
- 仅使用硬衰减(恢复时越界计数重置为 0)
- 每层单独设置越界要求(3→2→2→1),取代全局的阶段 1/阶段 2 划分
- 底线始终为:LONG 取
max(tier_floor, trailing_floor),SHORT 取min()
状态文件架构
状态文件位于 DSL v5 策略目录:{DSL_STATE_DIR}/{strategyId}/{asset}.json(main dex)或 {DSL_STATE_DIR}/{strategyId}/xyz--SYMBOL.json(xyz dex)。路径约定请参阅 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 会根据入场价和杠杆填入该字段。将 highWaterPrice 设为入场价;在阶段 1 开始时,将 floorPrice 设为入场价(或计算得出的绝对底线)。
字段参考
| 字段 | 用途 |
|---|---|
phase1.absoluteFloor | 无需设置——根据入场价、杠杆和回撤自动计算 |
tiers[].breachesRequired | 每层的越界计数(取代全局阶段 2 设置) |
tiers[].retrace | 每层的移动止损严格程度 |
stagnation.enabled | 启用停滞止盈 |
stagnation.minRoePct | 触发停滞检查所需的最低 ROE |
stagnation.maxStaleSec | 高水位停滞多久后自动平仓的最长秒数 |
Cron 设置
与 DSL v5 相同: 每个策略设置一个 cron(而非每个仓位一个),每隔 3–5 分钟运行一次。Agent 在为策略设置 DSL 时创建该 cron。
确定脚本路径: 设置 cron 时,在磁盘上定位 dsl-dynamic-stop-loss 技能(例如,在工作区、skills 目录或 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。
Agent 的职责(与 DSL v5 相同):当出现 strategy_inactive 时,移除 cron 并运行策略清理;当出现 closed=true 时,提醒用户;当出现 pending_close=true 时,提醒用户并在下一次运行时重试。
关键安全功能
- 与 DSL v5 相同:检查策略是否处于活动状态、对账状态与清算平台、平仓时删除状态
- 自动计算底线,避免手动计算错误
- 每个层级的触发收紧机制可为大额利润提供最大保护
- 停滞止盈可防止盈利持仓因停滞而反转
示例演练
以 $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。触发一次即可立即平仓。
脚本和依赖项
使用 dsl-dynamic-stop-loss 技能中的 dsl-v5.py 和 dsl-cli.py。请先安装该技能。**推荐设置方式:**使用 --configuration @dsl-tight/dsl-profile.json 调用 dsl-cli.py add-dsl(请参阅上文“通过 DSL CLI 设置”)。设置 cron 或运行脚本时,请在磁盘上定位 dsl-dynamic-stop-loss 技能(在 workspace/skills/安装路径中搜索包含 scripts/dsl-v5.py 和 scripts/dsl-cli.py 的文件夹),并使用该路径。状态文件位于 {DSL_STATE_DIR}/{strategyId}/{asset}.json(main)或 xyz--SYMBOL.json(xyz)。有关 cron 设置、路径约定、策略停用时的清理和输出架构,请参阅 dsl-dynamic-stop-loss 技能。