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:
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:
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.
/*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)