
La estrategia utiliza las zonas de oferta y demanda, las medias móviles del índice (EMA) y el rango de fluctuación real promedio (ATR) para determinar las señales de negociación. El usuario puede ajustar la configuración de los parámetros de EMA y la visibilidad de las señales de compra y venta. La estrategia marca las zonas de oferta y demanda como más alto más alto (HH), más bajo más bajo (LL), más bajo más alto (LH) y más alto más bajo (HL).
Las medias móviles de la EMA:
La amplitud real promedio de ATR:
Estos cálculos se utilizan para juzgar el pronóstico de tendencias de EMA y establecer un ATR móvil de stop loss basado en la volatilidad del mercado. La estrategia tiene como objetivo proporcionar una señal de compra y venta en función de la relación entre el precio de cierre, EMA y el valor de ATR.
La estrategia utiliza términos como HH (más alto más alto), LL (más bajo más bajo), HL (más alto más bajo) y LH (más bajo más alto) para identificar diferentes patrones de comportamiento de precios, que se utilizan a menudo en el análisis de tendencias:
Más alto más altoEl precio actual es más alto que el anterior, lo que indica un potencial impulso al alza.
Más bajo más bajo (LL)El precio actual es inferior al mínimo anterior, lo que indica un potencial movimiento a la baja.
Más alto, más bajoEl precio actual es más bajo que el mínimo anterior, lo que indica que la tendencia al alza potencial continúa.
Más bajo más altoEl precio actual es más bajo que el anterior, lo que indica que la tendencia a la baja continúa.
El uso de estos patrones en combinación con otros indicadores técnicos puede determinar la reversión o continuación de una tendencia potencial. La estrategia utiliza estos patrones para identificar los momentos de entrada o salida.
Señales de entradaLa tercera línea K produce una señal de compra/venta cuando el precio de cierre es superior/inferior al precio máximo/mínimo del día anterior.
Cómo detener el daño: con un determinado múltiplo del valor de ATR (el doble por defecto) como punto de parada de retorno.
La estrategia integra la aplicación de varios indicadores técnicos y la determinación de la forma de los precios, como la tendencia, la reversión y la volatilidad, y se desempeña bien en la retroalimentación. Sin embargo, la complejidad en el mercado real es muy variable, y la optimización y la filtración adecuada de las señales de entrada en el mercado siguen siendo necesarias.
/*backtest
start: 2023-12-18 00:00:00
end: 2024-01-17 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Supply and Demand Zones with EMA and Trailing Stop", shorttitle="SD Zones", overlay=true)
showBuySignals = input(true, title="Show Buy Signals", group="Signals")
showSellSignals = input(true, title="Show Sell Signals", group="Signals")
showHLZone = input(true, title="Show HL Zone", group="Zones")
showLHZone = input(true, title="Show LH Zone", group="Zones")
showHHZone = input(true, title="Show HH Zone", group="Zones")
showLLZone = input(true, title="Show LL Zone", group="Zones")
emaLength = input(200, title="EMA Length", group="EMA Settings")
atrLength = input(14, title="ATR Length", group="Trailing Stop")
atrMultiplier = input(2, title="ATR Multiplier", group="Trailing Stop")
// Function to identify supply and demand zones
getZones(src, len, mult) =>
base = request.security(syminfo.tickerid, "D", close)
upper = request.security(syminfo.tickerid, "D", high)
lower = request.security(syminfo.tickerid, "D", low)
multiplier = request.security(syminfo.tickerid, "D", mult)
zonetype = base + multiplier * len
zone = src >= zonetype
[zone, upper, lower]
// Identify supply and demand zones
[supplyZone, _, _] = getZones(close, high[1] - low[1], 1)
[demandZone, _, _] = getZones(close, high[1] - low[1], -1)
// Plot supply and demand zones
bgcolor(supplyZone ? color.new(color.red, 80) : na)
bgcolor(demandZone ? color.new(color.green, 80) : na)
// EMA with Linear Weighted method
ema = ta.ema(close, emaLength)
// Color code EMA based on its relation to candles
emaColor = close > ema ? color.new(color.green, 0) : close < ema ? color.new(color.red, 0) : color.new(color.yellow, 0)
// Plot EMA
plot(ema, color=emaColor, title="EMA")
// Entry Signal Conditions after the third candle
longCondition = ta.crossover(close, high[1]) and bar_index >= 2
shortCondition = ta.crossunder(close, low[1]) and bar_index >= 2
// Trailing Stop using ATR
atrValue = ta.atr(atrLength)
trailStop = close - atrMultiplier * atrValue
// Strategy Entry and Exit
if (longCondition)
strategy.entry("Buy", strategy.long)
strategy.exit("TrailStop", from_entry="Buy", loss=trailStop)
if (shortCondition)
strategy.entry("Sell", strategy.short)
strategy.exit("TrailStop", from_entry="Sell", loss=trailStop)
// Plot Entry Signals
plotshape(series=showBuySignals ? longCondition : na, title="Buy Signal", color=color.new(color.green, 0), style=shape.triangleup, location=location.belowbar)
plotshape(series=showSellSignals ? shortCondition : na, title="Sell Signal", color=color.new(color.red, 0), style=shape.triangledown, location=location.abovebar)
// Plot Trailing Stop
plot(trailStop, color=color.new(color.red, 0), title="Trailing Stop")
// Plot HH, LL, LH, and HL zones
plotshape(series=showHHZone and ta.highest(high, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HH Zone", color=color.new(color.blue, 80), style=shape.triangleup, location=location.abovebar)
plotshape(series=showLLZone and ta.lowest(low, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LL Zone", color=color.new(color.blue, 80), style=shape.triangledown, location=location.belowbar)
plotshape(series=showLHZone and ta.highest(high, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LH Zone", color=color.new(color.orange, 80), style=shape.triangleup, location=location.abovebar)
plotshape(series=showHLZone and ta.lowest(low, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HL Zone", color=color.new(color.orange, 80), style=shape.triangledown, location=location.belowbar)