Esta estratégia é um sistema de negociação quantitativo baseado em médias móveis, indicador RSI e stop loss de trailing.
A estratégia usa uma média móvel simples de 200 dias (SMA) como linha de base para julgamento da tendência, combinada com o índice de força relativa (RSI) para gerar sinais de negociação. 1. Usa a SMA de 200 dias para julgar a tendência principal, considerando apenas posições longas quando o preço está acima da média 2. Identifica sinais de sobrevenda quando o RSI cai abaixo do limiar pré-definido (padrão 40) 3. Ativa a entrada longa quando ambas as condições são cumpridas e o período de espera desde a última saída (default 10 dias) decorreram 4. Protege os lucros durante a detenção da posição através de stop loss (default 5%) 5. Sair da posição quando o preço quebra abaixo do trailing stop ou da SMA de 200 dias
Esta é uma estratégia de negociação quantitativa com estrutura completa e lógica clara. Ela busca retornos estáveis enquanto controla o risco combinando vários indicadores técnicos. Embora haja espaço para otimização, a estrutura básica tem boa praticidade e extensão. A estratégia é adequada para investidores de médio a longo prazo e se adapta bem a diferentes ambientes de mercado.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("200 SMA Crossover Strategy", overlay=false) // Define inputs smaLength = input.int(200, title="SMA Length") rsiLength = input.int(14, title="RSI Length") rsiThreshold = input.float(40, title="RSI Threshold") trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)") waitingPeriod = input.int(10, title="Waiting Period (Days)") // Calculate 200 SMA sma200 = ta.sma(close, smaLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Plot the 200 SMA and RSI plot(sma200, color=color.blue, linewidth=2, title="200 SMA") plot(rsi, color=color.purple, title="RSI", display=display.none) // Define buy and sell conditions var isLong = false var float lastExitTime = na var float trailStopPrice = na // Explicitly declare timeSinceExit as float float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000) canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod buyCondition = close > sma200 and rsi < rsiThreshold and canEnter if (buyCondition and not isLong) strategy.entry("Buy", strategy.long) trailStopPrice := na isLong := true // Update trailing stop loss if long if (isLong) trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100)) // Check for trailing stop loss or sell condition if (isLong and (close < trailStopPrice or close < sma200)) strategy.close("Buy") lastExitTime := time isLong := false // Plot buy and sell signals plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")