English Русский 中文 Español Deutsch 日本語
preview
Indicadores não-lineares

Indicadores não-lineares

MetaTrader 5Exemplos | 8 março 2023, 09:24
861 0
Aleksej Poljakov
Aleksej Poljakov

Introdução

Métodos não-lineares são amplamente utilizados para lidar com séries temporais financeiras. Na plataforma de negociação MetaTrader, existem diversos indicadores que utilizam abordagens não-lineares, todos eles amplamente usados no mercado financeiro.

Indicadores não-lineares podem ser necessários quando certas características do sinal são mais importantes do que informações gerais. Além disso, podem lidar com situações em que indicadores lineares são incapazes.

Criar um indicador não-linear é uma tarefa relativamente fácil. Um indicador linear comum pode ser descrito pela seguinte equação:

Onde w[i] são os coeficientes de peso do indicador. Agora vamos tornar este indicador não-linear. Para fazer isso, usaremos os logaritmos de preços em vez dos preços em si. Após calcular a soma, encontramos o expoente do resultado:

Embora essa abordagem possa parecer simples, os cálculos do indicador sofrem mudanças significativas. Todas as multiplicações são convertidas em exponenciação e as adições são substituídas por multiplicações. Por exemplo, a média aritmética (SMA) é substituída pela média geométrica.

Além disso, o uso de logaritmos é uma indicação direta de que números positivos são usados nos cálculos. Essa conversão de preços pode ser utilizada em qualquer indicador linear, e você pode fazê-la facilmente por conta própria. Ao mesmo tempo, todos os requisitos para coeficientes permanecem os mesmos dos indicadores lineares. Vamos usar o modelo de indicador deste artigo e convertê-lo na versão logarítmica.

No entanto, indicadores não-lineares também podem ser construídos usando a transformação da própria série temporal. Neste artigo, abordaremos esses tipos de indicadores, com foco na função ArraySort como base para novos indicadores.


Medidas de tendência central

A tendência central é um valor típico para um conjunto de dados. As medidas de tendência central mais comuns são a média aritmética, a mediana e a moda. A média aritmética é uma medida linear e é implementada em uma média móvel simples, enquanto a mediana e a moda são não-lineares.

A mediana divide o conjunto de dados em duas partes. A primeira parte contém valores menores que a mediana, enquanto a segunda parte contém valores maiores. Vejamos como a mediana é calculada. Suponha que tenhamos a seguinte série de valores: 1, 6, 9, 3, 3, 7, 8. Classifique esses números em ordem crescente: 1, 3, 3, 6, 7, 8, 9. A mediana será o número no centro dessa série. No nosso exemplo, esse número é 6. No caso de um número par de dados, a mediana é a média dos dois números mais próximos do centro. Por exemplo, para a série 1, 3, 3, 6, 7, 8, a mediana será (3 + 6)/2 = 4,5. A principal característica da mediana é que ela é muito robusta em relação a valores atípicos.

A moda é o valor que ocorre com mais frequência na amostra de dados. Por exemplo, na amostra 1, 6, 9, 3, 3, 7, 8, o número mais comum é 3, que será a moda dessa série. No entanto, ao analisar preços, cada valor pode ocorrer apenas uma vez. Portanto, para calcular a moda, pode-se usar a fórmula empírica de Pearson:

Moda = 3 x mediana – 2 x média.

Observando essa fórmula, é possível perceber que a moda é um indicador instável (os coeficientes ultrapassam os limites do intervalo -1…+1). Porém, pode ser útil como complemento a outros indicadores.

Outra medida central é o meio do intervalo. Para calculá-lo, é necessário encontrar a média entre os valores máximo e mínimo da série temporal. Embora a faixa intermediária seja sensível a valores atípicos e não seja muito confiável, ela é utilizada em alguns indicadores.

É assim que as quatro medidas de tendência central aparecem no gráfico.



Suavização Bayesiana

Se observarmos o gráfico da mediana, podemos encontrar áreas onde a mediana não muda de valor por um longo período de tempo. Quanto mais longo o período da mediana, mais significativas são essas áreas. Por exemplo, este é o gráfico da mediana com um período de 51.

E se tentarmos tornar a mediana mais sensível às mudanças de preço? Por exemplo, podemos tomar metade da soma da mediana e da média simples, combinando a estabilidade da mediana e da média móvel. Bem, esta opção é possível. Mas eu sugiro seguir um caminho um pouco diferente e usar a suavização bayesiana.

Primeiro, precisamos calcular a soma de todos os preços:

sum = price[1] + … + price[n].

Em seguida, precisamos selecionar um valor em relação ao qual a suavização será realizada. Então, a média bayesiana pode ser calculada usando a seguinte equação:

Aqui, p é um parâmetro que permite ajustar a intensidade da influência do valor selecionado. Seu valor deve ser pelo menos um. Por exemplo, eu escolhi os seguintes valores: mediana, meio do intervalo, máximo e mínimo.

A suavização bayesiana também pode ser aplicada a vários valores. Nesse caso, a equação será assim:

No indicador, essa opção é apresentada nos valores máximo e mínimo. Aqui está como eles aparecem no gráfico.


A aplicação da suavização bayesiana mostra como métodos lineares e não-lineares podem ser combinados em um único indicador.


Mediana das medianas

Vamos lembrar como podemos obter uma função de janela triangular. Tomamos como base uma média móvel simples com um período de 3. Agora precisamos encontrar os valores de três médias móveis deslocadas por uma barra:

 

Agora, basta encontrar a média desses três valores:


Agora, vamos aplicar o mesmo princípio às medianas. Primeiro, encontramos os valores de três medianas:


Em seguida, o valor do indicador será igual à mediana dessas medianas:


É assim que ficará no gráfico.



Pseudo-mediana

O algoritmo para calcular a pseudo-mediana é um pouco semelhante ao anterior. A única diferença é que em cada passo, não procuramos a mediana da subsequência, mas o seu valor máximo e mínimo.

 

Agora, precisamos encontrar o valor mínimo dos máximos encontrados e o valor máximo dos mínimos. A média entre eles será a pseudo-mediana.


A pseudo-mediana pode servir como substituto tanto para a mediana quanto para o meio do intervalo.


A não-linearidade não prejudica o indicador

Força de tendência. Vamos considerar um indicador com um foco significativo em tendências, como uma média ponderada linear. Os valores do indicador são calculados da seguinte forma (suponha que o período do indicador seja 5):


Em seguida, vamos pegar esses preços e criar duas novas sequências a partir deles. Na primeira (denominada p[]), os preços devem ser classificados em ordem ascendente (do mais baixo ao mais alto), enquanto na segunda sequência (P[]), os preços devem ser classificados em ordem decrescente. Agora, vamos aplicar os pesos LWMA a essas sequências.


 

Obtemos dois novos valores que mostram qual seria o valor do indicador se os preços formassem tendências precisamente ascendentes ou descendentes.


Agora podemos avaliar visualmente a força da tendência - quanto mais próximo o indicador estiver da borda inferior ou superior, mais forte será a tendência de alta ou baixa. Além disso, a diferença entre as linhas superior e inferior pode indicar indiretamente a volatilidade do mercado. Quanto mais distantes estiverem, maior será a volatilidade.

Índice de força relativa. O RSI foi desenvolvido por J. Welles Wilder e foi publicado na revista Commodities em junho de 1978. Para calcular esse indicador, são usadas duas variáveis auxiliares, U e D, para separar o movimento de preços para cima e para baixo.


Após o cálculo dos valores de U e D, é aplicado um suavização exponencial aos seus valores. Nesse caso, o valor do indicador é:


Este é um excelente indicador testado pelo tempo. Já é não-linear. A diferença de preço ou zero é inserida na entrada do indicador. Vamos tentar mudar uma não-linearidade por outra - em vez da diferença de preços, usaremos a probabilidade de sua ocorrência. Intuitivamente, sabemos que grandes desvios são menos comuns do que pequenos. Um pequeno teste mostra que nossa intuição não nos engana.

Em vez da diferença de preço, usaremos o seguinte valor:


Onde n indica quantas vezes essa diferença ocorreu na história, enquanto N é o número total de observações. Nesse caso, a fórmula do indicador será a seguinte:


O próprio indicador terá a seguinte aparência.


Ichimoku Kinko Hyo. Este indicador foi desenvolvido pelo analista japonês Goichi Hosoda. O Ichimoku combina várias abordagens para análise de mercado. Esse indicador usa a mediana dos intervalos para plotar as linhas Tenkan, Kijun e Senkou B. Vamos tentar substituí-las por um indicador mais estável - a mediana. Calcularemos a linha Senkou A usando uma mediana ponderada. Essas substituições não devem afetar a essência do indicador, tornando-o mais estável. É assim que ficam as linhas da versão modificada do indicador Ichimoku. Agora você pode colorir as nuvens como preferir.


Padrões de velas

Existe uma direção interessante na análise técnica, que se baseia no estudo dos castiçais japoneses e suas combinações. Muitos artigos são dedicados a isso. Por exemplo, "Análise de padrões de castiçais".

Seguiremos um caminho um pouco diferente e usaremos estatísticas ordinais para identificar padrões de castiçais. Vamos ver como nossas ações ficarão na prática.

Antes de tudo, precisamos definir a ordem dos preços que serão usados para análise. Em seguida, registraremos os valores de preço nos pontos que escolhemos. Depois disso, salvaremos os índices que mostram a ordem em que os preços foram registrados.

Preço
Valor
Índice
abrir[0]
1.03248
0
Low[1]
1.03133
1
High[1]
1.03204
2
Open[1]
1.03204
3
Low[2]
1.03191
4
High[2]
1.03256
5
Open[2]
1.03248
6
Low[3]
1.03217
7
High[3]
1.03296
8
Open[3]
1.03292
9

Agora precisamos classificar os valores de preço em ordem crescente.

1.03133
1
1.03191
4
1.03204
3
1.03204
2
1.03217
7
1.03248
6
1.03248
0
1.03256
5
1.03292
9
1.03296
8

Em seguida, precisamos resolver possíveis ambiguidades quando os preços coincidem. Para fazer isso, movemos o índice com um valor menor para mais perto do início da matriz. No nosso exemplo, os pares de índices (3, 2) e (6, 0) são trocados.

Depois disso, estamos interessados em apenas uma coisa - em que ordem os índices estão localizados. Para facilitar a análise, convertemos os índices em um único número - 8956073241. Este número será a característica final do padrão. É importante observar aqui que, se você usar mais de dez valores para análise, ao montar um único número, precisará usar a base apropriada do sistema numérico.

No código, o algoritmo pode parecer com isso.

   int array[10][2];//array for writing values and indices

   /*fill the array*/
   array[0][0]=(int)MathRound(iOpen(_Symbol,PERIOD_CURRENT,1)/_Point);
   array[0][1]=0;
   for(int j=0; j<3; j++)
     {
      array[3*j+1][0]=(int)MathRound(iLow(_Symbol,PERIOD_CURRENT,j)/_Point);
      array[3*j+1][1]=3*j+1;
      array[3*j+2][0]=(int)MathRound(iHigh(_Symbol,PERIOD_CURRENT,j)/_Point);
      array[3*j+2][1]=3*j+2;
      array[3*j+3][0]=(int)MathRound(iOpen(_Symbol,PERIOD_CURRENT,j)/_Point);
      array[3*j+3][1]=3*j+3;
     }

   ArraySort(array);

   /*eliminate possible ambiguities when prices match*/
   for(int j=1; j<10; j++)
      if(array[j-1][0]==array[j][0] && array[j-1][1]>array[j][1])
        {
         int v=array[j-1][1];
         array[j-1][1]=array[j][1];
         array[j][1]=v;
         j=1;
        }

   /*gather the number*/
   ulong number=0;
   for(int j=0; j<10; j++)
      number=number+array[j][1]*(ulong)MathRound(MathPow(10,j));//10 - number system base

Usando o script, podemos estimar o número de padrões e quantas vezes eles ocorreram no histórico.

A única desvantagem desse algoritmo é a sua insensibilidade à escala. Se esticarmos ou comprimirmos as velas verticalmente, o padrão não mudará. Por exemplo, essas três situações foram reconhecidas como idênticas.


Mas, essa deficiência não nos impedirá de criar um indicador com base neste algoritmo. Ao mesmo tempo, deixaremos o indicador ser um pouco preditivo. Para cada padrão, acumularemos as somas das diferenças entre a abertura máxima e a abertura mínima para a barra seguinte a esse padrão. Quando o padrão aparecer novamente, o indicador avaliará qual valor é maior e fará uma previsão. Como resultado, teremos a seguinte imagem.


Ao longo e através

O algoritmo que obtivemos acima também pode ser usado na criação de sistemas de negociação. Vamos ver dois exemplos simples.

Ao longo. Na maioria das vezes, os sinais do sistema de negociação são baseados nos valores atuais dos indicadores. O que aconteceria se usássemos um certo número de seus valores anteriores para gerar um sinal de abertura de posição? Por exemplo, podemos usar os últimos dez valores do indicador e aplicar o algoritmo de construção de padrões a eles. Em seguida, o padrão resultante indicará a mudança nos valores do indicador ao longo do tempo. Como exemplo, utilizei os últimos dez preços de abertura para encontrar o padrão. Além disso, aumentei o horizonte de previsão para cinco barras à frente. Dessa forma, a negociação deste Expert Advisor será realizada.


Através. O algoritmo de cálculo de padrões também pode ser usado para um grupo de indicadores. Nesse caso, o padrão indicará a ordem em que os indicadores estão localizados uns em relação aos outros. Essa ordem determinará os sinais do sistema de negociação. Como exemplo, peguei dez médias móveis com períodos de 2*n + 1 (n = 0…9). É assim que a negociação fica neste caso.


Em ambos os casos, é importante controlar o número de padrões que o algoritmo reconhece. O número não deve ser muito pequeno, caso contrário, o sistema de negociação pode não distinguir situações diferentes umas das outras. Além disso, o número de padrões não pode ser muito grande, caso contrário, muitas situações de negociação serão reconhecidas como únicas e o sistema de negociação simplesmente não responderá a elas. No segundo caso, é necessário usar indicadores que diferem o máximo possível uns dos outros. Por exemplo, utilizar apenas médias móveis simples, mesmo que com pequenas diferenças, seria um erro claro do desenvolvedor. Mas ainda o elogiamos por seus esforços.


Considerações finais

Métodos de processamento de informações de mercado não-lineares podem ser aplicados tanto em indicadores quanto em estratégias de negociação. Esses métodos já foram utilizados anteriormente e continuam sendo uma opção valiosa na análise de mercado. Indicadores não lineares podem fornecer uma nova perspectiva sobre o movimento dos preços, enquanto a adoção de abordagens não lineares em sistemas de negociação pode resultar em sinais qualitativamente diferentes.

Programas usados no artigo.

Nome Tipo  Descrição breve
Base LogIndicator
indicador Transforma os preços por meio da função logarítmica. InpCoeficiente - permite inserir pesos personalizados. Restrição - a soma dos pesos não deve ser zero.
MMMM
indicador Exibe medidas de tendência central. iMode - escolha da tendência. iPeríodo - período do indicador (não inferior a 2).
Bayesian Moving Average indicador Implementa a suavização bayesiana. iMode - seleção de uma tendência para suavização.iPeriod - período do indicador. Parameter - parâmetro de suavização.
Median Median indicador  Exibe a mediana das medianas, sendo uma função não linear da janela triangular.iPeriod - período do indicador.
Pseudomedian
indicador  Exibe a pseudo-mediana, podendo ser um substituto para a mediana e o meio do intervalo em alguns casos.iPeriod - período do indicador.
Strength Trend
indicador  Exibe a força do componente de tendência na amostra de preços. iPeriod - período do indicador.
nRSI  indicador  Baseado em probabilidades de aumento de preço. iMode - seleção do método de suavização.iPeriod - período do indicador.
nIchimoku Kinko Hyo
indicador Exemplo de modernização do indicador clássico Ichimoku. PeriodS,  PeriodM,  PeriodL - períodos curtos, médios e longos do indicador.
Script Pattern  script Coleta estatísticas sobre padrões de preços e salva os resultados em um arquivo na pasta Arquivos.
Pattern  indicador  Calcula padrões e faz uma previsão do movimento predominante do preço na barra de abertura. Least - o número mínimo de observações de padrão no histórico. A previsão é exibida apenas para padrões observados pelo menos Least vezes.
EA Along Across
EA Usa padrões de preços para abrir posições comerciais. Mode - permite selecionar a direção do padrão. Least - define o número mínimo de observações de padrão no histórico. Percent - ajusta a intensidade da abertura de posições. Influencia o número de posições abertas. O valor deste parâmetro deve ser selecionado dentro do intervalo de 51 - 99.

 

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/11782

Arquivos anexados |
MMMM.mq5 (3.48 KB)
Median_Median.mq5 (2.44 KB)
Pseudomedian.mq5 (2.36 KB)
Strength_Trend.mq5 (3.57 KB)
nRSI.mq5 (3.51 KB)
Script_Pattern.mq5 (4.61 KB)
Pattern.mq5 (4.54 KB)
MMMM.mq4 (4.44 KB)
Pseudomedian.mq4 (3.33 KB)
Strength_Trend.mq4 (4.53 KB)
nRSI.mq4 (4.64 KB)
Script_Pattern.mq4 (2.32 KB)
Pattern.mq4 (4.58 KB)
Matrix Utils, estendendo as matrizes e a funcionalidade da biblioteca padrão de vetores Matrix Utils, estendendo as matrizes e a funcionalidade da biblioteca padrão de vetores
As matrizes servem como base para os algoritmos de aprendizado de máquina e computação em geral devido à sua capacidade de lidar efetivamente com grandes operações matemáticas. A biblioteca padrão tem tudo o que é necessário, mas vamos ver como podemos estendê-la introduzindo várias funções no arquivo utils, ainda não disponível na biblioteca
Teoria das Categorias em MQL5 (Parte 1) Teoria das Categorias em MQL5 (Parte 1)
A Teoria das Categorias é um ramo diverso da Matemática e em expansão, sendo uma área relativamente recente na comunidade MQL. Esta série de artigos visa introduzir e examinar alguns de seus conceitos com o objetivo geral de estabelecer uma biblioteca aberta que atraia comentários e discussões enquanto esperamos promover o uso deste campo notável no desenvolvimento da estratégia dos traders.
Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 02): Primeiros experimentos (II) Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 02): Primeiros experimentos (II)
Vamos experimentar uma outra abordagem, desta vez tentando alcançar o objetivo de 1 minuto. Mas isto não é uma tarefa tão simples, como muitos pensam.
Desenvolvendo um sistema de Replay — Simulação de mercado (Parte 01): Primeiros experimentos (I) Desenvolvendo um sistema de Replay — Simulação de mercado (Parte 01): Primeiros experimentos (I)
Que tal criar um sistema para estudar o mercado quando ele está fechado, ou mesmo simular situações de mercado. Aqui vamos iniciar uma nova sequencia de artigos, a fim de tratar deste tema.