
Esta é uma estratégia de negociação quantitativa baseada em sinais de cruzamento de duas equações. A estratégia utiliza duas médias móveis, uma como linha de sinal principal e outra como linha de sinal suave. A estratégia gera sinais de negociação monitorando o cruzamento de preços com linhas de sinal suave, permitindo a captação de tendências de mercado e o acompanhamento da dinâmica.
A estratégia usa dois níveis de cálculo de médias móveis. Primeiro, calcula-se uma média móvel básica (o ciclo padrão é de 9) e, em seguida, é feita uma segunda suavização dessa linha (o ciclo padrão é de 5). A estratégia oferece opções para vários métodos de cálculo de médias, incluindo média móvel simples (SMA), média móvel indexada (EMA), média móvel plana (SMMA), média móvel ponderada (WMA) e média móvel ponderada (VWMA).
Esta é uma versão melhorada da clássica estratégia de acompanhamento de tendências, aumentando a estabilidade com o design de duas camadas de médias móveis, mantendo a simplicidade da estratégia. A estratégia tem boa escalabilidade e flexibilidade, pode se adaptar a diferentes ambientes de mercado através da otimização de parâmetros e extensão de funções.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Moving Average 1.0 Strategy", overlay=true)
// Input for Moving Average Length
len = input.int(9, minval=1, title="Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
// Calculate the Moving Average
out = ta.sma(src, len)
// Plot the Moving Average
plot(out, color=color.blue, title="MA", offset=offset)
// Function to choose the type of moving average
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// Input for Smoothing Method and Length
typeMA = input.string(title="Method", defval="SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title="Smoothing Length", defval=5, minval=1, maxval=100, group="Smoothing")
// Calculate the Smoothing Line
smoothingLine = ma(out, smoothingLength, typeMA)
// Plot the Smoothing Line
plot(smoothingLine, title="Smoothing Line", color=color.rgb(120, 66, 134, 35), offset=offset)
// Strategy Logic
if (ta.crossover(close, smoothingLine))
strategy.entry("Buy", strategy.long)
if (ta.crossunder(close, smoothingLine))
strategy.entry("Sell", strategy.short)