
A estratégia é um sistema de acompanhamento de tendências baseado em múltiplos níveis de média móvel ((SMA)), combinado com uma técnica de detecção de cruzamento de pontos precisos. Determina a tendência do mercado por meio de uma hierarquia de relações entre as médias móveis de 20, 50, 100 e 200 períodos e usa preços em tempo real com cruzamentos entre médias móveis para desencadear sinais de negociação.
A estratégia usa um mecanismo de filtragem de tendências de três camadas, exigindo que a média de 50 períodos esteja acima da média de 100 períodos e a média de 100 períodos esteja acima da média de 200 períodos para confirmar a tendência de alta, ao contrário, confirma a tendência de queda. O sinal de entrada é baseado no cruzamento do preço com a média de 50 períodos, usando dados de notação para realizar uma detecção de cruzamento precisa, para determinar o momento em que o cruzamento ocorre, comparando o comportamento do preço atual com a relação de localização da linha K anterior. O sinal de saída é determinado pela relação do preço com a média de 20 períodos e, quando o preço ultrapassa a linha de tempo média de 20 períodos, dispara um sinal de posição de equilíbrio.
Trata-se de uma estratégia de acompanhamento de tendências de estrutura completa e lógica clara, que garante a confiabilidade do sinal e permite o acompanhamento efetivo da tendência por meio do uso combinado de várias camadas de médias móveis. A estratégia foi projetada com plena consideração de praticidade e universalidade, e é adequada para uso em diferentes ambientes de mercado.
/*backtest
start: 2024-02-22 00:00:00
end: 2024-06-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Multi-SMA Strategy - Core Signals", overlay=true)
// ———— Universal Inputs ———— //
int smaPeriod1 = input(20, "Fast SMA")
int smaPeriod2 = input(50, "Medium SMA")
bool useTickCross = input(true, "Use Tick-Precise Crosses")
// ———— Timezone-Neutral Calculations ———— //
sma20 = ta.sma(close, smaPeriod1)
sma50 = ta.sma(close, smaPeriod2)
sma100 = ta.sma(close, 100)
sma200 = ta.sma(close, 200)
// ———— Tick-Precise Cross Detection ———— //
golden_cross = useTickCross ?
(high >= sma50 and low[1] < sma50[1]) :
ta.crossover(sma20, sma50)
death_cross = useTickCross ?
(low <= sma50 and high[1] > sma50[1]) :
ta.crossunder(sma20, sma50)
// ———— Trend Filter ———— //
uptrend = sma50 > sma100 and sma100 > sma200
downtrend = sma50 < sma100 and sma100 < sma200
// ———— Entry Conditions ———— //
longCondition = golden_cross and uptrend
shortCondition = death_cross and downtrend
// ———— Exit Conditions ———— //
exitLong = ta.crossunder(low, sma20)
exitShort = ta.crossover(high, sma20)
// ———— Strategy Execution ———— //
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.close("Long", when=exitLong)
strategy.close("Short", when=exitShort)
// ———— Clean Visualization ———— //
plot(sma20, "20 SMA", color.new(color.blue, 0))
plot(sma50, "50 SMA", color.new(color.red, 0))
plot(sma100, "100 SMA", color.new(#B000B0, 0), linewidth=2)
plot(sma200, "200 SMA", color.new(color.green, 0), linewidth=2)
// ———— Signal Markers ———— //
plotshape(longCondition, "Long Entry", shape.triangleup, location.belowbar, color.green, 0)
plotshape(shortCondition, "Short Entry", shape.triangledown, location.abovebar, color.red, 0)
plotshape(exitLong, "Long Exit", shape.xcross, location.abovebar, color.blue, 0)
plotshape(exitShort, "Short Exit", shape.xcross, location.belowbar, color.orange, 0)