Estrategia de reversión de la tendencia criptográfica basada en los puntos altos y bajos de los oscilaciones pivot

El autor:¿ Qué pasa?, Fecha: 2024-01-12 14:13:36
Las etiquetas:

img

Resumen general

Esta estrategia identifica las reversiones de tendencia en los activos criptográficos en función de los puntos altos/bajos de swing PIVOT y las señales de ruptura. Pertenece a la categoría de estrategia de reversión de ruptura. La estrategia primero calcula los puntos de precio más altos y más bajos recientes como niveles PIVOT, luego detecta si el precio rompe estos niveles clave, lo que señala cambios importantes en la tendencia.

Cómo funciona la estrategia

  1. Calcular los puntos altos/bajos del PIVOT

    Utiliza ta.pivothigh (()) y ta.pivotlow (()) para encontrar los precios más altos y más bajos durante un período de búsqueda de barra personalizada para trazar puntos PIVOT.

  2. Identificar las señales de ruptura

    Si el precio se rompe por encima del punto bajo PIVOT, o se rompe por debajo del punto alto PIVOT, la estrategia lo considera una señal de inversión de tendencia.

  3. Establecer las condiciones del filtro

    Requiere que el precio rompa los niveles de PIVOT por una distancia significativa, y el precio de cierre cruza los precios de cierre de 150 bares para evitar los golpes.

  4. Entrada y salida

    Trigger buy en condiciones largas, cierre de posición larga en condiciones de salida.

Ventajas

  1. Los puntos PIVOT son sensibles a los grandes cambios de tendencia
  2. Evita los problemas en las tendencias de consolidación con filtros
  3. Captura las reversiones temprano con el swing alto/bajo breakouts

Los riesgos

  1. Los ciclos más largos pueden hacer que la estrategia se rompa
  2. Los puntos y filtros PIVOT deben ajustarse para cada activo
  3. Las tasas de cambio afectan a los resultados, necesitan una estructura de tasas cercanas a cero

Oportunidades de mejora

  1. Prueba diferentes períodos de búsqueda de PIVOT
  2. Añadir el stop loss móvil a la pérdida de control por operación
  3. Combinar con otros indicadores para filtro

Conclusión

La estrategia es robusta en general para capturar grandes reversiones, pero necesita parámetros personalizados por activo y controles de riesgo.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nkrastins95

//@version=5
strategy("Swing Hi Lo", overlay=true, margin_long=100, margin_short=100)

//-----------------------------------------------------------------------------------------------------------------------//

tf = input.timeframe(title="Timeframe", defval="")

gr="LENGTH LEFT / RIGHT"
leftLenH = input.int(title="Pivot High", defval=10, minval=1, inline="Pivot High",group=gr)
rightLenH = input.int(title="/", defval=10, minval=1, inline="Pivot High",group=gr)
colorH = input(title="", defval=color.red, inline="Pivot High",group=gr)

leftLenL = input.int(title="Pivot Low", defval=10, minval=1, inline="Pivot Low", group=gr)
rightLenL = input.int(title="/", defval=10, minval=1, inline="Pivot Low",group=gr)
colorL = input(title="", defval=color.blue, inline="Pivot Low",group=gr)

//-----------------------------------------------------------------------------------------------------------------------//

pivotHigh(ll, rl) =>
    maxLen = 1000
    float ph = ta.pivothigh(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(ph[offset])
            break 
        offset := offset + 1
    ph[offset]

pivotLow(ll, rl) =>
    maxLen = 1000
    float pl = ta.pivotlow(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(pl[offset])
            break 
        offset := offset + 1
    pl[offset]


//-----------------------------------------------------------------------------------------------------------------------//

ph = request.security(syminfo.tickerid, tf, pivotHigh(leftLenH, rightLenH), barmerge.gaps_off, barmerge.lookahead_on)
pl = request.security(syminfo.tickerid, tf, pivotLow(leftLenL, rightLenL), barmerge.gaps_off, barmerge.lookahead_on)

drawLabel(_offset, _pivot, _style, _color) =>
    if not na(_pivot)
        label.new(bar_index[_offset], _pivot, str.tostring(_pivot, format.mintick), style=_style, color=_color, textcolor=#131722)

//-----------------------------------------------------------------------------------------------------------------------//

VWAP = ta.vwap(ohlc4)

longcondition = ta.crossunder(close,pl) and close > close[150]
exitcondition = close > ph

shortcondition = ta.crossover(close,ph) and close < close[150]
covercondition = close < pl

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = exitcondition)

strategy.entry("Short", strategy.short, when = shortcondition)
strategy.close("Short", when = covercondition)

Más.