Estrategia de negociación de ruptura de canal de regresión lineal

El autor:¿ Qué pasa?, Fecha: 2024-02-18 15:00:53
Las etiquetas:

img

Resumen general

Esta estrategia utiliza las bandas superior e inferior del canal de regresión lineal, combinada con la doble desviación estándar para establecer señales de compra y venta de ruptura, para establecer posiciones cuando los precios se rompen.

Estrategia lógica

La lógica central de esta estrategia se basa en la banda superior, la banda inferior y la línea media del canal de regresión lineal.

  1. Calcular el valor de regresión lineal enreg de precios y el valor de regresión lineal enreg_p del siguiente período

  2. Calcular la pendiente de pendiente y la intersección de la intersección de la línea de regresión lineal basada en linreg

  3. Calcular la desviación de la desviación de los precios en relación con la línea de regresión

  4. Establecer el dev múltiple de la desviación para obtener el desplazamiento de las bandas superior e inferior

  5. Cuando el precio se rompe hacia arriba desde la banda inferior, establecer la compra de la señal de compra

  6. Cuando el precio se rompe hacia abajo desde la banda superior, establecer la venta de la señal de venta

  7. Cuando el precio se invierte desde la línea media del canal, se establece la salida de la señal de ganancia

  8. Configurar la lógica de negociación basada en las señales de compra, venta y salida

Análisis de ventajas

La mayor ventaja de esta estrategia es que utiliza la tendencia a medio y largo plazo reflejada por el canal de regresión lineal.

  1. Las bandas superior e inferior pueden reflejar eficazmente el rango normal de fluctuaciones de precios.

  2. El cruce de la línea media como señal de toma de ganancias puede maximizar las ganancias y evitar las pérdidas causadas por reversiones después de obtener ganancias.

  3. El canal de regresión lineal tiene cierto retraso, lo que puede filtrar eficazmente el ruido del mercado a corto plazo y hacer que las señales comerciales sean más confiables.

  4. Esta estrategia tiene pocos parámetros y es fácil de implementar, adecuada para el comercio algorítmico.

Análisis de riesgos

Esta estrategia tiene algunos riesgos:

  1. El retraso del canal de regresión lineal puede perder tendencias después de cambios drásticos a corto plazo.

  2. La configuración incorrecta del multiplicador de desviación también puede conducir a señales falsas.

  3. El hecho de confiar únicamente en las señales de ruptura puede conducir a pérdidas de la sierra.

  4. La combinación con otros indicadores de canal o la prueba de diferentes fuentes de datos pueden ayudar.

Direcciones de optimización

Las principales direcciones de optimización de esta estrategia:

  1. Optimizar la longitud del canal de regresión lineal para equilibrar el retraso y la sensibilidad.

  2. Optimizar el multiplicador de desviación para mejorar la calidad de la señal al tiempo que se maximiza el control del riesgo.

  3. Añadir otros indicadores para filtrar la señal para mejorar la tasa de ganancia, por ejemplo, EMA, KDJ, etc.

  4. Se añadirán mecanismos de stop loss, como el ATR para detener las pérdidas.

  5. Prueba el impacto de diferentes fuentes de datos en la estrategia, por ejemplo, cierre ajustado, datos de índices, etc.

  6. Ajustar dinámicamente los parámetros o los pesos de la señal en función de las condiciones del mercado.

Conclusión

En resumen, este es un sistema de ruptura que utiliza el canal de regresión lineal como indicador de señal. La lógica de la estrategia es clara y fácil de entender, con pocos parámetros, lo que hace que el comercio en vivo sea relativamente fácil de implementar. Sin embargo, cómo optimizar dinámicamente los parámetros basados en las condiciones cambiantes del mercado y combinar otros indicadores para el filtrado de señales es clave para el éxito de esta estrategia. A través de pruebas y optimización continuas, esta estrategia puede convertirse en un sistema cuantitativo estable que genere ganancias.


/*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)

Más.