chart/app
Chris Amow 51a9636ea7 Stop re-alerting when price crosses a level
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>
2026-08-10 01:51:54 -05:00
..
analysis Stop re-alerting when price crosses a level 2026-08-10 01:51:54 -05:00
api Move alert evaluation server-side so push works without a browser open 2026-08-10 00:48:03 -05:00
bars Remove the 4h timeframe 2026-08-10 00:43:47 -05:00
market trendlines namable deleteable 2026-08-09 23:00:46 -05:00
notify Implement M4 confluence alerts 2026-08-09 20:51:32 -05:00
__init__.py Implement M0 Yahoo market data and replay 2026-08-09 20:36:13 -05:00
config.py Remove the 4h timeframe 2026-08-10 00:43:47 -05:00
runtime.py Move alert evaluation server-side so push works without a browser open 2026-08-10 00:48:03 -05:00