
La estrategia de ruptura de la regresión de la media es una estrategia de negociación cuantitativa típica de seguimiento de tendencias. La estrategia utiliza las medias móviles y su canal de diferencia estándar para juzgar el movimiento del mercado y generar una señal de negociación cuando el precio rompe el canal de diferencia estándar.
La estrategia primero calcula el SMA de un promedio móvil simple de N días (el 50 por defecto) y luego calcula el diferencial estándar de StdDev de precios de ese ciclo basado en el SMA. Toma el SMA como el eje central, y las trayectorias ascendentes y descendentes toman el doble de StdDev como trayectorias ascendentes y descendentes para construir el canal de diferencias estándar de la barra. Haga hueco cuando el precio sube a la barra; haga más cuando el precio baja a la barra.
Después de entrar en el mercado, la estrategia establece una parada de pérdidas. En concreto, después de hacer más, la línea de parada es el precio de cierre al entrar en el mercado de — 100 - porcentaje de parada de pérdidas; después de hacer un descuento, la línea de parada es el precio de cierre al entrar en el mercado de — 100 + porcentaje de parada de pérdidas).
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Las soluciones para los riesgos son:
La estrategia tiene espacio para ser optimizada aún más:
Utilice el promedio de varios períodos de tiempo para verificar y evitar que la curva sea demasiado sensible.
Combinación con otros indicadores como el MACD para juzgar tendencias y desviaciones.
Introducción de parámetros de optimización dinámica para algoritmos de aprendizaje automático.
La estrategia de ruptura de la regresión de la línea media es una estrategia de comercio cuantitativa muy práctica en general. Tiene las ventajas de seguir la tendencia, controlar el retroceso, lograr una simplicidad adecuada para la necesidad de comercio cuantitativo. También hay que tener en cuenta algunos problemas de selección de parámetros y configuración de stop loss, junto con análisis de múltiples ejes de tiempo y optimización de parámetros, para obtener un mejor rendimiento de la estrategia.
/*backtest
start: 2023-02-16 00:00:00
end: 2024-02-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Standard Deviation Bands with Buy/Sell Signals", overlay=true)
// Input for the number of standard deviations
deviationMultiplier = input.float(2.0, title="Standard Deviation Multiplier")
// Input for the length of the moving average
maLength = input.int(50, title="Moving Average Length")
// Input for the stop loss percentage
stopLossPercentage = input.float(12, title="Stop Loss Percentage")
// Calculate the moving average
sma = ta.sma(close, maLength)
// Calculate the standard deviation of the price
priceDeviation = ta.stdev(close, maLength)
// Calculate the upper and lower bands
upperBand = sma + (priceDeviation * deviationMultiplier)
lowerBand = sma - (priceDeviation * deviationMultiplier)
// Plot the bands
plot(upperBand, color=color.green, title="Upper Band")
plot(lowerBand, color=color.red, title="Lower Band")
// Plot the moving average
plot(sma, color=color.blue, title="SMA", linewidth=2)
// Buy Signal
buyCondition = ta.crossover(close, lowerBand)
sellCondition = ta.crossunder(close, upperBand)
// Calculate stop loss level
stopLossLevelBuy = close * (1 - stopLossPercentage / 100)
stopLossLevelSell = close * (1 + stopLossPercentage / 100)
// Create Buy and Sell Alerts
alertcondition(buyCondition, title="Buy Signal", message="Buy Signal - Price Crossed Below Lower Band")
alertcondition(sellCondition, title="Sell Signal", message="Sell Signal - Price Crossed Above Upper Band")
// Plot Buy and Sell Arrows on the chart
plotshape(buyCondition, style=shape.triangleup, location=location.belowbar, color=color.green, title="Buy Signal Arrow")
plotshape(sellCondition, style=shape.triangledown, location=location.abovebar, color=color.red, title="Sell Signal Arrow")
// Exit Long and Short Positions
var float stopLossBuy = na
var float stopLossSell = na
if ta.crossover(close, sma)
stopLossBuy := stopLossLevelBuy
if ta.crossunder(close, sma)
stopLossSell := stopLossLevelSell
strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.exit("Stop Loss/Take Profit Buy", from_entry = "Buy", stop = stopLossBuy)
strategy.entry("Sell", strategy.short, when = sellCondition)
strategy.exit("Stop Loss/Take Profit Sell", from_entry = "Sell", stop = stopLossSell)