Estrategias cuantitativas basadas en reversiones de puntos pivote


Fecha de creación: 2024-02-20 14:22:13 Última modificación: 2024-02-20 14:22:13
Copiar: 0 Número de Visitas: 654
1
Seguir
1617
Seguidores

Estrategias cuantitativas basadas en reversiones de puntos pivote

Descripción general

La idea central de esta estrategia es utilizar los puntos centrales para el comercio cuantitativo. Busca los puntos altos y bajos del eje central que son importantes y, cuando los precios superan estos puntos clave, realiza un comercio inverso.

Principio de estrategia

La estrategia primero define las funciones pivotHighSig() y pivotLowSig() para encontrar los puntos altos y bajos del eje central.

Concretamente, en el caso de los puntos altos del eje central, se buscan varios puntos altos y bajos consecutivos en el lado izquierdo y en el lado derecho. De este modo, el punto alto del eje central se encuentra en una posición relativamente más alta. En el caso de los puntos bajos del eje central, por el contrario, se buscan puntos altos y bajos consecutivos en ambos lados del eje central.

Una vez que se encuentra el punto más alto y más bajo del eje, la estrategia selecciona aún más el eje central del eje, es decir, el punto más importante en el eje. Esto se logra mediante la definición de varias variables históricas del punto más bajo del eje, como ph1, ph2 etc.

Por último, cuando el precio rompe el eje central del eje central, se realiza una inversión.

Ventajas estratégicas

Esta estrategia cuantitativa basada en puntos centrales tiene las siguientes ventajas:

  1. Aprovechando las zonas de resistencia de apoyo del mercado, que a menudo son puntos de oportunidad para que los precios se reviertan
  2. En la actualidad, el gobierno de la República Popular China está trabajando en la creación de una plataforma de intercambio de información para los ciudadanos de China.
  3. El eje central es el extremum más destacado, y los puntos de ruptura son más fuertes.
  4. Utilizando los puntos centrales de los ejes, la señal es más confiable

Riesgos y soluciones

La estrategia también tiene sus riesgos:

  1. El error en el reconocimiento de los puntos cardinales, que produce una señal errónea. La solución consiste en ajustar los parámetros de espacio izquierdo y derecho para asegurar que la identificación de los puntos cardinales sea más precisa.
  2. La solución es combinar más factores para filtrar la señal, como la potencia, el volumen de tráfico, etc.

Dirección de optimización

Esta estrategia también puede ser optimizada en las siguientes direcciones:

  1. Aumentar las estrategias de stop loss para que sean más estables
  2. Filtración de señales en combinación con más indicadores
  3. Desarrollo de estrategias invertidas de PRED para optimizar aún más las predicciones de puntos centrales utilizando ML
  4. Añadir la función de adaptación de parámetros

Resumir

Esta estrategia ha funcionado bien en general, y la idea central es encontrar los puntos centrales importantes y invertir el comercio en el momento de la ruptura. Con una mayor optimización, esta estrategia puede obtener una señal más estable y confiable, lo que genera buenos beneficios.

Código Fuente de la Estrategia
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Pivot of Pivot Reversal Strategy [QuantNomad]", shorttitle = "PoP Reversal Strategy [QN]", overlay=true)

// Inputs 
leftBars   = input(4,   title = 'PP Left Bars')
rightBars  = input(2,   title = 'PP Right Bars')
atr_length = input(14,  title = 'ATR Length')
atr_mult   = input(0.1, title = 'ATR Mult')

// Pivot High Significant Function
pivotHighSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (high[right] < high[right+i] + atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (high[right] < high[i] + atr * atr_mult)
            pp_ok := false
    
    pp_ok ? high[right] : na

// Pivot Low Significant Function
pivotLowSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (low[right] > low[right+i] - atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (low[right] > low[i] - atr * atr_mult)
            pp_ok := false
    
    pp_ok ? low[right] : na


swh = pivotHighSig(leftBars, rightBars)
swl = pivotLowSig (leftBars, rightBars)

swh_cond = not na(swh)

hprice = 0.0
hprice := swh_cond ? swh : hprice[1]

le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

swl_cond = not na(swl)

lprice = 0.0
lprice := swl_cond ? swl : lprice[1]

se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Pivots of pivots
ph1 = 0.0
ph2 = 0.0
ph3 = 0.0

pl1 = 0.0
pl2 = 0.0
pl3 = 0.0

pphprice = 0.0
pplprice = 0.0

ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1])
ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1])
ph1 := swh_cond ? hprice     : nz(ph1[1])

pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1])
pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1])
pl1 := swl_cond ? lprice     : nz(pl1[1])

pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1])
pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1])


if (le)
    strategy.entry("PP_RevLE", strategy.long, comment="PP_RevLE", stop=pphprice + syminfo.mintick)

if (se)
    strategy.entry("PP_RevSE", strategy.short, comment="PP_RevSE", stop=pplprice - syminfo.mintick)
    
// Plotting 
plot(lprice, color = color.red,   transp = 55)
plot(hprice, color = color.green, transp = 55)

plot(pplprice, color = color.red,   transp = 0, linewidth = 2)
plot(pphprice, color = color.green, transp = 0, linewidth = 2)