Indicadores: FIR_filter

 

FIR_filter:

O indicador mostra o cálculo de uma média móvel usando um filtro digital. Neste exemplo é utilizado a Janela Hann.

FIR_filter

Autor: Vladimir

 
E por que o número do PI é tão preciso?
 

DC2008:
А зачем такая точность числа ПИ? 

Não pensei muito sobre isso. É fácil encontrar qualquer constante de alta precisão no Google. Suponho que, se o metatradair não precisar de uma precisão tão alta, ele determinará automaticamente quantas casas decimais devem ser descartadas.
 

Tem certeza de que a fórmula está correta? Por favor, compare-a com estes http://dspsystem.narod.ru/add/win/win.html

Скользящая средняя на основе цифрового фильтра. В данном примере используется Hann Window. Для изменения коэффициентов фильтра, редактируйте следующие строки в OnInit():

Com relação à terminologia, desculpe, você não alterou os coeficientes de filtro, mas os coeficientes de janela. São coisas diferentes. Em seu exemplo, o filtro digital (DF) é uma média móvel (MA), e ele (MA) pode ser usado com qualquer janela (uma pequena parte delas é fornecida no link acima). Cada janela, e há muitas, tem uma finalidade específica. Normalmente, ela melhora alguma propriedade do DF, mas você precisa pagar por isso, nada é dado de graça, distorções são introduzidas no espectro de saída.

Quanto à precisão do Pi, a precisão nunca é desnecessária. Sempre teremos tempo para carregar o resultado. Aqui está uma maneira simples de configurá-lo https://www.mql5.com/pt/code/8309.

É uma solução muito boa.

 pi = 4*MathArctan(1);
 
Prival:

Quanto à precisão do pi, a precisão nunca é desnecessária. Sempre podemos carregar o resultado. Aqui está uma maneira simples de defini-lo https://www.mql5.com/pt/code/8309.

Você não deve definir pi como uma variável. Deixe-o ser uma constante.

Mas você também não precisa de caracteres extras. Para double, sabemos o número de caracteres que podem ser armazenados.

 
lea:

Você não deve definir pi como uma variável. É melhor deixá-lo como uma constante.

Mas você também não precisa de caracteres extras. Para double, sabemos o número de caracteres que podem ser armazenados.

Você está errado. Perdi duas semanas do meu tempo simplesmente porque o pi não foi definido com a precisão máxima. Verifiquei a construção do espectro obtida no matkad com aquela feita usando a biblioteca FFT https://www.mql5.com/pt/code/9696.
 
Prival:

Tem certeza de que a fórmula está correta? Por favor, compare-a com estes http://dspsystem.narod.ru/add/win/win.html

Com relação à terminologia, desculpe, você não alterou os coeficientes de filtro, mas os coeficientes de janela. São coisas diferentes. Em seu exemplo, o filtro digital (DF) é uma média móvel (MA), e ele (MA) pode ser usado com qualquer janela (uma pequena parte delas é fornecida no link acima). Cada janela, e há muitas, tem uma finalidade específica. Normalmente, ela melhora alguma propriedade do DF, mas é preciso pagar por isso, pois nada é dado de graça e são introduzidas distorções no espectro de saída.

Há diferentes fórmulas para a janela de Hahn e outras janelas semelhantes. Todas elas são idênticas, se você pensar bem. A fórmula em seu link tem uma grande desvantagem: valores de janela zero em n=0 e n=N-1. Como não faz sentido multiplicar os preços por zeros, verifica-se que a janela só existe para preços com n=1...n=N-2. Agora, vamos denotar o número de preços para os quais a janela não é igual a zero por meio de Per, como eu fiz, então temos N-2=Per ou N=Per+2. Substitua esse N na fórmula de Hahn em seu link e você obterá a mesma fórmula que a minha.

Sobre o nome do indicador, o nome está correto. Por definição, o que construí é um filtro digital com resposta de impulso finito

A equação de diferença que define a saída de um filtro FIR em termos de sua entrada é

y[n]=b_0 x[n] + b_1 x[n-1] + ... + b_N x[n-N]

onde:

  • x[n] é o sinal de entrada,
  • y[n] é o sinal de saída,
  • bi são os coeficientes do filtro e
  • N é a ordem do filtro

Veja aqui http://en.wikipedia.org/wiki/Finite_impulse_response

Trabalho com eletrônica há 21 anos. Mas sempre agradeço pelos comentários. É bom conversar com pessoas bem informadas.

 
gpwr:

Existem diferentes fórmulas para a janela Hahn e outras janelas semelhantes. Se você pensar bem, todas elas são idênticas. A fórmula em seu link tem uma grande desvantagem: valores zero da janela em n=0 e n=N-1. Como não faz sentido multiplicar os preços por zeros, verifica-se que a janela só existe para preços com n=1...n=N-2. Agora vamos denotar o número de preços para os quais a janela não é igual a zero por meio de Per, como eu fiz, então temos N-2=Per ou N=Per+2. Substitua esse N na fórmula de Hahn em seu link e você obterá a mesma fórmula que a minha.

....

Obrigado pelo link da wikipedia. Tentarei mostrar com fórmulas, o que você fez.

Para o seu caso, seria mais preciso escrever essa fórmula da seguinte forma

y[n]=a_0*b_0* x[n] +a_1* b_1* x[n-1] + ... + a_N*b_N* x[n-N]

x[n] é o sinal de entrada,

y[n] é o sinal de saída,

bi são os coeficientes do filtro e

а[i] são os coeficientes da janela ,

N é a ordem do filtro

Ou seja, você convolveu os coeficientes do DF(b) e os coeficientes da janela(a).

Sim, você tem razão quando diz que há fórmulas diferentes para escrever funções de janela. Mas essa diferença é causada pelo fato de em qual domínio a convolução é realizada, no domínio da frequência ou do tempo. E essas fórmulas são rigidamente vinculadas pela transformada de Fourier http://ru.wikipedia.org/wiki/Оконное_преобразование_Фурье.

Embora as fórmulas sejam semelhantes, você nunca deve confundir em qual domínio a convolução é realizada, caso contrário, você terá um abracodabra.

Agora sobre n. Na fórmula, é muito importante determinar se ela começa em 0 ou 1 ("...a janela só existe para preços com n=1.....n=N), pois se você mudar em 1, tudo mudará e N-1 se tornará N, não N-2

A fórmula exata da janela de Hahn é a seguinte

p(t) = 0,5[1+cos(pi*t/tac)].

Para aqueles que quiserem se aprofundar um pouco mais nesse tópico, anexei um arquivo com uma palestra.

Para os traders

Tentarei explicar do que estamos falando usando um exemplo que todos conhecem.

https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma

Todo mundo sabe:

(a) Média Móvel Simples (SMA).

Sua janela é retangular, ou seja, cada valor de preço tem o mesmo peso a[i]= 1, independentemente da profundidade do histórico.

b) Média móvel ponderada linear (LWMA)

Em uma média móvel ponderada, os dados mais recentes recebem mais peso e os dados mais antigos recebem menos peso.

Ou seja, os coeficientes da janela a[1]=1, a[2]=1/2,a[3]=1/3 .... a[n]=1/n

SO. gpwr Também é bom se comunicar, um engenheiro de rádio sempre encontrará uma linguagem comum com um engenheiro eletrônico, especialmente se ambos não forem novos no ramo e falarem uma linguagem universal - a linguagem da matemática.

Arquivos anexados:
dsp.rar  1811 kb
 

Há apenas 3 indicadores: preço, preço de fechamento e média móvel simples.