Best gross trader in the fleet. Single asset. Maximum conviction.
v3 → v4 architectural rewrite. v3.x was a full-agency scanner that called create_position directly and tracked state in Python. v4.0 flips to the standard senpi-trading-runtime plugin pattern: producer emits signals, runtime owns execution + state.
What changed structurally:
polar-producer.py(NEW) replacespolar-scanner.py(DELETED). Pure producer — no execution, no counters, no cooldowns, no resting-order guards.runtime.yamlis now runtime-native: external_scanner + LLM-pass-through gate + native risk.guard_rails + DSL preset with FEE_OPTIMIZED_LIMIT.- Trade chain DB emits
LIFECYCLE_RUNTIME_STARTED → DECISION_EXECUTED → ACTION_RESULT → DSL_CREATED → DSL_CLOSEDfor every trade. Per-trade telemetry is restored. - The
set_cooldown/load_tcPython state crashes from the legacy scanner pattern are structurally impossible in v4.0+ (cooldowns are runtime-managed).
What's preserved from v3.0.6:
- ETH single-asset thesis (no multi-asset rotation)
- Hyperfeed SM gates: pct≥5%, traders≥30, cc_15m≥0.3 (15m velocity acceleration)
- Structural gates: 4h trend != NEUTRAL, 4h matches SM direction, 1h matches 4h, 15m momentum aligned, RSI 26-74 band
- Multi-factor scoring (~17 max points): base-tech (3+2+1+1) + SM concentration (1-3) + SM velocity (1-2) + SM accelerating (1) + trader depth (1) + funding alignment (-1/0/+2) + OI velocity (-1/0/+1/+2) + BTC correlation (1) + RSI room (1) + 4h momentum bonus (1) + move-exhaustion penalty (-1/-2)
- MIN_SCORE = 14 (config-overridable)
- Conviction-tiered leverage: 5x standard / 7x conviction / 10x apex
- DSL preset preserved EXACTLY: time-cuts all disabled, Phase 1 max_loss 25% / retrace 8 / 3 breaches, Phase 2 leverage-aware ladder (8/25, 15/50, 25/65, 35/80, 50/85)
v3.0.4/3.0.5/3.0.6 v1-DSL fixes preserved:
dead_weight_cut: DISABLED (single-asset has no rotation cost)hard_timeout: DISABLED (v1 DSL fired this in Phase 2 incorrectly; fixes the 2026-04-23 wrongful-close pattern)weak_peak_cut: DISABLED (completes the no-time-based-cuts sweep)- All exits now 100% price-action
⛔ Hard Rules (Fleet Patches)
RULE FP-002: User-conversation Claude sessions MUST NOT trade
Hard rule, not a heuristic. When responding to a user message (Telegram ping, status check, "tell me about your trades", etc.), the Claude Code session MUST NOT call any of:
create_positionclose_positionedit_positionratchet_stop_add/ratchet_stop_edit/ratchet_stop_deletecancel_orderstrategy_close/strategy_close_positions
These tools are reserved for the producer daemon (polar-producer.py) and the DSL ratchet engine. The daemon is the only entry path. The DSL is the only exit path. User-conversation sessions are read-only.
If a user asks "should I take this trade?" or "anything close to triggering?", respond by reading current state — DO NOT execute. The producer will fire on its next tick if a real signal is there.
RULE FP-001: Quiet hours for low-liquidity windows
Producer skips emission during 00:00-04:00 UTC by default. Apex setups (score >= quietHours.apexBypassScore, default 17) bypass — high-conviction ETH setups can fire any hour; routine score-14/15 entries wait until 04:00 UTC.
Configurable via quietHours.{startUtc,endUtc,apexBypassScore} in polar-config.json. Set startUtc == endUtc to disable.
⛔ CRITICAL AGENT RULES
RULE 1: Install path is /data/workspace/skills/polar-strategy/
RULE 2: THE SCANNER DOES NOT EXIT POSITIONS — DSL only.
RULE 3: MAX 1 POSITION
RULE 4: Verify runtime on every session start
RULE 5: Never modify parameters
RULE 6: MAX 4 ENTRIES PER DAY
RULE 7: 240-minute cooldown between entries (v2.4 — sniper cadence)
RULE 8: 120-minute same-direction cooldown after wins
RULE 9: MIN_SCORE = 10 (v2.4 — was 8 in v2.3)
RULE 10: 15m velocity must exceed MIN_SM_ACCEL_PCT=0.3% (v2.4 hard gate)
How It Works
Polar scans ETH every 3 minutes. It scores using SM consensus, multi-timeframe contribution velocity (15m, 1h, 4h), price alignment, funding, and trader depth.
v2.3 key behaviors:
- Move-exhaustion: if ETH 4h price change ≥4% in entry direction, -2 points. If ≥2.5%, -1 point. Creates tension with 4H confirmation scoring.
- Same-direction lock: after a winning exit, won't re-enter the same direction for 60 minutes. Prevents chasing the same move at worse prices.
- Midnight-safe cooldowns: timestamps persist across UTC date rollover.
Scoring (max ~18 points)
| Signal | Points | Notes |
|---|---|---|
| SM consensus | 1-3 | ≥15% dominant = +3 |
| Trader depth | 0-1 | ≥100 traders = +1 |
| 4H alignment | -1 to +2 | Confirms direction |
| Move exhaustion | -2 to 0 | v2.3 penalizes ≥2.5% existing moves |
| 1H momentum | 0-1 | Confirms direction |
| 15m velocity | -1 to +4 | Extreme spike = +4 |
| 1h acceleration | 0-2 | Strong accel = +2 |
| 4H major shift | 0-1 | ≥5% contribution change |
| Acceleration pattern | 0-1 | 15m > 1h = accelerating |
| Funding alignment | 0-1 | Funding pays your direction |
| US session | 0-1 | 13-21 UTC |
Min score: 8. Leverage: 8→7x, 9→10x, 10→15x, 11+→20x.
Runtime Setup
sed -i 's/${WALLET_ADDRESS}/<WALLET>/' /data/workspace/skills/polar-strategy/runtime.yaml
sed -i 's/${TELEGRAM_CHAT_ID}/<CHAT_ID>/' /data/workspace/skills/polar-strategy/runtime.yaml
openclaw senpi runtime create --path /data/workspace/skills/polar-strategy/runtime.yaml
openclaw senpi runtime list
openclaw senpi status
Bootstrap Gate
On EVERY session start, check config/bootstrap-complete.json. If missing:
- Read senpi-trading-runtime skill
- Verify Senpi MCP
- Set wallet and telegram in runtime.yaml
- Install runtime
- Verify:
openclaw senpi runtime listandopenclaw senpi status - Launch the producer daemon (long-lived process; internally ticks every 3 min via
producer_daemon) - Write
config/bootstrap-complete.json - Send: "🐻❄️ POLAR v2.3 online. Hunting ETH. Silence = no conviction."
Risk
| Rule | Value |
|---|---|
| Max positions | 1 |
| Max entries/day | 4 |
| Leverage | 7-20x (conviction-scaled, capped at 20x for ETH) |
| General cooldown | 120 min |
| Same-direction cooldown | 60 min after wins |
| Min score | 8 |
| Margin | 50% |
Files
| File | Purpose |
|---|---|
scripts/polar-scanner.py |
ETH scoring + entry execution |
scripts/polar_config.py |
Config helper (MCP, state, positions) |
config/polar-config.json |
Wallet, strategy ID |
runtime.yaml |
Runtime YAML for DSL plugin |
License
MIT — Built by Senpi (https://senpi.ai).
Skill Attribution
When creating a strategy, include skill_name and skill_version in the call. See references/skill-attribution.md for details.