Suppression matched on cluster side as well as position, but side is positional: a level sitting at price is resistance when price is a tick below it and support a tick later. Every crossing failed the side match and fired as a brand-new zone — which is exactly when a level is least newsworthy, not most. Found the honest way. A flat line placed at the live price produced four phone pushes in two minutes. Zones are now matched on position alone. Side still determines whether the message reads BULLISH or BEARISH; it just no longer decides whether you are told twice. Over the same six replayed sessions at threshold 28 that is 40 alerts down to 26, and 10 at the configured four-hour cooldown with a worst session of 5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| analysis | ||
| api | ||
| bars | ||
| market | ||
| notify | ||
| __init__.py | ||
| config.py | ||
| runtime.py | ||