Nombre de la estrategia: Estrategia MACD lineal impulsada por el impulso
Visión general: Esta es una estrategia cuantitativa que utiliza la regresión lineal para predecir los precios de las acciones combinados con el indicador MACD. Aprovecha el análisis de regresión lineal en los precios históricos y los volúmenes para predecir las tendencias futuras de los precios. Luego utiliza el indicador MACD para determinar el momento de entrada cuando surgen oportunidades de ganancia.
Principio de la estrategia:
Análisis de ventajas: Esta estrategia combina la predicción estadística y el juicio del indicador técnico. Se deriva la predicción de precios utilizando la regresión lineal, evitando la especulación subjetiva. Mientras tanto, el indicador MACD puede determinar eficazmente el impulso del mercado y capturar oportunidades con precisión. En general, esta estrategia tiene un alto nivel sistemático, predicción precisa y riesgos controlables.
Análisis de riesgos:
La regresión lineal se basa únicamente en datos históricos y puede generar señales incorrectas en respuesta a eventos de cisne negro como noticias bajistas significativas. Además, la configuración de parámetros como la duración del período de regresión afecta el rendimiento de la estrategia. Sugerimos usar vwma para suavizar la curva de precios prevista para mitigar los nervios de la curva que afectan a la estrategia.
Direcciones de optimización:
Creemos que esta estrategia se puede optimizar en los siguientes aspectos:
Conclusión:
Esta estrategia genera señales comerciales sistemáticas prediciendo precios con regresión lineal y determinando entradas con el indicador MACD. Sus ventajas incluyen lógica predictiva clara, riesgos controlables y amplio espacio de optimización. Creemos que su rendimiento continuará sobresaliendo a través de optimizaciones e iteraciones continuas. Proporciona inspiraciones para aprovechar los modelos de predicción científica para realizar operaciones cuantitativas y merece más investigación y aplicaciones.
/*backtest start: 2023-12-07 00:00:00 end: 2023-12-14 00:00:00 period: 1m basePeriod: 1m 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 On MACD", overlay=true, margin_long=100, margin_short=100) fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) tolerance = input.string(title="Risk tolerance", defval = "LOW", options=["LOW", "HIGH"]) chng = 0 obv = ta.cum(math.sign(ta.change(close)) * volume) if close < close[1] and (open < close) chng := 1 else if close > close[1] chng := 1 else chng := -1 obvalt = ta.cum(math.sign(chng) * volume) //src = input(title="Source", defval=close) src = obvalt signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"]) // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal //hline(0, "Zero Line", color=color.new(#787B86, 50)) //plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below))) //plot(macd, title="MACD", color=col_macd) //plot(signal, title="Signal", color=col_signal) [macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) //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 = 'Lookback') // Calculate linear regression for stock price based on volume [a, b] = linregs(price, vol, len) // 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 // Plot predicted stock price plot(predicted_price, color=color.rgb(218, 27, 132), linewidth=2, title="Predicted Stock Price") plot(ta.vwma(predicted_price,len), color=color.rgb(199, 43, 64), linewidth=2, title="Predicted Stock Price") //BUY Signal lincrossunder = close > predicted_price macdrise = ta.rising(macd,2) //macdvollong = ta.crossover(macd, signal) //macdlong = ta.crossover(macdLine, signalLine) macdvollong = macd > signal macdlong = macdLine > signalLine longCondition=false if macdlong and macdvollong and is_between and ta.rising(predicted_price,1) longCondition := true if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //Sell Signal lincrossover = close < predicted_price macdfall = ta.falling(macd,1) macdsell = macd < signal shortCondition = false risklevel = predicted_price if (tolerance == "HIGH") risklevel := ta.vwma(predicted_price,len) if macdfall and macdsell and (macdLine < signalLine) and (close < risklevel) shortCondition := true if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)