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/inicioeend/fimsão equivalentes.
Tipos de Dados Primitivos
| Português | Inglês | Descrição | Exemplo |
|---|---|---|---|
Real | Float | Números decimais — use para preços | 3.14, 134500.0 |
Inteiro | Integer | Números inteiros | 42, -5 |
Booleano | Boolean | Verdadeiro ou falso | True, False |
String | String | Texto | "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
Floatnão podem ser indexadas por[N]. UseSeriequando 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ês | Inglês | Descrição |
|---|---|---|
Abertura | Open | Preço de abertura do candle |
Fechamento | Close | Preço de fechamento do candle |
Maxima | High | Máxima do candle |
Minima | Low | Mínima do candle |
Volume | Volume | Volume financeiro negociado |
Quantidade | Quantity | Contratos/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"); // StringUse
inputpara parâmetros que o usuário deve ajustar. Useconstpara constantes fixas de código.
Constantes Predefinidas
Cores
clVerde clRed clBlue
clVermelho clGreen clYellow
clAmarelo clWhite clBlack
clAzul clBranco clPreto
clCyan clMagenta clOrange
clGray clSilverPerí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 BarLados 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 WilderTipos 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) / 3Constantes 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ática | Por quê |
|---|---|
Usar Close[1] em vez de Close[0] para sinais | Candle atual está em formação — barra fechada é mais confiável |
Verificar CurrentBar >= Periodo antes de calcular | Evita erros com histórico insuficiente |
Usar Serie para variáveis que precisam de indexação histórica | Float 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ções | NTSL não permite — use parâmetros |
Referências
Referências externas
Profit / Nelogica — Automação com NTSL
Guia completo para automação de estratégias na plataforma Profit da Nelogica usando a linguagem NTSL: fundamentos, robôs, indicadores, backtesting e otimização.
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.