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.
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.
Calcular el valor de regresión lineal enreg de precios y el valor de regresión lineal enreg_p del siguiente período
Calcular la pendiente de pendiente y la intersección de la intersección de la línea de regresión lineal basada en linreg
Calcular la desviación de la desviación de los precios en relación con la línea de regresión
Establecer el dev múltiple de la desviación para obtener el desplazamiento de las bandas superior e inferior
Cuando el precio se rompe hacia arriba desde la banda inferior, establecer la compra de la señal de compra
Cuando el precio se rompe hacia abajo desde la banda superior, establecer la venta de la señal de venta
Cuando el precio se invierte desde la línea media del canal, se establece la salida de la señal de ganancia
Configurar la lógica de negociación basada en las señales de compra, venta y salida
La mayor ventaja de esta estrategia es que utiliza la tendencia a medio y largo plazo reflejada por el canal de regresión lineal.
Las bandas superior e inferior pueden reflejar eficazmente el rango normal de fluctuaciones de precios.
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.
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.
Esta estrategia tiene pocos parámetros y es fácil de implementar, adecuada para el comercio algorítmico.
Esta estrategia tiene algunos riesgos:
El retraso del canal de regresión lineal puede perder tendencias después de cambios drásticos a corto plazo.
La configuración incorrecta del multiplicador de desviación también puede conducir a señales falsas.
El hecho de confiar únicamente en las señales de ruptura puede conducir a pérdidas de la sierra.
La combinación con otros indicadores de canal o la prueba de diferentes fuentes de datos pueden ayudar.
Las principales direcciones de optimización de esta estrategia:
Optimizar la longitud del canal de regresión lineal para equilibrar el retraso y la sensibilidad.
Optimizar el multiplicador de desviación para mejorar la calidad de la señal al tiempo que se maximiza el control del riesgo.
Añadir otros indicadores para filtrar la señal para mejorar la tasa de ganancia, por ejemplo, EMA, KDJ, etc.
Se añadirán mecanismos de stop loss, como el ATR para detener las pérdidas.
Prueba el impacto de diferentes fuentes de datos en la estrategia, por ejemplo, cierre ajustado, datos de índices, etc.
Ajustar dinámicamente los parámetros o los pesos de la señal en función de las condiciones del mercado.
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)