
Deixe de usar o RSI de 14 ciclos. Esta estratégia comprime diretamente o ciclo RSI para 8, com um limiar de 14 pontos de momentum, especificamente para capturar explosões de linhas curtas. A estratégia RSI tradicional se confronta repetidamente em mercados de turbulência, e esta combinação é mais estável em flutuações de alta frequência.
A lógica central é muito direta: o RSI dispara um sinal de multi-cabeça quando a variação de volume é > 14 e um sinal de cabea quando é <-14. Ao mesmo tempo, exige que o volume de transação seja superior a uma média de 13 ciclos, garantindo que não haja falsas rupturas. Este projeto é projetado para antecipar o sinal de super-compra e venda do RSI por 1-2 ciclos, capturando o momento dourado do início da tendência.
O Stop Loss é de 4,15%, o Stop Loss é de 1,85%, e o RRR é de 2,24:1. Esta proporção é radical na estratégia de descascamento, mas com um Stop Loss móvel de 2,55%, o controle de risco real é mais rigoroso.
A chave está no design do stop-loss móvel: uma vez que o preço se move na direção favorável, a linha de stop-loss segue o ajuste dinâmico do ponto mais alto / mais baixo. Isso significa que você pode bloquear a maior parte dos lucros mesmo que não atinja o objetivo de stop-loss de 4,15%.
O volume de transação deve exceder a média de 13 ciclos para abrir uma posição. Este design filtra 90% dos falsos sinais. Muitas estratégias RSI abrem posições com frequência em ambientes de baixo volume, resultando em derrotas.
A linha média de volume de transação de 13 ciclos é mais sensível do que os 20 ciclos comuns e permite identificar mais rapidamente o fluxo de capital. O multiplicador de 1 não parece ser alto, mas combinado com a resposta rápida do RSI de 8 ciclos, já é suficiente para filtrar oportunidades de verdadeiras rupturas.
A entrada múltipla requer uma das três condições: RSI de impulso > 14, RSI de rebote da zona de oversold, RSI de ultrapassar a linha de oversold. Este design é mais flexível do que uma única condição, adaptando-se a diferentes condições de mercado.
A linha de superalimento é definida em 10, a linha de superalimento é definida em 90, mais extrema do que a tradicional 30⁄70. O benefício de fazer isso é reduzir os falsos sinais, o inconveniente é que você pode perder algumas oportunidades.
Esta estratégia é mais adequada para variedades de alta volatilidade, como criptomoedas, pares de moedas principais e ações populares. O desempenho em ações ou bônus de blue-chip de baixa volatilidade é fortemente descontado.
A melhor janela de tempo é o período de sobreposição do horário de negociação da Europa e América, quando a fluidez é melhor e o filtro de volume de transação é mais eficaz. O horário da Ásia diminui a qualidade do sinal devido ao baixo volume de transação.
Os dados de retrospectiva mostram que a estratégia apresenta risco de perdas contínuas, especialmente em mercados de baixa e baixa oscilação. O RSI de 8 períodos é muito sensível e pode ser detido repetidamente em oscilações intercalares.
Recomenda-se que o risco único não exceda 2% da conta e que a negociação seja suspensa após 3 paradas consecutivas. A retrospectiva histórica não representa ganhos futuros e a negociação em disco rígido requer um rigoroso gerenciamento de fundos e controle psicológico.
/*backtest
start: 2024-09-29 00:00:00
end: 2025-09-26 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Bybit","currency":"ETH_USDT","balance":500000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MonkeyPhone
//@version=5
strategy("RSI Momentum Scalper", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, calc_on_order_fills=true)
// Trading Mode Selection
tradeMode = input.string("Both", title="Trade Mode", options=["Both", "Long Only", "Short Only"])
// RSI Settings
rsiLength = input.int(8, title="RSI Length", minval=2, maxval=30)
rsiOverbought = input.int(90, title="RSI Overbought", minval=60, maxval=99)
rsiOversold = input.int(10, title="RSI Oversold", minval=1, maxval=40)
rsiMomentumThreshold = input.float(14, title="RSI Momentum Threshold", minval=1, maxval=15, step=0.5)
// Volume Settings
volMultiplier = input.float(1, title="Volume Multiplier", minval=1.0, maxval=3.0, step=0.1)
volLookback = input.int(13, title="Volume MA Length", minval=5, maxval=50)
// Exit Settings
takeProfitPercent = input.float(4.15, title="Take Profit %", minval=0.1, maxval=10.0, step=0.1)
stopLossPercent = input.float(1.85, title="Stop Loss %", minval=0.1, maxval=6.0, step=0.1)
trailingStopPercent = input.float(2.55, title="Trailing Stop %", minval=0.1, maxval=4.0, step=0.05)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
rsiMA = ta.sma(rsi, 3)
// Calculate RSI Momentum
rsiMomentum = rsi - rsi[1]
// Volume Analysis
volMA = ta.sma(volume, volLookback)
highVolume = volume > volMA * volMultiplier
// Entry Conditions - Long
bullishMomentum = rsiMomentum > rsiMomentumThreshold
oversoldBounce = rsi < rsiOversold and rsi > rsi[1]
bullishCross = ta.crossover(rsi, rsiOversold)
longCondition = (bullishMomentum or oversoldBounce or bullishCross) and highVolume and close > close[1]
// Entry Conditions - Short
bearishMomentum = rsiMomentum < -rsiMomentumThreshold
overboughtReversal = rsi > rsiOverbought and rsi < rsi[1]
bearishCross = ta.crossunder(rsi, rsiOverbought)
shortCondition = (bearishMomentum or overboughtReversal or bearishCross) and highVolume and close < close[1]
// Apply trade mode filter
longEntry = longCondition and (tradeMode == "Both" or tradeMode == "Long Only")
shortEntry = shortCondition and (tradeMode == "Both" or tradeMode == "Short Only")
// Entry Logic
strategy.entry("Long", strategy.long, when=longEntry and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when=shortEntry and strategy.position_size == 0)
// Declare and initialize trailing variables
var float highest_since_long = na
var float lowest_since_short = na
var float long_trailing_level = na
var float short_trailing_level = na
var float long_fixed_sl = na
var float long_tp = na
var float short_fixed_sl = na
var float short_tp = na
// Update trailing levels using ternary operators with math.max/min
highest_since_long := strategy.position_size > 0 ? math.max(na(highest_since_long[1]) ? math.max(high, strategy.position_avg_price) : highest_since_long[1], high) : na
lowest_since_short := strategy.position_size < 0 ? math.min(na(lowest_since_short[1]) ? math.min(low, strategy.position_avg_price) : lowest_since_short[1], low) : na
// Calculate exit levels
long_fixed_sl := strategy.position_size > 0 ? strategy.position_avg_price * (1 - stopLossPercent / 100) : na
long_tp := strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeProfitPercent / 100) : na
long_trailing_level := strategy.position_size > 0 ? highest_since_long * (1 - trailingStopPercent / 100) : na
short_fixed_sl := strategy.position_size < 0 ? strategy.position_avg_price * (1 + stopLossPercent / 100) : na
short_tp := strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeProfitPercent / 100) : na
short_trailing_level := strategy.position_size < 0 ? lowest_since_short * (1 + trailingStopPercent / 100) : na
// Effective stop loss levels
effective_long_sl = strategy.position_size > 0 ? math.max(long_fixed_sl, long_trailing_level) : na
effective_short_sl = strategy.position_size < 0 ? math.min(short_fixed_sl, short_trailing_level) : na
// Exit Logic
strategy.exit("Long Exit", "Long", limit=long_tp, stop=effective_long_sl, when=strategy.position_size > 0)
strategy.exit("Short Exit", "Short", limit=short_tp, stop=effective_short_sl, when=strategy.position_size < 0)
// Plot TP, fixed SL, and trailing SL levels on chart when in position
plot(strategy.position_size > 0 ? long_tp : na, title="Long TP", color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_fixed_sl : na, title="Long Fixed SL", color=color.red, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_trailing_level : na, title="Long Trailing SL", color=color.orange, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_tp : na, title="Short TP", color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_fixed_sl : na, title="Short Fixed SL", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_trailing_level : na, title="Short Trailing SL", color=color.orange, style=plot.style_linebr)
// Alerts
alertcondition(longEntry, title="Long Entry Alert", message="RSI Momentum Long Signal")
alertcondition(shortEntry, title="Short Entry Alert", message="RSI Momentum Short Signal")