En la carga de los recursos... Cargando...

Estrategia de seguimiento de tendencias basada en la confianza en las tendencias

El autor:¿ Qué pasa?, Fecha: 2023-11-22 15:50:07
Las etiquetas:

img

Resumen general

La idea principal de esta estrategia es implementar una estrategia de tendencia que sea lo más precisa posible. Juzga la posibilidad de continuidad de la tendencia lineal actual calculando la confianza de un cierto número de precios de cierre pasados. La estrategia asume que una vez que la confianza excede un cierto nivel, es más probable que la tendencia lineal en curso continúe.

Principio de la estrategia

La estrategia calcula el ajuste lineal de los precios de cierre N pasados utilizando la regresión lineal ordinaria, obteniendo la pendiente k y la desviación estándar σ de la desviación de los precios de cierre.

Cuando la confianza en la tendencia exceda el umbral de entrada larga, vaya largo; cuando baje al umbral de salida larga, cierre largo. De manera similar, cuando la confianza en la tendencia esté por debajo del umbral de entrada corta, vaya corto; cuando exceda el umbral de salida corta, cierre corto.

De esta manera puede filtrar las señales de los movimientos salvajes de precios que no siguen una tendencia lineal clara.

Análisis de ventajas

La estrategia combina métodos de seguimiento de tendencias y regresión lineal en estadísticas, que pueden evitar seguir fluctuaciones de precios a corto plazo y solo seguir tendencias a largo plazo, obteniendo así una menor frecuencia de negociación y una mayor tasa de ganancia.

La estrategia tiene un gran espacio de ajuste de parámetros y puede adaptarse a diferentes productos y plazos ajustando los parámetros, logrando una buena generalización.

Análisis de riesgos

La estrategia tiene el riesgo de quedar atrapada. Generará grandes pérdidas cuando se produzca una inversión significativa de la tendencia. Además, la configuración inadecuada de los parámetros también puede conducir a un sobrecomercio o perder buenas oportunidades comerciales.

El riesgo de caída puede ser controlado mediante un stop loss, pero la elección de los parámetros debe evaluarse cuidadosamente para evitar el exceso de ajuste.

Direcciones de optimización

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

  1. Añadir la lógica stop loss/take profit para bloquear las ganancias y controlar los riesgos

  2. Añadir módulo de optimización adaptativa para el ajuste de parámetros dinámicos

  3. Añadir un modelo de aprendizaje automático para determinar los puntos de inversión de tendencia y mejorar aún más la tasa de ganancia

  4. Prueba de adaptabilidad en diferentes productos y plazos para mejorar la generalización

Conclusión

En general, se trata de una estrategia de seguimiento de tendencias a largo plazo con control de riesgos. Combina métodos de seguimiento de tendencias y regresión lineal para filtrar las señales comerciales de ruido. A través del ajuste de parámetros, puede adaptarse bien a diferentes productos y plazos, y es una estrategia efectiva que merece una investigación y mejora en profundidad.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © carefulCamel61097

// ################################################################################################

// "This is a trend following strategy that performed very well on the past 5 years"
// "Intended to be used on BTC-USDT, 4hr timeframe"

// "A factor 2 Leverage can be added by changing Order Size to 200% of equity"
// "Higher leverage is not recommended due to big drawdowns"

// "Also seems to work on 1D timeframe, although ideal parameters may be different"
// "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different"

// ################################################################################################

//@version=5
strategy("Trend Following based on Trend Confidence", overlay=false )

// Inputs

source      = input(close)

since       = input(timestamp('2000-01-01'), title='Start trading interval')
till        = input(timestamp('2030-01-01'), title='End trading interval')

length      = input(30, title='Length')

longs_on    = input.bool(true, title='Longs')
shorts_on   = input.bool(true, title='Shorts')

// Parameters for best performance 2018 - 2022
// long_entry  = input.float(0.26, step=0.01, title='Long entry threshold')
// long_exit   = input.float(-0.10, step=0.01, title='Long exit threshold')
// short_entry = input.float(-0.24, step=0.01, title='Short entry threshold')
// short_exit  = input.float(-0.04, step=0.01, title='Short exit threshold')

long_entry  = input.float(0.25, step=0.01, title='Long entry threshold')
long_exit   = input.float(-0.10, step=0.01, title='Long exit threshold')
short_entry = input.float(-0.25, step=0.01, title='Short entry threshold')
short_exit  = input.float(-0.05, step=0.01, title='Short exit threshold')

stop_loss   = input.float(10, step=1, title='Stop loss (percentage)') / 100

// Trend Confidence

linreg = ta.linreg(source, length, 0)
linreg_p = ta.linreg(source, length, 0+1)

x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
    deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2)
deviation = math.sqrt(deviationSum/(length))

slope_perc = slope / source[0]
deviation_perc = deviation / source[0]
trend_confidence = slope_perc / deviation_perc

// Strategy

in_interval = true

sl_long = strategy.position_avg_price * (1 - stop_loss)
sl_short = strategy.position_avg_price * (1 + stop_loss)

if in_interval and longs_on and ta.crossover(trend_confidence, long_entry)
    strategy.entry("TC Long Entry", strategy.long)
    strategy.exit("TC Long Exit", stop=sl_long)
if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit)
    strategy.close("TC Long Entry")

if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry)
    strategy.entry("TC Short Entry", strategy.short)
    strategy.exit("TC Short Exit", stop=sl_short)
if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit)
    strategy.close("TC Short Entry")

// Plots 

plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255))

plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1)
plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1)
plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1)
plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)


Más.