
A estratégia combina uma média móvel simples (SMA) e uma linha de tendência de retorno linear rolante, definindo um condição de compra quando o preço de fechamento é superior ao SMA e à linha de tendência, e um condição de saída quando o preço de fechamento é inferior ao SMA e à linha de tendência. A estratégia utiliza principalmente o sinal de negociação de linha média do SMA e o suporte da linha de tendência rolante, entrando em jogo quando se rompe o canal de ascensão e saindo quando se rompe o canal de descensão.
A estratégia baseia-se principalmente nos seguintes componentes:
SMA: Média móvel simples, com a média do preço de fechamento em um determinado período (smaPeriod) como linha de sinal.
Linha de tendência de rolagem: a melhor combinação de linha reta com um determinado período de tempo (window) com base na regressão linear é usada como sinal de tendência. O método de cálculo é o mínimo de divisão.
Condições de entrada: Faça uma entrada adicional quando o preço de fechamento estiver acima da média SMA e da linha de tendência rolante.
Condição de saída: Quando o preço de fechamento está abaixo da linha média SMA e da linha de tendência de rolagem, a saída de posição é feita.
Assim, a estratégia depende principalmente de entrada de ruptura de sinais de negociação linear e saída de ruptura de corredores. Utilizando a característica de regresso de média da média móvel e o suporte de média do corredor de regressão linear, a operação de ruptura de seguimento de tendência é realizada.
A estratégia integra filtragem dupla de linha média e linha de tendência, o que reduz efetivamente as operações de falsa ruptura. Ao mesmo tempo, a linha de tendência rolante fornece um suporte de canal mais preciso, o que torna as decisões de negociação mais confiáveis. Os principais benefícios são os seguintes:
A estratégia também apresenta alguns riscos, que se concentram nos seguintes pontos:
Para otimizar esses riscos, os principais pontos a serem considerados são:
A estratégia pode ser otimizada a partir das seguintes dimensões:
Adição de função para ajustar dinamicamente o ciclo SMA e os parâmetros de deslizamento. Parâmetros de otimização automática em diferentes ambientes de mercado.
Aumento do mecanismo de suspensão de perda de elasticidade. Suspensão de perda quando o preço quebra a linha de tendência em uma determinada proporção.
Em combinação com outros indicadores de filtragem de sinais, como indicadores de quantidade de energia, indicadores de força e fraqueza, etc., para melhorar a precisão da decisão.
Desenvolva versões invertidas. Faça mais quando o preço estiver perto do fundo e quebrar o canal descendente.
A estratégia integra os sinais de negociação de médias móveis e o suporte ao canal de linha de tendência rolante, permitindo a operação de acompanhamento de tendências. O mecanismo de dupla filtragem reduz a probabilidade de falsas rupturas e melhora a qualidade da decisão.
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SMA Strategy with Rolling Trendline", overlay=true)
// Input parameters
smaPeriod = input(14, title="SMA Period")
window = input(20, title="Trendline Window")
startDate = input(timestamp("2023-01-01"), title="Start Date")
endDate = input(timestamp("2023-12-31"), title="End Date")
// Calculating SMA
sma = sma(close, smaPeriod)
// Function to calculate linear regression trendline for a window
linreg_trendline(window) =>
sumX = 0.0
sumY = 0.0
sumXY = 0.0
sumX2 = 0.0
for i = 0 to window - 1
sumX := sumX + i
sumY := sumY + close[i]
sumXY := sumXY + i * close[i]
sumX2 := sumX2 + i * i
slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX)
intercept = (sumY - slope * sumX) / window
slope * (window - 1) + intercept
// Calculating the trendline
trendline = linreg_trendline(window)
// Entry and Exit Conditions
longCondition = close > sma and close < trendline
exitLongCondition = close < sma and close > trendline
// Strategy logic
if (true)
if (longCondition)
strategy.entry("Long", strategy.long)
if (exitLongCondition)
strategy.close("Long")
// Plotting
plot(sma, title="Simple Moving Average", color=color.blue)
plot(trendline, title="Rolling Trendline", color=color.red)
plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)