Ferramentas do usuário

Ferramentas do site


profitchart:basico_programacao:logica_programacao

Lógica de Programação

Introdução

  • Linguagem: NTSL (Nelogica Trading System Language)
  • Baseado em EasyLanguage criado pela TradeStation.
  • Por que precisamos entender a Lógica de Programação?
    • Isso nos ajudará a programar códigos eficazes.
      • Eficaz: Fazer certo a coisa certa.
      • Eficiente: Fazer certo a coisa errada.
      • Exemplo, Uma regra de coloração invertida, colori de verde o candle de baixa, e colori de vermelho o candle de alta.
    • Nos ajudará também a identificar e corrigir problemas com códigos.

Palavras Reservadas

  • Definição: Uma palavra que não pode ser utilizada como um identificador - por ser reservada para uso da gramática da linguagem.
    • Exemplos, Início Fim
    • Ficam marcadas em azul com efeito negrito.
    • No ProfitChart pode ser inglês / Português. (Algumas, não todas)

Identificadores reservados

  • Exemplos, Abertura, Fechamento, Máxima, Mínima.

Funções

  • Uma função é um bloco de código pré-definido para executar uma tarefa específica que pode ser chamado e executado inúmeras veze no decorrer do seu código.
    • Por exemplo um cálculo específico.
  • O identificador usado para chamar uma função é reservado.
    • Em uma função nativa esse identificador é determinado pelo desenvolvedor da linguagem.
    • Em uma função criada pelo usuário, o identificador é escolhido pelo usuário e passa a ser reservado uma vez que seja definido.

Execução do Código

  • Qual a rotina de execução do código em relação ao contexto de aplicação (Nesse caso, o ProfitChart).
    • O código é executado a cada atualização de valor de preço ou volume (a cada variação de tick).
    • Exemplo, Uma Regra de Coloração para pintar o candle de vermelho quando o preço atual está abaixo do preço de abertura, ou pintar de verde, quando o preço atual está acima do preço de abertura, para a coloração acontecer em tempo real é necessário que o código seja reexecutado a cada variação de tick para confirmar qual das duas condições são verdadeiras.

Depuração

  • Inglês: Debug
  • Definição: Processo de localizar e resolver defeitos ou problemas com um programa de computador, que o previne de operar de forma correta. É importante dominar formas de depurar nossos códigos.

3 Formas Principais

  1. Verificar Sintaxe
    • Definição de Sintaxe: Conjunto de regras que determinam as diferentes possibilidades de associação das palavras de uma língua.
      • Funciona da mesma forma que para um idioma, pois, até mesmo linguagens de programação seguem uma determinada 'gramática'.
      • É o que determina se uma frase ou sentença faz sentido.
  2. Step Over (F3)
    • Executa o código linha a linha, porém sem investigar as funções usadas pelo código, por isso 'step over' ou 'pular', 'passar por cima'
  3. Trace Into (F7)
    • Assim como em Step Over, também executa um código linha a linha, porém também investiga as funções usadas linha a linha. 'Trace Into', 'traçar dentro'.

Variáveis

  • Definição: Um objeto, (uma posição, normalmente alocada na memória do computador) capaz de reter e representar um valor ou expressão.
    • Como uma caixa que armazena algo dentro.
  • Identificadores: Um nome para identificá-la e permitir ao programador referenciá-la cada vez que necessário.
  • Por que usar variáveis?
    • Para economizar processamento - ao reutilizar um valor ou resultado de um cálculo.
    • Facilita a vida do programador ao associar nomes a valores. Exemplo, área de um triângulo.

Tipos de Dados

PT EN Definição Exemplos
Real Float Representa números ponto flutuantes (real) 3.14
Inteiro Integer Representa números inteiros 1, 2, 3
Booleano Boolean Representa uma relação binária (1 e 0) Verdadeiro (True) / Falso (False)
  • Como Declarar
    • Entre palavra reservada var e o início do nosso código com a palavra reservada Início (Begin).
// Variáveis
// Real (Float) ex: 3.14
// Inteiro (Integer) ex: 1, 2 ,3
// Booleano (Boolean) ex: verdadeiro (true) / falso (false)
 
var
// identificador : Tipo;
vR1, vR3 : Real;
vI1 : Inteiro;
vB1 : Booleano;
 
// Inglês
vR2 : Float;
vI2 : Integer;
vB2 : Boolean;
 
Inicio
// Inicio do código a ser executado
 
vR1 := 80000;
vR2 := 2000;
// Nota - Para números reais
// Números inteiros também fazem parte do grupo dos números Reais.
// Não utilizar símbolo para agrupador de milhares
// Símbolo decimal é representado por . (ponto)
 
vR3 := vR1 + vR2; // vR3 = 80000 + 2000 = 82000
 
Plot(vR3);

// Fim do código
Fim; 

Parâmetros

  • Definição: Uma interface entre o mundo externo (usuário) com o código sendo executado.
  • Identificadores: Um nome para identificá-la e permitir ao programador referenciá-la cada vez que necessário e para que o usuário saiba sua utilidade.
  • Por que usar parâmetros?
    • Para permitir a interação do usuário com o código, dessa forma o usuário pode influenciar na execução do código, porém com papel limitado pelo programador.

Tipos de Dados

Utiliza os mesmos tipos definidos nas variáveis. (Real, Inteiro, Booleano)

  • Como Declarar
    • Entre a palavra reservada Parametro ou Input e a palavra reservada var.
Parametro // (Input)
// Identificador(Valor Inicial);
Sinal (2000); // Sinal é comumente um termo para um número de referência
 
// Variáveis
// Real  (Float) ex: 3.14
// Inteiro (Integer) ex: 1, 2 ,3
// Booleano (Boolean) ex: verdadeiro (true) / falso (false)
 
var
// identificador : Tipo;
vR1, vR3 : Real;
vI1 : Inteiro;
vB1 : Booleano;
 
// Inglês
vR2 : Float;
vI2 : Integer;
vB2 : Boolean;
 
Inicio
// Inicio do código a ser executado
 
vR1 := 80000;
vR2 := 2000;
// Nota - Para números reais
// Números inteiros também fazem parte do grupo dos números Reais.
// Não utilizar símbolo para agrupador de milhares
// Símbolo decimal é representado por . (ponto)
 
vR3 := vR1 + vR2 + Sinal; // vR3 = 80000 + 2000 + Sinal = ?
 
Plot(vR3);
 
// Fim do código
Fim;

Séries de Dados

  • Definição: são os valores decorrentes de cada candle (barra ou box) do gráfico.
  • Abertura (Open)
    • Retorna o valor de abertura da barra atual.
  • Fechamento (Close)
    • Retorna o valor de fechamento da barra atual.
  • Minima (Low)
    • Retorna o valor mínimo da barra atual.
  • Maxima (High)
    • Retorna o valor máximo da barra atual.
  • Quantidade (Quantity)
    • Retorna o valor da quantidade da barra atual.
  • Importante
    • Referência a valores do passado é feito através de contadores: [x] onde x é o número do contador.
      • Exemplo: Abertura[1]; Fechamento[3]
    • Este processo também é conhecido como indexação - onde o valor x é um índice ou index de referência a um valor do passado.

Operadores

Operadores Matemáticos

Operador Descrição Exemplo Resultado
+ Adição 5+4 9
- Subtração 5-4 1
* Multiplicação 5*4 20
/ Divisão 5/4 1.25
  • Ordem de Operações
    • Divisão > Multiplicação > (Soma & Subtração)
    • Divisão possui maior força de precedência, seguido por multiplicação, e então soma e subtração.
    • Nota: Soma e subtração seguem a ordem por sequência – ou seja – o operador que estiver primeiro é executado antes.
Expressão Resultado
10*10/5+2 22
1*2+2 102
50+100*10/2-1 549
x = 10 * 10/5 + 2
x = 10 * 2 + 2
x = 20 + 2
x = 22
 
// Programaticamente 
x = (10 * (10/5)) + 2 = 22

Matematicamente

  • Alterando a ordem das operações
// Programaticamente
x = (10 * 10) / (5 + 2) = 14.2857

Matematicamente

Operadores de Comparação

Operador Descrição Exemplo (de condição verdadeira)
> Maior que 5 > 4 ;
< Menor que 4 < 5 ;
>= Maior ou igual 5 >= 5 ; 6 >= 5
Menor ou igual 5 ⇐5 ; 4 ⇐ 5
= Igual 4 = 4 ; 5 = 5
<> Diferente 5 <> 4 ; 4 <> 5

Controle de Fluxo

Se Então Senão (Teste Condicional)

  • Definição: Se uma condição ou um grupo de condições for verdadeira, execute uma sequência de Comandos (A), senão, execute uma outra sequência de Comandos (B).
  • Inglês: If, Then, Else
Inicio
  Se (Fechamento > Abertura) entao
    inicio
      PaintBar(clVerde);
    fim
  Senao Se (Fechamento < Abertura) entao
    inicio
      PaintBar(clVermelho);
    fim
  Senao
    inicio
      PaintBar(clBranco);
    fim;
Fim;

Alternativa

 Inicio
  Se (Fechamento > Abertura) entao PaintBar(clVerde)
  Senao Se (Fechamento < Abertura) entao PaintBar(clVermelho)
  Senao PaintBar(clBranco);
Fim;


Para Até (Loop Controlado)

  • Definição: O comando PARA é utilizado para definir um loop controlado, ou seja, Comando (A) é executado repetidamente até que a (variável de contagem) saia do (valor inicial) e atinja (valor final). A cada iteração a (variável de contagem) é incrementada em 1.
  • Inglês: For, To
Parametro
Preco(Fechamento);
Periodo(9);
 
var
rResultado : Real;
iIndex : Inteiro;
 
Inicio
 
// Inicialização de variável
rResultado := 0;
 
// Período - 1 : Porque indexação conta-se apartir da posição 0
Para iIndex := 0 ate Periodo -1 faca
inicio
rResultado := rResultado + Preco[iIndex];
fim;
 
Plot(rResultado / Periodo);
 
// Alternativa
// Para iIndex := 0 ate Periodo -1 faca rResultado := rResultado + Preco[iIndex];
// rResultado := rResultado / Periodo;
// Plot(rResultado);
 
Fim;


Enquanto Faça (Loop Controlado)

  • Definição: A execução da estratégia ao chegar no comando ENQUANTO testa o resultado de (condição). Caso (condição) seja verdadeiro (true) a listagem (comandos) é executada. Após a execução a (condição) volta a ser testada, assim, o loop apenas irá se encerrar quando (condição) deixar de ser verdadeira.
  • Inglês: While, Do
Parametro
Preco(Fechamento);
Periodo(2);
 
var
rResultado : Real;
iIndex : Inteiro;
 
Inicio
 
// Inicialização de variável
rResultado := 0;
iIndex := 0;
 
Enquanto (iIndex <= Periodo -1) faca
inicio
rResultado := rResultado + Preco[iIndex];
iIndex := iIndex +1;
fim;
 
Plot(rResultado / Periodo);
 
// Alternativa // Cuidado com último comando - está fora do loop 'Enquanto'.
// Enquanto (iIndex <= Periodo -1) faca rResultado := rResultado + Preco[iIndex]; iIndex := iIndex +1;
// rResultado := rResultado / Periodo;
// Plot(rResultado);
 
Fim;


Operadores Lógicos

  • Definição: Uma porta lógica é um 'dispositivo eletrônico' que implementa uma função booleana, uma operação lógica executada em uma ou mais entradas binárias que produz uma única saída binária.
  • Convenção
    • [1] = Verdadeiro
    • [0] = Falso

Operador E

  • Saída 'verdadeira' (1) quando todas as entradas forem verdadeiras (1).
  • Tabela da Verdade
A B X = A e B Booleano
1 1 1 Verdadeiro
1 0 0 Falso
0 1 0 Falso
0 0 0 Falso

Operador OU

  • Saída 'verdadeira' (1) quando ao menos 1 das entradas for verdadeira (1).
  • Tabela da Verdade
A B X = A ou B Booleano
1 1 1 Verdadeiro
1 0 1 Verdadeiro
0 1 1 Verdadeiro
0 0 0 Falso

Combinação de Operadores Lógicos

( A e B ) ou ( C e D )
    X     ou     Y


Funções

  • Definição: Uma função é um pedaço de código que executa alguma tarefa específica e pode ser chamado de qualquer parte do programa quantas vezes desejarmos.
  • Uma função pode necessitar de alguns dados para que possa realizar alguma ação baseada neles.
    • Esses dados são chamados parâmetros da função.
    • A função pode retornar um certo valor, que é chamado valor de retorno.
    • Os parâmetros (e seus tipos) devem ser especificados explicitamente, assim como o tipo do valor de retorno.
função Nome_da_Função( param 1: TIPO; param 2 : TIPO ) : Retorno;

Criar Função dentro do código

// Inicio - Parametros e Variáveis do Código
Parametro
Periodo(9);
var
rMM : Real;
// Fim - Parâmetros e Variáveis do Código
 
// Início - Função
// Discutir problema com o código
// As barras antes do período não são contadas
// Precisamos usar a função CurrentBar para corrigir
Funcao calcMM(Periodo : Inteiro) : Real;
var
nIndex : Inteiro;
Inicio
Result := 0;
Para nIndex := 0 ate Periodo -1 faca Result := Result + Fechamento[nIndex];
Result :=  (Result / Periodo);
Fim;
// Fim - Função
 
// Início - Código
Inicio
 rMM := calcMM(Periodo);
Plot(rMM);
 Se (Fechamento > rMM) entao PaintBar(clVerde) Senao PaintBar(clVermelho);
 // Se (Fechamento > rMM) entao
// inicio
//  PaintBar(clVerde);
// fim
// Senao
// inicio
//  PaintBar(clVermelho);
// fim;
 
Fim;
// Fim - Código

Criar Função Externa

Parametro
index(0);
 var
Result : Real;
 Inicio
Result := Abs(Abertura[index] - Fechamento[index]);
Plot(Result);
Fim;
profitchart/basico_programacao/logica_programacao.txt · Última modificação: 01/03/2021 21:09 por schillerapp