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âmetro | Tipo | Descrição |
|---|---|---|
Ticker | String/Const | Nome do ativo (ex: "PETR4", "WDOV25") |
Feed | Constante | Fonte dos dados (feed de mercado) |
Period | Constante | Periodicidade (timeframe) |
Shift | Integer | Deslocamento (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 anteriorFeeds Disponíveis
| Constante | Mercado |
|---|---|
feedBovespa | B3 — ações, FIIs, BDRs |
feedBMF | B3 — futuros, opções, índices |
feedNasdaq | Nasdaq (EUA) |
feedNyse | NYSE (EUA) |
feedAmex | Amex (EUA) |
feedCme | CME Group (futuros EUA) |
feedCbot | CBOT (grãos e Treasury) |
feedComex | COMEX (metais) |
feedNymex | NYMEX (energia) |
Limites e Restrições
- Máximo de 30 ativos simultâneos por estratégia
- O parâmetro
Tickerdeve ser definido comoconstouinput— nã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ática | Por quê |
|---|---|
Sempre validar se o valor do Asset é > 0 antes de dividir | Dados indisponíveis retornam 0 |
Usar input para o ticker do ativo externo | Permite trocar sem editar código |
Preferir [1] (barra fechada) do ativo externo | Sincronia de timeframes evita look-ahead |
| Não exceder 30 ativos simultâneos | Limite da plataforma |
| Testar em backtest antes de automatizar | Verificar sincronização de dados entre ativos |
Referências
Referências externas
NTSL — Controle de Fluxo e Operadores
Estruturas condicionais, loops, operadores lógicos e matemáticos, fluxo de execução candle a candle e boas práticas de programação em NTSL para o Profit.
NTSL — Funções de Execução (Ordens e Posição)
Referência completa das funções de execução em NTSL: ordens a mercado, limite e stop para compra e venda, gestão de posição, resultados e consulta de estado no Profit Nelogica.