Seguidor de tendencia por ruptura de consolidación sobre futuros de criptomonedas. v35: detección de rangos adaptativa por ATR y ratio de eficiencia, con la zona macro convertida en fuente de señal además de filtro.
Sistema algorítmico de trading para futuros de criptomonedas · Perfil actual: BINANCE:ZECUSDT · 30 minutos
Autor: José Ernesto Morales Ventura · TreeSys (treesys.shop)
Motor: Layers_v35.pinescript (indicator "LayersV35", Pine Script v6) · Auditoría: Layers_v34_strategy_check.pinescript (strategy — pendiente de portar a v35)
Ejecución: TradingView → webhook TreeSys → Binance USDT-M Futures
Documento para público técnico e inversionistas. No constituye asesoría financiera.
Layers v34 es un sistema seguidor de tendencia por ruptura de consolidación: detecta zonas donde el precio se comprime (rangos), entra cuando el precio rompe la zona con el momento a favor, y gobierna la posición con una jerarquía de seis mecanismos de salida diseñados para cortar rápido las operaciones malas y dejar correr las buenas.
Instantánea del perfil en producción (ZECUSDT, 30m, ventana de 12 meses, simulación con apalancamiento 20× y comisiones de Binance):
| Métrica | Valor | Lectura |
|---|---|---|
| Órdenes simuladas | ~501 | ≈ 1.4 operaciones/día — muestra estadísticamente significativa |
| Win Rate | 50.3% | La mitad de las entradas pierde por diseño (ver §2) |
| Drawdown máximo | 19.1% | Dentro de la banda aceptable (≤25%) para estrategias retail apalancadas |
| Resultado simulado | +$8,500 – $10,100 / 12 meses | Con margen fijo de $80/orden (sin interés compuesto), capital de referencia $1,000 |
| Promedio por orden | ≈ +$17 | ≈ +21% del margen por orden, netas de comisiones |
| Score del optimizador | 31.2 (base) → 43.9 alcanzable | score = WinRate% − MaxDD% (ver §8) |
El sistema es 100% mecánico: cada regla de este documento es una condición booleana en el código, verificable línea por línea, y toda la contabilidad (win rate, drawdown, Kelly, Sharpe, Sortino) se calcula sobre las mismas órdenes que dispararía el webhook.
Layers no intenta ganar todas las entradas. Su ventaja no está en la tasa de acierto sino en la asimetría del resultado: las operaciones ganadoras generan, en promedio, mucho más de lo que cuestan las perdedoras. Las pérdidas no son fallos del sistema — son el costo operativo presupuestado de estar presente cuando la tendencia sí despega.
La matemática que lo sostiene es la esperanza por operación:
EV = WR × GananciaMedia − (1 − WR) × PérdidaMedia
Con un Win Rate de ~50%, el sistema es rentable siempre que el payoff ratio R (ganancia media ÷ pérdida media) supere 1.0 — y toda la arquitectura de Layers empuja R hacia arriba:
Consecuencias que el inversionista debe internalizar:
Toda la lógica se evalúa sobre velas Heikin-Ashi del propio símbolo/temporalidad (request.security(ticker.heikinashi(...))), sin importar el tipo de vela del gráfico. Las HA promedian el ruido intra-vela y hacen las pendientes y rupturas más estables. realClose conserva el precio real para las integraciones; los fills de SL/TP se contabilizan al nivel exacto tocado.
| Bloque | Qué aporta | Parámetros clave |
|---|---|---|
| Detector de rango (motor de entradas) | Encuentra consolidaciones. v35: ancho en ATR + ausencia de progreso (ratio de eficiencia) + longitud variable, medido con mechas HA. La ruptura de la caja ES la señal. | rangeAdaptive=on, rangeAtrMult=1.8, rangeMaxER=0.55, rangeMinLen/MaxLen=3/12 |
| Ichimoku modificado (SMA Senkou) | Senkou A/B suavizadas por SMA definen el sesgo estructural; sus cruces y pendientes gobiernan las salidas ICL/ICS y OUT. | Tenkan 3, Kijun 15, Senkou 40 |
| Squeeze Momentum (LazyBear) | Oscilador de momento (regresión lineal sobre BB 20/2.0 + KC 40/1.5 True Range). Filtra entradas y confirma salidas. | umbrales entrada ±100 (abierto), salida en cruce de 0 |
| Zona macro de turbulencia | Un segundo rango más ancho que contiene a los rangos internos: mientras viva, las rupturas internas se ignoran como ruido. v35: mismo criterio adaptativo con parámetros propios, y su ruptura genera entrada además de dejar de bloquear. | useMacroRange=on, macroAdaptive=on, macroAtrMult=4.0, macroBreakEntry=on |
Una entrada BUY/SELL exige que todas estas condiciones sean verdaderas en la misma vela HA confirmada:
señalAlcista = breakoutUp O (macroBreakEntry Y macroBreakUp) ← [v35] dos fuentes
entryBuy = señalAlcista Y ventanaActiva Y posiciónLibre
Y momento≥umbral Y direcciónPermitida
Y pendienteSenkouOK Y fueraDeZonaMacro
entrySell = espejo con breakoutDown / macroBreakDown
[v35] Dos fuentes de señal. Hasta v34 solo la ruptura de un rango normal generaba entrada; macroBreakUp/macroBreakDown se calculaban y se descartaban. Ahora la ruptura de la zona macro es una señal de pleno derecho, gobernada por macroBreakEntry.
No hay conflicto con el gate fueraDeZonaMacro: en la misma vela en que la zona se rompe, inConsoM pasa a false, así que el filtro deja pasar la entrada que él mismo acaba de habilitar.
Nunca hay dos posiciones abiertas a la vez, y una salida y una entrada no coinciden en la misma vela (el flip se difiere a la siguiente).
El criterio de v34 declaraba consolidación cuando N velas consecutivas tenían sus cierres HA dentro de un % del precio. Tres problemas estructurales:
| Defecto | Consecuencia observada |
|---|---|
| Mide solo cierres, ignora las mechas | Una zona de cierres pegados con mechas largas se marcaba como consolidación. Eso no es compresión, es indecisión violenta. |
| Umbral en % del precio | Un 1% de ZEC a 480 USD son 4,80 USD, cifra ajena a la volatilidad del momento. Tras un impulso fuerte una pausa legítima excede el umbral; en calma cualquier tramo lo cumple. |
| N fija | Los rangos reales duran lo que duran. Con N=10, una pausa de 6 velas arrastra 4 velas del impulso y el rango de cierres nunca cabe en el umbral: no se detecta nada. |
Había además un cuarto defecto, de implementación: la comprobación de no solapar el rango anterior se evaluaba después de elegir la ventana. Si la ventana elegida pisaba la caja previa, se descartaba la detección entera — aunque una ventana más corta hubiera encajado. En una escalera de impulso-pausa-impulso eso se come sistemáticamente las pausas consecutivas.
Una ventana de w velas forma rango si cumple las tres a la vez:
1. ANCHO (max(haHigh, w) − min(haLow, w)) ≤ rangeAtrMult × ATR(rangeAtrLen)
2. EFICIENCIA |haClose − haClose[w−1]| / Σ|haClose[i] − haClose[i−1]| ≤ rangeMaxER
3. SIN SOLAPE (bar_index − w + 1) > rangeLastRight + rangeMinGap
La condición 2 es la clave. Es el ratio de eficiencia de Kaufman: recorrido neto dividido entre recorrido total. En una tendencia el precio avanza casi todo lo que se mueve y el ratio se acerca a 1; en un rango va y viene sin llegar a ningún sitio y cae cerca de 0. Es lo que distingue una pausa de un tramo direccional del mismo ancho, y es lo que le faltaba al criterio clásico.
TENDENCIA RANGO
┌─┐ ┌─┐ ┌─┐
┌─┘ └─┐ ┌─┘ └─┬─┘ └─┐
┌─┘ └─┐ │ │ │
┌─┘ └─┐ └─┬─┘ └─┬─┘
neto ≈ total → ER ≈ 0.9 neto ≈ 0 → ER ≈ 0.1
RECHAZADO ACEPTADO
Se recorre una sola vez hacia atrás acumulando máximo, mínimo y recorrido total. Cada iteración evalúa la ventana de tamaño i+1; como el resultado se sobrescribe al avanzar, al terminar queda la ventana más larga que cumple las tres condiciones. Coste O(rangeMaxLen) por vela.
ventanas evaluadas (de menor a mayor)
┌───┐ w=3 ✗ (ER alto)
┌───────┐ w=5 ✓ ← candidata
┌───────────┐ w=8 ✓ ← candidata, más larga: GANA
┌───────────────┐ w=11 ✗ (ancho > 1.8 ATR)
└─────────────────────────────────────────► bar_index
Solo cambió la formación. Una vez creada la caja, todo lo demás es el código de v34 sin tocar:
Ciclo de vida de un rango
Solo cambió la formación (izquierda). Todo lo demás es el código de v34 sin tocar.
Es decir: la ruptura se sigue evaluando con el cierre HA contra los límites de la caja, la vigencia rangeMaxAhead sigue funcionando igual, y rangeTop / rangeBot / rangeOs / breakoutUp / breakoutDown / rangeFormedNow conservan su semántica. Por eso las entradas, las salidas y la contabilidad no cambian de significado.
La zona macro usa el mismo algoritmo con parámetros propios. La diferencia conceptual importa:
| Rango normal | Zona macro | |
|---|---|---|
| Qué busca | Una pausa breve dentro de una tendencia | Una zona ancha de vaivén sin dirección |
| Ancho típico | ≤ 1.8 ATR | ≤ 4.0 ATR |
| Longitud | 3 a 12 velas | 12 a 48 velas |
| Papel | Genera entradas al romperse | Bloquea entradas mientras vive; genera entrada al romperse [v35] |
Una turbulencia es ancha por definición: lo que la caracteriza no es ser estrecha, sino que el precio no progresa dentro de ella. De ahí que su atrMult sea alto y el filtro que de verdad la define sea el ratio de eficiencia.
Doble papel de la zona macro [v35]
Bloquea mientras vive; genera señal al romperse.
Prioridad de salida (de mayor a menor): SL / TP → BE-OUT → ICL/ICS → OUT por pendiente. Cada mecanismo lleva guardas que impiden duplicar cierres en la misma vela.
| # | Salida | Dispara cuando | Papel en la asimetría |
|---|---|---|---|
| 1 | SL (3%) | High/Low HA toca entrada × (1∓3%). Se contabiliza en la vela siguiente al nivel exacto. |
Techo duro de la pérdida: −3% de precio ≈ −60% del margen a 20× |
| 2 | TP (100%) | High/Low HA toca entrada × (1±100%). |
Inoperante a propósito: el lado ganador no se tapa |
| 3 | BE-OUT | Pasadas ≥ beOutMinBars (100) velas desde la entrada, si el cierre HA está EN CONTRA de la posición, cierra al HA actual buscando resultado ≈ 0. |
Recicla capital atrapado en posiciones estancadas sin regalarle la pérdida al mercado |
| 4 | ICL / ICS | Pasadas ≥ ichiOutMinBars (1) velas: (a) SMA Senkou alineadas en contra tras el margen ichiExitN (2); o (b) Momento cruza su umbral de salida con pendiente en contra; o (c) un rango formado tras la entrada rompe en contra. |
Corta operaciones malas ANTES de que lleguen al SL |
| 5 | OUT por pendiente | Pasadas ≥ slopeOutMinBars (4) velas: la pendiente de la SMA Senkou A (SenkouA − SenkouA[24]) va en contra y su valor absoluto supera 0.25. |
Detecta el agotamiento de la tendencia y protege la ganancia acumulada |
| 6 | Rango contrario | Un rango formado después de la entrada rompe en contra, con confirmación Ichimoku + Momento. | Señal estructural de reversión |
Re-entradas (mantienen al sistema montado en la tendencia):
useTpContinuo=on): tras un TP o BE-OUT, re-entra en la misma dirección en la vela siguiente si el Momento acompaña. Oportunidad de una sola vela.useSlopeReentry=off): tras un OUT, abriría en dirección opuesta (a favor de la nueva pendiente). Desactivada en el perfil actual.Los valores marcados [configurado] son los activos en producción; el resto son defaults del script disponibles para calibración.
| Parámetro | Valor | Definición técnica y efecto |
|---|---|---|
apalancamiento |
20× [configurado] | Multiplicador del nocional. Sube el ROE por operación Y el riesgo de liquidación por igual. Con SL 3%, 20× deja ~1 punto de colchón antes de la liquidación (~4% adverso en margen aislado). No subir sin acercar el SL. |
montoApostado |
$80 [configurado] | Margen destinado a cada orden. Nocional = 80 × 20 = $1,600 por operación. |
capitalInicial |
$1,000 [configurado] | Base del equity para drawdown, Kelly y retornos diarios. |
takeProfit |
100% [configurado] | % de movimiento de PRECIO (no de ROE). A 100% actúa desactivado: las salidas las gobierna la lógica técnica. Bajarlo tapa el lado ganador y destruye la asimetría (§2). |
stopLoss |
3% [configurado] | Invalidación dura de la señal, como % de precio. A 20× equivale a −60% del margen. Es el peor caso por orden; las salidas técnicas suelen actuar antes. |
signalDelay |
0 | Velas de espera para confirmar un evento. 1–2 filtra mechas que cruzan y se devuelven, al costo de entrar más tarde. |
evalMode / evalMonths |
Últimos 12 meses [configurado] | Ventana de evaluación: qué velas generan señales y cuentan en la tabla. |
Modo adaptativo [v35] — activo en producción
| Parámetro | Valor | Definición y efecto |
|---|---|---|
rangeAdaptive |
on [configurado] | Interruptor del criterio. off devuelve el comportamiento de v34 bit a bit. |
rangeUseWicks |
on [configurado] | Mide y dibuja con haHigh/haLow en vez de haClose. Cajas fieles a lo que se ve, pero más anchas: la ruptura exige un movimiento algo mayor. |
rangeMinLen / rangeMaxLen |
3 / 12 [configurado] | Rango de longitudes a probar. Se elige la ventana más larga que cumpla. Subir MaxLen permite cajas más extensas; subir MinLen descarta pausas de 2-3 velas. |
rangeAtrMult |
1.8 [configurado] | Ancho máximo en múltiplos de ATR. Sustituye al % del precio: se adapta solo a la volatilidad y al nivel de precio. Primer tornillo si sobran o faltan cajas. |
rangeAtrLen |
14 | Periodo del ATR de referencia. |
rangeMaxER |
0.55 [configurado] | Ratio de eficiencia máximo (0–1). Es el filtro que más detecciones descarta: si te faltan rangos, súbelo antes de tocar el ancho. 0.35 = solo rangos muy planos; 0.65 = admite pausas con deriva. |
rangeMinGap |
1 [configurado] | Velas de separación exigidas entre el fin de una caja y el inicio de la siguiente. 0 permite cajas consecutivas pegadas. |
Modo clásico (legado v34)
| Parámetro | Valor | Definición y efecto |
|---|---|---|
rangeN |
6 | Velas consecutivas para declarar consolidación. Solo se usa con rangeAdaptive=off. |
rangeMaxPct |
2.1% | Amplitud máxima como % del precio. Solo con rangeAdaptive=off. |
rangeMaxAhead |
0 (sin límite) | Vigencia de la caja. Aplica en ambos modos. 0 = la caja vive hasta que un cierre la rompe. |
Orden de calibración recomendado: rangeMaxER → rangeMinGap → rangeAtrMult → longitudes. El diagnóstico del indicador auxiliar RANGE_DETECT_v2.pinescript muestra en la última vela el ancho actual en ATR y el ER frente a sus umbrales: es la forma rápida de saber cuál de los dos está rechazando.
| Parámetro | Valor | Definición y efecto |
|---|---|---|
useMacroRange |
on [configurado] | Activa la zona. Mientras viva, las rupturas de los rangos internos NO generan entradas (ruido de turbulencia). No afecta salidas ni re-entradas. |
macroAdaptive |
on [v35, configurado] | Mismo criterio adaptativo que el rango normal, con parámetros propios. off = criterio clásico de v34. |
macroUseWicks |
on [v35] | Mide con haHigh/haLow. |
macroMinLen / macroMaxLen |
12 / 48 [v35] | Longitudes a probar. Deben ser claramente mayores que las del rango normal para que la zona contenga varios rangos internos. |
macroAtrMult |
4.0 [v35] | Ancho máximo en ATR — más del doble que el rango normal. Una turbulencia es ancha por definición; lo que la caracteriza es la falta de progreso, no la estrechez. |
macroAtrLen |
14 | Periodo del ATR de la zona macro. |
macroMaxER |
0.45 [v35] | Ratio de eficiencia máximo. Es el filtro que separa una turbulencia de un tramo de tendencia del mismo ancho. |
macroMinGap |
0 [v35] | Separación entre zonas macro consecutivas. |
macroBreakEntry |
on [v35, configurado] | La ruptura de la zona macro genera entrada, igual que la de un rango normal. En v34 macroBreakUp/macroBreakDown se calculaban y se descartaban: la zona solo servía para bloquear. |
macroRangeN / macroRangeMaxPct |
24 / 5.0% | Legado: solo se usan con macroAdaptive=off. Siguen alimentando la rejilla macro del optimizador (§8). |
Efecto medido al pasar de macro clásica a adaptativa (ZECUSDT 30m): caída pronunciada del número de entradas manteniendo el beneficio casi intacto. El efecto dominante no son las señales nuevas de macroBreakEntry, sino el bloqueo: la macro adaptativa detecta muchas más zonas de turbulencia y filtra rupturas internas que, en conjunto, eran neutras. Beneficio similar con menos operaciones implica menos comisiones (a 20× cada operación cuesta ~2% del margen en fees de ida y vuelta) y menor exposición.
Cómo separar los dos efectos. Anotar órdenes y beneficio en tres pasadas: (1) macroAdaptive=off + macroBreakEntry=off — línea base v34; (2) macroAdaptive=on + macroBreakEntry=off — mide solo el filtro; (3) ambos on — configuración actual. Si el paso 2 ya captura casi toda la mejora, las entradas por ruptura macro no aportan y pueden dejarse apagadas.
| Parámetro | Valor | Definición y efecto |
|---|---|---|
ichiExitN |
2 [configurado] | Margen de gracia desde la entrada: velas que se le dan a las SMA Senkou para alinearse a favor (permite entrar con las líneas aún en contra). Cumplido el margen, si siguen en contra, ICL/ICS cierra. |
ichiOutMinBars |
1 [configurado] | Velas mínimas desde la entrada para CUALQUIER salida ICL/ICS (Ichimoku, Momento o rango contrario). Anti-cierre-inmediato. |
useSlopeOut |
on [configurado] | Activa la salida OUT por pendiente de la SMA Senkou A. |
slopeOutN |
24 [configurado] | Ventana de la pendiente: SenkouA − SenkouA[24]. N bajo = salidas nerviosas; N alto = tolera giros cortos y sale solo ante deterioro sostenido. |
slopeOutMinBars |
4 [configurado] | Velas mínimas desde la entrada para un OUT. Evita que una pendiente heredada cierre la posición recién abierta. |
slopeOutMinAbs |
0.25 [configurado] | Umbral mínimo del valor absoluto de la pendiente (en unidades de precio). Filtra giros suaves: 0 = solo el signo decide. |
useBeOut / beOutMinBars |
on / 100 [configurado] | BE-OUT: pasadas ≥100 velas (≈ 50 horas en 30m), si el cierre HA quedó en contra, cierra al HA actual con resultado ≈ 0. Es el seguro contra posiciones zombis. |
useSlopeReentry |
off | Re-entrada opuesta tras un OUT (a favor de la nueva pendiente). |
useSlopeEntryConfirm + useSenkouAEntry / useSenkouBEntry (OR entre las activas): exige pendiente Senkou a favor para tomar la ruptura. Solo evalúa el signo (el umbral 0.25 pertenece a la salida). No aplica a re-entradas. En producción está desactivada: la calidad de entrada la aporta el rango + Momento.
| Parámetro | Valor | Papel |
|---|---|---|
useMomFilter |
on [configurado] | Gate general del oscilador. |
| BB 20 / 2.0 · KC 40 / 1.5 · True Range | defaults | Geometría del squeeze; el oscilador es la regresión lineal del precio HA contra su media de referencia. |
| Entrada: LONG si Mom ≥ −100 · SHORT si Mom ≤ +100 | abierto [configurado] | Con ±100 el gate no bloquea entradas: el Momento actúa sobre todo en las SALIDAS. |
Salida: LONG si Mom ≤ 0 · SHORT si Mom ≥ 0 (con pendiente en contra, momSlopeLen=2) |
[configurado] | El cruce de cero con pendiente adversa es la sub-condición (b) de ICL/ICS. |
Tenkan 3 · Kijun 15 · Senkou 40, offsets A/B = 1. Las líneas que gobiernan el sistema son las SMA de las Senkou (aShifted/bShifted) — más lentas y estables que el Ichimoku clásico, apropiadas para sostener tendencia en 30m.
| Parámetro | Valor | Papel |
|---|---|---|
optDdWeight |
1.0 [configurado] | Peso del drawdown en el score: score = WinRate% − peso × MaxDD%. Peso 0 = optimizar solo WR. |
optMinTr |
10 [configurado] | Mínimo de órdenes por combinación: una configuración que deja menos de 10 operaciones se descarta (ganaría por suerte estadística). |
| Métrica | Definición | Umbral de salud |
|---|---|---|
| Win Rate | % de órdenes con PnL real ≥ 0 (con leverage y fees) | Informativo — no es el objetivo (§2) |
| Profit Factor | Σ ganancias ÷ Σ pérdidas | ✅ ≥ 2 · ⚠️ ≥ 1 |
| Esperanza matemática (EV) | PnL promedio por orden | Debe ser positiva y estable |
| Drawdown máx. | Peor caída del equity realizado desde su pico | 💖 ≤10% · ✅ ≤25% · ❌ >25% |
| Recovery Factor | Ganancia total ÷ DD máx. | ✅ ≥ 3 |
| Sharpe (anual) | Media ÷ desviación de los retornos DIARIOS del equity × √365 (días sin operar cuentan 0) | ✅ ≥ 2 · ⚠️ ≥ 1 |
| Sortino (anual) | Igual que Sharpe pero la desviación usa SOLO los días negativos (downside deviation, MAR=0) | ✅ ≥ 2 · ⚠️ ≥ 1. Si Sortino ≫ Sharpe, la volatilidad del sistema es mayormente "buena" (rachas ganadoras) |
| Rachas W/L | Máx. consecutivas ganadoras/perdedoras | Calibran expectativas y tamaño |
| Kelly / ½K / ¼K | Fracción óptima de capital por orden | Operar entre ¼K y ½K |
La serie de retornos usada por Sharpe/Sortino es honesta: retornos diarios del equity realizado, con los días sin operaciones rindiendo 0 — no se anualiza por frecuencia de trades (que inflaría el ratio en alta frecuencia).
El bloque "🔬 OPTIMIZADOR (7 campos)" de la tabla re-simula todas las órdenes virtuales de la ventana variando únicamente los 7 campos de control del sistema, y los evalúa con score = WinRate% − 1.0 × MaxDD% (mínimo 10 órdenes por combinación):
| Sección | Campos que barre | Resultado actual (ZECUSDT 30m) |
|---|---|---|
| ACTUAL (base) | — | WR 50.3% · DD 19.1% · score 31.2 |
| 📦 RANGO | rangeN × rangeMaxPct |
Óptimo N=5 · 0.3%: score 31.6 (Δ+0.4) — la configuración actual ya es casi óptima |
| 🌐 MACRO | macroRangeN × macroRangeMaxPct |
Óptimo N=30 · 5%: WR 48.7 · DD 7.6% · score 41.1 (Δ+9.9) con 267 ops — máxima reducción de riesgo |
| 📐 SALIDA OUT | slopeOutN × slopeOutMinBars × slopeOutMinAbs |
Óptimo 16 · 1 · 0.0: WR 55.3 · DD 11.4% · score 43.9 (Δ+12.7) con 501 ops — mayor mejora integral |
Las secciones 📦 RANGO y 🌐 MACRO barren rangeN × rangeMaxPct y macroRangeN × macroRangeMaxPct, que son los parámetros del modo clásico. Con rangeAdaptive o macroAdaptive activados, esas filas siguen midiendo el criterio de v34 y no describen lo que está dibujando el detector.
Mientras el optimizador no se porte a la rejilla adaptativa (atrMult × maxER × longitudes), la calibración del modo adaptativo se hace a mano, comparando la tabla de resumen entre configuraciones. La sección 📐 SALIDA OUT no se ve afectada: es independiente del detector.
Método de uso: aplicar primero la sección de mayor Δ, dejar que la tabla recalcule (ACTUAL pasa a ser la nueva base) y releer las demás secciones — cada una optimiza por separado y el óptimo conjunto no es la suma de los parciales. Advertencia anti-sobreajuste: estos óptimos describen el pasado de ESTE símbolo y temporalidad; validar siempre en la versión strategy (§9) y, de ser posible, fuera de muestra antes de tocar producción.
[v35] Estado de la auditoría: Layers_v34_strategy_check.pinescript todavía no incorpora el detector adaptativo. Mientras no se porte, sus resultados corresponden al criterio clásico y no validan la configuración v35 en producción. Es la deuda técnica más relevante de esta versión.
Layers_v34_strategy_check.pinescript replica la lógica exacta del indicator sobre el motor strategy() de TradingView — Heikin-Ashi, filtro macro, gates ichiOutMinBars/slopeOutMinBars, confirmación de pendiente — para contrastar Win Rate, Profit Factor, Drawdown, Sharpe y Sortino contra la contabilidad manual, y exportar el CSV de operaciones con cada cierre etiquetado (TP, SL, BE-OUT, ICL, ICS, OUT, TPC-L/S, SRE-L/S).
Diferencias conocidas y aceptadas: el tester dimensiona en % del equity (compone) mientras el indicator usa margen fijo × leverage; el tester ejecuta stop/limit intrabar a precio real mientras el indicator detecta el toque sobre velas HA y contabiliza en la vela siguiente al nivel exacto. Las señales son idénticas; los fills pueden diferir levemente.
TradingView (Layers v35, vela HA confirmada)
→ alerta JSON por webhook (máx. 1 por vela; el cierre tiene prioridad)
→ plataforma TreeSys (validación + registro en /signals)
→ Binance USDT-M Futures (orden de mercado + brackets)
Tipos en el JSON: BUY, SELL, SL, TP y OUT con subtipo en direccion (ICL, ICS, BE-OUT, OUT). Las entradas y los OUT viajan con el cierre HA; SL/TP con el nivel exacto. Al editar el script se debe borrar y recrear la alerta en TradingView.
| Área | v34 | v35 |
|---|---|---|
| Criterio del rango | N velas, cierres HA en % del precio | Ancho en ATR + ratio de eficiencia + longitud variable, con mechas HA |
| Anti-solape del rango | Evaluado después de elegir la ventana → descartaba la detección entera | Evaluado dentro de la búsqueda → prueba ventanas más cortas |
| Separación entre cajas | Implícita (1 vela) | Configurable (rangeMinGap, macroMinGap) |
| Criterio de la zona macro | Clásico, N=24 / 5% | Adaptativo con parámetros propios (12–48 velas, 4 ATR) |
| Ruptura de la zona macro | Calculada y descartada | Genera entrada (macroBreakEntry) |
rangeOs en entradas macro |
No se actualizaba | Se refleja el sentido (1 / −1) para las estadísticas por orden |
| Ciclo de vida del rango | — | Sin cambios: ruptura por cierre HA, rangeMaxAhead, rangeTop/Bot/Os, rangeFormedNow |
| Salidas, re-entradas, contabilidad | — | Sin cambios |
| Optimizador | Rejilla N × % |
Sin cambios — mide el criterio clásico (ver aviso en §8) |
Compatibilidad: poniendo rangeAdaptive=off y macroAdaptive=off y macroBreakEntry=off, v35 reproduce el comportamiento de v34. Los siete parámetros clásicos siguen presentes y operativos.
Archivos de esta versión
| Archivo | Rol |
|---|---|
Layers_v35.pinescript |
Motor de producción (indicator LayersV35) |
Layers_v34.pinescript |
Versión anterior, congelada como referencia |
RANGE_DETECT_v2.pinescript |
Banco de pruebas del detector adaptativo, con diagnóstico en pantalla |
Layers_v34_strategy_check.pinescript |
Auditoría — pendiente de portar a v35 |
Layers_v35_Documentation.md |
Este documento |
Layers v35 · José Ernesto Morales Ventura / TreeSys (treesys.shop) · Detección de rangos adaptativa. Perfil documentado: BINANCE:ZECUSDT · 30m · ventana 12 meses.