La Estrategia de Regresión Lineal a Corto Largo es una estrategia de análisis técnico que utiliza un modelo de regresión lineal para predecir los movimientos futuros de los precios de una acción. El principio básico de la estrategia es: los movimientos de los precios de las acciones a menudo siguen una cierta tendencia lineal, y al calcular la regresión lineal del precio, se puede predecir el precio futuro.
La estrategia primero calcula la regresión lineal del precio de las acciones durante un cierto período de tiempo. La regresión lineal se ajusta a una línea recta utilizando el método de los mínimos cuadrados, que representa la tendencia de cambio de precio a lo largo del tiempo. La estrategia luego traza la línea de precios prevista y el precio actual en el gráfico.
La estrategia define dos señales:
Cuando aparece la señal larga, la estrategia abre una posición larga; cuando aparece la señal corta, cierra la posición.
Los pasos clave de la estrategia son los siguientes:
La estrategia de recrudecimiento de regresión lineal a corto y largo plazo tiene las siguientes ventajas:
A pesar de sus muchas ventajas, la Estrategia de Cruce de Regresión Lineal Larga-Corta también tiene algunos riesgos:
La Estrategia de Crossover de Regresión Lineal Larga y Corta genera señales comerciales basadas en la comparación del precio predicho a partir de la regresión lineal y el precio actual. La lógica de la estrategia es simple y clara, y puede capturar la tendencia lineal del precio y es aplicable a diversas condiciones de mercado. Al mismo tiempo, la estrategia es fácil de implementar y optimizar, y los parámetros se pueden ajustar de manera flexible, combinados con otros indicadores, se pueden agregar módulos de control de riesgos, etc., para mejorar continuamente el rendimiento de la estrategia. Sin embargo, la estrategia también tiene riesgos como reconocimiento de tendencia inexacto, configuración de parámetros inadecuada y sobreposición de datos históricos, por lo que se necesita precaución en la aplicación práctica. En general, la Estrategia de Crossover de Regresión Lineal Larga y Corta es una estrategia comercial simple y cuantitativa efectiva que vale la pena explorar y optimizar aún más.
/*backtest start: 2024-02-25 00:00:00 end: 2024-03-26 00:00:00 period: 3h basePeriod: 15m 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/ // © stocktechbot //@version=5 strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0) //Linear Regression vol = volume // Function to calculate linear regression linregs(y, x, len) => ybar = math.sum(y, len)/len xbar = math.sum(x, len)/len b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len) a = ybar - b*xbar [a, b] // Historical stock price data price = close // Length of linear regression len = input(defval = 21, title = 'Strategy Length') linearlen=input(defval = 9, title = 'Linear Lookback') [a, b] = linregs(price, vol, len) // Calculate linear regression for stock price based on volume //eps = request.earnings(syminfo.ticker, earnings.actual) //MA For double confirmation out = ta.sma(close, 200) outf = ta.sma(close, 50) outn = ta.sma(close, 90) outt = ta.sma(close, 21) outthree = ta.sma(close, 9) // Predicted stock price based on volume predicted_price = a + b*vol // Check if predicted price is between open and close is_between = open < predicted_price and predicted_price < close //MACD //[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // Plot predicted stock price plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price") plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price") //offset = input.int(title="Offset", defval=0, minval=-500, maxval=500) plot(out, color=color.blue, title="MA200") [macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9) //BUY Signal longCondition=false mafentry =ta.sma(close, 50) > ta.sma(close, 90) //matentry = ta.sma(close, 21) > ta.sma(close, 50) matwohun = close > ta.sma(close, 200) twohunraise = ta.rising(out, 2) twentyrise = ta.rising(outt, 2) macdrise = ta.rising(macdLine,2) macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen)) and (signalLine < macdLine) if macdlong and macdrise longCondition := true if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //Sell Signal lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) daysSinceEntry = len daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000)) percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100 //trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100 //label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange))) shortCondition=false mafexit =ta.sma(close, 50) < ta.sma(close, 90) matexit = ta.sma(close, 21) < ta.sma(close, 50) matwohund = close < ta.sma(close, 200) twohunfall = ta.falling(out, 3) twentyfall = ta.falling(outt, 2) shortmafall = ta.falling(outthree, 1) macdfall = ta.falling(macdLine,1) macdsell = macdLine < signalLine if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2) shortCondition := true if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)