MACD lineal Descubra la magia de la regresión lineal en TradingView


Fecha de creación: 2023-12-15 10:22:50 Última modificación: 2023-12-15 10:22:50
Copiar: 0 Número de Visitas: 928
1
Seguir
1621
Seguidores

MACD lineal Descubra la magia de la regresión lineal en TradingView

Nombre de la estrategia: estrategia MACD lineal impulsada por el impulso

Descripción general: Es una estrategia cuantitativa que utiliza la regresión lineal para predecir el precio de las acciones y se combina con el indicador MACD. Utiliza la regresión lineal para analizar los precios históricos y el volumen de transacciones y predecir las tendencias futuras de los precios.

Principio de la estrategia:

  1. Coeficiente de regresión lineal del precio: se aplica una línea de regresión lineal en función del volumen de transacciones históricas para predecir el precio futuro.
  2. Dibujar el precio previsto: Dibujar la línea prevista del precio según el coeficiente de regresión del paso 1
  3. Genera una señal de compra: genera una señal de compra cuando el precio previsto está entre el precio de apertura y el precio de cierre y el MACD sube.
  4. Genera una señal de venta: genera una señal de venta cuando el MACD baja y el precio es inferior al precio previsto.

Análisis de las ventajas: Es una estrategia que combina predicción estadística y juicio de indicadores técnicos. Utiliza la regresión lineal para obtener predicciones de precios y evita la conjetura subjetiva. Al mismo tiempo, el indicador MACD puede determinar con eficacia la dirección de compra y venta del mercado y capturar con precisión las oportunidades. En general, es una estrategia de alto grado de sistematización, precisión de predicción y control de riesgo.

Análisis de riesgos: La regresión lineal depende solo de los datos históricos, no es sensible a los eventos repentinos, como las noticias de grandes ganancias y pérdidas, y puede generar señales erróneas. Además, la configuración de los parámetros, como la longitud del ciclo de regresión, también puede afectar el rendimiento de la estrategia.

La dirección de la optimización: Creemos que la estrategia puede ser optimizada en los siguientes aspectos:

  1. Incorporar un mecanismo de stop loss. Apagar posiciones cuando el precio rompe la línea de stop loss, para controlar eficazmente las pérdidas causadas por señales de error individuales.
  2. Introducción de modelos de aprendizaje automático. Uso de modelos más eficientes para predecir tendencias de precios y mejorar la precisión de las estrategias.
  3. Combinación de indicadores de emociones. Introducción de indicadores de emociones como el índice de temor en el mercado, para juzgar el ambiente de compra y venta en el mercado y mejorar la tasa de éxito de la estrategia.
  4. La combinación de múltiples marcos de tiempo. Las predicciones de diferentes períodos de tiempo pueden verificarse entre sí, formando estrategias combinadas que reducen las limitaciones de un solo marco de tiempo.

En resumen: Esta estrategia utiliza la regresión lineal para predecir el precio y el MACD para formar una estrategia de trading cuantitativa sistematizada. Tiene ventajas como la claridad de la lógica de predicción, el control del riesgo y la amplitud del espacio de optimización. Creemos que su rendimiento será cada vez más excelente mediante la optimización y la repetición continuas.

Código Fuente de la Estrategia
/*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)