A three-timeframe decision framework for BTC. The 1h decides whether you may trade at all, the 15m decides whether momentum has turned, the 5m decides the exact bar. If any layer disagrees, the answer is flat.
A single-timeframe breakout system has to choose between two bad options. Tune it tight enough to catch a move early and it drowns in false positives. Tune it loose enough to filter noise and it enters after the move is over. Splitting the decision lets each layer be tuned for the one question it is actually good at — and, just as importantly, it makes the failure legible. You can always say which layer said no.
long / short / flat verdict per call, returned as JSON — no prose parsing for the agent.Replayed over 2,000 real BTCUSDT 5m bars (Binance archive, September 2026) with the shipped placeholder parameters:
| Action | Bars | Share |
|---|---|---|
long | 4 | 0.20% |
short | 0 | 0.00% (disabled by default) |
flat | 1,996 | 99.80% |
Of the 1,996 flat bars, the regime layer blocked 1,212, the confirmation layer 623, and the trigger layer 161. Every gate is doing work rather than being decorative.
What this skill ships is the mechanism: three layers, three jobs, one decision. What it deliberately does not ship is a tuned parameter set. The thresholds in the package are round placeholder numbers chosen so the code runs, and they are labelled as such everywhere they appear.
That is a deliberate choice, not an omission. Parameters calibrated on one market regime fail exactly when that regime ends, and inherited parameters hide that failure from you. Calibrating is the work — references/params-template.md walks through it, including the 70/30 out-of-sample split that most people skip and that invalidates most backtests.
short; it is disabled by default for that reason.--base-url and --host-header for that case.