Efeito de borda no caminho para o GRAAL - página 2

 
E que wavelets foram usadas, eu usei wavelets Matlab. Os efeitos de borda parecem ser menos visíveis lá, mas é claro que eles estão lá (eles não podem evitar) Eu também tentei decomposições (aproximações) e uma rede neural. Sobre os dados nos quais a rede aprendeu muito bem. e aprende malha parece fácil, mas sobre os novos - inferno. Cheguei à conclusão de que as ondas são uma coisa boa, especialmente se o espaço de defasagem for aplicado. Mas até agora ainda não o apliquei na prática.
 
vladevgeniy писал(а) >>
E que tipo de wavelets você usou, eu usei os Matlab. Parece que os efeitos de borda são menos visíveis, mas é claro que eles estão lá (eles não podem ajudar) Eu também tentei aplicar decomposições (aproximações) e uma rede neural. Sobre os dados nos quais a rede aprendeu muito bem. e aprende malha parece fácil, mas sobre os novos - inferno. Cheguei à conclusão de que as ondas são uma coisa boa, especialmente se o espaço de defasagem for aplicado. Mas até agora ainda não o apliquei na prática.

Ondas Dobeshi usadas. Dizem que as ondas Meyer são menos propensas a efeitos de borda, mas eu ainda não experimentei.

A questão é que custa muito tempo para programar cada método.

O que são as ondas Matlab? Eu nunca trabalhei em Matlab.

Você quer dizer polinômios? Até que ponto funcionou bem?

 
Desperado писал(а) >>

O cruzamento de níveis não dá um resultado muito atraente. Isto também me ocorreu.

No indicador, a distribuição de altos e baixos segue uma lei gaussiana, apenas com diferentes MO.

Os altos têm aproximadamente 0,3, os baixos -0,3.

Quanto mais alta a barra, mais confiáveis são os sinais e menos são.

E não é interessante ganhar 200 pontos por mês :)

Sim, infelizmente ou distorções ou desfasamentos.

Não gosto da distribuição gaussiana normal. Eu prefiro Lognormal. Mas isso, infelizmente, não agrada a todos. Cheguei à conclusão de que é razoável fazer uma aproximação, encaixando (como escrevi acima). E se houver um resultado, ou algo interessante, então eu ajustarei a função de distribuição. Em geral, os desvios não são grandes, portanto, pode-se confiar nele.

 
Desperado, matlab qualquer caixa de ferramentas matlab em wavelets. Você pode obter a decomposição e os detalhes e a aproximação necessários. A função M é escrita, então uma dll transitiva é usada e conectada à métrica através da dll. Acho que também há uma função Mayer, ou talvez não, eu não me lembro. Mas você pode economizar tempo na programação, embora eu tenha tido muitos problemas para traduzir matrizes de Matlab para variáveis regulares e de volta. Eu tentei reescrever a renomada biblioteca escrita em Delphi em C++ (há muitos deles na Rede). Foi onde foram observadas as mais fortes distorções de borda. Mas Matlab não tem nada disso, apesar de curvar também (gosta de desenhar ganchos nas bordas quando tem tendência). Tente simplesmente construir o wavelet necessário em Matlab, e se você gostar do resultado, você pode conectá-lo ao Mt através de uma dll.
 
vladevgeniy писал(а) >>
Desperado, qualquer matlab você pode encontrar na caixa de ferramentas Matlab em wavelets. Você pode obter a decomposição necessária, os detalhes e a aproximação. A função M é escrita, depois uma dll de transição, e conectada via dll à MT. Acho que também há uma função Mayer, ou talvez não, eu não me lembro. Mas você pode economizar tempo na programação, embora eu tenha tido muitos problemas para traduzir matrizes de Matlab para variáveis regulares e de volta. Eu tentei reescrever a renomada biblioteca escrita em Delphi em C++ (há muitos deles na Rede). Foi onde foram observadas as mais fortes distorções de borda. Mas Matlab não tem nada disso, apesar de curvar também (gosta de desenhar ganchos nas bordas quando tem tendência). Tente simplesmente construir o wavelet necessário em Matlab, e se você gostar do resultado, você pode conectá-lo ao Mt através de uma dll.

Muito obrigado. Na verdade, esse é o delfo que eu usei :) Somente havia um módulo lá, eu o converti em uma biblioteca.

Vou tentar encontrar primeiro o Matlab.

 
infinum13 писал(а) >>

Não gosto da distribuição gaussiana normal. Lognormal é melhor. Mas isso, infelizmente, também não agrada a todos. Cheguei à conclusão de que é razoável fazer uma aproximação, encaixando (como escrevi acima). E se houver um resultado, ou algo interessante, então eu ajustarei a função de distribuição. Em geral, os desvios não são grandes, portanto, também posso confiar neste.

Eu tentei seu algoritmo. Como esperado em princípio, ele remove o ruído fino. Funciona bem com períodos pequenos e grandes TFs.

Vou ver o que posso fazer com ele.

Seu resultado é mostrado com a linha vermelha. E eu preciso de algo como uma linha verde.

 

Esse é o tipo de linha verde que se obtém em Matlab, com grandes níveis de decomposição. Tudo isso é feito com uma linha de código. Há um modo especial de denoising wavelet, onde você seleciona o tipo de wavelet, e há mais alguns parâmetros. A tarefa principal é fazer uma dll transiente. Esse módulo Delph tem efeitos de borda muito fortes, sim. Não sei como, mas em Matlab eles são muito reduzidos - às vezes até parece que não há nenhum.

O último Matlab é quase 4 gigs em uma torrente. )))) É melhor usá-lo. Verificado e dll compila bem e atraca bem.

 

A partir do artigo no anexo:

Nossa aplicação - predição - aponta para a importância crítica para nós dos valores finais. Nossa série temporal é finita, e os valores n, n-1, n-2, ..., são do maior interesse para nós. Qualquer função de onda simétrica é problemática para o manuseio de tal limite (ou borda). Também não podemos usar coeficientes wavelet se esses coeficientes tiverem sido calculados a partir de valores de dados "futuros". Um asymmetric filter pode nos permitir contornar este problema. Tal função wavelet pode lidar corretamente com a borda de importância para nós. Os primeiros valores de nossa série temporal, que também constituem um limite, podem ser tratados arbitrariamente como resultado, mas isto não tem nenhuma conseqüência prática.

Pelo que entendi, a função não simétrica baseia-se apenas em valores anteriores da série temporal.

Simétrico - sobre valores passados e futuros. Por exemplo, aqui a partir do algoritmo CDF 9/7:

// Predição 1

a=-1.586134342;

para (i=1; i<n-2; i+=2) {

x[n-1]+=2*a*x[n-2];

}

x[i]+=a*(x[i-1]+x[i+1]);

A borda afeta a última linha criada.

De acordo com o artigo, a propósito, foi escrito por um indyuke:

Aqui cada coeficiente wavelet é calculado apenas sobre os valores anteriores da linha.

É possível alinhar, é claro:

A região desconhecida tem funções simétricas e está cheia de algo como x[n-1]+=2*a*x[n-2].

É suposto ser redesenhado.

Se você quiser brincar com ele, clique aqui.

Arquivos anexados:
 
vladevgeniy писал(а) >>

Esse é o tipo de linha verde que se obtém em Matlab, com grandes níveis de decomposição. Tudo isso é feito com uma linha de código. Há um modo especial de denoising wavelet, onde você seleciona o tipo de wavelet, e há mais alguns parâmetros. A tarefa principal é fazer uma dll transiente. Esse módulo Delph tem efeitos de borda muito fortes, sim. Não sei como, mas em Matlab eles são muito reduzidos - às vezes até parece que não há nenhum.

O último Matlab é quase 4 gigs em uma torrente. )))) É melhor usá-lo. Eu verifiquei e a dll compila bem e atraca bem.

Desculpe pela questão do estilo RTFM, mas poderia descrever em poucas palavras,

como criar um dll no MathLab e chamá-lo a partir do MT4?

Se possível, com um exemplo.

 

Oh, teria sido fácil há alguns meses atrás. Eu esqueci tudo isso. Mas é padrão em Matlab, há uma descrição no manual. Em geral, você encontrará uma ajuda de muito boa qualidade em Matlab. Após a compilação, um arquivo .dll e lib são criados junto com outros dois arquivos menos importantes. No arquivo m você terá uma função em linguagem matlab e esta função é chamada a partir da dll intermediária. Você só precisa chamar a inicialização lá primeiro, bem, a pessoa que a tem tem. No entanto, há um "mas". Precisamos sobrecarregar as variáveis de dupla cadeia, etc. em mxArray e depois chamar a função em Matlab e depois voltar para C.

Aqui está um exemplo de trabalho com a mxArray em C

mxArray *inm = mxCreateDoubleMatrix(1,size,mxREAL); a variável mxArray com tamanho é criada para a matriz de entrada
memcpy(mxGetPr(inm), &in[0], size*sizeof(double)); ela é preenchida com variáveis da matriz de entrada

então a função matlab é chamada de

então a matriz de saída do mxArray é convertida em um doble

//
converter mxArray para o dobro ---------------------- memcppy(out, mxGetPr(outm), size*sizeof(double))


Trata-se neste momento, é difícil de lembrar exatamente.

Inclusões para trabalhar com o mxArray

#incluir "mex.h"

estão localizados na pasta do matlab