Claude
Skills
Sign in
โ† Back

cheetah-strategy

Included with Lifetime
$97 forever

CHEETAH v7.0.0 โ€” Multi-signal confluence sniper, senpi_runtime_helpers migration. Plumbing-only flip from openclaw-CLI subprocess + mcporter subprocess to in-process SenpiClient (direct HTTPS for MCP, direct HTTP POST to runtime /signals, long-lived producer_daemon). Thesis preserved verbatim from v6.1: refuses to trade unless ALL major signals align โ€” SM consensus, velocity, acceleration, dual price confirmation, volume spike, quality-trader alignment, rank climb. Score 10/15 floor, score-scaled leverage (3x/5x/7x/8x), FEE_OPTIMIZED_LIMIT entries AND exits, held-asset dedup, post-close cooldown.

AI Agentsscripts

What this skill does


# ๐Ÿ† CHEETAH v7.2.0 โ€” Multi-Signal Confluence Sniper

**SM commits. Quality traders commit. Price confirms. Volume commits. All at once. Cheetah pounces once. The runtime DSL ratchets to lock the win.**

## v7.2.0 (2026-06-01) โ€” DSL exit overhaul: disable time cuts, let winners run

**Entries are fine. Exits were the bottleneck.** A 100-trade-by-score
analysis on the live wallet showed win rate scaling cleanly with score โ€”
40.0% @ score 10, 41.7% @ score 11 (n=84), 50.0% @ score 12, 55.6% @ score
13 โ€” confirming the accuracy filter works. But **Avg ROE was negative across
EVERY score bracket** (โˆ’1.90% / โˆ’0.35% / โˆ’0.20% / โˆ’0.12%).

| Score | Trades | Win rate | Avg ROE |
|---|---:|---:|---:|
| 10 | 5 | 40.0% | โˆ’1.90% |
| 11 | 84 | 41.7% | โˆ’0.35% |
| 12 | 2 | 50.0% | โˆ’0.20% |
| 13 | 9 | 55.6% | โˆ’0.12% |

**Diagnosis: "death by a thousand cuts."** The tight Phase 2 locks plus the
60m/90m time-cuts made it mechanically impossible to hold for a big win โ€”
Cheetah took the full brunt of โˆ’15% stops / โˆ’5% chops but was forced to give
up every +15% / +30% runner. The two big HYPE longs that actually paid
(+13.9%, +8.9%) only landed because they hit the **12h hard timeout** โ€” not a
trailing stop, not a 60m dead_weight_cut. When forced to hold, the position
printed.

**Fix (mirrors the live deploy):**
- `weak_peak_cut` โ†’ **disabled** (was 90m @ 3.0 โ€” chopping winners-in-waiting)
- `dead_weight_cut` โ†’ **disabled** (was 60m โ€” forcing exits before trenders accelerate)
- `hard_timeout` โ†’ **kept** (12h fail-safe โ€” the one cut that captured the winners)
- Phase 2 ladder already widened to the "let winners run" shape (T0 +10% / lock 0 โ†’ +100% / lock 85) on 2026-05-21

Together this removes the glass ceiling so heavy trenders can run. NO change
to scoring, MIN_SCORE, leverage tiers, margin, cooldowns, or risk gates โ€”
exit-mechanics only. Hypothesis test; re-evaluate after ~50 more trades.

## v7.1.1 (2026-05-11) โ€” positions parser fix (patch)

Live verification of v7.1.0 found `positions_map` was STILL empty even though the widened filter returned the full 25-trader pool. Root cause: `leaderboard_get_trader_positions` actually returns

```
{ "data": { "positions": { "trader_id": ..., "rank": ..., "positions": [...] } } }
```

โ€” the per-trader positions array is nested one level deeper than the schema guide documents. The v7.0/v7.1 parser looked at `data.positions` expecting a list, got a dict, hit `if not isinstance(positions, list): continue` and silently skipped every trader.

v7.1.1 parser handles BOTH shapes:
- list-direct (matches schema guide)
- nested-dict `{trader_id, rank, positions: [...]}` (actual prod response)

Plus a `POSITIONS_SHAPE_WARN` log line for any future schema drift.

NO change to scoring components, MIN_SCORE, leverage tiers, margin, cooldowns, or DSL. Same thesis. Now the +3 QUALITY_TRADER bonus can actually fire when the per-asset overlap exists.

## v7.1.0 (2026-05-11) โ€” quality-trader filter widened (patch)

Post-migration diagnostic on the live wallet revealed `quality-cache.json` was always empty (`positions_map = {}`). Root cause: `discovery_get_top_traders(time_frame=WEEKLY, consistency=[ELITE,RELIABLE], open_position_filter=True, limit=8)` returned **zero traders** under the current platform regime. With no quality-trader pool, the +3 `QUALITY_TRADER` scoring bonus never fires; candidates cap at score 8 (needs 4-of-4 secondary confluence to reach the MIN_SCORE=10 floor without that bonus), and that 4-of-4 only hits in strong-trending regimes.

Filter changes (live-verified):
- `time_frame: WEEKLY โ†’ MONTHLY` โ€” broader history, more traders accumulate ELITE/RELIABLE labels
- `consistency: [ELITE, RELIABLE] โ†’ [ELITE, RELIABLE, STREAKY]` โ€” slight loosen at the lower end
- `limit: 8 โ†’ 25` โ€” wider pool surfaces more per-asset overlap
- `open_position_filter` dropped โ€” the per-trader `leaderboard_get_trader_positions` fetch already filters flat traders implicitly via empty position arrays

NO change to scoring components, weights, MIN_SCORE, leverage tiers, margin, cooldowns, or DSL. Same thesis, wider input.

Telemetry: producer now emits a `QT_POOL_WARN` log line whenever the trader pool is unhealthily small (< QT_POOL_SIZE / 2) or positions_map ends up empty. Future regressions surface in one grep instead of post-hoc archaeology.

## v6.0 thesis (preserved from v5.x)

Refuse to trade unless ALL major signals align simultaneously:

| Component | Signal | Pts |
|---|---|---|
| SM consensus | pct_of_top_traders โ‰ฅ 10%, traders โ‰ฅ 25 | +4 (hard gate) |
| Velocity | 15m contrib โ‰ฅ 1.0 OR 1h contrib โ‰ฅ 3.0 | +2 (hard gate) |
| Accelerating | 15m > 1h > 0 (SM building) | +2 |
| Dual price | 4h move โ‰ฅ 2% AND 1h aligned same direction | +2 |
| Volume | current โ‰ฅ 2x 6h avg | +1 |
| Quality trader | โ‰ฅ 1 ELITE/RELIABLE positioned same direction | +3 |
| Rank climb | โ‰ฅ 5 positions in last 2 scans, top 15 | +1 |

**Max score: 15. v6.0 floor: 10.** Universe is the top 100 SM leaderboard (`leaderboard_get_markets`), refreshed every producer tick. XYZ permanently banned.

Score-scaled leverage:

| Score | Leverage |
|---|---|
| 10 | 3x |
| 11 | 5x |
| 12-13 | 7x |
| 14-15 | 8x |

Leverage is clamped to each asset's Hyperliquid max via `strategy_get_asset_trading_limits` (preserves v5.1.1 leverage safety fix).

## v6.0 architectural changes

### v1 scanner โ†’ v2 producer
- v5.x: `cheetah-scanner.py` scored signals, called `create_position` directly, maintained Python-side cooldowns/counters/resting-order guards
- v6.0: `cheetah-producer.py` emits signals via `SenpiClient.push_signal()` (direct HTTP POST). Runtime LLM gate (decision_mode: llm) is pass-through. Risk gates declarative in `runtime.yaml`.

### MIN_SCORE 11 โ†’ 10
v5.2 tightened MIN_SCORE 10 โ†’ 11. Result: 8 consecutive days of zero trades. Pre-tightening (v5.0/v5.1 at MIN_SCORE 10) produced **+$182 net across 11 trades** with 60%+ win rate. v6.0 restores the trade flow.

### FEE_OPTIMIZED_LIMIT on EXITS too
v5.x used MARKET (taker) closes. v6.0's DSL fires `FEE_OPTIMIZED_LIMIT` on every exit โ€” maker-first, 60s ALO timeout, taker fallback. HL maker is 0.015% vs taker 0.045% = 0.020-0.030% saved per close.

### Held-asset dedup (3-layer defense)
1. Producer pre-filter: `held_assets` from clearinghouse, drops candidates already held
2. LLM gate hard skip: `heldAssets` array in signal payload, LLM rejects if asset is held
3. Runtime `per_asset_cooldown_minutes: 240` (known to silently not-enforce; layer 1+2 are the real defense)

### Post-close cooldown (producer-side backstop)
Diff `held_assets` across ticks. When asset disappears from held set, record close timestamp. Producer skips emission for 240 min after any close. Backstops the runtime cooldown bug.

### Reentrancy guard
`producer_daemon` owns a per-tick `scanner_lock` with stale-PID auto-recovery โ€” replaces v6.x's hand-rolled fcntl lockfile. Prevents two ticks racing.

## DSL preset (v7.2.0 โ€” "let winners run" ladder, time cuts disabled)

| Phase | Component | Setting |
|---|---|---|
| Phase 1 | max_loss_pct | 15% |
| Phase 1 | retrace_threshold | 10 (v6.x raise from 6) |
| Phase 1 | consecutive_breaches | 1 |
| Phase 2 T0 | trigger 10% / lock 0% | (lets a +10% mover retrace fully before any lock) |
| Phase 2 T1 | trigger 20% / lock 25% | |
| Phase 2 T2 | trigger 30% / lock 40% | |
| Phase 2 T3 | trigger 50% / lock 60% | |
| Phase 2 T4 | trigger 75% / lock 75% | |
| Phase 2 T5 | trigger 100% / lock 85% | (apex) |
| hard_timeout | 720 min (12h) | **enabled** (the only time cut left) |
| weak_peak_cut | โ€” | **disabled** (v7.2.0) |
| dead_weight_cut | โ€” | **disabled** (v7.2.0) |

v7.2.0: weak_peak_cut + dead_weight_cut disabled. The 100-trade analysis
showed the time cuts were the bottleneck โ€” they forced exits before
trenders could accelerate and capped the right-tail move that pays for
everything. The two big HYPE wins (+13.9%, +8.9%) only landed via the 12h
hard timeout, so that fail-safe is kept. Median trade gives back a bit;
the right tail is 
Files: 7
Size: 84.6 KB
Complexity: 74/100
Category: AI Agents

Related in AI Agents