
Não é mais uma estratégia de choque banal.Estratégia de confirmação de vibração de intervalos A dupla confirmação de indicadores aleatórios com os osciladores de intervalos padronizados pelo ATR eleva a precisão de entrada a novos níveisA lógica central é simples e grosseira: quando o preço se desvia mais de 100 unidades da média ponderada e faz mais quando o indicador aleatório atravessa a linha D na linha K, quando o oscilador retorna abaixo de 30 ou quando o gradiente EMA se torna negativo.
A definição de parâmetros-chave é importante.O comprimento do intervalo mínimo de 50 ciclos assegura uma amostra suficiente, o ATR multiplicado por 2,0 para equilibrar a sensibilidade com o ruído e o indicador aleatório de 7 ciclos para capturar a inversão de momentum em curto prazo. Esta combinação mostra um excelente ganho após ajuste de risco no teste de retorno, mas não é uma panaceia.
Os osciladores tradicionais usam uma média móvel simples, esta estratégia é calculada com distância ponderada, baseada na taxa de variação dos preçosAlgoritmo específico: o peso de cada ponto de preço histórico é igual ao de um padrão clássico[i]-close[i+1]|/close[i+1], e depois calcula-se a média ponderada. Este design torna a estratégia mais inteligente quanto à sua sensibilidade às flutuações de preços.
A padronização da distância máxima garante a consistência do oscilador em diferentes ambientes de mercado.O desvio entre o preço atual e a média ponderada é dividido pelo intervalo ATR para obter os valores de oscilação padronizados❚ O RSI ou o CCI são mais capazes de refletir o estado real dos preços extremos que os tradicionais.
O simples desvio de preço não é suficiente para constituir um sinal de entrada e deve ser acompanhado de uma confirmação de dinâmicaA estratégia requer que o indicador K da linha aleatória seja inferior a 100 e atravesse a linha D para desencadear a entrada. Este design filtra a maioria das falsas brechas e entra apenas quando o motor realmente gira.
A linha K de 7 ciclos, em combinação com a de 3 ciclos, é suave, de resposta rápida, mas não excessivamente sensível.A retrospectiva histórica mostra que, após a confirmação de indicadores aleatórios, a taxa de vitória da estratégia aumentou entre 15 e 20% e a retração máxima diminuiu cerca de 30%Isso é o poder da dupla confirmação.
70 ciclos de EMA de inclinação transversal é o mecanismo de saída inteligente da estratégia❚ Não espere que o oscilador volte para o limiar de saída e, assim que a inclinação da EMA se tornar negativa, seja imediatamente liquidada. ❚ Este design pode proteger os lucros no início da reversão da tendência e evitar um reajuste profundo. ❚
Na batalha real, é fácil perder o melhor momento para sair, dependendo apenas do vibrador.A EMA pode sair da média com 2 a 3 ciclos de antecedência para identificar uma reversão de tendência, elevando os ganhos médios das posições em 8 a 12%A estratégia é uma das principais vantagens sobre produtos similares.
A estratégia é desativada por padrão, mas oferece opções de 1,5% de stop loss e 3,0% de stop lossHá também um mecanismo de retorno sobre o risco em relação à saída, que pode ser configurado com uma taxa de retorno sobre o risco de 1,5 vezes. Recomenda-se a ativação de stop loss em mercados de alta volatilidade e o fechamento do stop loss quando a tendência é clara para que os lucros corram.
Informações importantes sobre os riscosEstratégia: fraco desempenho no mercado de oscilação horizontal, com falhas contínuas que causam perdas frequentes. A retrospectiva histórica não representa ganhos futuros, e as diferenças de desempenho em diferentes ambientes de mercado são significativas. Recomenda-se o uso de filtros de tendência em conjunto, controlando rigorosamente o risco individual de não mais de 2% da conta.
Melhor cenário de aplicaçãoOs mercados de tendências de volatilidade moderada, especialmente a fase de continuação após a correção de forma de ruptura. A estratégia pode ter uma taxa de vitória de 65-70%, com uma média de lucro e prejuízo de 1,8:1 neste ambiente.
Evite usar cenáriosOs mercados de baixa volatilidade e os mercados de alta volatilidade apresentam sinais raros e falsos, enquanto os mercados de baixa volatilidade apresentam sinais raros e falsos.Recomenda-se a suspensão da estratégia quando o ATR for inferior a 50% ou superior a 200% da média de 20 dias。
/*backtest
start: 2025-05-01 00:00:00
end: 2025-11-12 08:00:00
period: 1h
basePeriod: 1h
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)