Estrategia de seguimiento de tendencias

El autor:¿ Qué pasa?, Fecha: 2024-01-17 11:19:06
Las etiquetas:

img

Resumen general

La estrategia Trailing Stop es una estrategia de trading cuantitativa que combina indicadores de juicio de tendencia y mecanismos de trailing stop. Esta estrategia utiliza el indicador Supertrend para determinar la dirección de la tendencia actual, y utiliza una línea de trailing stop para rastrear los cambios de precios en tiempo real, logrando el seguimiento de tendencias y el control de riesgos.

Principios de estrategia

La estrategia primero calcula el indicador de Supertrend para juzgar si la tendencia actual es ascendente o descendente. El indicador de Supertrend incorpora el indicador ATR y el punto de pivote para determinar con mayor precisión la dirección de la tendencia. Si el indicador de Supertrend juzga una tendencia alcista, se genera una señal de compra. Si juzga una tendencia bajista, se genera una señal de venta.

Cuando se genera una señal de compra, la estrategia abrirá una posición larga. Al mismo tiempo, calcula una línea de parada de seguimiento en tiempo real. El método de cálculo de esta línea de parada es el punto de pivote menos el valor del indicador ATR. Siempre que el precio de cierre actual sea mayor que esta línea de parada, la línea de parada se moverá hacia arriba en tiempo real y mantendrá una posición de stop loss razonable. Si el precio rompe la línea de parada, la posición se cerrará con un stop loss.

La estrategia también incorpora los indicadores ADX y RSI para filtrar las señales comerciales inadecuadas.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede captar bien la dirección de la tendencia y lograr el seguimiento de la tendencia. El indicador de Supertrend es más preciso que las medias móviles simples y puede determinar rápidamente los puntos de inflexión. Al mismo tiempo, el mecanismo de parada posterior puede ajustar automáticamente los niveles de parada para maximizar el bloqueo de ganancias y controlar eficazmente los riesgos.

Además, los indicadores ADX y RSI se añaden a la estrategia de filtración, evitando errores durante los períodos de alta volatilidad del mercado.

Análisis de riesgos

El mayor riesgo de esta estrategia es que el juicio de tendencia se equivoque y el indicador de Supertrend emita una señal incorrecta. Aunque el indicador de Supertrend es superior a las medias móviles simples, es inevitable que ocurran juicios erróneos en condiciones de mercado complejas. En este punto, es necesario confiar en mecanismos de stop loss para controlar las pérdidas.

Además, la configuración incorrecta de los parámetros de la estrategia también puede suponer riesgos. Por ejemplo, un parámetro ATR que es demasiado grande llevará a ajustes de línea de stop-loss demasiado agresivos. La configuración incorrecta de los parámetros ADX y RSI también puede perder oportunidades comerciales o aumentar la probabilidad de operaciones incorrectas. Esto requiere una extensa prueba histórica para encontrar los parámetros óptimos.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Intentar otros indicadores de evaluación de tendencias como DMI y KDJ en combinación con el indicador Supertrend para formar un sistema de evaluación multifactorial, que puede mejorar la precisión de la evaluación.

  2. Aumentar el módulo de optimización de parámetros adaptativos basado en aprendizaje automático para que el parámetro ATR, el parámetro ADX, el parámetro RSI, etc. puedan ajustarse de acuerdo con el mercado en tiempo real en lugar de valores fijos.

  3. Introducir indicadores de sentimiento para reemplazar a los indicadores RSI para el filtrado de señales.

  4. Aumentar el módulo de gestión del tamaño de la posición. De acuerdo con la distancia entre la línea de parada y el precio actual, ajuste dinámicamente el tamaño de la posición. Cuanto más lejos de la línea de parada, mayor sea el tamaño de la posición, se puede aumentar adecuadamente para mejorar el potencial de ganancia.

Conclusión

La estrategia de seguimiento de tendencias Trailing Stop emplea de manera integral métodos como análisis de tendencias, trailing stops y filtrado multifactorial. Mientras que captura tendencias, controla estrictamente los riesgos y es una estrategia cuantitativa más madura.


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

//@version=5
strategy("Bendre ADX Sup Trend", overlay = true)

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

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period")
AtrFactor=input(defval = 2, title = "ATR Factor")
AtrPd=input(defval = 18, title = "ATR Period")

StartDate = input(timestamp("1 Dec 2022"), title="Start Date")
EndDate = input(timestamp("12 Jan 2023"), title="End Date")

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

float center = na
center := center[1]
// float lastpp = ph ? ph : pl ? pl : 0.0
float lastpp = na(ph) ? na(pl) ? na : pl : ph

if lastpp > 0
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

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

var float TUp = na
var float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.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 = 14
TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.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 = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = ta.sma(DX, lenADX)


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

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

//
// RSI
//
length = input( 14 )
overSold = input( 30 )
overBought = input( 65 )
price = close
vrsi = ta.rsi(price, length)


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


if (buy and vrsi > overBought)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long)
    // strategy.close("Sell", "close Sell")

if (sell) and (strategy.position_size > 0)
    // strategy.entry("Sell", strategy.short)
    strategy.close("Buy", "Close Buy")

// if(sell and vrsi < overSold )
//     strategy.entry("Sell", strategy.short)

// if(buy) and (strategy.position_size > 0)
//     strategy.close("Sell", "close Sell")





Más.