Expressões Personalizadas


As expressões personalizadas permitem definir regras específicas para filtrar ou gerar sinais de entrada para as operações. As expressões podem envolver funções matemáticas, comparações de valores e devem sempre retornar um valor do tipo verdadeiro ou falso, sendo que verdadeiro autoriza a negociação e falso bloqueia. Podem ser usados valores explícitos, variáveis que correspondem a parâmetros de entrada, e arrays com histórico de preços ou indicadores. As expressões podem ser compostas por múltiplas subexpressões delimitadas por parênteses, e conectadas usando operadores lógicos do tipo E/OU.


As seguintes funções estão disponíveis para uso nas expressões:

abs: valor absoluto de um número. Ex: abs(-123) = 123;

ceil: arredondamento para o inteiro superior. Ex: ceil(9.6) = 10.0;

exp: exponencial para o número e;

floor: arredondamento para o inteiro inferior. Ex: floor(9.60) = 9.0;

log: Logaritmo (e);

log10: Logaritmo base 10;

max: Valor máximo entre dois números. Ex. max(10, 5) = 10;

min: Valor mínimo entre dois números. Ex. min(10, 5) = 5;

mod: Resto da divisão entre dois inteiros. Ex. mod(3, 2) = 1;

pow: Número elevado à potência especificada. Ex. pow(2, 3) = 8;

rand: Número gerado aleatoriamente;

round: Arredondamento para o inteiro mais próximo. Ex. round(2.3) = 2.0;

sqrt: Raiz quadrada de um número.

Operadores matemáticos:

+: Adição;

: Subtração;

/: Divisão;

*: Multiplicação;

%: Módulo.


Operadores lógicos e de comparação:

>: maior;

<: menor;

>=: maior ou igual;

<=: menor ou igual;

==: igual; 

!=: diferente;

&&: “E” lógico entre duas subexpressões;

||: “OU” lógico entre duas subexpressões.


Variáveis: cada tipo de filtro pode contar com variáveis diferentes, que serão usadas de forma literal nas expressões (ex. R1) e são vinculadas a parâmetros de configuração dos robôs, podendo ser aplicadas no processo de otimização. 


Arrays: Os arrays representam o histórico de preços ou conjuntos de valores dos indicadores. A notação usada é o nome do array seguido por colchetes [ ] com o índice da barra desejada (ex. C[1]). O índice 0 sempre representa a barra atual, 1 para a barra anterior, e assim sucessivamente.

A seguir, são listados os arrays comuns a todos os filtros:

O[ ]: preços de abertura;

H[ ]: maximas;

L[ ]: mínimas;

C[ ]: preços de fechamento;

R[ ]: range, diferença entre máxima e mínima;

B[ ]: tamanho do corpo, diferença entre abertura e fechamento.

V[ ]: volume real;

T[ ]: volume de ticks;

Cada tipo de filtro que permite expressões pode contar com variáveis e/ou arrays específicos, que são listados a seguir.

*Obs.: As variáveis podem ser usadas de forma livre, independente da semântica e descrição usada para os filtros pré-definidos.


1. Filtros de Price Action:

Variáveis específicas :  

ID: Parâmetro H.06.19 Afastamento de referencia em % (INTRADAY);

LD: Parâmetro H.06.20 Afastamento de referencia em % (LASTDAY);

IW: Parâmetro H.06.21 Afastamento de referencia em % (INTRAWEEK);

RG: Parâmetro H.06.22 Afastamento das minimas/maximas;

R1: Parâmetro H.06.23 Referencia 1;

R2: Parâmetro H.06.24 Referencia 2.

2. Filtros de Média Móvel (MA1 e MA2):

Variáveis específicas:

AF: Parâmetros H.07.8 Afastamento da media movel 1 ou H.08.8 Afastamento da media movel 2.

Arrays específicos:

M[ ]: Valor da média móvel.

3. Filtro VolatilityChannel:

Variáveis específicas:

R1: Parâmetro H.26.13 Valor de referencia 1 VolatilityChannel;

R2: Parâmetro H.26.14 Valor de referencia 2 VolatilityChannel.

Arrays específicos:

MA[ ]: Valor da média móvel;

LB[ ]: Valor da banda inferior;

UB[ ]: Valor da banda superior.

4. Filtro Donchian/Phibo:

Arrays específicos:

BLO[ ]: Valor das mínimas;

B214[ ]: Valor da linha de 21,4%;

B382[ ]: Valor da linha de 38,2%;

B500[ ]: Valor da linha de 50%;

B618[ ]; Valor da linha de 61,8%;

B786[ ]: Valor da linha de 78,6%;

BHI[ ]: Valor das máximas.

5. Filtros personalizados:

Variáveis específicas:

R1: Parâmetros H.98.11 Valor de referencia 1 para indicador ou H.99.11 Valor de referencia 1 para indicador

R2: Parâmetros H.98.12 Valor de referencia 2 para indicador ou H.99.12 Valor de referencia 2 para indicador

Arrays específicos:

B0[ ]: Valor do Buffer 0 do indicador personalizado

B1[ ]: Valor do Buffer 1 do indicador personalizado

B2[ ]: Valor do Buffer 2 do indicador personalizado

B3[ ]: Valor do Buffer 3 do indicador personalizado

B4[ ]: Valor do Buffer 4 do indicador personalizado

B5[ ]: Valor do Buffer 5 do indicador personalizado

B6[ ]: Valor do Buffer 6 do indicador personalizado

B7[ ]: Valor do Buffer 7 do indicador personalizado

B8[ ]: Valor do Buffer 8 do indicador personalizado

B9[ ]: Valor do Buffer 9 do indicador personalizado

Os exemplos abaixo mostram algumas expressões válidas:

C[0]<C[1] – Preço de fechamento atual menor que fechamento anterior;

(H[1]>H[2]) && (L[1]>L[2]) – Máxima da última barra maior que anterior e mínima maior que anterior;

ABS(C[0]-C[1]) > R1: Valor absoluto da diferença entre fechamento atual e da última barra maior que o parâmetro de referência 1;

C[1]>M[1]: Fechamento da barra anterior maior que a média;

(C[2]>UB[2]) && (C[1]<UB[1]): Fechou fora e fechou dentro da banda superior;

C[1]>B2[1]: Fechamento anterior maior que o buffer #2 do filtro personalizado.

Cada campo de expressão personalizada permite definir expressões diferentes para compra e para venda. Neste caso as expressões devem ser separadas por um caracter ponto e vírgula (;). Caso apenas uma expressão seja colocada, a mesma será usada tanto para compras como para vendas:

C[0]>BHI[1] ; C[0]<BLO[1]: Para compras, espera que o fechamento atual fique maior que a linha de máxima da barra anterior; e para vendas, espera fechamento atual fique menor que a linha das mínimas.

C[1]>M[1] ; C[1]<M[1]: Para compras, espera que o fechamento anterior seja acima da média.; e para vendas o fechamento anterior deve ser abaixo da média.

Função de otimização personalizada

Além das expressões utilizadas para os filtros, é possível também definir uma função de otimização para calcular o resultado de cada teste (result), que será utilizado para classificar os conjuntos de parâmetros durante a otimização. Esta expressão deve retornar um valor, sendo que quanto maior o valor melhor classificado estará o conjunto de parâmetros em uma otimização.

As seguintes variáveis podem ser usadas no cálculo de um resultado de otimização:

profit: Lucro líquido;

gp: Lucro bruto;

gl: Perda bruta;

pf: Fator de lucro;

sharpe: Sharpe ratio;

trades: Número de trades (operações fechadas);

ddbal: Drawdown no saldo;

ddeqt: Drawdown no capital (considerando resultado em aberto);

wins: Número de trades com lucro;

losses: Número de trades com perda;

deposit: Saldo inicial;

rf: Fator de recuperação;

wdraw: Valor de saque durante o teste;

payoff: Payoff no período;

mxprofit: Maior lucro em um trade;

mxloss: Maior perda em um trade;

mxconsprofit: Maior lucro consecutivo;

mxconsloss: Maior perda consecutiva;

mxconswins: Máximo de ganhos em sequência;

mxconslosses: Máximo de perdas em sequência;

mibal: Menor saldo atingido;

mieqt: Menor capital atingido (incluindo resultado em aberto);

nbuy: Número de operações de compra;

nsell: Número de operações de venda.