Skip to content

The Cup & Handle is watch-only: listed, never a buy signal (#109) - #125

Merged
yanivil merged 1 commit into
mainfrom
feat/cups-watch-only
Sep 17, 2026
Merged

yanivil merged 1 commit into
mainfrom
feat/cups-watch-only

Conversation

@yanivil

@yanivil yanivil commented Sep 17, 2026

Copy link
Copy Markdown
Owner

Summary

The Cup & Handle becomes watch-only: its rows are still detected and reported, but a cup breakout is never a buy signal.

Evidence (tuning page, the eleven yearly point-in-time runs): cups made +0.03 R per signal on 305 signals with 18 % reaching their target, against +0.23 R for the inverse head and shoulders and +0.43 R for the Wolfe. Two of the first three live losses (BIIB, VRTX) were cups.

How

  • WATCH_ONLY_PATTERNS = ("Cup & Handle",), legacy profile: none. demote_watch_only runs when the report is written: every cup row gets watch_only, and a cup breakout keeps its levels and bars_since_break but is reported as WATCHLIST with the note "breakout listed for information: watch-only pattern". With that status no consumer treats it as a trade: the evaluator does not track it, the listing rule does not count it, and the page lists it under the stocks being watched with "broke out N sessions ago: watch-only" instead of a distance to the trigger, plus one sentence saying why.
  • Applied at report time, not in the detector, so tools/backtest.py keeps measuring cups and the eleven-year figures, which include them, are unchanged; the decision can be revisited with the same tooling.
  • The report header states the rule; meta.watch_only_patterns lists the patterns.

Tests (156): the demotion (a breakout listed with its age and note, an un-broken cup unchanged, other patterns untouched, the legacy profile without it), the end-to-end scan (the cup fixture now appears on the watchlist with its age, watch_only, and the header sentence), the second run closing it as a WATCHLIST row, and the page's watch-only cell and glossary entry.

Docs: wiki 01 (watch_only, meta.watch_only_patterns), wiki 02 (the cup's section), wiki 03 (the constant's row and the ledger of adopted values), README, changelog.

Closes #109.

Test plan

  • ruff clean, 156 tests pass locally
  • tests workflow on this PR
  • tonight's report: GILD, RTX and FCX stay on the watchlist as before; a cup that breaks out is listed there with "breakout listed for information", not as a signal

🤖 Generated with Claude Code

…109)

WATCH_ONLY_PATTERNS = ("Cup & Handle",): demote_watch_only marks the rows
and reports a cup breakout as WATCHLIST with its age and a note, applied
when the report is written so the detector and the replay keep measuring
the pattern; the legacy profile has none. The page lists such a breakout
under the stocks being watched with "broke out N sessions ago: watch-only"
and explains why. Evidence: +0.03 R on 305 cup signals over eleven
point-in-time years, 18 % reaching the target. Tests (156), wiki 01, 02
and 03 (constant, ledger), README, changelog.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@yanivil
yanivil merged commit 69c5c7b into main Sep 17, 2026
7 of 8 checks passed
@yanivil
yanivil deleted the feat/cups-watch-only branch September 17, 2026 18:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cup & Handle: +0.03 R on 305 signals over ten years with an 18 % hit rate; decide whether it stays a confirmed pattern

1 participant