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

NTSL — Fundamentos da Linguagem

Tipos de dados, séries de preço, variáveis, arrays, constantes, funções, procedimentos e padrões fundamentais de programação em NTSL para o Profit Nelogica.

NTSL — Fundamentos da Linguagem

NTSL (Nelogica Trading System Language) é a linguagem proprietária da plataforma Profit, baseada em Pascal e inspirada no EasyLanguage da TradeStation. Suporta palavras-chave tanto em português quanto em inglês.

Visão geral da plataforma: Profit / Nelogica — Introdução


Estrutura de um Código NTSL

Todo código NTSL segue três seções em ordem fixa:

// 1. PARÂMETROS — inputs configuráveis pelo usuário
input
  Periodo(21);
  Desvio(2.0);

// 2. DECLARAÇÃO DE VARIÁVEIS
var
  sMedia   : Float;
  iSinal   : Integer;
  bAtivo   : Boolean;

// 3. CORPO DO CÓDIGO — executado a cada candle
begin
  sMedia := Media(Periodo, Close);
  if (Close > sMedia) then
    Plot(sMedia);
end;

As palavras-chave input/parametro, var, begin/inicio e end/fim são equivalentes.


Tipos de Dados Primitivos

PortuguêsInglêsDescriçãoExemplo
RealFloatNúmeros decimais — use para preços3.14, 134500.0
InteiroIntegerNúmeros inteiros42, -5
BooleanoBooleanVerdadeiro ou falsoTrue, False
StringStringTexto"PETR4"
var
  preco   : Float;
  periodo : Integer;
  tendencia : Boolean;
  ativo   : String;
begin
  preco    := Close;
  periodo  := 21;
  tendencia := Close > Close[1];
  ativo    := "WINV25";
end;

Tipo Serie

O tipo Serie é especial: armazena uma série temporal de valores — um valor por candle, acessável por índice histórico.

var
  sMedia : Serie;       // Series automática — indexável
  fValor : Float;       // Float simples — não indexável por tempo

begin
  sMedia := Media(9, Close);
  fValor := sMedia[1];    // valor da série no candle anterior
  fValor := sMedia[5];    // 5 candles atrás
end;

Regra importante: variáveis do tipo Float não podem ser indexadas por [N]. Use Serie quando precisar acessar valores históricos da própria variável.


Séries de Preço Nativas (OHLCV)

Disponíveis em todos os tipos de estratégia, sem declaração:

PortuguêsInglêsDescrição
AberturaOpenPreço de abertura do candle
FechamentoClosePreço de fechamento do candle
MaximaHighMáxima do candle
MinimaLowMínima do candle
VolumeVolumeVolume financeiro negociado
QuantidadeQuantityContratos/ações negociados
begin
  // Candle atual (em formação)
  Plot(Close);

  // Candle anterior (fechado)
  Plot(Close[1]);

  // 5 candles atrás
  Plot(High[5]);

  // Cruzamento de fechamento com máxima anterior
  if (Close > High[1]) then
    PaintBar(clVerde);
end;

Arrays

var
  aValores : Array[10] of Float;    // array fixo de 10 elementos
  i        : Integer;

begin
  // Atribuir valores
  aValores[0] := Close;
  aValores[1] := Close[1];

  // Iterar
  for i := 0 to 9 do
    aValores[i] := Close[i];
end;

Parâmetros (Inputs)

Inputs são configuráveis pelo usuário na interface do Profit sem editar código:

input
  Periodo(14);           // Integer com valor padrão 14
  Multiplicador(1.5);    // Float com valor padrão 1.5
  UsarFiltro(True);      // Boolean
  NomeAtivo("PETR4");    // String

Use input para parâmetros que o usuário deve ajustar. Use const para constantes fixas de código.


Constantes Predefinidas

Cores

clVerde     clRed        clBlue
clVermelho  clGreen      clYellow
clAmarelo   clWhite      clBlack
clAzul      clBranco     clPreto
clCyan      clMagenta    clOrange
clGray      clSilver

Períodos (para função Asset e indicadores)

itMinute    // 1 minuto
itMinute2   // 2 minutos
itMinute5   // 5 minutos
itMinute10  // 10 minutos
itMinute15  // 15 minutos
itMinute30  // 30 minutos
itHour      // 1 hora
itDaily     // diário
itWeekly    // semanal
itMonthly   // mensal
itRenko     // Renko
itPnF       // Point and Figure
itRange     // Range Bar

Lados de Ordem

osCompra  // ordem de compra (equivalente: osBuy)
osVenda   // ordem de venda (equivalente: osSell)

Tipos de Média

kaArithmetic  // média aritmética simples
kaExponential // média exponencial
kaWeighted    // média ponderada
kaWelles      // média Welles Wilder

Tipos de Valor (para indicadores)

tvClose    // fechamento
tvOpen     // abertura
tvHigh     // máxima
tvLow      // mínima
tvMedian   // (máxima + mínima) / 2
tvTypical  // (máxima + mínima + fechamento) / 3

Constantes Matemáticas

Math_PI     // π ≈ 3.14159265
Math_Euler  // e ≈ 2.71828182
Math_Phi    // φ ≈ 1.61803398 (razão áurea)

Funções Personalizadas

Uma Função retorna um valor. Não tem acesso a variáveis globais do código principal.

Função calcRange(iBack : Integer) : Float;
var
  fMax, fMin : Float;
begin
  fMax := High[iBack];
  fMin := Low[iBack];
  calcRange := fMax - fMin;   // retorno = nome da função
end;

// Uso no corpo principal
begin
  Plot(calcRange(0));    // range do candle atual
  Plot(calcRange(1));    // range do candle anterior
end;

Procedimentos

Um Procedimento executa ações sem retornar valor. Ideal para plotagem condicional ou alertas.

Procedimento plotarSinal(bCompra : Boolean);
begin
  if bCompra then
    PaintBar(clVerde)
  else
    PaintBar(clVermelho);
end;

begin
  plotarSinal(Close > Media(21, Close));
end;

Bloco de Inicialização

Executado uma única vez antes do primeiro candle. Útil para inicializar variáveis.

var
  fMediaAcumulada : Float;

// Bloco de inicialização — roda uma vez
Initialization
  fMediaAcumulada := 0.0;
End;

begin
  fMediaAcumulada := fMediaAcumulada + Close;
  Plot(fMediaAcumulada / CurrentBar);
end;

Variável CurrentBar

CurrentBar retorna o número do candle atual no histórico (começa em 1):

begin
  // Evitar cálculos com histórico insuficiente
  if CurrentBar < 21 then exit;

  Plot(Media(21, Close));
end;

Padrões Recomendados

PráticaPor quê
Usar Close[1] em vez de Close[0] para sinaisCandle atual está em formação — barra fechada é mais confiável
Verificar CurrentBar >= Periodo antes de calcularEvita erros com histórico insuficiente
Usar Serie para variáveis que precisam de indexação históricaFloat não pode ser indexado por [N]
Nomes de variáveis: prefixo s (série), f (float), i (inteiro), b (booleano)Convenção legível
Não declarar variáveis globais dentro de funçõesNTSL não permite — use parâmetros

Referências

Referências externas

On this page