# Screener Playbook — Valuations PP → Buffer → EOD

**The funnel logic:** the two screeners answer different questions. Don't ask either to do the other's job.

| Stage | Script | Question it answers | Cadence |
|---|---|---|---|
| 1 · Discovery | 💰 Valuations Screener 💰 (PP v4.1) | *"What deserves my attention?"* — cheap + waking up | Weekend + midweek |
| 2 · Timing | EOD Screener | *"Is today the day, and at what stop?"* | Daily after close |
| Buffer | TV watchlist "BUFFER" | Holding pen between the two | Continuous |

A name can sit in the buffer for weeks. PP finds it early; EOD tells you when it's actionable. That gap **is** the edge — you're pre-positioned on names before the breakout, instead of chasing scans on the day.

---

## Setup (both screens)

- **Timeframe: 1D.** Pocket pivots are defined on daily data; other TFs are meaningless here.
- **Run AFTER market close.** On the live bar, volume is partial — pivots only turn true late in the session and crosses flicker until the bar confirms.
- **Universe for Stage 1:** all NSE equity, or your preferred cap filter. Add a liquidity floor early — see "Liquidity gate" below.
- **Universe for Stage 2:** the BUFFER watchlist only.
- **Known limit:** PineScreener loads only ~500 bars, so percentile bands use ~2 years, not 5. Treat percentile columns as directional, not absolute.
- **Column direction (memorise these two):** ① Valuation Score = price ÷ fair value → **below 1 = cheap**. ③ Valuation Zone: negative = cheap, −2 = below the low band, +2 = above the high band.

---

# STAGE 1 — The scan menu

Run these as separate saved screens. Each answers a different question; **overlap between them is a strength signal**, not a duplicate.

## Family A — Ready now (value + volume + trend aligned)
These are most likely to pass the EOD gates soon. Highest priority into the buffer.

**A1 · Flagship conviction**
```
🚀 Accumulation Signal = 1
```
Pivot + value zone + ADX turning up, all at once. Usually the shortest list — take every name.

**A2 · Strong conviction (fundamentals-confirmed)**
```
🔥 Strong Conviction = 1
```
Undervalued + good data + pocket pivot + up-trend.

**A3 · Score-ranked**
```
★ Conviction Score > 70    → sort ★ descending
```
Use when A1/A2 return too few. Lower to 60 in thin markets, never below 50.

**A4 · Value breakout**
```
💥 Value Breakout = 1
```
Pivot while undervalued in a confirmed uptrend — the cleanest single-column scan.

## Family B — Early / building (buffer for weeks)
Cheap and turning, but not yet technically ready. This is your **buffer's core inventory**.

**B1 · Cheap and starting to move**
```
🟩 Pocket Pivot >= 1  AND  🎯 Near Low FV Band = 1
```

**B2 · Value + technical quality**
```
🟩 Pocket Pivot >= 1  AND  ① Valuation Score < 0.9  AND  Tech Score >= 2
```

**B3 · Early trend change at value (ADX)**
```
🔼 Trend Building = 1  AND  ① Valuation Score < 1.0
```

**B4 · Pattern signals** → these deserve their own section; see **"The pattern engine"** below.

## Family C — Deep value watch (monthly review, low urgency)
No technical confirmation yet. These wait for stage 2 to arrive; some never do.

**C1 · Fundamentally cheap, data-backed**
```
① Valuation Score < 0.9  AND  Data Quality >= 3  AND  Coverage % >= 75
```
**Coverage %** is the v4.1 honesty column: it's the share of the fair-value model actually populated. Data Quality counts metrics; Coverage weights them. `DQ 3 + Coverage 40%` = a "fair value" resting on one ratio — skip it.

**C2 · Margin-of-safety screen**
```
Margin of Safety % > 20  AND  Coverage % >= 75    → sort MoS descending
```

**C3 · Percentile cheapness**
```
② Upside to FV % > 20  AND  ⑨ Avg Percentile < 30
```

## Family D — Specialty
**D1 · Bottom-fishing reversal** (earlier, higher risk — always pair with value)
```
🟩 Pocket Pivot >= 2  AND  🎯 Near Low FV Band = 1
```
Column encoding: `1 / 1.5` = standard pivot in the 10MA pocket · `2 / 2.5` = bottom-fish reclaiming the 50MA. The `.5` tier means pivot volume ≥ 2× the largest down-day volume — **sort `Vol / MaxDownVol` descending to rank pivots by force.**

**D2 · Crash reversal**
```
🔄 30% Fall Reversal + PP @ FV = 1
```

**D3 · State alerts** (always-true conditions, scannable any day)
```
🟢 Deep Value · 💎 Deep Value Opportunity · 🚨 Extreme Overvaluation (avoid-list)
```

---

# The pattern engine — base breakout · FVR rebound · fall reversal

These are the most demanding signals in the script: each stacks **valuation + structure + trend + volume** into one flag. They're also the ones worth understanding precisely, because each maps to a different market situation.

## 📦 Long Base Breakout · 🚀 Long Base Breakout + Pocket Pivot

**What it detects:** a Darvas/Weinstein base break **with a valuation floor**.

Every condition must hold:
- **Tight base** — the last 30 bars span ≤ 18% high-to-low
- **Base sits at or above value** — close ≥ 97% of the low fair-value band. *This is the clever part:* it rejects bases built below fair value (broken stocks going sideways) and keeps bases built on top of value.
- **Clean break** — close > base high **+ 1.5% buffer** (kills marginal pokes)
- Bullish bar, DI+ > DI−, and trend up or building

**Why it works for you:** this is the closest thing in the suite to a pure stage-2 entry — a tight base resolving upward on a name that isn't expensive. Expect these to convert to EOD `BUY` fastest (they map to EOD **SetupCode 1** base-breakout / **4** resistance-breakout).

**Use:** `🚀 Long Base Breakout + Pocket Pivot` as your primary — the volume-confirmed version. The plain 📦 is for a wider net when the market is quiet.

## ↗️ FVR Pullback Rebound · 🟢 FVR Rebound + Pocket Pivot

**What it detects:** price dipped into the fair-value floor and is **bouncing with a structural reclaim** — a buy-the-pullback-to-value, explicitly not a falling knife.

- **Recent value test** — within the last 12 bars, price either touched within 3% of the low band, or traded in the bottom 35% of the low→fair range
- **Rebounding now** — bullish bar, above prior close, back above the fast MA, DI+ > DI−
- **Plus a reclaim** — MA crossover, *or* takes out the recent swing high, *or* crosses back above the low band
- **Not extended** — still below the high band, so the move has room

**Why it works:** the reclaim requirement is what separates this from catching knives. Price must *prove* the bounce by reclaiming something structural, not merely stop falling.

**Use:** `🟢 FVR Rebound + Pocket Pivot`. Buffer these — they're often early, and EOD will tell you when stage 2 actually arrives.

## 🔄 30% Fall Reversal + PP @ FV

**The most stringent signal in the script** — five independent confirmations:
1. **Crashed** — down ≥ 30% from the 120-bar peak
2. **Landed on value** — now within 5% of the low band *or* the median fair value
3. **Pocket pivot** — the volume signature
4. **Reversal bar** — up close, above prior close, closing in the **top 65%** of its range
5. **Reclaim or turn** — takes out the 10-bar swing high, or the trend is genuinely turning

**Why it works:** a crash that has *landed on fair value and turned on volume* is a fundamentally different animal from a crash still falling. That said, this is the earliest and highest-risk of the three — the wound is fresh.

**Use:** buffer, don't rush. Let EOD confirm stage 2 before committing, or take a starter position with a stop under the reversal bar's low.

## 🔥 Pattern Conviction — the umbrella

`(FVR Rebound + PP) OR (Base Breakout + PP)`, plus minimum data and a trend that's up or building. **One screen that catches both patterns, already volume- and data-confirmed.** If you only run one pattern scan, run this.

## Tuning them (Inputs → "Pattern Signals" / "Reversal Patterns")

| Input | Default | Turn it… |
|---|---|---|
| `Require Pocket Pivot For Main Pattern Flags` | off | **ON** to make the plain 📦/↗️ columns volume-strict — then you don't need the separate +PP columns at all |
| `Base Tightness %` | 18 | ↓ 10–12 for VCP-tight bases · ↑ 22–25 for volatile smallcaps |
| `Base Breakout Buffer %` | 1.5 | ↑ 2–3 to reject marginal breaks · ↓ for earlier entries |
| `Long Base Lookback` | 30 | ↑ 50–60 for genuinely long bases (fewer, better) |
| `Pullback Lookback Bars` | 12 | ↑ if you want rebounds from older dips to still count |
| `FVR Touch Threshold %` | 3.0 | ↑ 5 if the low band is rarely touched cleanly |
| `Minimum Prior Fall %` | 30 | ↑ 40–50 for genuine washouts only |
| `FV Zone Tolerance %` | 5.0 | how close to fair value the reversal must land |

## Where each lands in the funnel

| Signal | Urgency | Where it goes |
|---|---|---|
| 🚀 Base Breakout + PP | **Highest** — often EOD-actionable within days | Buffer, check EOD daily |
| 🟢 FVR Rebound + PP | Medium — early by design | Buffer, wait for EOD stage 2 |
| 🔄 30% Fall Reversal | Lowest — earliest, highest risk | Buffer, starter only or wait |
| 🔥 Pattern Conviction | Covers the first two | Run this if you run only one |

---

# STAGE 1 — Scanning by alertcondition

PineScreener evaluates **only the last bar**. A raw event alert would therefore be true for exactly one day — scan on Saturday and you'd see nothing that fired Monday–Thursday. This script solves that with a scan window, and that single input is the most important dial in your workflow.

## The two alert types

**STATE alerts** — true for as long as the condition holds. Scan any day, no window needed.
```
🟢 Deep Value · 💎 Deep Value Opportunity · 🚨 Extreme Overvaluation
```

**EVENT alerts** — the other 18. Each is wrapped so it stays true for `Event Scan Window` bars after the event (`ta.barssince(cond) < window`).

## The Event Scan Window dial

| Setting | Means | Use for |
|---|---|---|
| **5** (default) | "signaled this week" | Weekend scanning — the right default for you |
| **1** | Event bar only | Strict "today only" scan; also correct for real live alerts |
| **10** | "signaled this fortnight" | Slower cadence, or widening a thin list |

Saved screens store their own inputs — so keep one screen at 5 for the weekend sweep and another at 1 for a daily "fresh today" pass.

## Alert recipes by family

**Family A — ready now**
```
🚀 Accumulation Signal   ·   🔥 Strong Conviction Buy   ·   💥 Value Breakout
```

**Family B — early / building**
```
🟩 Pocket Pivot · 🔼 Value Trend Turn · 🔄 Bullish Trend Change · 📶 Up-Trend Strengthening
🟢 FVR Rebound + Pocket Pivot · 📦 Long Base Breakout · 🚀 Long Base Breakout + Pocket Pivot
🔥 Pattern Conviction · 🔄 30% Fall Reversal + PP @ FV
```

**Family C — deep value (state, scan anytime)**
```
🟢 Deep Value   ·   💎 Deep Value Opportunity
```

## The transition alerts — your best buffer-fillers

These fire the moment a name *enters* your zone, which is exactly what a buffer wants:

| Alert | What just happened | Action |
|---|---|---|
| **📍 Became Undervalued** | Crossed below fair value | **The single best buffer-filler** — new candidates, weekly |
| **📍 Dropped Below Low Band** | Now below the low band | Deep-value bucket; needs a pivot before it matters |
| **📍 Reclaimed Fair Value** | Re-rating starting from below | High-value: the market is beginning to agree |

## Exit / risk scans — run on your HOLDINGS watchlist

The alerts aren't only for discovery. Point these at what you own:
```
🚨 Extreme Overvaluation (state)  ·  📍 Became Overvalued  ·  📍 Lost Fair Value  ·  🔻 Bearish Trend Change
```

## Stacking alerts with columns — the highest-value combination

An alert says *"this happened"*; a column says *"and it's worth acting on"*. Combine them:

```
🟩 Pocket Pivot = true  AND  ① Valuation Score < 0.9  AND  Coverage % >= 75
🚀 Accumulation Signal = true  AND  Vol / MaxDownVol >= 2
📍 Became Undervalued = true  AND  Data Quality >= 3  AND  Coverage % >= 75
```

**To OR several alerts:** run them as separate saved screens and merge into the buffer. That's not just a workaround — it preserves which family sourced each name, which is how you learn what actually pays.

---

## Triage → buffer

For every hit, glance at three columns before adding:

1. **Coverage % ≥ 75** — else the valuation is thin air. (< 50 = reject outright.)
2. **③ Valuation Zone** — is it cheap because it's *cheap*, or cheap because it's *broken*? Zone −2 with no pivot is a falling knife.
3. **Vol / MaxDownVol** — pivot force. Below 1.5 is a weak pivot.

Tag the name in the buffer with its source family (A/B/C/D). When it eventually triggers in EOD, you'll know whether your discovery edge was value, volume, or pattern — that's how the funnel teaches you which family actually pays.

**Buffer hygiene:** cap it at ~40–60 names. Drop anything that has sat 3 months without an EOD ARM, or where ① has drifted above 1.2 (the thesis got priced in while you waited).

---

# STAGE 2 — EOD Screener on the buffer

Universe = BUFFER watchlist. Run daily after close.

## ⚠️ EOD alerts work differently from PP alerts

This asymmetry will bite you if you carry the PP habit across:

| | PP Screener | EOD Screener |
|---|---|---|
| Alert type | **Windowed** — true for 5 bars after the event | **Edge-triggered** — true on the transition bar ONLY |
| Weekend scan | Catches the whole week | Catches **only Friday's** transitions |
| Best practice | Scan by alert | **Scan by column**, use alerts for "new today" |

So on EOD, prefer the **columns**: `BUY = 1` and `ARM = 1` are level-based — they stay 1 for as long as the condition holds, which is what you want for a daily actionable list.

Use EOD **alerts** for a different job — isolating what changed *today*, so you don't re-read names you already triaged:
```
✅ BUY (full confirm)   ⌛ ARM (setup coiling)   Setup triggered
Entered Stage 2         Quality score ≥ 5
```
(`Stage-2 ignition` and `Volume breakout` are the two level-based exceptions — they behave like columns.)

## The daily read

**Ready today**
```
BUY = 1  AND  DataOK = 1
→ sort Score descending
```

**Setting up (tomorrow's candidates)**
```
ARM = 1  AND  DataOK = 1
→ sort Score descending
```

## Your discipline filters — the part that matters

Add these to every EOD screen; they enforce your own rules mechanically:

```
SlClamped = 0        ← structural stop intact (NOT an arbitrary % cap)
Stop_% <= 3          ← your hard rule
RR >= 2              ← reward justifies the risk
Turnover >= [floor]  ← slippage protection
```

**`SlClamped` is the single most valuable column for you.** `1` means the structural stop was wider than your cap, so the script clamped it to a percentage — there is no real structure beneath that stop. A clamped stop is a fake stop. Filter them out.

**Turnover floor:** set it to at least 100× your intended position size in ₹. With full-capital deployment, slippage on illiquid names is your largest unmodeled risk — this column exists specifically for that.

## Reading a candidate row

| Column | What you're checking |
|---|---|
| `Stage` / `StageWeeks` | Stage 2, and **freshly** so — low StageWeeks = early in the advance, the highest-value Weinstein entries |
| `MansRS_%` | Mansfield RS — positive and rising = leadership. Sort by it to rank a crowded BUY list |
| `SetupCode` | 1 Base-breakout · 2 Bull-flag · 3 Double-bottom · 4 Resistance-breakout · 11 tight base forming · 12/13/16 pre-trigger states |
| `Vol_x` | Volume expansion on the trigger — thin breakouts fail |
| `Entry / Stop / TP1 / Qty` | The plan, pre-computed at your sizing |
| `SugStop_% / SugRR` | The alternative if the structural stop is too tight to be safe |
| `Ext_%` | Extension above the stage MA — high = chasing |
| `NextRes` | Overhead supply — a wall right above kills the R:R |
| `DataOK` | `0` = short history, gates ran on incomplete data. Never trade a `0`. |

## Ranking a crowded list
Sort `Score` desc → break ties with `MansRS_%` desc → prefer low `StageWeeks` (fresh stage 2) and low `Ext_%` (not extended). Cross-reference back to the PP screener: if the name also shows `🚀 Accumulation Signal = 1`, both engines agree — that's your highest-conviction bucket.

---

## Weekly rhythm

| When | Do |
|---|---|
| **Sat** | Run Family A + B fully (alert screens at **Event Scan Window = 5** = "signaled this week") + 📍 Became Undervalued; refresh buffer; drop stale names. Pairs with your iList weekly review. Also run the exit-scan set on holdings. |
| **Sun** | Family C monthly-ish; note which buffer names are approaching stage 2. |
| **Daily after close** | EOD on buffer → BUY list (act) + ARM list (tomorrow's watch). |
| **Midweek (Wed)** | Quick A1/A4 re-run to catch fresh pivots between weekends. |

## Pitfalls

- **Intraday runs lie.** Partial volume breaks every volume-gated column in both screens — and pocket-pivot alerts only turn true late in the session.
- **A blank alert scan usually means the window, not the market.** If an event-alert screen returns nothing, check `Event Scan Window` before concluding there are no setups — at 1, a Saturday scan only sees Friday.
- **Don't scan EOD by alert on weekends.** Edge-triggered: you'd only catch Friday. Use `BUY = 1` / `ARM = 1` columns instead.
- **Don't skip Coverage %.** The C1 fix means no-data names now show blank rather than a fake "fair value" — but a thin-coverage name still looks confident. Coverage is the tell.
- **A clamped stop is not a stop.** `SlClamped = 1` → the ✂ cap replaced real structure.
- **`DataOK = 0` / blank Stage** = recent listing with insufficient history. The gates ran on `na`.
- **Extension is measured against the 30-period stage MA** (v4.1 corrected this from the 10-EMA). It reads stricter than before — if your BUY list thins noticeably, loosen `maxExtPct` rather than ignoring the column.
- **The buffer is the asset.** The scans are just how you fill it. Most of the compounding comes from being *already watching* a name on the day it breaks out.
