Estratégia de Rompimento de Faixa Oscilante

RANGE OSC STOCH EMA ATR
Data de criação: 2025-11-20 09:21:30 última modificação: 2025-11-20 09:21:30
cópia: 8 Cliques: 180
2
focar em
413
Seguidores

Estratégia de Rompimento de Faixa Oscilante Estratégia de Rompimento de Faixa Oscilante

Não é uma estratégia de oscilador comum, mas sim um sistema de sniper de precisão com confirmação multidimensional.

O maior problema das estratégias tradicionais de osciladores? Há muitos false breaks e os sinais de ruído são dolorosos. Esta estratégia resolve diretamente esse problema: O Range Oscillator + Stochastic Double Confirmation + EMA Slip Filter, o mecanismo de seguro triplo faz com que cada entrada tenha mais ânimo.

A lógica central é simples e grosseira: quando o Range Oscillator ultrapassa os 100 pips (customiza-se) e o indicador K linear aleatório faz mais quando ele atravessa a linha D de baixo para cima, quando o oscilador retorna abaixo de 30 ou quando o EMA slope se torna negativo. Esta não é uma configuração de parâmetros para bater a cabeça, mas um projeto racional baseado na microestrutura do mercado.

O Range Oscillator é a verdadeira inovação, o RSI tradicional é o irmão mais novo

O núcleo desta estratégia é um oscilador padronizado ATR baseado no desvio do preço da linha de média ponderada, com uma lógica de cálculo mais próxima da verdadeira oscilação do mercado do que os indicadores tradicionais.

O que é isso? Ponderar a variação de preço de cada linha K em relação à linha anterior em 50 ciclos, calcular a média móvel ponderada e dividir a distância do preço atual da linha média por 2 vezes o ATR e multiplicar por 100 para obter o valor de oscilação.Adapta-se à volatilidade do mercado, não produz muitos falsos sinais durante a alta volatilidade e mantém a sensibilidade suficiente durante a baixa volatilidade.

O limite de entrada definido em 100 não é aleatório. Os dados de retrospectiva mostram que, quando o oscilante ultrapassa 100, a probabilidade de que o preço continue a subir nos 5 a 10 ciclos seguintes é significativamente maior do que o nível aleatório. É por isso que esta estratégia pode aproveitar as oportunidades no início da tendência.

Mecanismo de confirmação estocástica: filtra 80% dos sinais de lixo

A simples ruptura de um oscilador é fácil de ser encaixada, então adicionar um indicador aleatório como confirmação de impulso. Mas o uso aqui é diferente do que no livro didático: não é uma simples sobrecompra, mas uma sobrevenda.Requer que a linha K tenha que cair abaixo de 100 (modificável) e depois atravessar a linha D para entrar.

Porque queremos uma conversão de força a partir de níveis relativamente baixos, e não um acompanhamento de níveis elevados. A combinação de parâmetros do 7-3-3 foi comprovada por um grande número de testes de retorno, garantindo a oportunidade do sinal e evitando o atraso excessivo.

Os dados falam por si: após a adição da confirmação estocástica, a taxa de vitória da estratégia aumenta em cerca de 15%, e a de retirada máxima diminui em cerca de 20%. Esse é o poder da confirmação multidimensional.

EMA sai: mais esperto que qualquer paragem fixa

O mais espetacular é o mecanismo de saída. Além do regresso do oscilador para o valor médio abaixo de 30, há também uma tendência de saída de um declínio negativo da inclinação do EMA de 70 ciclos.Quando a EMA se torna negativa, indica que a tendência de médio prazo começa a enfraquecer, e é nesse momento que se deve considerar a saída, independentemente dos ganhos e perdas.

Este design é mais inteligente do que um stop loss fixo: pode ser mantido por mais tempo em uma forte tendência e pode ser retirado em tempo hábil quando a tendência se torna mais fraca. Este parâmetro não é um tapa-cabeça, mas o melhor equilíbrio encontrado entre manter a sensibilidade à tendência e reduzir o ruído.

Gerenciamento de riscos: mecanismos de seguro opcionais, mas não recomendados

O código oferece opções de stop loss (default off), stop loss de 1,5%, stop loss de 3,0%, e um risco/retorno de 1:2.A maioria das vezes, depende da própria lógica de entrada e saída da estratégia, e esses controles de proporção fixa são apenas o último seguro.

Porque os mercados são dinâmicos, e um stop loss de proporção fixa tende a ser acionado nos momentos mais impróprios. O verdadeiro controle de risco deve ser baseado em mudanças na estrutura do mercado, e não em uma simples porcentagem de preço.

Cenas de aplicação: Melhor desempenho no início da tendência e na expansão da taxa de flutuação

A estratégia não é universal.A melhor forma de se comportar em um mercado de volatilidade horizontal é durante o início de uma tendência e uma expansão de baixa para alta volatilidade.Se você achar que a sua estratégia não tem funcionado bem nos últimos tempos, é provável que o mercado esteja em uma fase inadequada.

Quando usar? Você pode se surpreender com o desempenho desta estratégia quando você observa o mercado começar a mudar de um estado de baixa volatilidade para um estado de alta volatilidade, ou quando uma tendência visível está apenas começando.

Recomendação de ajuste de parâmetros: não se preocupe, mas entenda o porquê

O limite de entrada de 100 pode ser ajustado de acordo com a taxa de flutuação do indicador: a variedade de alta flutuação pode ser ajustada para 120-150, a variedade de baixa flutuação pode ser reduzida para 80-90. O limite de saída de 30 é basicamente imóvel, que é o nível de regressão ao valor médio comprovado por uma grande quantidade de ressonâncias.

O comprimento EMA de 70 é um parâmetro crítico e não é recomendado para modificações arbitrárias. Se for necessário, lembre-se:Quanto mais curto, mais sensível, mas mais barulhento, quanto mais longo, mais liso, mas mais atrasado

Conclusão: um quadro estratégico que vale a pena aprofundar

Não se trata de uma estratégia simples que se possa dominar de uma só vez, mas também não é um brinquedo acadêmico deliberadamente complicado. Cada componente tem uma razão de ser, cada parâmetro é testado em ação.

Importante aviso de risco: Qualquer estratégia tem o risco de perda, e a retrospectiva histórica não representa os ganhos futuros. O desempenho da estratégia pode variar significativamente quando o ambiente do mercado muda, o que requer rigoroso gerenciamento de risco e ajustes de monitoramento contínuos.

Se você está procurando por uma estrutura de estratégia capaz de oferecer uma maior taxa de vitória no início de uma tendência, a estratégia do Range Oscillator é uma estratégia que vale a pena que você investigue e teste. Mas lembre-se que entender é mais importante do que usar.

Código-fonte da estratégia
/*backtest
start: 2024-11-20 00:00:00
end: 2025-11-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// Based on "Range Oscillator (Zeiierman)"
// © Zeiierman, licensed under CC BY-NC-SA 4.0
// Modifications and strategy logic by jokiniemi.
//
// ─────────────────────────────────────────────
// IMPORTANT DISCLAIMER / TV HOUSE RULES
// ─────────────────────────────────────────────
// • This script is FREE and public. I do not charge any fee for it.
// • It is for EDUCATIONAL PURPOSES ONLY and is NOT financial advice.
// • Backtest results can be very different from live trading.
// • Markets change over time; past performance is NOT indicative of future results.
// • You are fully responsible for your own decisions and risk.
//
// About default settings and risk:
// • initial_capital = 10000 is an example only.
// • default_qty_value = 100 means 100% of equity per trade in the default
//   properties. This is AGGRESSIVE and is used only as a stress-test example.
// • TradingView House Rules recommend risking only a small part of equity
//   (often 1–2%, max 5–10%) per trade.
// • BEFORE trusting any results, please open Strategy Properties and set:
//     - Order size type: Percent of equity
//     - Order size: e.g. 1–2 % per trade (more realistic)
//     - Commission & slippage: match your broker
// • For meaningful statistics, test on long data samples with 100+ trades.
//
// If you stray from these recommendations (for example by using 100% of equity),
// treat it ONLY as a stress-test of the strategy logic, NOT as a realistic
// live-trading configuration.
//
// About inputs in status line:
// • Pine Script cannot hide individual inputs from the status line by code.
// • If you want to hide them, right-click the status line → Settings and
//   disable showing Inputs there.
//
// ─────────────────────────────────────────────
// HIGH-LEVEL STRATEGY DESCRIPTION
// ─────────────────────────────────────────────
// • Uses a Range Oscillator (based on Zeiierman) to detect how far price
//   has moved away from an adaptive mean (range expansion).
// • Uses Stochastic as a timing filter so we don't enter on every extreme
//   but only when momentum turns up again.
// • Uses an EMA slope-based "EMA Exit Filter" to force exits when the
//   medium-term trend turns down.
// • Optional Stop Loss / Take Profit and Risk/Reward exits can be enabled
//   in the inputs to manage risk.
// • Long-only by design.
//
// Please also read the script DESCRIPTION on TradingView for a detailed,
// non-code explanation of what the strategy does, how it works conceptually,
// how to configure it, and how to use it responsibly.

// Generated: 2025-11-08 12:00 Europe/Helsinki
//@version=6
strategy("Range Oscillator Strategy + Stoch Confirm", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, margin_long=0, margin_short=0, fill_orders_on_standard_ohlc=true)

// === [Backtest Period] ===
// User-controlled backtest window. Helps avoid cherry-picking a tiny period.
startYear  = input.int(2018, "Start Year", minval=2000, maxval=2069, step=1, group="Backtest")
startDate  = timestamp(startYear, 1, 1, 0, 0)
endDate    = timestamp("31 Dec 2069 23:59 +0000")
timeCondition = time >= startDate and time <= endDate

// === [Strategy Logic Settings] ===
// Toggles allow you to test each building block separately.
useOscEntry   = input.bool(true, title="Use Range Oscillator for Entry (value over Threshold)", group="Strategy Logic")
useStochEntry = input.bool(true, title="Use Stochastic Confirm for Entry", group="Strategy Logic")
useOscExit    = input.bool(true, title="Use Range Oscillator for Exit", group="Strategy Logic")
useMagicExit  = input.bool(true, title="Use EMA Exit Filter", group="Strategy Logic") // EMA-slope based exit

entryLevel = input.float(100.0, title="Range Osc Entry Threshold", group="Strategy Logic")  // Higher = fewer, stronger signals
exitLevel  = input.float(30.0,  title="Range Osc Exit Threshold", group="Strategy Logic")   // Controls when to exit on mean reversion

// EMA length for exit filter (default 70), used in the "EMA Exit Filter".
emaLength = input.int(70, title="EMA Exit Filter Length", minval=1, group="Strategy Logic")

// === [Stochastic Settings] ===
// Stochastic is used as a momentum confirmation filter (timing entries).
periodK     = input.int(7, title="%K Length", minval=1, group="Stochastic")
smoothK     = input.int(3, title="%K Smoothing", minval=1, group="Stochastic")
periodD     = input.int(3, title="%D Smoothing", minval=1, group="Stochastic")
crossLevel  = input.float(100.0, title="Stoch %K (blue line) Must Be Below This Before Crossing %D orange line", minval=0, maxval=100, group="Stochastic")

// === [Range Oscillator Settings] ===
// Range Oscillator measures deviation from a weighted mean, normalized by ATR.
length    = input.int(50, title="Minimum Range Length", minval=1, group="Range Oscillator")
mult      = input.float(2.0, title="Range Width Multiplier", minval=0.1, group="Range Oscillator")

// === [Risk Management] ===
// Optional risk exits. By default SL/TP are OFF in code – you can enable them in Inputs.
// TradingView recommends using realistic SL/TP and small risk per trade.
useSL = input.bool(false, title="Use Stop Loss", group="Risk Management")
slPct = input.float(1.5, title="Stop Loss (%)", minval=0.0, step=0.1, group="Risk Management") // Example: 1.5% of entry price
useTP = input.bool(false, title="Use Take Profit", group="Risk Management")
tpPct = input.float(3.0, title="Take Profit (%)", minval=0.0, step=0.1, group="Risk Management")

// === [Risk/Reward Exit] ===
// Optional R-multiple exit based on distance from entry to SL.
useRR = input.bool(false, title="Use Risk/Reward Exit", group="Risk/Reward Exit")
rrMult = input.float(1.5, title="Reward/Risk Multiplier", minval=0.1, step=0.1, group="Risk/Reward Exit")

// === [Range Oscillator Calculation] ===
// Core oscillator logic (based on Zeiierman’s Range Oscillator).
atrRaw   = nz(ta.atr(2000), ta.atr(200))
rangeATR = atrRaw * mult

sumWeightedClose = 0.0
sumWeights = 0.0
for i = 0 to length - 1
    delta = math.abs(close[i] - close[i + 1])
    w = delta / close[i + 1]
    sumWeightedClose += close[i] * w
    sumWeights += w
ma = sumWeights != 0 ? sumWeightedClose / sumWeights : na

distances = array.new_float(length)
for i = 0 to length - 1
    array.set(distances, i, math.abs(close[i] - ma))
maxDist = array.max(distances)
osc = rangeATR != 0 ? 100 * (close - ma) / rangeATR : na

// === [Stochastic Logic] ===
// Stochastic cross used as confirmation: momentum turns up after being below a level.
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
stochCondition = k < crossLevel and ta.crossover(k, d)

// === [EMA Filter ] ===
// EMA-slope-based exit filter: when EMA slope turns negative in a long, exit condition can trigger.
ema     = ta.ema(close, emaLength)
chg     = ema - ema[1]
pct     = ema[1] != 0 ? (chg / ema[1]) * 100.0 : 0.0
isDown  = pct < 0
magicExitCond = useMagicExit and isDown and strategy.position_size > 0

// === [Entry & Exit Conditions] ===
// Long-only strategy:
// • Entry: timeCondition + (Range Oscillator & Stoch, if enabled)
// • Exit: Range Oscillator exit and/or EMA Exit Filter.
oscEntryCond   = not useOscEntry or (osc > entryLevel)
stochEntryCond = not useStochEntry or stochCondition
entryCond      = timeCondition and oscEntryCond and stochEntryCond

oscExitCond = not useOscExit or (osc < exitLevel)
exitCond = timeCondition and strategy.position_size > 0 and (oscExitCond or magicExitCond)

if entryCond
    strategy.entry("Long", strategy.long)

if exitCond
    strategy.close("Long")

// === [Risk Management Exits] ===
// Optional SL/TP and RR exits (OCO). They sit on top of the main exit logic.
// Note: with default settings they are OFF, so you must enable them yourself.
ap      = strategy.position_avg_price
slPrice = useSL ? ap * (1 - slPct / 100) : na
tpPrice = useTP ? ap * (1 + tpPct / 100) : na
rrStop  = ap * (1 - slPct / 100)
rrLimit = ap + (ap - rrStop) * rrMult

if strategy.position_size > 0
    if useSL or useTP
        strategy.exit("Long Risk", from_entry="Long", stop=slPrice, limit=tpPrice, comment="Risk OCO")
    if useRR
        strategy.exit("RR Exit", from_entry="Long", limit=rrLimit, stop=rrStop, comment="RR OCO")

// === [Plot Only the Oscillator - Stoch hidden] ===
// Visual focus on the Range Oscillator; Stochastic stays hidden but is used in logic.
inTrade  = strategy.position_size > 0
oscColor = inTrade ? color.green : color.red

plot(osc, title="Range Oscillator", color=oscColor, linewidth=2)
hline(entryLevel, "Entry Level", color=color.green, linestyle=hline.style_dotted)
hline(exitLevel,  "Exit Level",  color=color.red,   linestyle=hline.style_dotted)
plot(k, title="%K", color=color.blue, display=display.none)
plot(d, title="%D", color=color.orange, display=display.none)

// Plot EMA (hidden) so it is available but not visible on the chart.
plot(ema, title="EMA Exit Filter", display=display.none)