Investidor pessoa física utilizando um indicador gratuito em Pine Script em um gráfico do TradingView, em uma mesa de home office.

Indicadores Gratuitos (Pine Script)

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 relógio de mercado, padrões e linhas de suporte e resistência.

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:

  1. Abra seu gráfico no TradingView e abra o painel Pine Editor na parte inferior.
  2. Cole o código abaixo, clique em Salvar e depois em Adicionar ao gráfico.
  3. 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

  1. Abra seu gráfico no TradingView (por exemplo BTC/USD).
  2. Abra o painel Pine Editor na parte inferior da tela.
  3. Apague o código de exemplo e cole o script completo.
  4. Clique em Salvar, dê um nome (sugestão: “Wyckoff CD+”), depois clique em Adicionar ao gráfico.
  5. 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çãoPadrãoO que controla
Fast EMA length8A linha rápida de tendência (rosa)
Mid EMA length21A linha do meio (laranja)
Slow EMA length55A linha âncora lenta (bolinhas brancas)
Show EMAsLigadoLiga ou desliga as três EMAs
Fill band between fast and slow EMALigadoCanal de tendência sombreado entre a EMA 8 e a EMA 55
Range lookback (bars)30Quantos candles definem a faixa lateral
Volume average length20Período da média de volume
Volume spike multiplier1.3O que conta como volume alto (1.3 = 30% acima da média)
Max bars below range for spring3Quantos candles o preço pode ficar abaixo da faixa e ainda contar como mola
Show accumulation range boxLigadoLiga ou desliga a caixa azul de faixa
Highlight high-volume candlesLigadoPinta de branco os candles de volume alto

Valores recomendados por prazo gráfico:

PrazoRange lookbackObservações
Diário30Cerca de 6 semanas de faixa
Semanal30Cerca de 7 meses de faixa — o ponto ideal deste método
4 horas40–60Lookback 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:

LabelSignificadoSignificado
SPRING ▲O preço furou o fundo da faixa e recuperou em poucos candles — o clássico último abalo antes da altaAbaixo do candle
BREAKOUT +VOLO preço rompeu o topo da faixa com volume 30%+ acima da média — o início oficial da fase de altaAcima do candle
WEAK BREAKRompimento sem volume — costuma falharAcima 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 painelCorSignificado
UPTREND (EMAs)VerdeEMA 8 > EMA 21 > EMA 55. Fase de tendência — procure entradas no recuo, não opere faixa.
DOWNTREND (EMAs)VermelhoEMA 8 < EMA 21 < EMA 55. Fase de baixa — só vendidos, ou fique de fora.
RANGE (accum?)AzulPreço contido em uma faixa lateral. Acumulação em potencial — observe a mola e o volume.
MIXEDAzulEMAs embaralhadas e sem faixa limpa. Não opere.

6. Regras de operação (fluxo sugerido)

  1. 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.
  2. Encontre a faixa: espere a caixa azul. Uma faixa que aparece depois de uma tendência de baixa é acumulação em potencial.
  3. Observe o volume: dentro da faixa, candles brancos em quedas que falham são o sinal mais forte de acumulação.
  4. 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.
  5. Entre: no rompimento, ou no primeiro reteste do teto rompido — o reteste costuma ser a entrada mais segura.
  6. 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.
  7. 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.
  8. 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):

AlertaDispara quando
Wyckoff BreakoutO preço rompe o topo da faixa com volume alto
EMA Bullish StackAs três EMAs alinham para cima (8 > 21 > 55)
EMA Bearish StackAs 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.

Rolar para cima
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.