Estrategia de Supertendencia del Punto de Intervención

El autor:¿ Qué pasa?, Fecha: 2024-02-26 10:57:20
Las etiquetas:

img

Resumen general

La estrategia Pivot Point SuperTrend es una estrategia innovadora de seguimiento de tendencias que combina dos indicadores populares Pivot Points y SuperTrend, al tiempo que introduce un filtro de tendencias adicional para una mayor precisión.

Estrategia lógica

La base de la estrategia radica en la fusión de Pivot Points e indicadores de SuperTrend, además de la adición de un filtro de tendencia robusto. Comienza calculando Pivot Highs y Lows durante un período especificado, sirviendo como puntos de referencia cruciales para el análisis de tendencias.

A continuación, se generan bandas superiores e inferiores basadas en la línea central y el rango verdadero promedio (ATR) con un factor definido por el usuario. Estas bandas se adaptan a la volatilidad del mercado, añadiendo flexibilidad a la estrategia.

El filtro de tendencia adicional introducido en la estrategia mejora aún más sus capacidades. Este filtro se basa en un promedio móvil, proporcionando una evaluación dinámica de la fuerza y la dirección de la tendencia. Al combinar este filtro de tendencia con las señales originales de Pivot Point SuperTrend, la estrategia tiene como objetivo tomar decisiones comerciales más informadas y confiables.

Análisis de las ventajas

  1. Precisión mejorada: La incorporación de un filtro de tendencia mejora la precisión de la estrategia al confirmar la dirección general de la tendencia antes de generar señales.

  2. Continuación de tendencia: La integración de Pivot Points y SuperTrend, junto con el filtro de tendencia, tiene como objetivo prolongar las operaciones durante las fuertes tendencias del mercado, maximizando potencialmente las oportunidades de ganancia.

  3. Reducción de los golpes: El cálculo del promedio ponderado de la estrategia, junto con el filtro de tendencia, ayuda a minimizar las señales falsas y reduce los golpes durante condiciones de mercado inciertas o laterales.

  4. Información sobre soporte y resistencia: la estrategia continúa proporcionando niveles de soporte y resistencia adicionales basados en los puntos pivot, ofreciendo información contextual valiosa a los operadores.

Análisis de riesgos

  1. Dependencia de parámetros: la estrategia es sensible a parámetros como el período ATR y el multiplicador.

  2. Inversión de tendencia: cerca de los puntos de inversión de tendencia, la estrategia puede generar señales falsas que resultan en pérdidas innecesarias.

  3. Optimización excesiva: los parámetros pueden optimizarse para obtener los mejores resultados, pero carecen de viabilidad futura.

  4. Riesgo de brecha: cuando los precios se mueven fuera de las bandas, la estrategia entra en una posición plana. Esto podría perder oportunidades cuando las tendencias se reanuden después de una brecha.

Direcciones de optimización

  1. Filtros adicionales: Se podrían añadir filtros de volumen, volatilidad, etc., para mejorar la solidez de la estrategia.

  2. Parámetros dinámicos: los métodos de optimización automática o ajuste adaptativo de los parámetros basados en las condiciones cambiantes del mercado podrían hacer que la estrategia sea más versátil.

  3. Stop Losses: Investigar formas de diseñar mecanismos de stop loss mientras se mantiene la lógica estratégica para controlar efectivamente la caída.

  4. Optimización de activos cruzados: evaluar los parámetros de estrategia en diferentes mercados e instrumentos. Optimizar los parámetros de acuerdo con las especificidades de cada uno.

Resumen de las actividades

La estrategia Pivot Point SuperTrend demuestra fortalezas únicas a través de dimensiones como la simplicidad y la capacidad de seguir tendencias. Al mismo tiempo, aspectos como parámetros, stop losses, optimización de activos ofrecen espacio para mejorarla en una herramienta aún más universal y confiable. En general, empodera a los operadores con un medio eficiente de capturar las tendencias del mercado.


/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche
// Strategy based on "Pivot Point Supertrend" Indicator by LonesomeTheBlue

//@version=4

strategy("PPS", overlay=true, initial_capital=500000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

prd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50)
Factor=input(defval = 3, title = "ATR Factor", minval = 1, step = 0.1)
Pd=input(defval = 10, title = "ATR Period", minval=1)
showpivot = input(defval = false, title="Show Pivot Points")
showlabel = input(defval = true, title="Show Buy/Sell Labels")
showcl = input(defval = false, title="Show PP Center Line")
showsr = input(defval = false, title="Show Support/Resistance")

// get Pivot High/Low
float ph = pivothigh(prd, prd)
float pl = pivotlow(prd, prd)

// drawl Pivot Points if "showpivot" is enabled
plotshape(ph and showpivot, text="H",  style=shape.labeldown, color=na, textcolor=color.red, location=location.abovebar, transp=0, offset = -prd)
plotshape(pl and showpivot, text="L",  style=shape.labeldown, color=na, textcolor=color.lime, location=location.belowbar, transp=0, offset = -prd)

// calculate the Center line using pivot points
var float center = na
float lastpp = ph ? ph : pl ? pl : na
if lastpp
    if na(center)
        center := lastpp
    else
        //weighted calculation
        center := (center * 2 + lastpp) / 3

// upper/lower bands calculation
Up = center - (Factor * atr(Pd))
Dn = center + (Factor * atr(Pd))

// get the trend
float TUp = na
float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// plot the trend
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")
 
plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na)

// check and plot the signals
bsignal = Trend == 1 and Trend[1] == -1
ssignal = Trend == -1 and Trend[1] == 1
plotshape(bsignal and showlabel ? Trailingsl : na, title="Buy", text="Buy", location = location.absolute, style = shape.labelup, size = size.tiny, color = color.lime, textcolor = color.black, transp = 0)
plotshape(ssignal and showlabel ? Trailingsl : na, title="Sell", text="Sell", location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white, transp = 0)

//get S/R levels using Pivot Points
float resistance = na
float support = na
support := pl ? pl : support[1]
resistance := ph ? ph : resistance[1]

// if enabled then show S/R levels
plot(showsr and support ? support : na, color = showsr and support ? color.lime : na, style = plot.style_circles, offset = -prd)
plot(showsr and resistance ? resistance : na, color = showsr and resistance ? color.red : na, style = plot.style_circles, offset = -prd)

// Trend Filter from SuperTrend Long Strategy
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)

// Combine the SuperTrend calculations
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

// Strategy Entry Conditions
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

// Combined entry conditions
longCondition = (trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window())
shortCondition = (trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window())

if (longCondition)
    strategy.entry("BUY", strategy.long)

if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short)

buy1 = barssince((trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window()))
sell1 = barssince((trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window()))
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(color1)

Más.