stocks / docs /patterns.md
Arrechenash's picture
Initial Commit
8ec1895
|
Raw
History Blame Contribute Delete
26.2 kB
# Scanner Patterns
Análisis de patrones de trading contra el scanner DSL actual.
Identifica qué se puede expresar hoy y qué falta para capturar cada patrón con precisión.
> **Propósito**: guiar la evolución del DSL — qué reglas, columnas, y funciones priorizar para
> cubrir la mayor cantidad de patrones con el menor esfuerzo.
---
## Condiciones Ideales (Long Bias)
Más allá de las características específicas de cada patrón, existen condiciones estructurales
que favorecen cualquier estrategia en largo. No todas son necesarias siempre, pero cuantas
más se cumplan, mayor probabilidad de éxito.
| Condición | Descripción | Filtrable hoy? |
|---|---|---|
| **Volumen histórico** | Rotando el float, preferiblemente múltiplos del float total | ⚠️ Proxy con `volume > avg(volume, 60) * 5` + `market_cap < 2B`. `float_shares` existe en discovery/analyze, pero no está en el whitelist del scanner. |
| **Catalizador fuerte** | Earnings, contratos grandes, FDA approval fase 3, partnerships | ❌ No hay fuente de datos estructurados en el scanner. |
| **Sin dilución** | Sin public offerings ni financiamiento dilutivo reciente | ❌ No hay columna de financing. Posible via SEC filings si se integra. |
| **Sin overhead resistance** | Sin niveles de resistencia histórica por encima del precio actual | ❌ No hay concepto de S/R en la DSL. El 52-week high es el único "sin resistencia" implícito. |
| **Former runner** | La acción ya ha mostrado capacidad de correr en el pasado (ha tenido días de volumen masivo antes) | ⚠️ Proxy: `max(volume, 60) > avg(volume, 252) * 3`. No es exacto pero aproxima. |
| **Low float** | Menor a 15M shares | ❌ Sin `float_shares` en el scanner DSL. Proxy actual: `market_cap < 2B`. |
| **Sin sobreextensión** | Que no haya tenido una corrida vertical inmediatamente antes del setup | ❌ No hay `streak_run_pct < 50` combinado con contexto. Depende del patrón. |
| **Verde en el día** | Close > open, o recuperando ese nivel durante la sesión | ✅ `close > open`. También `run_pct > 0` o `change_pct > 0`. |
La columna `float_shares` es una buena candidata para el scanner, pero hoy **no** es filtrable
desde el DSL. Sí aparece en discovery/analyze y en varios proveedores, así que el camino más
corto es exponerla explícitamente en el whitelist si el parquet la contiene. El resto
(catalyst, dilución, overhead resistance) requieren fuentes de datos que el scanner no tiene hoy.
---
## Resumen Ejecutivo
**10 patrones analizados.** Dos features ya están soportadas y una sigue siendo roadmap.
| Feature | Patrones que cubre | Estado | Esfuerzo |
|---|---|---|---|
| `float_shares` como columna filtrable | 0/10 | No implementado en el scanner DSL | Horas (whitelist + verificar parquet) |
| `$entry.open`, `$entry.close` como referencia dinámica | 8/10 | Implementado | Ya soportado en `|>` |
| `$phase.volume` como columna filtrable | 0/10 | No implementado | Medio (engine change) |
Ver [Features Priorizadas](#features-priorizadas) al final.
---
## 1. Gap&Crap
### Descripción
Patrón base del cual deriva el Gap&Crap Reversal. Es el **escenario esperado** cuando una
acción hace gap up en small caps: abre con gap, se pone roja, y **sigue cayendo todo el día**
llenando parcial o totalmente el gap. Los shorts ganan.
No es una estrategia en largo — es el movimiento que los shorts esperan y contra el cual
opera el Gap&Crap Reversal. Se documenta para entender la diferencia.
### Mecánica
1. Gap up significativo (> 15-30%) en premarket
2. Open → se pone roja, debajo de VWAP
3. Sigue haciendo nuevos lows durante la sesión
4. No hay compradores que absorban la venta
5. Gap fill parcial o completo al cierre
6. Shorts mantienen el control todo el día
### Diferencia con Gap&Crap Reversal
| | Gap&Crap | Gap&Crap Reversal |
|---|---|---|
| Después del dump | **Sigue cayendo** | Encuentra soporte |
| Shorts | **Ganan** (mantienen posición) | **Pierden** (forzados a cubrir) |
| Longs | Pierden | Ganan |
| Volumen | Normal o bajo | **Masivo** (absorbe toda la venta) |
| Estructura | Nuevos lows constantes | Double bottom / higher lows |
| Resultado | Gap fill | Nuevos máximos |
### Condiciones clave
El Gap&Crap estándar es más difícil de pescar como set up en largo porque NO conviene
comprarlo. Se menciona como **contexto** — es lo que el mercado espera, y el Reversal es
lo que ocurre cuando ese escenario falla.
### Expresión actual
```
gap_pct > 15% and close < open and close < vwap
```
---
## 2. Gap&Crap Reversal
### Descripción
Estrategia que busca el **escenario fallido del Gap&Crap**: la acción abre con gap up > 30%,
se pone roja y cae debajo de VWAP, los shorts atacan confiados, pero el volumen es tan masivo
que absorbe toda la venta. Se forma un soporte (double bottom / higher lows), y se produce
un short squeeze que lleva la acción a nuevos máximos con más volumen del que arrancó.
### Mecánica
1. Gap up **> 30%** en premarket
2. Open y reversal → se pone roja, cae debajo de VWAP
3. Shorts confiados apilan presión esperando el gap fill típico
4. Volumen TAN masivo que absorbe toda la venta → **no puede hacer nuevos lows**
5. Double bottom / higher lows debajo de VWAP
6. Short squeeze → shorts forzados a cubrir → rompe VWAP, open, hace nuevos máximos
> **⚠️ Probabilidad**: este evento se da ~20-30% de las veces según el playbook original. Cuando funciona, la relación R/R supera 3:1, pero **no es un setup recurrente** — es un evento de baja probabilidad. Operarlo sin considerar esto lleva a sobreexposición.
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Gap 30%+ | `gap_pct > 30%` ✅ |
| Caída debajo de VWAP | `close < vwap` en dump phase ✅ |
| No nuevos lows | `low > $dump.low` en base phase ✅ |
| Volumen masivo | `volume > avg(volume, 60) * 5` ✅ |
| VWAP reclaim | `close > vwap` en squeeze phase ✅ |
| Nuevos máximos | `close > session_high` ✅ |
| **Float < 15M** | ❌ `float_shares` no está en whitelist |
| **Consolidación / double bottom** | ❌ No hay higher lows detection multi-barra |
| **Volumen entre fases** (base vol > dump vol) | ❌ `$phase.volume` no es filtrable |
### Riesgo
El último low de la base es el riesgo. Si se rompe, la tesis del reversal se derrumba — los shorts retoman el control y el gap fill continúa. Dado que es un evento de baja probabilidad (~20-30%), la disciplina con el riesgo es crítica.
### Expresión actual
```
gap_pct > 30% sort gap_pct desc
|> $dump(close < vwap and close < $entry.open * 0.95)[09:30-10:00]
|> $base(low > $dump.low and close < vwap)[10:00-12:00]
|> $squeeze(close > vwap and close > $entry.open and close > $dump.high)[10:30-15:50]
```
---
## 3. Gap and Go
### Descripción
Acción que hace gap en premarket con noticias, consolida debajo de su pm_high, y rompe
al alza en la primera hora. Los shorts usan pm_high como riesgo y se ven forzados a cubrir
cuando se rompe.
### Mecánica
1. Gap up **> 15%** con noticias (sin sobreextensión)
2. Consolidación en premarket debajo de `pm_high`
3. Breakout de `pm_high` en la **primera hora** con volumen
4. Retest del breakout con **menos volumen** → entry
5. Run hacia la próxima resistencia
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Gap > 15% | `gap_pct > 15%` ✅ |
| Breakout de pm_high | `close > pm_high` ✅ |
| Primera hora | `time >= '09:30' and time <= '10:30'` ✅ |
| Volumen sobre histórico | `volume > avg(volume, 60)` ✅ |
| **Sin sobreextensión** (open cerca de pm_high) | ❌ No hay `(open - pm_high) / pm_high` |
| **Consolidación premarket** (rango angosto) | ❌ No hay `pm_range_pct` |
| **Retest con menos volumen** | ❌ No hay volumen comparativo entre barras |
| **Spike > 5% sobre BO** (confirmación) | ❌ No hay `close > pm_high * 1.05` usable |
| **Stuffed move detection** | ❌ Rechazo con más volumen que la ruptura |
### Riesgo
El pm_high es el riesgo. Si el precio rompe y rechaza con más volumen que la vela de ruptura (stuffed move), los shorts atrapados se liberan y el escenario se da vuelta — es el Gap&Extension.
### Expresión actual
```
gap_pct > 15% and volume > avg(volume, 60) and market_cap < 2B
| time >= '09:30' and time <= '10:30' and close > pm_high and close > open
```
> ⚠️ **Sobreextensión no filtrada**: la expresión matchea cualquier acción que rompa pm_high, incluso si abrió muy lejos de ese nivel. El playbook exige que el spread entre open y pm_high sea < 15% — idealmente `(open - pm_high) / pm_high < 0.10`. Sin esa columna, el scanner no puede descartar Gap&Go falsos que en realidad son extensiones verticales.
---
## 4. Breakout
### Descripción
Ruptura de una resistencia anterior que se convierte en soporte. El escenario ideal es el
**52-week high breakout** (máximo en 52 semanas, sin resistencias arriba).
### Mecánica
1. Resistencia identificable (52-week, multi-month, multi-day, HOD, pm_high)
2. Breakout > 5% por encima del nivel + **volumen mayor al día que formó la resistencia**
3. El nivel roto se transforma en soporte
4. Retest con **menos volumen** que la vela de breakout → entry
5. Fail = **bull trap**: rompe sin volumen, rechazo, techo falso
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| 52-week high | `close > max(high, 252)` ✅ (preset existente) |
| Multi-day BO | `close > max(high, 20)` ✅ |
| HOD BO | `close > session_high` ✅ |
| pm_high BO | `close > pm_high` ✅ |
| Volumen confirmación (proxy) | `volume > avg(volume, 60) * 2` ⚠️ Proxy: el playbook exige "volumen mayor al día de la resistencia", no al promedio. La columna `max(high,252)` no expone el volumen de ESE día, así que no podemos comparar directamente. |
| **Volumen > día de la resistencia** | ❌ `max(high, 252)` no expone el volume de ESE día |
| **Breakout > 5% sobre el nivel** | ❌ No hay `(close - max(high,252)) / max(high,252)` |
| **Retest con menos volumen** | ❌ Sin volumen comparativo |
| **Consolidación cerca del nivel pre-BO** | ❌ No hay rango angosto multi-día |
| **Bull trap** (rechazo + más volumen) | ❌ Secuencia de 3 momentos |
### Riesgo
El nivel de breakout es el riesgo (dejando espacio para fakeouts). Si el precio vuelve a perder ese nivel con volumen, es un **bull trap**: los compradores que entraron en el BO quedan atrapados y la presión vendedora puede acelerar la caída hasta el siguiente soporte.
### Expresión actual
```
# 52-week BO (preset de fastapi_app.py)
close > max(high, 252) and volume > avg(volume, 60) * 2
# Multi-day BO
close > max(high, 20) and volume > avg(volume, 60)
```
---
## 5. Red to Green
### Descripción
Misma mecánica que Gap&Crap Reversal pero **sin gap previo**. La acción abre roja (o se pone
roja rápido), los shorts atacan, pero el volumen es suficiente para absorber la venta y
eventualmente la acción recupera el open.
### Mecánica
1. Contexto: acción que perdió **40%+ desde máximos**, en bounce temprano (día 2-3)
2. Open rojo — abre debajo del close anterior, o se pone roja rápido sin hacer verde primero
3. Caída a soporte con **volumen decreciente** (vendedores se agotan)
4. Consolidación debajo del open
5. Breakout del open con **volumen > la vela de caída inicial**
6. Retest del open con menos volumen → entry
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Verde en el día | `close > open` ✅ |
| Rojo en dump phase | `close < open` ✅ |
| Volumen activo | `volume > avg(volume, 60)` ✅ |
| **Sin gran movimiento alcista previo** | ❌ El playbook exige que la acción NO haya hecho un spike >3-5% antes de ponerse roja. Si primero subió y después cayó, no es R/G puro — los shorts ya cubrieron en el spike alcista. |
| **-40% desde máximo anual** | ❌ No hay `(max(high,252) - close) / max(high,252) > 0.40` |
| **Primeros días verdes del bounce** | ❌ No hay detección de secuencia multi-día |
| **Volumen DECRECIENTE en caída** | ❌ No hay tendencia de volumen multi-barra |
| **Breakout vol > caída vol** | ❌ Sin volumen comparativo entre fases |
| **Volumen del open como referencia** | ❌ No existe columna `open_volume` |
| **Contexto multi-día** (rojo, rojo, verde) | ❌ Sin secuencia de closes |
### Riesgo
El nivel del R/G es el riesgo. Si el precio vuelve a perder ese nivel, los shorts recuperan el control y es probable un desmoronamiento.
### Expresión actual
```
close < max(close, 252) * 0.6 and volume > avg(volume, 60)
|> $dump(close < open)[09:30-10:00]
|> $base(low > $dump.low and close < open)[10:00-12:00]
|> $reclaim(close > open and close > $dump.high)[10:30-15:50]
```
---
## 6. VWAP Bounce
### Descripción
Pullback dentro de una tendencia alcista existente. La acción ya está arriba de VWAP con
volumen masivo, y el primer dip a VWAP es una oportunidad de compra porque los compradores
defienden ese nivel.
**No es un squeeze.** No hay shorts atrapados. Es comprar el pullback en una tendencia.
### Mecánica
1. Contexto: acción ya corriendo arriba de VWAP con volumen masivo
2. HOD > 15-20% arriba de VWAP (demuestra control comprador)
3. **Primer pullback** a VWAP en la primera hora y media
4. VWAP coincide con un soporte clave
5. VWAP aguanta → shorts cubriendo + compradores → bounce
6. Exit: primera resistencia arriba de VWAP
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Arriba de VWAP | `close > vwap` ✅ |
| Volumen masivo | `volume > avg(volume, 60) * 5` ✅ |
| HOD 15%+ sobre VWAP | `(session_high - vwap) / vwap > 0.15` ⚠️ (DuckDB directo) |
| Dip que rebotó | `low < vwap and close > vwap` ✅ |
| Ventana temporal | `time >= '09:30' and time <= '11:00'` ✅ |
| **Primer pullback** (no 2do, 3ero) | ❌ Sin contador de eventos |
| **VWAP coincide con soporte** | ❌ Sin soportes históricos |
| **Volumen >= float** | ❌ Sin `float_shares` |
| **Tendencia multi-hora arriba de VWAP** | ❌ No hay "N horas consecutivas arriba de VWAP" |
### Riesgo
El riesgo está en VWAP. Si el nivel no aguanta y el precio cierra por debajo, los shorts retoman el control y la caída puede ser pronunciada.
### Expresión actual
```
volume > avg(volume, 60) * 5 and close > vwap and
(session_high - vwap) / vwap > 0.15
| time >= '09:30' and time <= '11:00' and low < vwap and close > vwap
```
> La condición `(session_high - vwap) / vwap > 0.15` en el daily filter garantiza que la acción CORRIÓ por encima de VWAP antes del pullback. Sin esto, la expresión matchea cualquier acción cerca de VWAP, no un VWAP Bounce genuino.
---
## 7. VWAP Reclaim
### Descripción
La acción cruza debajo de VWAP (shorts toman control temporal) y luego lo recupera con
volumen. Es la fase final de Gap&Crap Reversal y Red to Green, pero como patrón independiente.
### Mecánica
1. Acción **verde** en el día
2. Gran corrida inicial → session_high bien arriba
3. **Pierde VWAP** → shorts confiados
4. Consolidación en soporte → deja de hacer nuevos lows
5. Reclaim de VWAP con **volumen creciente** → shorts cubren
6. Dip al VWAP con **menos volumen** → entry
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Verde en el día | `close > open` ✅ |
| Gran corrida inicial | `(session_high - vwap) / vwap > 0.10` ⚠️ |
| Perdió VWAP | `close < vwap` ✅ |
| Reclaim | `close > vwap` ✅ |
| **Volumen creciente hacia reclaim** | ❌ Sin tendencia de volumen multi-barra |
| **Dip vol < reclaim vol** | ❌ Sin volumen comparativo entre fases |
| **Reclaim rechazado con > volumen** | ❌ Fail detection |
| **Sin overhead resistance cerca** | ❌ Sin soportes/resistencias |
| **Mínimos más altos post-rechazo** | ❌ Sin higher lows detection |
### Riesgo
El riesgo está en el nivel de VWAP. Si el reclaim rechaza con mayor volumen que la vela de la ruptura, los shorts retoman el control. Si además no hay soportes cercanos por debajo, el retroceso puede ser de gran magnitud. Sin embargo, si después del rechazo la acción hace mínimos más altos, aún es factible un segundo reclaim.
### Expresión actual
```
close > open and volume > avg(volume, 60) * 3
|> $run(close > vwap and close > $entry.open and
(session_high - vwap) / vwap > 0.10)[09:30-11:00]
|> $dump(close < vwap and session_low < $run.low * 0.98)[10:00-12:00]
|> $reclaim(close > vwap and close > $dump.close and
volume > avg(volume, 20) * 2)[11:00-15:30]
|> $dip(close > vwap and low <= vwap and
low > $reclaim.low * 0.98)[12:00-15:50]
```
---
## 8. Dip Buying Panics
### Descripción
**Catching a falling knife.** Acciones altamente sobreextendidas (100-200%+) que sufren una
caída violenta >20% por razones técnicas (stops en cascada, shorts atacando), no
fundamentales. El rebote posterior se aprovecha en el long side — es mean reversion contra
la tendencia previa.
**Alto riesgo.** Es la única estrategia que va activamente contra la tendencia de la acción.
### Mecánica
1. Stock **massively extended** (100-200%+ en días recientes)
2. **Stop-loss cascade** → stops en cadena → caída violenta >20%
3. Short sellers atacan → aceleran la caída
4. **Sin fundamento negativo** (no dilución, no malas noticias)
5. Caída se frena en **soporte histórico**
6. **Primer pánico solamente** (subsiguientes menos probabilidad de rebote)
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Streak 100%+ | `streak_run_pct > 100%` ⚠️ (solo streaks continuas) |
| Caída >20% intraday | `(session_high - low) / session_high > 0.20` ✅ |
| Cerca del open | `time < '10:30'` ✅ |
| Reclaim de VWAP | `close > vwap` ✅ |
| **Primer pánico** (no 2do, 3ero) | ❌ Sin contador de eventos |
| **Sin fundamento negativo** | ❌ Sin news/catalyst detection |
| **Soporte histórico** | ❌ Sin soportes en la DSL |
| **OTC market** (preferido) | ❌ Sin columna `exchange` |
| **Level 2 / Time & Sales** | ❌ Fuera del alcance del scanner |
### Riesgo
El nivel de soporte del rebote es el riesgo. Si el precio lo vuelve a probar y no rebota con fuerza, los dip buyers que compraron salen rápidamente, creando un pánico mayor. El riesgo debe estar muy ajustado — es preferible salir con pérdida pequeña a quedar atrapado en medio del selloff.
### Expresión actual
```
streak_run_pct > 100% and volume > avg(volume, 60)
|> $panic(low < vwap and (session_high - low) / session_high > 0.20 and
close < $entry.close * 0.85 and time < '10:30')[09:30-10:30]
|> $reclaim(close > vwap and close > $panic.close * 1.05 and
volume > avg(volume, 20) * 2)[09:45-11:00]
```
---
## 9. Swing Primer Día Verde
### Descripción
**Única estrategia que se mantiene overnight.** Busca la continuidad de una corrida alcista:
acción en primer día verde con rango >20%, volumen >= float, cierre fuerte cerca del HOD
arriba de VWAP. Se compra en la última hora y se vende al día siguiente en el spike del open.
### Mecánica
1. **Primer día verde** de una corrida potencial
2. Rango >20%, volumen >= float (rotación completa)
3. Cierre fuerte: última hora con volumen, cerca del HOD, arriba de VWAP
4. Historial de continuación (acción ya mostró que después de volumen masivo suele continuar)
5. Entry: última hora, en VWAP o soporte
6. Exit: al día siguiente en el spike del open
7. Fail: gap down / public offering
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Rango >20% | `run_pct > 20%` ✅ |
| Volumen masivo | `volume > avg(volume, 60) * 5` ✅ |
| Arriba de VWAP | `close > vwap` ✅ |
| Cerca del HOD | `close > session_high * 0.95` ⚠️ |
| Última hora | `time >= '15:00'` ✅ |
| **Primer día verde** | ❌ Sin secuencia multi-día red→green |
| **Volumen >= float** | ❌ Sin `float_shares` |
| **Última hora con volumen** | ❌ `volume` no es columna intraday estándar |
| **Sin sell-offs >10% en última hora** | ❌ Sin detección de rangos en ventana temporal |
| **Historial de continuación** | ❌ Imposible en scanner (requiere backtest) |
| **Sin dilución / offerings** | ❌ Sin fuente de datos |
### Riesgo
**Riesgo overnight.** Es la única estrategia que expone la posición fuera del horario de mercado:
- Durante la sesión: el riesgo está en el nivel de entrada.
- Después del cierre: cubrir si la acción baja del close.
- Al día siguiente: idealmente cubrir en el spike del open en mercados bullish.
- El peor escenario es un **public offering** o noticias negativas que generen gap down.
> Llevar registro del funcionamiento histórico antes de adoptarlo como setup principal. No todas las condiciones de mercado favorecen los swings.
### Expresión actual
```
volume > avg(volume, 60) * 5 and run_pct > 20%
| time >= '15:00' and close > vwap and close > session_high * 0.95 and
low > session_high * 0.85
```
---
## 10. Rebote del 1er Día Verde (1st Day Bounce)
### Descripción
**Contra-cara de Swing 1°V.** Después de una corrida masiva (+100%, +200%), la acción se
agota, hace pico, y comienza a bajar con menor volumen. Cuando retrajo 25-50% de las
ganancias y llega a un soporte clave, se busca el **primer día verde** de un rebote
contra-tendencia. Es un bear market rally / dead cat bounce.
**Diferencia clave con Swing 1°V:**
| Swing 1°V | Rebote 1°V |
|---|---|
| Trending UP (continuación) | Trending DOWN (contra-tendencia) |
| Se mantiene overnight | Se intraday o 1 día |
| Cerca del HOD | RTG desde soporte |
| Fuerte, sigue subiendo | Débil, vender en resistencia |
### Mecánica
1. Corrida masiva (+100%+) con catalizador
2. Pico → reversión con **menor volumen**
3. Retracción del **25-50%** de las ganancias máximas
4. Llega a un **soporte clave** y lo aguanta
5. **Primer día verde** después de días rojos
6. Rebote de menor magnitud que la corrida original
7. Fail: cierra roja → tendencia bajista continúa
### Condiciones clave
| Condición | Filtro actual |
|---|---|
| Verde en el día | `close > open` ✅ |
| Retracción 25-50% desde pico | `(max(high,20)-close)/max(high,20) > 0.25 and < 0.50` ⚠️ |
| Volumen menor que corrida | `volume < avg(volume, 20) * 2` ⚠️ |
| **Primer día verde post días rojos** | ❌ Sin secuencia multi-día |
| **Volumen del pico como referencia** | ❌ No hay volumen comparativo |
| **Soporte clave** | ❌ Sin soportes históricos |
| **Catalizador conocido** | ❌ Sin news/catalyst |
| **Sin dilución** | ❌ Sin fuente de datos |
| **Día 2-3 de tendencia bajista** | ❌ Sin "días desde el pico" |
### Riesgo
El nivel del open es el riesgo. Si la acción no logra sostener el open y cierra roja, la tendencia bajista continúa — es un setup contra-tendencia, por lo que la recompensa debe ser conservadora. Salir en la próxima resistencia, no esperar una corrida como la original.
### Expresión actual
```
close > open and
(max(high, 20) - close) / max(high, 20) > 0.25 and
(max(high, 20) - close) / max(high, 20) < 0.50
|> $dump(close < open and close < vwap)[09:30-10:30]
|> $rtg(close > open and close > vwap)[10:00-15:50]
```
---
## Features Priorizadas
### 🔴 Fase 1 — Lo que más patrones destrava
| # | Feature | Esf. | Impacto | Descripción |
|---|---|---|---|---|
| **1** | `float_shares` en whitelist | 🟢 Horas | **6/10** | Agregar al `allowed_names` en `expression_parser.py` si la columna existe en parquet. |
| **2** | `$entry.open`, `$entry.close` como ref dinámica | 🟢 Horas | **8/10** | Exponer `$entry.open`, `$entry.close[-1]`, `$entry.high`, `$entry.low` como cross-phase refs utilizables en condiciones `|>` y daily filter. |
| **3** | `$phase.volume` como columna filtrable | 🟡 1d | **4/10** | Permitir `$dump.volume > 10M`, `$reclaim.volume > $dump.volume * 2` en condiciones de fase. |
### 🟡 Fase 2 — Precisión
| # | Feature | Esf. | Impacto |
|---|---|---|---|
| **4** | Secuencia multi-día ("últimos N días fueron rojos") | 🟡 1-2d | 3/10 |
| **5** | Referencia a soporte (min en ventana de días como nivel) | 🟡 1-2d | 5/10 |
| **6** | Consolidación cerca de nivel (rango angosto multi-barra) | 🟡 1d | 4/10 |
### 🟢 Fase 3 — Específico de 1 patrón
| # | Feature | Patrón |
|---|---|---|
| **7** | Retracción desde pico (25-50%) | Rebote 1°V |
| **8** | Contador de eventos ("primer" pullback/panico/día) | VWAP Bounce, Dip Panic, Swing 1°V, Rebote 1°V |
### ❌ No implementable (fuera del alcance del scanner)
| Feature | Motivo |
|---|---|
| Level 2 / Time & Sales | Datos no están en parquet ni llegan via API |
| Catalyst / noticias | Fuera del modelo de datos actual |
| Dilución / public offerings | Requeriría integrar SEC filings |
| Exchange (OTC detection) | No está en parquets diarios |
---
## Matriz de Cobertura
Leyenda: **G&C** = Gap&Crap (estándar), **G&C Rev** = Gap&Crap Reversal, **G&Go** = Gap and Go,
**BO** = Breakout, **RtoG** = Red to Green, **VWAPb** = VWAP Bounce, **VWAPr** = VWAP Reclaim,
**Panic** = Dip Buying Panics, **S1°V** = Swing 1er Día Verde, **R1°V** = Rebote 1er Día Verde.
```
G&C G&C Rev G&Go BO RtoG VWAPb VWAPr Panic S1°V R1°V FREC
float_shares N/A ❌ ❌ ❌ ❌ ❌ ❌ ❌ ❌ ❌ 0/10
$entry.open ref N/A ✅ ✅ ✅ ✅ ✅ ✅ — ✅ ✅ 8/10
$phase.volume filtrable N/A — ✅ ✅ ✅ — ✅ — — — 0/10
Vol. comparativo (2 cols)N/A — ✅ ✅ ✅ — ✅ — — — 0/10
Consolidación / rango N/A — ✅ ✅ ✅ — ✅ — — — 0/10
Secuencia multi-día N/A — — — ✅ — — — ✅ ✅ 0/10
Contador de eventos N/A — — — — ✅ — ✅ ✅ ✅ 0/10
Soporte histórico N/A — — ✅ — ✅ — ✅ ✅ ✅ 0/10
Retracción desde pico N/A — — — — — — — — ✅ 1/10
Catalyst / dilución N/A ✅ ✅ ✅ — — — ✅ ✅ ✅ 0/10
```
> **N/A**: Gap&Crap estándar no es una estrategia en largo, por lo que las features de
> scanner long no le aplican directamente.