1. Indicadores de Trading Gratuitos
Bem-vindo à nossa biblioteca de indicadores gratuitos. Todas as ferramentas desta página são escritas em Pine Script para o TradingView, prontas para copiar e colar. Sem cadastro, sem custo, sem pegadinha.
Cada indicador combina conceitos clássicos de análise técnica em um gráfico único e limpo. Abaixo você encontra o código, os passos de instalação e as configurações recomendadas.

Mesa de home office com um monitor exibindo o indicador “34 EMA Wave”, juntamente com um relógio de mercado, padrões e linhas de suporte e resistência. Imagem gerada por IA.
2. Painel de EMA de 34 períodos + Padrões + Suporte/Resistência
Baseado no setup da Onda EMA 34 divulgado pela trader de futuros Raghee Horner, este indicador combina quatro ferramentas em um único script:
- A Onda EMA 34: três médias móveis exponenciais de 34 períodos (máximas, fechamentos e mínimas) formando um canal ao redor do preço.
- O Relógio do Mercado: coloração automática do fundo mostrando a fase atual — verde para alta, cinza para lateral, vermelho para baixa — além de um painel ao vivo no canto superior direito.
- Padrões de candlestick: detecção automática de Martelo, Estrela Cadente, Engolfo de Alta e de Baixa, Doji, Três Soldados Brancos e Três Corvos Negros, com etiquetas no gráfico. Cada padrão tem seu próprio liga/desliga.
- Suporte e Resistência: linhas horizontais automáticas desenhadas a partir de topos e fundos confirmados, com sensibilidade ajustável.
Como instalar:
- Abra seu gráfico no TradingView e abra o painel Pine Editor na parte inferior.
- Cole o código abaixo, clique em Salvar e depois em Adicionar ao gráfico.
- Abra as configurações (ícone de engrenagem) para ligar ou desligar padrões e ajustar a sensibilidade do S/R. No gráfico de 1 hora, use um lookback de pivô de 15 a 20.
//@version=5
indicator("34 EMA Wave + Patterns + S/R + Panel", shorttitle="34 Wave+", overlay=true, max_lines_count=100, max_labels_count=200)
// ===== Inputs =====
emaLen = input.int(34, "EMA length", minval=1)
slopeLen = input.int(3, "Slope lookback (bars)", minval=1)
pivotLen = input.int(15, "S/R pivot lookback (bars) - use 15-20 for 1H", minval=2)
srMaxLines = input.int(6, "Max S/R lines on chart", minval=1, maxval=50)
showSR = input.bool(true, "Show support/resistance lines")
// Pattern toggles (individual)
showHammer = input.bool(true, "Hammer")
showStar = input.bool(true, "Shooting Star")
showBullE = input.bool(true, "Bullish Engulfing")
showBearE = input.bool(true, "Bearish Engulfing")
showDoji = input.bool(false, "Doji")
showTWS = input.bool(true, "Three White Soldiers")
showTBC = input.bool(true, "Three Black Crows")
// ===== 34 EMA Wave =====
emaH = ta.ema(high, emaLen)
emaC = ta.ema(close, emaLen)
emaL = ta.ema(low, emaLen)
p1 = plot(emaH, "EMA 34 (High)", color=color.new(color.red, 30))
p2 = plot(emaC, "EMA 34 (Close)", color=color.new(color.orange, 0), linewidth=2)
p3 = plot(emaL, "EMA 34 (Low)", color=color.new(color.green, 30))
fill(p1, p3, color=color.new(color.blue, 88), title="Wave channel")
// Market clock phases
slopeUp = emaC > emaC[slopeLen]
slopeDown = emaC < emaC[slopeLen]
aboveWave = close > emaH
belowWave = close < emaL
bullPhase = aboveWave and slopeUp
bearPhase = belowWave and slopeDown
sidePhase = not bullPhase and not bearPhase
bgcolor(bullPhase ? color.new(color.green, 85) : bearPhase ? color.new(color.red, 85) : color.new(color.gray, 92))
// ===== Candlestick patterns =====
body = math.abs(close - open)
range_ = high - low
lowerWick = math.min(open, close) - low
upperWick = high - math.max(open, close)
isHammer = range_ > 0 and lowerWick >= body * 2 and upperWick <= body * 0.5 and body > 0
isStar = range_ > 0 and upperWick >= body * 2 and lowerWick <= body * 0.5 and body > 0
prevRed = close[1] < open[1]
prevGreen = close[1] > open[1]
bullEngulf = prevRed and close > open and close >= open[1] and open <= close[1]
bearEngulf = prevGreen and close < open and open >= close[1] and close <= open[1]
isDoji = range_ > 0 and body <= range_ * 0.1
tws = close > open and close[1] > open[1] and close[2] > open[2] and
close > close[1] and close[1] > close[2] and
body > range_ * 0.5 and body[1] > range_[1] * 0.5 and body[2] > range_[2] * 0.5
tbc = close < open and close[1] < open[1] and close[2] < open[2] and
close < close[1] and close[1] < close[2] and
body > range_ * 0.5 and body[1] > range_[1] * 0.5 and body[2] > range_[2] * 0.5
if showHammer and isHammer
label.new(bar_index, low, "HAMMER" + (bullPhase ? " ▲" : ""), style=label.style_label_up, color=color.new(color.green, 20), textcolor=color.white, size=size.small, yloc=yloc.belowbar)
if showStar and isStar
label.new(bar_index, high, "STAR" + (bearPhase ? " ▼" : ""), style=label.style_label_down, color=color.new(color.red, 20), textcolor=color.white, size=size.small, yloc=yloc.abovebar)
if showBullE and bullEngulf
label.new(bar_index, low, "ENGULF" + (bullPhase ? " ▲" : ""), style=label.style_label_up, color=color.new(color.green, 20), textcolor=color.white, size=size.small, yloc=yloc.belowbar)
if showBearE and bearEngulf
label.new(bar_index, high, "ENGULF" + (bearPhase ? " ▼" : ""), style=label.style_label_down, color=color.new(color.red, 20), textcolor=color.white, size=size.small, yloc=yloc.abovebar)
if showDoji and isDoji
label.new(bar_index, high, "DOJI", style=label.style_label_down, color=color.new(color.gray, 20), textcolor=color.white, size=size.tiny, yloc=yloc.abovebar)
if showTWS and tws
label.new(bar_index, low, "3 SOLDIERS" + (bullPhase ? " ▲" : ""), style=label.style_label_up, color=color.new(color.green, 10), textcolor=color.white, size=size.small, yloc=yloc.belowbar)
if showTBC and tbc
label.new(bar_index, high, "3 CROWS" + (bearPhase ? " ▼" : ""), style=label.style_label_down, color=color.new(color.red, 10), textcolor=color.white, size=size.small, yloc=yloc.abovebar)
// ===== Support and Resistance (pivot-based) =====
ph = ta.pivothigh(high, pivotLen, pivotLen)
pl = ta.pivotlow(low, pivotLen, pivotLen)
var array<line> srLines = array.new<line>()
f_addSR(price, isRes) =>
l = line.new(bar_index - pivotLen, price, bar_index, price, extend=extend.right, color=isRes ? color.new(color.red, 40) : color.new(color.green, 40), style=line.style_dashed, width=1)
array.push(srLines, l)
if array.size(srLines) > srMaxLines
line.delete(array.shift(srLines))
if showSR and not na(ph)
f_addSR(ph, true)
if showSR and not na(pl)
f_addSR(pl, false)
// ===== Market clock panel =====
var table panel = table.new(position.top_right, 1, 2, border_width=1, border_color=color.new(color.white, 70))
if barstate.islast
phaseText = bullPhase ? "UPTREND (12-2h)" : bearPhase ? "DOWNTREND (4-6h)" : "SIDEWAYS (2-4h)"
phaseColor = bullPhase ? color.new(color.green, 25) : bearPhase ? color.new(color.red, 25) : color.new(color.gray, 40)
table.cell(panel, 0, 0, "MARKET CLOCK", text_color=color.white, bgcolor=color.new(color.blue, 30), text_size=size.small)
table.cell(panel, 0, 1, phaseText, text_color=color.white, bgcolor=phaseColor, text_size=size.small)
Quer o guia completo?
Leia nosso artigo completo: Como Fazer Day Trade com Criptomoedas: O Setup da Onda EMA 34 — ele cobre o relógio do mercado, regras de entrada, posicionamento do stop e gestão de risco em detalhes.
Mais indicadores em breve
Estamos construindo esta biblioteca ao longo do tempo. Novos indicadores Pine Script serão adicionados aqui conforme forem lançados, sempre gratuitos e sempre com documentação completa.e are building this library over time. New Pine Script indicators will be added here as they are released, always free and always with full documentation.
3. Detector de Ciclo de Wyckoff + EMAs — Manual do Usuário
Plataforma: TradingView (Pine Script v5) Tipo: Indicador de overlay Baseado em: O ciclo de mercado de quatro fases de Richard Wyckoff, combinado com um sistema de três médias móveis exponenciais (8 / 21 / 55)

Imagem do gráfico BTCUSDT com o indicador Wyckoff CD + EMA no TradingView.com.
1. O que este indicador faz
Este indicador combina duas camadas de análise em um único script:
A camada do ciclo Wyckoff:
- Caixa de faixa de acumulação: uma caixa azul desenhada sobre a faixa lateral atual, marcando a zona onde o dinheiro grande pode estar se posicionando.
- Detecção de mola: um label “SPRING ▲” quando o preço fura brevemente o fundo da faixa e volta para dentro — o clássico último abalo de Wyckoff antes da decolagem.
- Rompimento confirmado por volume: um label “BREAKOUT +VOL” quando o preço rompe o topo da faixa com volume bem acima da média — a assinatura do dinheiro grande empurrando o preço.
- Aviso de rompimento fraco: um label “WEAK BREAK” quando o rompimento acontece sem volume, o que costuma falhar.
- Destaque de volume: candles com volume 30%+ acima da média de 20 períodos são pintados de branco.
A camada de contexto de tendência (EMAs):
- EMA 8 (rosa), EMA 21 (laranja), EMA 55 (bolinhas brancas): um sistema de três médias móveis que lê a direção da tendência, com o preço testando as médias como suporte ou resistência.
- Faixa de tendência: uma banda sombreada suave entre a EMA rápida e a lenta, mostrando o canal de tendência de relance.
Tudo funciona em qualquer ativo e qualquer prazo gráfico. O método brilha nos prazos maiores (semanal, diário), onde estruturas reais de acumulação se formam de forma limpa.
2. Instalação
- Abra seu gráfico no TradingView (por exemplo BTC/USD).
- Abra o painel Pine Editor na parte inferior da tela.
- Apague o código de exemplo e cole o script completo.
- Clique em Salvar, dê um nome (sugestão: “Wyckoff CD+”), depois clique em Adicionar ao gráfico.
- As EMAs, a caixa de faixa, os labels e o painel de fase aparecem imediatamente.
Para reutilizar depois, encontre-o em Indicadores > Meus scripts.
3. Configurações
| Configuração | Padrão | O que controla |
|---|---|---|
| Fast EMA length | 8 | A linha rápida de tendência (rosa) |
| Mid EMA length | 21 | A linha do meio (laranja) |
| Slow EMA length | 55 | A linha âncora lenta (bolinhas brancas) |
| Show EMAs | Ligado | Liga ou desliga as três EMAs |
| Fill band between fast and slow EMA | Ligado | Canal de tendência sombreado entre a EMA 8 e a EMA 55 |
| Range lookback (bars) | 30 | Quantos candles definem a faixa lateral |
| Volume average length | 20 | Período da média de volume |
| Volume spike multiplier | 1.3 | O que conta como volume alto (1.3 = 30% acima da média) |
| Max bars below range for spring | 3 | Quantos candles o preço pode ficar abaixo da faixa e ainda contar como mola |
| Show accumulation range box | Ligado | Liga ou desliga a caixa azul de faixa |
| Highlight high-volume candles | Ligado | Pinta de branco os candles de volume alto |
Valores recomendados por prazo gráfico:
| Prazo | Range lookback | Observações |
|---|---|---|
| Diário | 30 | Cerca de 6 semanas de faixa |
| Semanal | 30 | Cerca de 7 meses de faixa — o ponto ideal deste método |
| 4 horas | 40–60 | Lookback maior para filtrar o ruído |
Nota: 8, 21 e 55 são números de Fibonacci, e é por isso que foram escolhidos para o sistema de EMAs.
4. Lendo o gráfico
As EMAs:
- Em uma tendência de alta, o preço anda acima das três linhas, e cada recuo até as EMAs (8 primeiro, depois 21, depois 55) tende a encontrar suporte — zonas potenciais de entrada ou reforço de posição.
- Em uma tendência de baixa, os mesmos níveis funcionam como resistência.
- Quando as três linhas se embaralham e o preço atravessa as três, o mercado está lateralizado — exatamente onde as faixas de Wyckoff se formam.
A caixa de faixa (azul):
- Desenhada sobre a faixa lateral atual quando o mercado está contido.
- O topo da caixa é o gatilho de rompimento; o fundo é a referência do stop.
- A caixa acompanha os candles mais recentes — ela mostra a faixa ativa agora, não as faixas históricas.
Os labels:
| Label | Significado | Significado |
|---|---|---|
| SPRING ▲ | O preço furou o fundo da faixa e recuperou em poucos candles — o clássico último abalo antes da alta | Abaixo do candle |
| BREAKOUT +VOL | O preço rompeu o topo da faixa com volume 30%+ acima da média — o início oficial da fase de alta | Acima do candle |
| WEAK BREAK | Rompimento sem volume — costuma falhar | Acima do candle |
Candles brancos: volume pelo menos 30% acima da média de 20 candles. Na acumulação, procure candles brancos em movimentos de queda que falham em furar o fundo da faixa — o dinheiro grande segurando o assoalho.
5. Lendo o painel WYCKOFF PHASE
O painel no canto superior direito mostra a fase atual:
| Texto do painel | Cor | Significado |
|---|---|---|
| UPTREND (EMAs) | Verde | EMA 8 > EMA 21 > EMA 55. Fase de tendência — procure entradas no recuo, não opere faixa. |
| DOWNTREND (EMAs) | Vermelho | EMA 8 < EMA 21 < EMA 55. Fase de baixa — só vendidos, ou fique de fora. |
| RANGE (accum?) | Azul | Preço contido em uma faixa lateral. Acumulação em potencial — observe a mola e o volume. |
| MIXED | Azul | EMAs embaralhadas e sem faixa limpa. Não opere. |
6. Regras de operação (fluxo sugerido)
- Leia o contexto primeiro: confira o painel. Só procure compras quando o contexto estiver virando para cima ou a faixa estiver no fundo depois de uma queda.
- Encontre a faixa: espere a caixa azul. Uma faixa que aparece depois de uma tendência de baixa é acumulação em potencial.
- Observe o volume: dentro da faixa, candles brancos em quedas que falham são o sinal mais forte de acumulação.
- Espere o gatilho: um SPRING ▲ (o falso rompimento) ou um BREAKOUT +VOL (a fuga confirmada). Não compre enquanto o preço ainda está lateralizado.
- Entre: no rompimento, ou no primeiro reteste do teto rompido — o reteste costuma ser a entrada mais segura.
- Posicione o stop: logo abaixo da caixa de faixa (ou abaixo da mínima da mola). Se o preço voltar para dentro da caixa, o setup falhou — saia com perda pequena.
- Conduza a tendência: no lucro, use os recuos até as EMAs (8 e 21) como zonas de reforço e arraste o stop abaixo da EMA 55 ou da caixa, o que estiver mais alto.
- Arrisque 1% a 2% da conta por operação. Pule completamente as fases MIXED.
7. Alertas
O script inclui três alertas prontos (clique com o botão direito no indicador > Adicionar alerta):
| Alerta | Dispara quando |
|---|---|
| Wyckoff Breakout | O preço rompe o topo da faixa com volume alto |
| EMA Bullish Stack | As três EMAs alinham para cima (8 > 21 > 55) |
| EMA Bearish Stack | As três EMAs alinham para baixo (8 < 21 < 55) |
Os alertas de empilhamento avisam quando uma nova fase de tendência está começando; o alerta de rompimento avisa quando a fuga de uma faixa específica é confirmada.
8. Observações importantes
- Este indicador é uma ferramenta de apoio à decisão, não um gerador automático de sinais. Sempre combine com sua própria análise e gestão de risco.
- A caixa mostra apenas a faixa atual; as faixas históricas concluídas não são desenhadas.
- A detecção de faixa usa um filtro simples de largura (tamanho da faixa vs. ATR); em mercados muito voláteis, ajuste o lookback.
- O comportamento passado de qualquer setup não garante resultados futuros. Operar é de alto risco e a maioria dos traders de varejo perde dinheiro.
9. Código do indicador
//@version=5
indicator("Wyckoff Cycle Detector + EMAs", shorttitle="Wyckoff CD+", overlay=true, max_lines_count=50, max_labels_count=100, max_boxes_count=50)
// ===== EMA inputs =====
ema8Len = input.int(8, "Fast EMA length", minval=1)
ema21Len = input.int(21, "Mid EMA length", minval=1)
ema55Len = input.int(55, "Slow EMA length", minval=1)
showEMAs = input.bool(true, "Show EMAs")
showFill = input.bool(true, "Fill band between fast and slow EMA")
// ===== Wyckoff inputs =====
rangeLen = input.int(30, "Range lookback (bars)", minval=10)
volLen = input.int(20, "Volume average length", minval=5)
volMult = input.float(1.3, "Volume spike multiplier (1.3 = 30% above avg)", step=0.05)
springBars = input.int(3, "Max bars below range for spring", minval=1, maxval=10)
showRange = input.bool(true, "Show accumulation range box")
showVol = input.bool(true, "Highlight high-volume candles")
// ===== EMAs =====
ema8 = ta.ema(close, ema8Len)
ema21 = ta.ema(close, ema21Len)
ema55 = ta.ema(close, ema55Len)
p8 = plot(showEMAs ? ema8 : na, "EMA 8", color=color.new(#E91E8C, 0), linewidth=2)
p21 = plot(showEMAs ? ema21 : na, "EMA 21", color=color.new(color.orange, 0), linewidth=2)
p55 = plot(showEMAs ? ema55 : na, "EMA 55", color=color.new(color.white, 0), linewidth=1, style=plot.style_circles)
fill(p8, p55, color=showFill ? color.new(#E91E8C, 92) : na, title="Trend band")
// Trend context from the EMAs
bullStack = ema8 > ema21 and ema21 > ema55
bearStack = ema8 < ema21 and ema21 < ema55
// ===== Volume condition =====
volAvg = ta.sma(volume, volLen)
highVol = volume > volAvg * volMult
// ===== Range (accumulation box) =====
rangeHigh = ta.highest(high, rangeLen)
rangeLow = ta.lowest(low, rangeLen)
rangeSize = rangeHigh - rangeLow
atrVal = ta.atr(14)
isSideways = rangeSize < atrVal * 8
var box rangeBox = na
if showRange and isSideways and barstate.islast
box.delete(rangeBox)
rangeBox := box.new(bar_index - rangeLen + 1, rangeHigh, bar_index, rangeLow, border_color=color.new(color.blue, 30), bgcolor=color.new(color.blue, 92))
// ===== Spring detection =====
var int barsBelow = 0
if low < rangeLow
barsBelow := barsBelow + 1
else if close > rangeLow and barsBelow > 0 and barsBelow <= springBars
barsBelow := 0
label.new(bar_index, low, "SPRING ▲", style=label.style_label_up, color=color.new(color.green, 15), textcolor=color.white, size=size.small, yloc=yloc.belowbar)
else
barsBelow := 0
// ===== Breakout with volume =====
brokeUp = ta.crossover(close, rangeHigh[1]) and highVol
if brokeUp
label.new(bar_index, high, "BREAKOUT +VOL", style=label.style_label_down, color=color.new(color.green, 10), textcolor=color.white, size=size.small, yloc=yloc.abovebar)
brokeUpNoVol = ta.crossover(close, rangeHigh[1]) and not highVol
if brokeUpNoVol
label.new(bar_index, high, "WEAK BREAK", style=label.style_label_down, color=color.new(color.orange, 10), textcolor=color.white, size=size.tiny, yloc=yloc.abovebar)
// ===== Volume highlight =====
barcolor(showVol and highVol ? color.white : na)
// ===== Phase panel (EMAs + Wyckoff) =====
var table panel = table.new(position.top_right, 1, 2, border_width=1, border_color=color.new(color.white, 70))
if barstate.islast
phaseTxt = bullStack ? "UPTREND (EMAs)" : bearStack ? "DOWNTREND (EMAs)" : isSideways ? "RANGE (accum?)" : "MIXED"
phaseCol = bullStack ? color.new(color.green, 25) : bearStack ? color.new(color.red, 25) : color.new(color.blue, 35)
table.cell(panel, 0, 0, "WYCKOFF PHASE", text_color=color.white, bgcolor=color.new(color.blue, 30), text_size=size.small)
table.cell(panel, 0, 1, phaseTxt, text_color=color.white, bgcolor=phaseCol, text_size=size.small)
// ===== Alerts =====
alertcondition(brokeUp, "Wyckoff Breakout", "Price broke the range high with high volume")
alertcondition(bullStack and not bullStack[1], "EMA Bullish Stack", "EMAs 8/21/55 turned bullish")
alertcondition(bearStack and not bearStack[1], "EMA Bearish Stack", "EMAs 8/21/55 turned bearish")
Aviso legal (Disclaimer):
Estes indicadores são fornecidos apenas para fins educacionais e não constituem aconselhamento financeiro. Operar é de alto risco e a maioria dos traders de varejo perde dinheiro. Sempre faça sua própria pesquisa e nunca invista dinheiro que você não pode perder.
