IDE: indicadores e dados
Como registrar e ler indicadores no seu código, e como acessar preços e históricos.

No IDE você registra indicadores uma única vez em `on_init()` e depois lê o valor em cada vela dentro de `on_bar()`. Este artigo é o seu guia de referência: aqui está o catálogo completo dos 28 indicadores disponíveis, como ler suas saídas e como acessar os dados de preço do ativo.
Registrar um indicador
Use `self.indicator("NOME", **parametros)` dentro de `on_init()` e salve o resultado em uma variável de instância. O motor cria o buffer do indicador uma vez e o atualiza automaticamente em cada vela.
def on_init(self):
self.rsi = self.indicator("RSI", period=14)
self.ema = self.indicator("EMA", period=200)
self.macd = self.indicator("MACD", fast=12, slow=26, signal=9)Ler o valor de um indicador
| Acesso | Retorna |
|---|---|
| .value | Valor do indicador na vela atual |
| .prev | Valor do indicador na vela anterior |
| .values(n) | Lista com os últimos n valores (índice 0 é o mais recente) |
def on_bar(self):
if self.rsi.value < 30: # RSI actual por debajo de 30
...
if self.rsi.prev > 70 and self.rsi.value < 70: # acaba de cruzar 70 a la baja
...Indicadores com várias saídas
Alguns indicadores retornam mais de uma linha (banda superior/inferior, linha de sinal, etc.). Você acessa cada saída pelo atributo específico em vez de usar `.value`.
self.bb = self.indicator("Bollinger", period=20, stdDev=2.0)
# self.bb.upper, self.bb.middle, self.bb.lower
self.macd = self.indicator("MACD", fast=12, slow=26, signal=9)
# self.macd.value (línea MACD), self.macd.signal, self.macd.histogram
self.ichi = self.indicator("Ichimoku", tenkan=9, kijun=26, senkou=52)
# self.ichi.tenkanSen, self.ichi.kijunSen, self.ichi.senkouA, self.ichi.senkouBCatálogo de indicadores (28)
| Nome | Família | Parâmetros (com defaults) | Saídas / Notas |
|---|---|---|---|
| EMA | Tendência | period=200 | .value |
| SMA | Tendência | period=50 | .value |
| DEMA | Tendência | period=21 | .value |
| TEMA | Tendência | period=21 | .value |
| HMA | Tendência | period=9 | .value — Hull Moving Average, menos lag que EMA |
| WMA | Tendência | period=20 | .value |
| KAMA | Tendência | period=10, fast=2, slow=30 | .value — se adapta à volatilidade do mercado |
| SuperTrend | Tendência | period=10, multiplier=3 | .value — preço do nível; positivo = altista, negativo = baixista |
| RSI | Momentum | period=14 | .value — intervalo 0-100 |
| Stochastic | Momentum | period=14, dPeriod=3 | .k e .d — intervalo 0-100 |
| MACD | Momentum | fast=12, slow=26, signal=9 | .value (linha MACD), .signal, .histogram |
| CCI | Momentum | period=20 | .value — sobrecomprado >100, sobrevendido <-100 |
| ROC | Momentum | period=12 | .value — taxa de variação em % |
| WilliamsR | Momentum | period=14 | .value — intervalo -100 a 0; sobrecomprado >-20, sobrevendido <-80 |
| Bollinger | Volatilidade | period=20, stdDev=2.0 | .upper, .middle, .lower |
| ATR | Volatilidade | period=14 | .value — range verdadeiro médio |
| Keltner | Volatilidade | period=20, multiplier=1.5 | .upper, .middle, .lower |
| Donchian | Volatilidade | period=20 | .upper (máximo do canal), .lower (mínimo do canal) |
| StdDev | Volatilidade | period=20 | .value — desvio padrão dos fechamentos |
| ADX | Força de tendência | period=14 | .value (ADX), .plusDI, .minusDI |
| OBV | Volume | signal=20 | .value (OBV acumulado), .signal (EMA do OBV) |
| MFI | Volume | period=14 | .value — Money Flow Index, intervalo 0-100 |
| VWAP | Volume | sem parâmetros | .value — preço médio ponderado por volume (reinicia a cada sessão) |
| Highest | Preço | period=20 | .value — máximo das últimas N velas |
| Lowest | Preço | period=20 | .value — mínimo das últimas N velas |
| PivotPoints | Preço | sem parâmetros | .pp (pivot), .r1/.r2 (resistências), .s1/.s2 (suportes) |
| Ichimoku | Avançado | tenkan=9, kijun=26, senkou=52 | .tenkanSen, .kijunSen, .senkouA, .senkouB |
| ParabolicSAR | Avançado | afStart=0.02, afStep=0.02, afMax=0.2 | .value — preço do stop; abaixo do preço em alta, acima em baixa |
O ATR raramente é usado como sinal direto; o uso típico é dimensionar o SL/TP dinamicamente (ex. `sl_atr=1.5`). Veja como fazer no artigo «IDE: ordens e saídas».
Indicador macro (FRED)
Você pode trazer qualquer série macroeconômica do banco de dados FRED como se fosse um indicador técnico: use `self.indicator("Macro", seriesId="CODIGO")`. Os dados respeitam a data real de publicação para evitar lookahead bias. É útil para filtrar sinais com base no contexto macro (volatilidade, taxas de juros, emprego, etc.).
def on_init(self):
self.vix = self.indicator("Macro", seriesId="VIXCLS")
def on_bar(self):
if self.vix.value > 30: # mercado nervioso: no operar
returnAcessar preços e históricos (self.data e self.bar)
`self.bar` contém os dados da vela atual diretamente. `self.data` dá acesso às séries completas com índice relativo: `[0]` é a vela atual, `[-1]` a anterior, `[-5]` a de cinco velas atrás.
self.bar.close # cierre de la vela actual
self.bar.high, self.bar.low, self.bar.open, self.bar.volume
self.data.close[0] # = self.bar.close
self.data.close[-1] # cierre anterior
self.data.high[-3] # máximo de hace 3 velas
self.data.bar_count # cuántas velas hay disponibles| Método de série (self.data.close, .high, .low…) | O que calcula |
|---|---|
| .values(n) | Lista com os últimos n valores; índice 0 = mais recente |
| .highest(n) | Valor máximo das últimas n velas |
| .lowest(n) | Valor mínimo das últimas n velas |
| .avg(n) | Média das últimas n velas |
| .crossover(outro) | True se a série acabou de cruzar para cima o valor ou série dado |
| .crossunder(outro) | True se a série acabou de cruzar para baixo o valor ou série dado |
resistencia = self.data.high.highest(20)
if self.data.close.crossover(self.ema.value): # precio cruza la EMA al alza
self.buy(sl_atr=1.5, tp_atr=3.0)Registre os indicadores SEMPRE em `on_init()`, nunca dentro de `on_bar()`. Se fizer em `on_bar()`, o motor criaria um indicador novo em cada vela e nunca teria histórico suficiente para calcular seu valor.
Os nomes dos indicadores diferenciam maiúsculas: "RSI", "EMA", "Bollinger"… use-os exatamente como aparecem no catálogo. Um nome incorreto lançará um erro ao iniciar o backtest.
Com os indicadores e os dados de preço sob controle, o próximo passo é aprender a colocar ordens, gerenciar SL/TP e fechar posições. Continue em «IDE: ordens e saídas».