Linear MACD Desbloqueie a magia da regressão linear no TradingView


Data de criação: 2023-12-15 10:22:50 última modificação: 2023-12-15 10:22:50
cópia: 0 Cliques: 618
1
focar em
1228
Seguidores

Linear MACD Desbloqueie a magia da regressão linear no TradingView

Nome da estratégia: estratégia MACD linear impulsionada pela força

Descrição: Esta é uma estratégia quantitativa que utiliza a regressão linear para prever o preço das ações e combinado com o indicador MACD. Utiliza a regressão linear para analisar os preços históricos e o volume de transações e prever a tendência futura dos preços.

Princípios da estratégia:

  1. Coeficiente de regressão linear para o cálculo do preço: uma linha de regressão linear é aplicada com base no volume de transações históricas para a previsão do preço futuro.
  2. Desenhar o preço de previsão: Desenhar a linha de previsão do preço de acordo com o coeficiente de regressão do passo 1.
  3. Geração de um sinal de compra: quando o preço previsto está entre o preço de abertura e o preço de fechamento e o MACD sobe, gera um sinal de compra.
  4. Geração de um sinal de venda: quando o MACD cai e o preço está abaixo do preço previsto, gera um sinal de venda.

Análise de vantagens: É uma estratégia que combina previsão estatística e avaliação de indicadores técnicos. Utiliza a regressão linear para obter previsões de preços, evitando especulações subjetivas. Ao mesmo tempo, o indicador MACD é eficaz para avaliar a trajetória de compra e venda do mercado e capturar com precisão as oportunidades.

Análise de Riscos: A regressão linear depende apenas de dados históricos, não é sensível a eventos inesperados, como notícias de grandes lucros e perdas, e pode gerar sinais errados. Além disso, a configuração de parâmetros, como a duração do ciclo de regressão, também pode afetar o desempenho da estratégia. Recomendamos a adoção de preços de previsão suave de vWMA para reduzir o impacto da curva de oscilação na estratégia.

Otimização: A estratégia pode ser melhorada em alguns aspectos:

  1. Adotar um mecanismo de parada de perda. Quando o preço quebra a linha de parada de perda, controle efetivamente a perda causada por sinais errados individuais.
  2. Introdução de modelos de aprendizagem de máquina. Utilização de modelos mais eficientes para prever tendências de preços e melhorar a precisão da estratégia.
  3. Combinação de indicadores de emoção. Introdução de indicadores de emoção, como o índice de medo do mercado, para avaliar o clima de compra e venda no mercado e melhorar a taxa de vitória da estratégia.
  4. Combinação de vários quadros de tempo. As previsões de diferentes períodos de tempo podem ser verificadas entre si, formando estratégias combinadas, reduzindo as limitações de um único quadro de tempo.

Resumo: A estratégia de regressão linear prevê preços com MACD indicadores de julgamento, formando uma estratégia de negociação quantitativa sistematizada. Ela tem a lógica de previsão de clareza, o risco de controle, a amplitude de espaço de otimização e outras vantagens.

Código-fonte da estratégia
/*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)