# Opportunity Radar

> Screens all Hyperliquid perps and surfaces top trading setups

- Skill: `nunchi-trade/opportunity-radar` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add nunchi-trade/opportunity-radar`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nunchi-trade/opportunity-radar/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: nunchi-trade (https://skillmd.com/u/nunchi-trade)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nunchi-trade/opportunity-radar

---


# Opportunity Radar

Screens all Hyperliquid perpetual markets through a 4-stage funnel to surface
the highest-conviction trading setups.

## Architecture

```
Stage 0: BTC Macro Context (EMA 5/13 on 4h, 1h momentum)
Stage 1: Bulk Screen (~500 assets → ~70 by volume)
Stage 2: Top-N Selection (by composite liquidity score)
Stage 3: Deep Dive (multi-TF technicals + 3-pillar scoring)
Stage 4: Momentum + Final Ranking
```

## 3-Pillar Scoring (0-400 scale)

| Pillar | Weight | Signals |
|--------|--------|---------|
| Market Structure | 35% | Volume tiers, surge, OI, OI/Vol health |
| Technicals | 40% | 4h trend, hourly trend, RSI, patterns, volume |
| Funding | 25% | Neutral (+40), favorable, unfavorable penalties |

## Hard Disqualifiers

1. Counter-trend on hourly structure
2. Extreme RSI (>80 for LONG, <20 for SHORT)
3. Strong 4h counter-trend (strength > 50)
4. Volume dying on both timeframes
5. Heavy unfavorable funding (>50% annualized)
6. BTC macro headwind (modifier < -30)

## Usage

### CLI
```bash
hl radar once              # Single scan
hl radar run --tick 900    # Continuous (15 min intervals)
hl radar once --json       # JSON output
hl radar once --mock       # With mock data (no HL connection)
hl radar status            # Show last scan results
hl radar presets            # List presets
```

### Standalone
```python
from skills.radar.scripts.standalone_runner import RadarRunner
from cli.hl_adapter import DirectHLProxy

runner = RadarRunner(hl=hl, tick_interval=900)
runner.run()
```

## Configuration

Via YAML config or CLI flags:
- `--min-volume`: Minimum 24h volume to qualify (default: $500K)
- `--top-n`: Assets to deep dive (default: 20)
- `--preset`: "default" or "aggressive"
- `--score-threshold`: Minimum final score (default: 150)

## Agent Mandate

You are the opportunity radar. Your job is to screen the entire Hyperliquid perps universe and rank assets by trading conviction. You do NOT place trades — you surface setups for APEX or the human operator.

RULES:
- ALWAYS check BTC macro context first — if headwind modifier < -30, all scores are suppressed
- NEVER recommend a disqualified asset — hard disqualifiers are absolute
- Present results sorted by score, highest first
- Include direction (LONG/SHORT) and risk factors for each candidate
- Run at minimum every 15 minutes during active trading

## Decision Rules

| Score Range | Interpretation | Action |
|-------------|---------------|--------|
| 250-400 | Elite setup — rare, strong multi-pillar confluence | Immediate entry candidate for APEX |
| 170-250 | Good setup — solid edge | Standard entry if Pulse confirms |
| 140-170 | Marginal — needs confirmation | Queue only, wait for Pulse signal |
| 100-140 | Weak — one pillar carrying | Skip — insufficient edge |
| 0-100 | No edge | Ignore completely |

| BTC Macro | Effect | Action |
|-----------|--------|--------|
| Strong uptrend (mod > +20) | Tailwind for longs | Score longs normally, penalize shorts |
| Neutral (mod -10 to +10) | No macro effect | Score normally |
| Downtrend (mod < -20) | Headwind | Raise entry threshold to 200+ |
| Crash (mod < -40) | Major headwind | Skip all entries, wait for stabilization |

## Anti-Patterns

- **Chasing yesterday's winners**: An asset scored 300 yesterday but 120 today → do not enter. Scores are point-in-time.
- **Ignoring volume decay**: High score but volume dying on both timeframes → disqualified. The setup is stale.
- **Entering on RSI extremes**: RSI > 80 (long) or < 20 (short) means the move already happened. Radar correctly disqualifies these.
- **Running in aggressive mode by default**: Aggressive lowers thresholds → more candidates but lower quality. Use default unless you have excess budget.

## Error Recovery

| Error | Cause | Fix |
|-------|-------|-----|
| `0 candidates after scan` | Low-vol period | Normal — no action needed. Don't force trades. |
| `Candle fetch timeout` | HL API rate limit | Reduce `--top-n` or increase tick interval |
| `BTC candle unavailable` | API issue | Radar defaults to neutral macro — safe fallback |
| `Score calculation error` | Missing data for asset | Asset auto-skipped — check logs for pattern |

## Composition

Radar is a sub-component of APEX (runs every 15 ticks). Can also be used standalone for manual trade selection. Pairs with Pulse for confirmation — Radar finds setups, Pulse detects timing.

## Cron Template

```bash
# Standalone radar every 15 min during trading hours
*/15 8-20 * * 1-5 cd ~/agent-cli && hl radar once --json >> data/radar/scans.jsonl 2>&1
```

