Escolar Documentos
Profissional Documentos
Cultura Documentos
formulas
Introdução às MetaFormulas
Os gráficos de preços são construídos a partir de séries históricas. As séries históricas consistem
em sequências de preços associados aos diferentes períodos de tempo. Dois grupos principais
de séries são usados: as série diárias (onde cada registro ou barra corresponde a um dia de
negociação) e as séries intraday (com cada barra correspondendo a um intervalo de alguns
minutos).
Os indicadores da análise técnica são calculados usando dados contidos nessas série históricas.
Por exemplo, um indicador bem conhecido é a média móvel aritmética (MMA). Ela consiste em
somar os preços de fechamento dos últimos N períodos e dividir a soma por N, onde N é o
número de períodos da média, o parâmetro desse indicador. A média movel tem a propriedade
de filtrar os ruídos de curto prazo nos preços, mostrando mais claramente as tendências.
Outros indicadores podem usar outros dados das séries, como abertura, máximo, mínimo,
volume, número de negócios, mas o padrão se repete: os indicadores associam preços de
períodos diferentes, e tentam extrair das séries novas formas de análise e perspectivas
diferentes.
Símbolo Significado
C Close - Preço de fechamento da barra
H High - Preço máximo da barra
L Low - Preço mínimo da barra
O Open - Preço de abertura
Vol Volume negociado na barra
Data Data da barra
Time Time - Data e hora do início da barra (a hora é válida só para series intraday)
Col Coluna da barra - 1 é a primeira barra da série
Neg Número de negócios
Minuto Minuto inicial da barra
Cada uma dessas variáveis é na verdade um conjunto de valores - um array - com um valor
correspondente a cada barra da série. Se a série tiver 1000 barras, o array de fechamentos C
terá também 1000 valores, um para cada barra. Para ilustrar isso vamos implementar um
indicador simples, o preço médio. A formula é:
PM := (H+L)/2
Ou seja, máximo mais mínimo dividido por dois. Essa formula especifica que a operação deve
ser repetida para cada barra. Exemplo:
PM1 := (H1+L1)/2
PM2 := (H2+L2)/2
.....
PM100 := (H100+L100)/2
Na linha 1 temos a definição de uma variável chamada meuifr. Essa variável recebe o valor do
IFR (Índice de Força Relativa) de 9 períodos da série. O símbolo := indica um comando de
atribuição de valor. O IFR, assim como outros indicadores populares na análise técnica, é uma
função pré-definida nas Metaformulas, facilitando o trabalho de criar o seu indicador
customizado.
Ainda no indicador acima, a linha 2 calcula a média movel aritmética de 3 períodos da variável
meuifr. Como o valor da segunda linha não é atribuído a nenhuma variável, o sistema de
MetaFormulas entende que se trata de uma linha plotável, a ser traçada no gráfico. Ou seja, as
linhas que não contém atribuição são consideradas resultados de cálculo e vão para o
gráfico. Isso facilita escrever indicadores com apenas uma linha.
Cada indicador pode traçar até 3 linhas (resultados) no mesmo gráfico. Notar também o ponto e
virgula ; no final de cada linha. Esse símbolo é necessário como separador das várias linhas de
uma fórmula (se a fórmula tiver mais que uma linha).
Cálculos lógicos
Condições lógicas são importantes na definição de indicadores. Um indicador pode, por exemplo,
especificar o uso do maior valor entre abertura e fechamento. Isso requer uma comparação.
Voce pode usar os operadores > , < , = ,>= , <= , <>, or e and em fórmulas. Com esses
operadores é possível construir condições complexas de entrada e saída no mercado, com base
nos valores dos indicadores calculados.
Nas Metaformulas, as variáveis lógicas são variáveis numéricas comuns. O valor 0 corresponde
a condição falsa e 1 corresponde a condição verdadeira.
Observe o exemplo acima. Na primeira linha o valor da variável x será 1 nas barras onde o ifr(9)
for maior que 60 e 0 para todas as outras. Na segunda linha, a variável y será 1 para as barras
onde o indicador ADX de 14 períodos for maior que 50. A terceira linha plota o resultado final: 1
para as barras onde os valores de x e y forem verdadeiros e 0 para aquelas onde a expressão é
falsa.
Outras funções lógicas podem ser usadas (veja no final deste texto o resumo das funções):
if(o>c,o,c);
A fórmula acima usa a função IF e retorna o maior valor entre a abertura e o fechamento.
Comentários
// -----------------------------------------
// meu detector de volumes atípicos
// -----------------------------------------
nper:=90; //parametro: tamanho do periodo (90 dias)
m:=mov(Vol,nper); //calc media dos volumes (usa média movel)
dp:=desvpad(Vol,nper); //calc desvio padrao dos Vols nos ultimos nper dias
vmais :=m+2*dp; //volume medio acrescido de 2 dps (inclui 95% das ocorrencias)
i:=(Vol>vmais); //dias com vol > vmais
//plots:
m; //plota media dos volumes
vmais; //plota volume limite
vol*i; //destaca volumes acima do limite de 2 dp
No indicador acima, as partes na cor roxa são os comentários incluídos por quem implementou o
indicador. Esse indicador, plotado junto com o Volume, gera o gráfico abaixo. A linha azul é o m;
a vermelha o vmais; e a pontilhada azul mostra os volumes destacados.
Not A Number
Em algumas situações um array pode conter um ou mais valores indefinidos. Por exemplo, uma
média movel aritmética só pode ser calculada depois que a série contiver o número de períodos
da média. Antes disso, nas primeiras barras da série, o valor da média é indefinido.
Em outros casos, uma fórmula contém uma divisão por zero em alguma das barras. Ou a série
contém um período sem negociação. Nestes casos, a variável recebe o valor NaN, ou Not a
Number, para indicar que aquele valor é indefinido. Qualquer operação que involva um NaN
resulta também em NaN.
Quando uma linha é plotada, os pontos com valor NaN são ignorados (omitidos do gráfico). Isso
é uma forma de manter todos os arrays alinhados, com o mesmo número de valores (mesmo que
alguns sejam indefinidos)
Para criar um indicador tipo MetaFormula no gráfico do terminal enfoque, selecione a janela do
gráfico e tecle i . Isso abre a lista de indicadores no grafico. Na lista de indicadores disponíveis à
esquerda, dê dois clicks na opção MetaFormula (customizada). Isso inclui uma
MetaFormula na lista de indicadores usados neste gráfico.
Selecione a janela onde o indicador será plotado: a escala. Voce pode plotar o indicador junto
com as barras do ativo, em janela de indicador de escala arbitrária ou em janela de escala de 0 a
100. Se o indicador for um preço (como as médias moveis) plote junto com as barras. Se for um
indicador de 0 a 100%, use a escala correspondente.
Especifique o nome do indicador e o estilo/cor das linhas. O indicador pode conter até 3 linhas.
Isso depende do número de linhas plotáveis definidas na fórmula.
Aperte o botão [Edita Fórmula] para escrever a fórmula do indicador. Isso abre o ambiente de
desenvolvimento de MetaFormulas, como ilustrado na figura abaixo.
Escreva a fórmula e use o botão calcula para testar. Se houver erro, o motivo pode ser
encontrado na página de Debug. Se a formula estiver ok, os valores são calculados e exibidos no
gráfico anexo e na planilha de valores. Se quiser exportar a planilha para o Excel ou outro
aplicativo para mais análises, use o botão direito do mouse na planilha para copiar.
O campo Plots permite exibir no gráfico as outras linhas plotáveis do indicador (uma por vez).
Roc(A,N) - Rate of Change do array A nas ultimas N barras. Uma variação de 100% é
indicada pelo valor 1. Valores de N positivo indicam Roc entre passado e o presente.
MaxAB(A,B) - Retorna array com maximos dos arrays A e B, comparando cada periodo
individualmente.
Ref(A,N) - Essa função retorna o valor do array A no período N barras atrás. (N p/ trás =
positivo) . Ref é uma função muito útil, pois permite associar vários valores do mesmo
array em diferentes barras.
exemplo: A:=Array(10,9,8,7,8,9,11,10,9,8);
Todos os indicadores existentes no Gol podem ser usados em MetaFormulas. São eles:
Sqrt(A) Sin(A) Cos(A) Tan(A) ArcTan(A) ArcSin(A) ArcCos(A) Log(A) Exp(A) Frac(A)
Int(A)
If(boolCond, TrueA, FalseA) - Se boolCond for verdadeira (i.e. diferente de zero), usa o
valor do array TrueA. Caso contrário use o valor de FalseA. Os 3 parametros são arrays.
nota: nenhuma precedência de cáculo é definida entre operadores lógicos. Por exemplo:
a:=b and c or d;
Use parênteses para estabelecer essa precedência se necessário, como nos exemplos:
a:=(b and c) or d;
a:=b and (c or d);
Historico:
- OFR: jul/07 - SumAc() func