Kaique Mitsuo Silva Yamamoto
Mercado financeiroAutomação de EstratégiasProfit / Nelogica NTSL

NTSL — Análise Multi-Ativo com Asset()

Como usar a função Asset() em NTSL para correlacionar múltiplos ativos, comparar séries de preço entre diferentes mercados e construir estratégias com filtros externos no Profit.

NTSL — Análise Multi-Ativo com Asset()

A função Asset() permite acessar dados de qualquer ativo disponível na plataforma diretamente no código NTSL, sem precisar abrir um gráfico separado. É a base para estratégias que usam filtros externos — como operar mini índice (WIN) somente quando o dólar (WDO) está acima da média.

Fundamentos: NTSL — Fundamentos


Sintaxe da Função Asset

Asset(Ticker, Feed, Period, Shift)
ParâmetroTipoDescrição
TickerString/ConstNome do ativo (ex: "PETR4", "WDOV25")
FeedConstanteFonte dos dados (feed de mercado)
PeriodConstantePeriodicidade (timeframe)
ShiftIntegerDeslocamento (0 = atual, 1 = anterior...)

Retorno: o Asset() disponibiliza as séries nativas para o ativo externo. O acesso é feito via notação |N|:

// Sintaxe de acesso às séries do ativo externo
Asset("PETR4", feedBovespa, itDaily, 0)|Close|
Asset("WDOV25", feedBMF, itMinute5, 0)|High|
Asset("WDOV25", feedBMF, itMinute5, 1)|Close|  // candle anterior

Feeds Disponíveis

ConstanteMercado
feedBovespaB3 — ações, FIIs, BDRs
feedBMFB3 — futuros, opções, índices
feedNasdaqNasdaq (EUA)
feedNyseNYSE (EUA)
feedAmexAmex (EUA)
feedCmeCME Group (futuros EUA)
feedCbotCBOT (grãos e Treasury)
feedComexCOMEX (metais)
feedNymexNYMEX (energia)

Limites e Restrições

  • Máximo de 30 ativos simultâneos por estratégia
  • O parâmetro Ticker deve ser definido como const ou inputnão pode ser uma variável calculada em runtime
  • Todos os ativos referenciados são carregados ao iniciar a estratégia
// ✓ Correto — ticker como input
input
  TickerDolar("WDOV25");

begin
  if (Asset(TickerDolar, feedBMF, itMinute5, 0)|Close| > 6.0) then
    PaintBar(clVerde);
end;

// ✗ Incorreto — ticker como variável calculada
var
  sTicker : String;
begin
  sTicker := "WDOV25";  // não é aceito — deve ser const/input
  Asset(sTicker, feedBMF, itDaily, 0)|Close|;
end;

Exemplo 1: Filtro de Tendência com Índice

Operar ações somente quando o Ibovespa estiver acima da média de 21 dias.

input
  PeriodoMedia(21);

var
  fIbov       : Float;
  fIbovMedia  : Float;
  fMediaLocal : Float;

begin
  // Ibovespa (IBOV) — dado diário
  fIbov      := Asset("IBOV", feedBovespa, itDaily, 0)|Close|;
  fIbovMedia := Asset("IBOV", feedBovespa, itDaily, 0)|MediaClose(PeriodoMedia)|;

  // Média local (ativo atual no gráfico)
  fMediaLocal := Media(PeriodoMedia, Close);

  // Filtro: só colorir verde se Ibov está em tendência de alta
  if (fIbov > fIbovMedia) and (Close > fMediaLocal) then
    PaintBar(clVerde)
  else if (fIbov < fIbovMedia) and (Close < fMediaLocal) then
    PaintBar(clVermelho);
end;

Exemplo 2: Correlação WIN × WDO

Estratégia comum no day trade brasileiro: operar mini índice (WIN) com filtro do dólar (WDO).

input
  PerfilFiltro(9);    // periodo da media do dolar

var
  fDolar      : Float;
  fDolarMedia : Float;
  fIbov       : Float;
  fIbovMedia  : Float;
  bFiltroOk   : Boolean;

begin
  // Dados do dólar futuro em M5
  fDolar      := Asset("WDOV25", feedBMF, itMinute5, 0)|Close|;
  fDolarMedia := Asset("WDOV25", feedBMF, itMinute5, 0)|Media(PerfilFiltro, tvClose)|;

  // Dados do Ibovespa
  fIbov      := Asset("IBOV", feedBovespa, itMinute5, 0)|Close|;
  fIbovMedia := Asset("IBOV", feedBovespa, itMinute5, 0)|Media(PerfilFiltro, tvClose)|;

  // Filtro: dólar subindo = mercado de risco off = vender WIN
  // Filtro: dólar caindo = mercado de risco on = comprar WIN
  if (fDolar > fDolarMedia) then
    PaintBar(clVermelho)   // dólar em alta = vies de venda no índice
  else if (fDolar < fDolarMedia) then
    PaintBar(clVerde);     // dólar em baixa = vies de compra no índice
end;

Exemplo 3: Spread Entre Dois Ativos

Calcular e plotar o spread entre dois contratos futuros:

input
  AtivoBanco("ITUB4");
  AtivoReferencia("BBDC4");

var
  fBanco     : Float;
  fReferencia : Float;
  fSpread    : Float;

begin
  fBanco      := Asset(AtivoBanco, feedBovespa, itDaily, 0)|Close|;
  fReferencia := Asset(AtivoReferencia, feedBovespa, itDaily, 0)|Close|;

  if (fReferencia > 0) then
  begin
    fSpread := fBanco / fReferencia;
    Plot(fSpread);
  end;
end;

Exemplo 4: Multi-Timeframe com Asset

Usar o timeframe diário como filtro de tendência no gráfico de 5 minutos:

// Executar em gráfico de 5 minutos
// Usar fechamento diário como filtro de viés

var
  fFechDiario : Float;
  fMediaDiaria : Float;
  bViesAlta   : Boolean;

begin
  // Pegar dados diários do mesmo ativo
  fFechDiario  := Asset(_Symbol, feedBovespa, itDaily, 1)|Close|;
  fMediaDiaria := Asset(_Symbol, feedBovespa, itDaily, 1)|Media(21, tvClose)|;

  bViesAlta := fFechDiario > fMediaDiaria;

  if bViesAlta then
    PaintBar(clVerde)
  else
    PaintBar(clVermelho);
end;

_Symbol é uma constante automática que contém o nome do ativo atual do gráfico.


Acessando Indicadores Internos via Asset

O acesso a indicadores dentro do Asset usa a notação de pipeline |NomeIndicador(params)|:

// Indicadores nativos acessíveis via Asset
Asset("PETR4", feedBovespa, itDaily, 0)|Media(21, tvClose)|
Asset("PETR4", feedBovespa, itDaily, 0)|RSI(14)|
Asset("PETR4", feedBovespa, itDaily, 0)|ATR(14)|

Boas Práticas

PráticaPor quê
Sempre validar se o valor do Asset é > 0 antes de dividirDados indisponíveis retornam 0
Usar input para o ticker do ativo externoPermite trocar sem editar código
Preferir [1] (barra fechada) do ativo externoSincronia de timeframes evita look-ahead
Não exceder 30 ativos simultâneosLimite da plataforma
Testar em backtest antes de automatizarVerificar sincronização de dados entre ativos

Referências

Referências externas

On this page