Estrategia de trading de ruptura basada en el canal de regresión lineal


Fecha de creación: 2024-02-18 15:00:53 Última modificación: 2024-02-18 15:00:53
Copiar: 1 Número de Visitas: 1045
1
Seguir
1617
Seguidores

Estrategia de trading de ruptura basada en el canal de regresión lineal

Descripción general

La estrategia utiliza la subida y bajada del canal de regresión lineal, en combinación con la configuración de la diferencia de doble estándar para romper las señales de compra y venta, para crear posiciones de apertura después de la ruptura del precio. Al mismo tiempo, utiliza el cruce de la línea central del canal como señal de posición plana, para obtener ganancias después de la parada.

Principio de estrategia

La lógica central de esta estrategia se basa en la subida y bajada de las vías de regresión lineal y la línea media. El proceso de cálculo específico es el siguiente:

  1. Calcula el valor de la regresión lineal del precio, y el valor de la regresión lineal del siguiente ciclo

  2. La inclinación de la línea de regresión lineal y el intersectado de la línea de regresión lineal calculados en función del valor de regresión lineal

  3. Calcula la desviación del precio con respecto a la línea de regresión

  4. Configurar dev como el múltiplo de la desviación para obtener la desviación de la vía ascendente y descendente

  5. Cuando el precio se rompa de la vía inferior hacia arriba, configure una señal de compra

  6. Cuando el precio se rompe de la vía superior hacia abajo, se establece una señal de venta

  7. Cuando el precio se invierte desde la línea media del canal, configure la señal de parada exit

  8. La lógica de negociación se configura según las señales de compra, venta y parada

Análisis de las ventajas

La mayor ventaja de esta estrategia es que se aprovechan las tendencias a medio y largo plazo de los precios reflejadas por el canal de regresión lineal. Se refleja en los siguientes aspectos:

  1. La trayectoria ascendente y descendente de un canal de regresión lineal puede reflejar eficazmente el rango normal de fluctuación de los precios, y puede utilizar el rango del canal para configurar la señal de negociación y reducir la señal errónea.

  2. El cruce de la línea media sirve como señal de parada para bloquear al máximo las ganancias y evitar las pérdidas que pueden ocasionar las inversiones posteriores a las ganancias.

  3. El instrumento de regresión lineal tiene cierta latencia, lo que elimina el ruido del mercado a corto plazo y hace que las señales de negociación sean más confiables.

  4. La estrategia tiene pocos parámetros, es fácil de implementar y es adecuada para la algoritmización de transacciones cuantitativas.

Análisis de riesgos

La estrategia también tiene algunos riesgos, como:

  1. El canal de regresión lineal es retrasado y puede perder la tendencia después de un cambio brusco a corto plazo. Se puede reducir el ciclo del canal de manera adecuada y optimizar los parámetros.

  2. La configuración incorrecta del factor de desviación también puede causar una señal errónea. Se puede combinar con los parámetros de optimización de la retroalimentación.

  3. Se puede considerar la filtración en combinación con otros indicadores.

  4. Existe un cierto riesgo de coincidencia de curvas. Se puede considerar la combinación con otros indicadores de canal o probar diferentes fuentes de datos.

Dirección de optimización

La estrategia se puede optimizar principalmente en los siguientes aspectos:

  1. Optimización de la longitud de los canales de regresión lineal para equilibrar la latencia y la sensibilidad de la respuesta.

  2. Optimización de los coeficientes de desviación para mejorar la calidad de la señal, a la vez que se controla el riesgo.

  3. Añadir otros indicadores para filtrar señales y mejorar la tasa de éxito de la estrategia. Por ejemplo, EMA, KDJ, etc.

  4. Mecanismos adicionales para detener los daños, como el deterioro de ATR, el deterioro de seguimiento, etc.

  5. Prueba el impacto de diferentes fuentes de datos en la estrategia. Por ejemplo, el uso de datos de devolución de derechos, datos de índices, etc.

  6. En combinación con el entorno de mercado (mercado de capitales libres) se ajusta dinámicamente el parámetro o el peso de la señal.

Resumir

La estrategia en su conjunto es un sistema de ruptura que utiliza el canal de regresión lineal como indicador de la señal. La idea de la estrategia es clara y fácil de entender, tiene pocos parámetros y no es difícil de implementar en el terreno. Pero la clave del éxito de la estrategia es cómo optimizar y ajustar los parámetros de acuerdo con la dinámica del entorno del mercado y filtrar la señal en combinación con otros indicadores.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Robotrading
//@version=4

strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1)

//Settings
source      = input(close)
length      = input(100, minval=1)
offset      = input(0, minval=0)
dev         = input(2.0, "Deviation")
smoothing   = input(1, minval=1)
mtf_val     = input("", "Resolution", input.resolution)
signals     = input("Recent", "Signals Display", options=["Recent", "All"])
goto        = input(0, "End At Bar Index")

//Lin.reg.
cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white
data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing)
linreg = data(linreg(source, length, offset))
linreg_p = data(linreg(source, length, offset+1))

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

//Cross
dm_current = -deviation*dev + y2
dp_current = deviation*dev + y2
ex_current = (dm_current + dp_current) / 2
buy = crossunder(close, dm_current)
sell = crossover(close, dp_current)
exit = crossover(close, ex_current) or crossunder(close, ex_current)

//Channel
updating = goto <= 0 or x < goto
// if updating
//     line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3)
//     line.delete(b[1])
//     line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3)
//     line.delete(dp[1])
//     line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3)
//     line.delete(dm[1])

//Lines
plot(dm_current, color = color.lime)
plot(dp_current, color = color.red)
plot(ex_current)
    
//Trading
if ex_current > 0
    strategy.entry("Long", strategy.long, na, limit = dm_current)
    strategy.entry("Short", strategy.short, na, limit = dp_current)
    strategy.exit("ExitLong", "Long", limit = ex_current)
    strategy.exit("ExitShort", "Short", limit = ex_current)