
A estratégia é um sistema de rastreamento de tendências baseado em cruzamentos de duas linhas de equilíbrio, capturando tendências de mercado por meio de cruzamentos de médias móveis de curto e longo prazo e gerenciando o risco de negociação com uma relação de risco/benefício de 1: 3. A estratégia usa objetivos de parada e ganho fixos, combinando um mecanismo de parada móvel para proteger o lucro.
A estratégia usa a média móvel curta de 74 períodos (SMA curto) e a média móvel longa de 70 períodos (SMA longo) como indicadores principais. Quando a média curta sobe e cruza a média longa, o sistema gera um sinal de quebra. Quando a média curta desce e cruza a média longa, o sistema gera um sinal de quebra.
Trata-se de uma estratégia de acompanhamento de tendências com uma estrutura completa e uma lógica clara. Apesar de existirem falhas inerentes, como o atraso da linha de equilíbrio, a estabilidade e a lucratividade da estratégia podem ser melhoradas com a orientação de otimização recomendada, especialmente a introdução de ajustes de parâmetros dinâmicos e filtragem do ambiente de mercado.
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bitcoin Strategy by Jag", overlay=true)
// Input Parameters
shortSMALength = input.int(74, title="Short SMA Length")
longSMALength = input.int(70, title="Long SMA Length")
trailStopOffset = input.float(353, title="Trailing Stop Offset (USD)") // Trailing Stop Loss Offset in USD
tradeSize = input.float(1, title="Trade Size")
// Automatically set Take Profit as 3 times Stop Loss
fixedTakeProfit = trailStopOffset * 3
// Backtesting Date Range
startDate = timestamp(2025, 02,13, 0, 0)
endDate = timestamp(2025, 03, 31, 23, 59)
withinDateRange = true
// Indicators
shortSMA = ta.sma(close, shortSMALength)
longSMA = ta.sma(close, longSMALength)
// Crossover Conditions
longCondition = withinDateRange and ta.crossover(shortSMA, longSMA)
shortCondition = withinDateRange and ta.crossunder(shortSMA, longSMA)
// Entry Logic
if (strategy.position_size == 0) // Only allow new trades if no position is open
if (longCondition)
strategy.entry("Long", strategy.long, tradeSize)
if (shortCondition)
strategy.entry("Short", strategy.short, tradeSize)
// Exit Logic for Long Position
if (strategy.position_size > 0)
strategy.exit("Long exit", "Long", stop=strategy.position_avg_price - trailStopOffset, limit=strategy.position_avg_price + fixedTakeProfit) // Using stop and limit
// Exit Logic for Short Position
if (strategy.position_size < 0)
strategy.exit("Short Exit", "Short", stop=strategy.position_avg_price + trailStopOffset, limit=strategy.position_avg_price - fixedTakeProfit) // Using stop and limit
// Plot Moving Averages
plot(shortSMA, color=color.blue, title="Short SMA")
plot(longSMA, color=color.black, title="Long SMA")
// Visual Signals
plotshape(series=longCondition and strategy.position_size == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=shortCondition and strategy.position_size == 0, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)