uma estratégia comercial baseada na Teoria da Onda de Elliott - página 287

 
para olyakish


Boa noite a todos.
Você poderia, por favor, dizer às crianças sobre este algoritmo?

Agradecemos antecipadamente


Estou lhes dizendo.

Aplicamos um filtro de múltiplas medianas à curva de preços. O que é isso? Pegamos uma janela de tamanho ímpar (>=3) e a percorremos através de todos os valores da curva original. Em cada ponto atual, ordenar por valor os pontos incluídos na janela. Ao ponto atual é atribuído um valor médio (no sentido de que ele está situado no meio da matriz) da matriz ordenada. Mais uma vez, aplicamos o mesmo filtro ao resultado obtido. Repetimos isso muitas vezes (geralmente 20-30 vezes é suficiente).
Para obter os níveis de resistência, invertemos a curva de preços de cabeça para baixo e fazemos o mesmo. Em seguida, viramos o resultado obtido para trás.
Isso é tudo!
...



Uma pergunta rápida.
Suponha que tenhamos um histórico de 1000 relatórios (barras)
janela 3
não calculamos resultados para 1000.999 janelas e fazemos o primeiro cálculo quando chegamos ao 998º relatório (temos dados de 998.999 e 1000 relatórios)
nosso primeiro passe nos dá 998 resultados
para o segundo passe, chegamos ao relatório 996 utilizando a matriz formada durante a execução anterior
na terceira corrida, obtemos 994 ...
e assim por diante ...
Ou seja, se corremos 30 vezes, temos uma matriz de 960 valores

Talvez eu não o tenha entendido corretamente?
 
para olyakish

<br/ translate="no"> Uma pergunta rápida
Suponha que pegamos um histórico de 1000 relatórios (barras)
janela 3
acontece que para 1000.999 não contamos porque é menor que a janela e o primeiro cálculo que fazemos só quando chegamos ao relatório 998 (temos dados de 998.999 e 1000 relatórios)
recebemos o primeiro passe com 998 resultados
o segundo passe que chegamos ao relatório 996 já gerado pelo run array anterior
o terceiro passe que chegamos ao 994 ...
e assim por diante ...
ou seja, se você correu 30 vezes, você tem um conjunto de 960 valores

Talvez eu o tenha entendido mal?



Não exatamente. Tecnicamente, isso é feito de forma um pouco diferente. Antes de aplicar um filtro, você expande o conjunto original pela metade da largura da janela do filtro em ambas as direções. Você preenche espaços vazios na nova matriz com uma constante, ou seja, o último valor da borda da matriz original, ou simetricamente com os valores extremos da matriz original. Neste caso, você receberá novamente 1000 pontos após aplicar o filtro à matriz original de 1000 pontos. Na próxima vez em que você filtrar, tudo se repete.
É claro que, neste caso, podem ocorrer distorções nas bordas. Mas isto não pode ser evitado porque qualquer filtro de janela (e qualquer filtro) tem um atraso de fase, inclusive mediano. Em geral - é assim que a natureza funciona.
Podemos fazê-lo da maneira que você descreve, mas depois não chegaremos à borda da matriz original; ou podemos usar uma extensão, mas depois não chegaremos à borda do resultado.
Esta é a má notícia.
A boa notícia é que o filtro mediano não é tão sensível aos efeitos de borda quanto os filtros lineares. Os poucos exemplos que tive tempo de analisar mostram que as distorções de borda são pequenas ou, em alguns casos, completamente ausentes.

PS. Sim... Uma idéia me veio agora mesmo à mente. O filtro poderia ser aplicado recursivamente. Não sei o que faria, ainda não tentei, mas contaria mais rápido.
 
Andre69, eu implementei o algoritmo de filtro mediano que você sugeriu. Acontece que, após a terceira corrida, a forma da curva alisada não muda. Testamos este efeito em uma ampla gama de tamanhos de janelas (até 10000 amostras).
No que diz respeito às aplicações em comércio, é correto usar "janela esquerda" quando o ponto atual é atribuído um valor do centro da janela localizada COMPLETO à esquerda do valor atual. É claro, isto introduz um atraso de fase (lag), mas é assim no mundo:-)
 
ao Neutron

Andre69, eu implementei o algoritmo de filtro mediano que você sugeriu. Acontece que após a terceira corrida, a forma da curva suavizada não muda. Verifiquei este efeito em uma ampla gama de tamanhos de janelas (até 10000 amostras). <br/ translate="no"> Quanto às aplicações em comércio, é correto usar a "janela esquerda" quando o ponto atual é atribuído um valor do centro da janela que é COMPLETAMENTE à esquerda do valor atual. É claro, isto introduz um atraso de fase (lag), mas é assim no mundo:-)


Sim... Isso não faz sentido. Começou a verificação. Finalmente, analisei meu código, que eu utilizo para filtragem mediana. Escrevi-o há N anos (N>5) para um pequeno programa de saída gráfica. Agora eu comecei a usar este programa como um polígono para todo tipo de pesquisa. É útil, e eu ainda nem investiguei as partes antigas do código. Está tudo funcionando e bem... Agora estou olhando para ele... e de repente descobri que a função que eu pensava ser a filtragem mediana - não faz exatamente isso! Sinto muito pela desinformação involuntária! Curvo minha cabeça culpada.
Por que e por que eu fiz isso na época - Deus me livre de não me lembrar.
A mediana clássica é quando é tomado o valor central de uma matriz ordenada. Neste caso específico, tomei a média entre o valor central e o valor anterior a ele. Talvez eu precisasse dele há muito tempo por alguma razão. Eu também tenho um filtro não linear, embora, é claro, não fosse a mediana no sentido estrito. Quando eu voltei à versão clássica, foi como você descreveu. Na minha variante a curva muda toda vez que o filtro é aplicado e eventualmente tende a ser reta (após várias centenas de filtragens). Quanto maior a janela do filtro, mais rápido ele acontece.
Para evitar mais ambigüidades, estou fornecendo um pedaço de código em C.
É simples, espero que qualquer um consiga descobrir.
//---------------------------------------------------------------------------
void __fastcall TPlotForm2D_WL::FilterCurveMedian(int Flen)
{
 //количество точек кривой
 int NN=Chart1->Series[IndexUpDown->Position-1]->Count();
 
 //объявляем временные массивы и выделяем память под них
 double* TempArray=new double[NN+(Flen/2)*2];
 double* ResultArray= new double[NN];
 double* XArray=new double[NN];
 double* MedArray=new double[Flen];

 //заполняем массив значений Х точками текущей кривой
 for(int i=0;i<NN;++i)
  XArray[i]=Chart1->Series[IndexUpDown->Position-1]->
                           XValues->Value[i];

 double Start=2*Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[0];
 double End=2*Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[NN-1];

 int k=0;

 //заполняем временный массив значениями Y точками текущей кривой
 for(int i=Flen/2;i>0;--i) //симметричное расширение влево
  TempArray[k++]=Start-Chart1->Series[IndexUpDown->Position-1]->
                                      YValues->Value[i];
 for(int i=0;i<NN;++i)
  TempArray[k++]=Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[i];
 for(int i=NN-1;i>=NN-Flen/2;--i)//симметричное расширение вправо
  TempArray[k++]=End-Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[i];

 //собственно фильтрация
 for(int i=Flen/2;i<NN+Flen/2;++i)
  {
   for(int j=-Flen/2;j<=Flen/2;++j)
    MedArray[j+Flen/2]=TempArray[i+j];
   ::sort(MedArray,MedArray+Flen);
   //Это то, что я написал когда-то. Уже не помню, почему так.
   //Но это работает!!!!!!!!!!
   ResultArray[i-Flen/2]=(MedArray[Flen/2]+MedArray[Flen/2-1])/2;
   //А эта строчка - классический медианный фильтр.
   //И это не работает, так как хотелось бы. ???? Sorry
   //ResultArray[i-Flen/2]=MedArray[Flen/2];
  }


 //дальше вывод и удаление временных массивов
 AddFastLine();

 for(int i=0;i<NN;++i)
  Chart1->Series[Chart1->SeriesCount()-1]->
          AddXY(XArray[i],ResultArray[i],"",clBlue);

 SwitchOnCurve(PlotForm2D_WL->Chart1->SeriesCount()-1);

 delete [] TempArray;
 delete [] ResultArray;
 delete [] XArray;
 delete [] MedArray;

 if(PlotForm2D_WL->Visible)
  PlotForm2D_WL->Visible = false;
 PlotForm2D_WL->Show();

}
//---------------------------------------------------------------------------



Sobre a "janela esquerda" - tudo verdade, eu concordo. Mas, por enquanto, acho que são os detalhes.

Mais uma vez, minhas desculpas.

 
para Northwind
...Mas se você estiver seriamente interessado em obter este trabalho de pesquisa, envie-nos um e-mail (info@disserr.ru) e nós entregaremos o trabalho solicitado do arquivo, se possível...


Talvez haja alguma notícia sobre este trabalho?
 
para Северный Ветер
...Mas se você estiver seriamente interessado em obter este trabalho de pesquisa, escreva-nos (info@disserr.ru) e nós entregaremos o trabalho solicitado do arquivo, se possível...


Houve alguma notícia sobre este trabalho?

Eu não tomei nenhuma outra medida após a publicação de sua resposta.
Eu apenas mostrei uma maneira de tentar encontrar o material da tese.
Advirto-o que o material pode ter que ser pago.
 
2 Andre69

Fazendo algumas batalhas posicionais pesadas com o MatLab.
Para começar, decidi olhar apenas para a decomposição wavelet de uma série de preços e de uma série de valores indicadores. Para a DWT eu não encontrei nenhuma surpresa, tudo é mais ou menos compreensível.
Para a CWT, a decomposição do indicador também era bastante clara. Entretanto, a série de preços produziu o seguinte quadro:


A estrutura desta foto em geral difere significativamente, por exemplo, da foto no post de Andre69 em 28.06.07 20:43 na página. 141. Gostaria de entender o porquê.
Por outro lado, ela tem uma estrutura muito regular. Por quê?
Esta análise foi realizada para uma série de 1024 amostras.
Configurações da escala: Min=1, Step=1, Max=512. Onda DMeyer

PS A propósito, o posto acima foi o último de uma série interminável sobre wavelets. :-)
Eu gostaria de saber sobre a continuação. Deve ?
 
para Yurixx
A estrutura desta foto em geral é bem diferente, por exemplo, da foto no post Andre69 28.06.07 20:43 na página 141. 141. Gostaria de entender o porquê.
Por outro lado, ela tem uma estrutura muito regular. Por que ?


Yura, uma estrutura tão regular é inerente à natureza dos efeitos de borda que inevitavelmente ocorrem nas extremidades da BP em estudo. É impossível evitar tais efeitos. Mas se for permitido pela condição do problema a ser resolvido, você pode deixar alguns termos da série de cada final do VR (o número de termos igual à largura da janela de amostra) que participarão dos cálculos, mas não serão utilizados na visualização. Após este procedimento, o quadro será adequado e isotrópico.
 
<br / translate="no"> Mas se a condição do problema a ser resolvido permitir, você pode deixar alguns membros de fila em cada extremidade da BP, que participarão dos cálculos, mas não serão utilizados na visualização. Após este procedimento, o quadro será adequado e isotrópico.


Obrigado, Sergey, pelo esclarecimento. Tudo o que resta é descobrir como fazer o que você escreve sobre.
Parsing Wavelet Toolbox Eu não encontrei tais características lá. Talvez eu tenha negligenciado algo ou isso só pode ser feito manualmente?
 
Este efeito pode ser minimizado pelo preenchimento da condição: n/N<<1, onde n é o tamanho da janela (no seu caso, como eu entendo, n = Max), N é o número de membros da BP (1024). Assumindo 0,01<<<1, temos Mach<10 para as séries disponíveis.
Neste caso, os resultados apresentados parecerão corretos.