IDE: indicadores e dados

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

Código no IDE registrando indicadores e lendo seus valores
Você registra os indicadores uma vez em on_init() e depois lê seu valor (.value) em on_bar().

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.

python
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

AcessoRetorna
.valueValor do indicador na vela atual
.prevValor do indicador na vela anterior
.values(n)Lista com os últimos n valores (índice 0 é o mais recente)
python
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`.

python
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.senkouB

Catálogo de indicadores (28)

NomeFamíliaParâmetros (com defaults)Saídas / Notas
EMATendênciaperiod=200.value
SMATendênciaperiod=50.value
DEMATendênciaperiod=21.value
TEMATendênciaperiod=21.value
HMATendênciaperiod=9.value — Hull Moving Average, menos lag que EMA
WMATendênciaperiod=20.value
KAMATendênciaperiod=10, fast=2, slow=30.value — se adapta à volatilidade do mercado
SuperTrendTendênciaperiod=10, multiplier=3.value — preço do nível; positivo = altista, negativo = baixista
RSIMomentumperiod=14.value — intervalo 0-100
StochasticMomentumperiod=14, dPeriod=3.k e .d — intervalo 0-100
MACDMomentumfast=12, slow=26, signal=9.value (linha MACD), .signal, .histogram
CCIMomentumperiod=20.value — sobrecomprado >100, sobrevendido <-100
ROCMomentumperiod=12.value — taxa de variação em %
WilliamsRMomentumperiod=14.value — intervalo -100 a 0; sobrecomprado >-20, sobrevendido <-80
BollingerVolatilidadeperiod=20, stdDev=2.0.upper, .middle, .lower
ATRVolatilidadeperiod=14.value — range verdadeiro médio
KeltnerVolatilidadeperiod=20, multiplier=1.5.upper, .middle, .lower
DonchianVolatilidadeperiod=20.upper (máximo do canal), .lower (mínimo do canal)
StdDevVolatilidadeperiod=20.value — desvio padrão dos fechamentos
ADXForça de tendênciaperiod=14.value (ADX), .plusDI, .minusDI
OBVVolumesignal=20.value (OBV acumulado), .signal (EMA do OBV)
MFIVolumeperiod=14.value — Money Flow Index, intervalo 0-100
VWAPVolumesem parâmetros.value — preço médio ponderado por volume (reinicia a cada sessão)
HighestPreçoperiod=20.value — máximo das últimas N velas
LowestPreçoperiod=20.value — mínimo das últimas N velas
PivotPointsPreçosem parâmetros.pp (pivot), .r1/.r2 (resistências), .s1/.s2 (suportes)
IchimokuAvançadotenkan=9, kijun=26, senkou=52.tenkanSen, .kijunSen, .senkouA, .senkouB
ParabolicSARAvançadoafStart=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.).

python
def on_init(self):
    self.vix = self.indicator("Macro", seriesId="VIXCLS")

def on_bar(self):
    if self.vix.value > 30:   # mercado nervioso: no operar
        return

Acessar 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.

python
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
python
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)
Exemplo: rompimento da resistência de 20 velas com cruzamento de EMA como confirmação

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».