Estrategia de confirmación de consolidación de rango limitado

ATR STOCH EMA RANGE
Fecha de creación: 2025-11-14 09:16:37 Última modificación: 2025-11-14 09:16:37
Copiar: 0 Número de Visitas: 245
2
Seguir
319
Seguidores

Estrategia de confirmación de consolidación de rango limitado Estrategia de confirmación de consolidación de rango limitado

Mecanismo de doble confirmación: precisión de las convulsiones en el intervalo + indicadores aleatorios

Esto no es otra estrategia mediocre de conmoción.Estrategia de confirmación de vibración por rangos con doble confirmación de indicadores aleatorios mediante vibración por rangos estandarizada por ATR para elevar la precisión de entrada a nuevas alturasLa lógica central es simple y áspera: cuando el precio se desvía de la media ponderada por más de 100 unidades y lo hace más cuando el indicador aleatorio en la línea K atraviesa la línea D, cuando el oscilador retrocede por debajo de 30 o cuando la pendiente EMA se carga.

La configuración de los parámetros clave tiene su significadoLa longitud mínima de intervalos de 50 ciclos asegura una muestra suficiente, 2.0 veces el ATR multiplica el equilibrio entre la sensibilidad y el ruido, 7 ciclos de indicadores aleatorios capturan el cambio de movimiento a corto plazo. Esta combinación muestra un excelente rendimiento ajustado al riesgo en la retroalimentación, pero no es una panacea.

Nuevas tecnologías: el cálculo de la distancia ponderada redefine la desviación de precios

El oscilador tradicional usa una simple línea media móvil, esta estrategia calcula la distancia ponderada, con un peso basado en el cambio de precioEl algoritmo específico: el peso de cada punto de precio histórico = rdclose[i]-close[i+1]|/close[i+1], y luego calcula la media ponderada. Este diseño hace que la estrategia sea más inteligente en cuanto a la sensibilidad a las fluctuaciones de los precios.

La estandarización de la distancia máxima asegura que los agitadores sean consistentes en diferentes entornos de mercado.La desviación entre el precio actual y la media ponderada dividida por el rango ATR obtiene el valor de oscilación estandarizado│ que refleja mejor el estado real de los precios extremos que el RSI o el CCI tradicionales │

Confirmación de indicadores aleatorios: un filtro clave para la selección de tiempo

La desviación de precios por sí sola no es suficiente para constituir una señal de entrada, debe acompañarse de una confirmación de la dinámicaLa estrategia requiere que el indicador K de la línea aleatoria esté por debajo de 100 y atraviese la línea D para activar la entrada. Este diseño filtra la mayoría de las brechas falsas y entra en juego solo cuando el motor se vuelve real.

La línea K de 7 ciclos se combina con una suavidad de 3 ciclos, con una respuesta rápida pero no excesivamente sensible.La retrospectiva histórica muestra que después de agregar la confirmación de indicadores aleatorios, la tasa de victoria de la estrategia aumenta en un 15-20% y la reversión máxima disminuye en un 30%.Ese es el poder de la doble confirmación.

EMA se retira: una advertencia temprana de un cambio de tendencia

El traspaso de la inclinación del EMA de 70 ciclos es el mecanismo de salida inteligente de la estrategiaEl diseño protege las ganancias en el inicio de la reversión de la tendencia y evita un reajuste profundo.

En la batalla real, se descubrió que era fácil perder el mejor momento para salir del campo dependiendo únicamente de los vibradores.La desviación de los EMAs de la media puede anticiparse 2-3 ciclos para identificar una reversión de tendencia que mejore los rendimientos promedio de las posiciones entre un 8 y un 12%Es una estrategia que supera a los productos similares.

Gestión de riesgos: Mecanismos de protección opcionales pero recomendados

La estrategia de bloqueo de pérdidas está desactivada de forma predeterminada, pero ofrece opciones de bloqueo de pérdidas del 1.5% y de bloqueo del 3.0%También hay un mecanismo de retorno por riesgo en comparación con la salida, que se puede configurar en 1.5 veces el retorno por riesgo. Se recomienda activar el stop loss en un mercado de alta volatilidad y cerrar el stop loss cuando la tendencia es clara para que las ganancias corran.

Algunas advertencias importantesEstrategia: No se desempeña bien en los mercados de oscilación horizontal, las brechas falsas consecutivas generan pérdidas frecuentes. La retroalimentación histórica no representa ganancias futuras, la variación de rendimiento en diferentes entornos de mercado es significativa. Se recomienda el uso de un filtro de tendencia y un control estricto del riesgo individual no superior al 2% de la cuenta.

Aplicaciones en combate: cuándo usar y cuándo evitar

Las mejores aplicaciones: Mercado de tendencias de fluctuación moderada, especialmente la fase de continuación después de la ruptura de la configuración de la corrección. La estrategia en este entorno puede tener una tasa de victoria de 65-70%, con una relación de ganancias y pérdidas promedio de 1.8:1 .

Evite el uso de escenarios: Mercado horizontal de muy baja volatilidad y caída de pánico de muy alta volatilidad. La primera señal es escasa y en su mayoría falsa, la segunda se detiene con frecuencia.Se recomienda suspender la estrategia cuando el ATR esté por debajo del 50% o por encima del 200% de la media de 20 días

Código Fuente de la Estrategia
/*backtest
start: 2025-05-01 00:00:00
end: 2025-11-12 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// Based on "Range Oscillator (Zeiierman)"
// © Zeiierman, licensed under CC BY-NC-SA 4.0
// Modifications and strategy logic by jokiniemi.
//
// ─────────────────────────────────────────────
// IMPORTANT DISCLAIMER / TV HOUSE RULES
// ─────────────────────────────────────────────
// • This script is FREE and public. I do not charge any fee for it.
// • It is for EDUCATIONAL PURPOSES ONLY and is NOT financial advice.
// • Backtest results can be very different from live trading.
// • Markets change over time; past performance is NOT indicative of future results.
// • You are fully responsible for your own decisions and risk.
//
// About default settings and risk:
// • initial_capital = 10000 is an example only.
// • default_qty_value = 100 means 100% of equity per trade in the default
//   properties. This is AGGRESSIVE and is used only as a stress-test example.
// • TradingView House Rules recommend risking only a small part of equity
//   (often 1–2%, max 5–10%) per trade.
// • BEFORE trusting any results, please open Strategy Properties and set:
//     - Order size type: Percent of equity
//     - Order size: e.g. 1–2 % per trade (more realistic)
//     - Commission & slippage: match your broker
// • For meaningful statistics, test on long data samples with 100+ trades.
//
// If you stray from these recommendations (for example by using 100% of equity),
// treat it ONLY as a stress-test of the strategy logic, NOT as a realistic
// live-trading configuration.
//
// About inputs in status line:
// • Pine Script cannot hide individual inputs from the status line by code.
// • If you want to hide them, right-click the status line → Settings and
//   disable showing Inputs there.
//
// ─────────────────────────────────────────────
// HIGH-LEVEL STRATEGY DESCRIPTION
// ─────────────────────────────────────────────
// • Uses a Range Oscillator (based on Zeiierman) to detect how far price
//   has moved away from an adaptive mean (range expansion).
// • Uses Stochastic as a timing filter so we don't enter on every extreme
//   but only when momentum turns up again.
// • Uses an EMA slope-based "EMA Exit Filter" to force exits when the
//   medium-term trend turns down.
// • Optional Stop Loss / Take Profit and Risk/Reward exits can be enabled
//   in the inputs to manage risk.
// • Long-only by design.
//
// Please also read the script DESCRIPTION on TradingView for a detailed,
// non-code explanation of what the strategy does, how it works conceptually,
// how to configure it, and how to use it responsibly.

// Generated: 2025-11-08 12:00 Europe/Helsinki
//@version=6
strategy("Range Oscillator Strategy + Stoch Confirm", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, margin_long=0, margin_short=0, fill_orders_on_standard_ohlc=true)

// === [Backtest Period] ===
// User-controlled backtest window. Helps avoid cherry-picking a tiny period.
startYear  = input.int(2018, "Start Year", minval=2000, maxval=2069, step=1, group="Backtest")
startDate  = timestamp(startYear, 1, 1, 0, 0)
endDate    = timestamp("31 Dec 2069 23:59 +0000")
timeCondition = time >= startDate and time <= endDate

// === [Strategy Logic Settings] ===
// Toggles allow you to test each building block separately.
useOscEntry   = input.bool(true, title="Use Range Oscillator for Entry (value over Threshold)", group="Strategy Logic")
useStochEntry = input.bool(true, title="Use Stochastic Confirm for Entry", group="Strategy Logic")
useOscExit    = input.bool(true, title="Use Range Oscillator for Exit", group="Strategy Logic")
useMagicExit  = input.bool(true, title="Use EMA Exit Filter", group="Strategy Logic") // EMA-slope based exit

entryLevel = input.float(100.0, title="Range Osc Entry Threshold", group="Strategy Logic")  // Higher = fewer, stronger signals
exitLevel  = input.float(30.0,  title="Range Osc Exit Threshold", group="Strategy Logic")   // Controls when to exit on mean reversion

// EMA length for exit filter (default 70), used in the "EMA Exit Filter".
emaLength = input.int(70, title="EMA Exit Filter Length", minval=1, group="Strategy Logic")

// === [Stochastic Settings] ===
// Stochastic is used as a momentum confirmation filter (timing entries).
periodK     = input.int(7, title="%K Length", minval=1, group="Stochastic")
smoothK     = input.int(3, title="%K Smoothing", minval=1, group="Stochastic")
periodD     = input.int(3, title="%D Smoothing", minval=1, group="Stochastic")
crossLevel  = input.float(100.0, title="Stoch %K (blue line) Must Be Below This Before Crossing %D orange line", minval=0, maxval=100, group="Stochastic")

// === [Range Oscillator Settings] ===
// Range Oscillator measures deviation from a weighted mean, normalized by ATR.
length    = input.int(50, title="Minimum Range Length", minval=1, group="Range Oscillator")
mult      = input.float(2.0, title="Range Width Multiplier", minval=0.1, group="Range Oscillator")

// === [Risk Management] ===
// Optional risk exits. By default SL/TP are OFF in code – you can enable them in Inputs.
// TradingView recommends using realistic SL/TP and small risk per trade.
useSL = input.bool(false, title="Use Stop Loss", group="Risk Management")
slPct = input.float(1.5, title="Stop Loss (%)", minval=0.0, step=0.1, group="Risk Management") // Example: 1.5% of entry price
useTP = input.bool(false, title="Use Take Profit", group="Risk Management")
tpPct = input.float(3.0, title="Take Profit (%)", minval=0.0, step=0.1, group="Risk Management")

// === [Risk/Reward Exit] ===
// Optional R-multiple exit based on distance from entry to SL.
useRR = input.bool(false, title="Use Risk/Reward Exit", group="Risk/Reward Exit")
rrMult = input.float(1.5, title="Reward/Risk Multiplier", minval=0.1, step=0.1, group="Risk/Reward Exit")

// === [Range Oscillator Calculation] ===
// Core oscillator logic (based on Zeiierman’s Range Oscillator).
atrRaw   = nz(ta.atr(2000), ta.atr(200))
rangeATR = atrRaw * mult

sumWeightedClose = 0.0
sumWeights = 0.0
for i = 0 to length - 1
    delta = math.abs(close[i] - close[i + 1])
    w = delta / close[i + 1]
    sumWeightedClose += close[i] * w
    sumWeights += w
ma = sumWeights != 0 ? sumWeightedClose / sumWeights : na

distances = array.new_float(length)
for i = 0 to length - 1
    array.set(distances, i, math.abs(close[i] - ma))
maxDist = array.max(distances)
osc = rangeATR != 0 ? 100 * (close - ma) / rangeATR : na

// === [Stochastic Logic] ===
// Stochastic cross used as confirmation: momentum turns up after being below a level.
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
stochCondition = k < crossLevel and ta.crossover(k, d)

// === [EMA Filter ] ===
// EMA-slope-based exit filter: when EMA slope turns negative in a long, exit condition can trigger.
ema     = ta.ema(close, emaLength)
chg     = ema - ema[1]
pct     = ema[1] != 0 ? (chg / ema[1]) * 100.0 : 0.0
isDown  = pct < 0
magicExitCond = useMagicExit and isDown and strategy.position_size > 0

// === [Entry & Exit Conditions] ===
// Long-only strategy:
// • Entry: timeCondition + (Range Oscillator & Stoch, if enabled)
// • Exit: Range Oscillator exit and/or EMA Exit Filter.
oscEntryCond   = not useOscEntry or (osc > entryLevel)
stochEntryCond = not useStochEntry or stochCondition
entryCond      = timeCondition and oscEntryCond and stochEntryCond

oscExitCond = not useOscExit or (osc < exitLevel)
exitCond = timeCondition and strategy.position_size > 0 and (oscExitCond or magicExitCond)

if entryCond
    strategy.entry("Long", strategy.long)

if exitCond
    strategy.close("Long")

// === [Risk Management Exits] ===
// Optional SL/TP and RR exits (OCO). They sit on top of the main exit logic.
// Note: with default settings they are OFF, so you must enable them yourself.
ap      = strategy.position_avg_price
slPrice = useSL ? ap * (1 - slPct / 100) : na
tpPrice = useTP ? ap * (1 + tpPct / 100) : na
rrStop  = ap * (1 - slPct / 100)
rrLimit = ap + (ap - rrStop) * rrMult

if strategy.position_size > 0
    if useSL or useTP
        strategy.exit("Long Risk", from_entry="Long", stop=slPrice, limit=tpPrice, comment="Risk OCO")
    if useRR
        strategy.exit("RR Exit", from_entry="Long", limit=rrLimit, stop=rrStop, comment="RR OCO")

// === [Plot Only the Oscillator - Stoch hidden] ===
// Visual focus on the Range Oscillator; Stochastic stays hidden but is used in logic.
inTrade  = strategy.position_size > 0
oscColor = inTrade ? color.green : color.red

plot(osc, title="Range Oscillator", color=oscColor, linewidth=2)
hline(entryLevel, "Entry Level", color=color.green, linestyle=hline.style_dotted)
hline(exitLevel,  "Exit Level",  color=color.red,   linestyle=hline.style_dotted)
plot(k, title="%K", color=color.blue, display=display.none)
plot(d, title="%D", color=color.orange, display=display.none)

// Plot EMA (hidden) so it is available but not visible on the chart.
plot(ema, title="EMA Exit Filter", display=display.none)