Estrategia de trading de alta frecuencia basada en soporte y resistencia de súper tendencias e indicador ADX


Fecha de creación: 2024-02-19 15:01:36 Última modificación: 2024-02-19 15:01:36
Copiar: 1 Número de Visitas: 876
1
Seguir
1621
Seguidores

Estrategia de trading de alta frecuencia basada en soporte y resistencia de súper tendencias e indicador ADX

Descripción general

Esta estrategia utiliza una línea de resistencia de soporte de tendencia y un indicador de ADX para realizar operaciones de alta frecuencia. La línea de resistencia de soporte de tendencia se utiliza para determinar la tendencia de los precios y emitir señales de negociación mediante el cálculo dinámico del punto de resistencia de soporte más reciente. El indicador de ADX se utiliza para determinar la fuerza de la tendencia y configurar el valor de ADX como una condición de filtración.

Principio de estrategia

  1. Calcula las líneas de resistencia de soporte. Utiliza el precio de cierre como referencia, y agrega una amplitud de ATR a cada lado. Cuando el precio rompe estas líneas, se considera una reversión de tendencia.

  2. El indicador ADX determina la fuerza de la tendencia. Cuando el ADX es superior al valor establecido, se considera que la tendencia es lo suficientemente fuerte.

  3. La combinación de ambos emite una señal de negociación. Solo se puede hacer más deuda cuando se rompe la línea de resistencia de soporte y el ADX es lo suficientemente grande.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El cálculo dinámico de la línea de tendencia super apoya la resistencia y permite determinar rápidamente la ruptura.

  2. El indicador ADX filtra de manera efectiva las situaciones fuera de tendencia, reduciendo las transacciones no válidas.

  3. El retiro y la pérdida son muy buenos.

Análisis de riesgos

La estrategia también tiene los siguientes riesgos:

  1. Un salto muy alto puede hacer que la línea de tendencia súper no funcione.

  2. El ADX incorrecto también puede afectar el rendimiento de la estrategia.

  3. Las transacciones de alta frecuencia tienen mayores costos.

Resolución de las mismas:

  1. Optimización de los súper parámetros, con una ampliación adecuada de la amplitud de ruptura.

  2. Las pruebas son mejores para los parámetros ADX.

  3. Reducir adecuadamente la frecuencia de las transacciones.

Dirección de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimización de los parámetros de los múltiplos de ATR para que la línea de resistencia de soporte sea más robusta.

  2. Prueba diferentes parámetros de ADX para encontrar el valor óptimo.

  3. Se incluye un mecanismo de suspensión de pérdidas para controlar las pérdidas individuales.

Resumir

Esta estrategia integra las ventajas de las líneas de tendencia de ultramar y el indicador ADX para determinar el tiempo de reversión de la tendencia mediante el cálculo dinámico de soporte de resistencia, junto con el indicador ADX para filtrar la señal de baja calidad. Después de la optimización de los parámetros y el ajuste del mecanismo, puede convertirse en una estrategia de alta frecuencia de ganancias estables.

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

//@version=4
strategy("STPP20 + ADX", overlay = true)

///////////////////////////
// SuperTrend + Pivot Point
//////////////////////////

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50)
AtrFactor=input(defval = 5, title = "ATR Factor", minval = 1, step = 0.1)
AtrPd=input(defval = 20, title = "ATR Period", minval=1)

float ph = na
float pl = na
ph := pivothigh(PPprd, PPprd)
pl := pivotlow(PPprd, PPprd)

float center = na
center := center[1]
float lastpp = ph ? ph : pl ? pl : na
if lastpp
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

Up = center - (AtrFactor * atr(AtrPd))
Dn = center + (AtrFactor * atr(AtrPd))

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

// Lines
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")

bsignalSSPP = close > Trailingsl
ssignalSSPP = close < Trailingsl


///////
// ADX
//////

lenADX = 14
th = 25
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, lenADX)


//////
// MA
/////

lenMA = 21
srcMA = input(close, title="Source")
offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
outMA = sma(srcMA, lenMA)


// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP 

if (buy)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long)


if (sell) and (strategy.position_size > 0)
    strategy.order("Sell", false, when = sell)