
Esta estratégia é um sistema dinâmico de rastreamento de tendências baseado em sinais de cruzamento de média móvel dupla. Ela identifica mudanças de tendências de mercado por meio do cruzamento da média móvel exponencial de curto prazo de 20 dias (EMA) e da média móvel exponencial de longo prazo de 50 dias ( EMA) e executa automaticamente operações de compra e venda. A estratégia adota um método de análise técnica maduro, combinando as características de rastreamento de tendências e gerenciamento dinâmico de posições, e é adequada para ambientes de mercado com maior volatilidade.
A lógica central da estratégia é baseada nos seguintes elementos-chave:
Esta estratégia é uma implementação moderna de um sistema clássico de rastreamento de tendências. Por meio de negociação programática, a estratégia tradicional de crossover de média móvel dupla é sistematizada e padronizada. Embora existam alguns riscos inerentes, a estratégia tem boas perspectivas de aplicação por meio de otimização e melhoria contínuas. É recomendável realizar otimização de parâmetros e verificação de backtesting suficientes antes do uso real.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover Buy/Sell Signals", overlay=true)
// Input parameters for EMAs
emaShortLength = input.int(20, title="Short EMA Length")
emaLongLength = input.int(50, title="Long EMA Length")
// Calculating EMAs
emaShort = ta.ema(close, emaShortLength)
emaLong = ta.ema(close, emaLongLength)
// Plotting EMA crossover lines
plot(emaShort, color=color.green, title="20 EMA")
plot(emaLong, color=color.red, title="50 EMA")
// Buy and Sell signal logic
longCondition = ta.crossover(emaShort, emaLong)
exitLongCondition = ta.crossunder(emaShort, emaLong)
shortCondition = ta.crossunder(emaShort, emaLong)
exitShortCondition = ta.crossover(emaShort, emaLong)
// Plot buy and sell signals on the chart
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=exitLongCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Exit")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")
plotshape(series=exitShortCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Exit")
// Backtesting strategy logic
var float entryPrice = na
var int position = 0 // 1 for long, -1 for short, 0 for no position
if (longCondition and position == 0)
entryPrice := close
position := 1
if (shortCondition and position == 0)
entryPrice := close
position := -1
if (exitLongCondition and position == 1)
strategy.exit("Exit Long", from_entry="Long", limit=close)
position := 0
if (exitShortCondition and position == -1)
strategy.exit("Exit Short", from_entry="Short", limit=close)
position := 0
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)