关于 owl-strategy
owl-strategy 是 Senpi 技能,扫描加密货币永续合约中的拥挤交易及其衰竭迹象,再发出逆向入场信号。生产进程提交信号,运行时负责执行和持仓管理。
主要功能
- 01拥挤度与衰竭评分
- 02持续性与宏观趋势门控
- 03按 OI 筛选永续合约范围
- 04提交逆向交易信号
- 05运行时强制执行风险限制
适用场景
- 01发现出现衰竭迹象的拥挤交易
- 02强劲 BTC 波动期间过滤反向信号
- 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。Maker 退出。
等待大众过度下注。等待他们耗尽。然后收割他们的清算。
唯一的论点:大众是错的。 其他所有技能都会顺着动能、顺着趋势、顺着聪明钱入场。OWL 是唯一一个逆着大众入场的技能。优势在于:拥挤交易的平仓会剧烈且可预测地发生。
v8.0.0 中的变更
仅调整底层实现。论点没有变化。 v7.1 的拥挤度/耗尽评分、持久性门槛、MACRO_TREND_GATE、信念杠杆和 DSL 预设均原样保留。
在 @senpi-ai/runtime 1.1.0 上进行六层底层实现切换(与 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 |
| 重入控制 | 手动编写的 fcntl 对 producer.lock 加锁 | producer_daemon.scanner_lock(自动恢复陈旧 PID) |
| Tick 调度 | openclaw cron + agentTurn | 长驻 producer_daemon 进程 |
| /state alive_check | 无 | wallet=/scanner= 参数 → 如果 runtime/scanner 被移除,守护进程会自行终止 |
| 信号类型标记 | 从 payload 推断 | 显式传入 signal_type="OWL_CONTRARIAN_FADE" |
为何推出 v8.0: 让 Owl 使用与整个技能集群相同的底层实现。消除每个 tick 的子进程开销(约 30-60 秒 → 每个 tick 约 1-3 秒)。论点没有变化——v7.1 是最近一次论点层面的更新。
论点(沿用 v7.1 / v6.2)
- 拥挤度评分: 资金费率极端程度(0-4)+ SM 倾斜度(0-3,若确认资金费率则 +1)+ OI 集中度(0-2)。下限为 6。
- 持久性: 高于下限至少 1 小时,允许 2 个 tick 的噪声容差(v5.3)
- 耗尽评分: 成交量下降 + 价格停滞 + 成交量激增但未能延续走势 + RSI 背离。≥ 2 个不同信号,评分 ≥ 5。
- 综合评分 ≥ 12 才触发。
- 宏观趋势门槛: 当
|BTC 4h move|> 3% 时,阻止对加密资产进行逆势交易(v7.1)。 - 亏损后每种资产冷却 6 小时。
- 资产范围: 所有 OI > $3M 的加密永续合约(v6.1 扩展,不截断至前 30 名)。
- 禁止 XYZ(其平仓动态不同,需要单独校准)。
文件
| 文件 | 用途 |
|---|---|
runtime.yaml | Runtime 规格(扫描器、操作、退出 DSL、guard_rails)——架构版本 1.8.0 |
scripts/owl-producer.py | 长驻、原生 Helpers 的生产者守护进程(15 分钟间隔) |
scripts/owl_config.py | 共享 MCP helper + _wrapper_client 代理 + 原子状态 I/O |
config/owl-config.json | 操作者可调的默认值(仅供参考;以生产者常量为准) |
Producer 行为
每 15 分钟运行一次(长期运行的守护进程,不是 openclaw cron)。每次触发时:
- 解析钱包(
OWL_WALLET环境变量;未设置时回退到config.wallet);如果两者都为空,则报错并立即终止。 - 读取账户价值:通过
strategy_get_clearinghouse_state获取,用于仓位规模计算和动态上限。 - 应用动态每日上限(与运行时的 guard_rails 配合,形成纵深防御)。
- 获取标的范围:
market_list_instruments(约 80–100 个未平仓合约持仓量(OI)超过 $3M 的加密货币永续合约)。 - 获取 SM 持仓分布图(一次 MCP 调用,为所有资产共享)。
- **MACRO_TREND_GATE:**若
|BTC 4h move|> 3%,则跳过本次触发。 - 为每种资产计算拥挤度分数,并更新持久化历史记录。
- 筛选已持续满足条件的候选资产(高于拥挤度下限至少 1 小时)。
- 仅检测已持续满足条件的候选资产是否出现耗竭(减少 MCP 调用)。
- 筛选综合分数 ≥ 12 的资产,并应用单资产冷却期。
- 通过
cfg._wrapper_client.push_signal(..., signal_type="OWL_CONTRARIAN_FADE", ...)发出最具逆势性的候选信号,杠杆按信号强度缩放(按分数使用 7/8/10 倍)。 - 将拥挤度历史记录和冷却状态持久化到
state/<wallet-hash>/。
没有执行代码。没有持仓跟踪。没有 DSL 状态。这些都由运行时负责。
**方向与人群方向相反。**这就是全部优势所在——Owl 是整个 Agent 集群中唯一一个逆向交易拥挤行情的 Agent。
入场流程
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 门控使用的纯模型名称。不要加提供商前缀。 |
Producer 会读取:
| 变量 | 用途 | 默认值 |
|---|---|---|
SENPI_AUTH_TOKEN | MCP 调用和信号 POST 所必需 | —(必需;Producer 会报错并立即终止) |
OWL_WALLET | 钱包(必须与运行时 YAML 中的钱包一致)。按设计,该变量专用于此 Agent。遵循 Turbine v2.0.9 污染修复方案。 | 回退到 config.wallet |
OWL_MARGIN_PCT | 每个仓位占账户价值的比例 | 0.25 |
OWL_MIN_OI_USD | 覆盖 OI 下限 | 3000000 |
风险范围(声明式,由运行时强制执行)
| 设置 | 值 |
|---|---|
| 仓位数 | 2 |
| 每个仓位的保证金 | 账户价值的 25%(默认情况下,$1k 账户约为 $250) |
| 默认杠杆 | 8 倍(信号强度分级:分数为 12–13 时用 7 倍,14–15 时用 8 倍,16+ 时用 10 倍) |
| 每日亏损停机阈值 | 10% |
| 回撤停机阈值 | 25%(Producer 侧也设有断路器) |
| 每日最多入场次数 | 4(运行时上限);Producer 会根据盈亏设置动态上限 |
| 连续亏损次数上限 | 4 |
| 单资产冷却期 | 360 分钟(亏损后 6 小时) |
| 资产范围 | 所有 OI > $3M 的加密货币永续合约(禁止 XYZ) |
动态每日上限(Producer 侧,v6 沿用):
| 账户状态 | 每日最多入场次数 |
|---|---|
| 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 个 |
| 每日交易次数 | 0–2 |
| 平均持仓时间 | 1–8 小时 |
| 目标胜率 | 60–70%(时机把握得当时,逆势平仓可靠性较高) |
**保持静默才是正确做法。**Owl 会等待人群状态和耗竭触发条件同时出现。大多数时候,两者至少缺少其一。不要自行变通。
v8.0.0 更新日志
- 仅调整底层实现。 按照 Wolverine v5.0 / Lemon v2.0 模板进行六层翻转。完整保留 v7.1 中的论点。
owl_config.py:mcporter_call()现在通过SenpiClient.mcp_call()(直接 HTTPS)进行路由。提供_wrapper_client代理,供push_signal()使用。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。