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.