une stratégie commerciale basée sur la théorie des vagues d'Elliott - page 287

 
à olyakish


Bonsoir à tous.
Pourriez-vous indiquer les enfants de cet algorithme ?

Merci d'avance


Je vous le dis.

Nous appliquons un filtre médian multiple à la courbe des prix. Qu'est-ce que c'est ? Nous prenons une fenêtre de taille impaire (>=3) et la faisons passer par toutes les valeurs de la courbe originale. A chaque point courant, trier par valeur les points inclus dans la fenêtre. Le point actuel se voit attribuer une valeur moyenne (dans le sens où il est situé au milieu du tableau) à partir du tableau trié. Une fois encore, nous appliquons le même filtre au résultat obtenu. Nous le répétons plusieurs fois (20 à 30 fois suffisent généralement).
Pour obtenir les niveaux de résistance, nous inversons la courbe des prix et faisons de même. Ensuite, nous retournons le résultat obtenu à l'envers.
C'est tout !
...



Une question rapide.
Supposons que nous ayons un historique de 1000 rapports (barres)
fenêtre 3
nous ne calculons pas les résultats pour 1000,999 fenêtres et effectuons le premier calcul lorsque nous arrivons au 998ème rapport (nous avons les données de 998,999 et 1000 rapports)
notre première passe nous donne 998 résultats
pour le deuxième passage, nous arrivons à 996 rapports en utilisant le tableau formé lors du passage précédent
au troisième passage, nous obtenons 994 ...
et ainsi de suite ...
C'est-à-dire que si nous l'exécutons 30 fois, nous obtenons un tableau de 960 valeurs.

Peut-être n'ai-je pas bien compris ?
 
à olyakish

<br/ translate="no">Une petite question
Supposons que nous prenions un historique de 1000 rapports (barres)
fenêtre 3
il s'avère que pour 1000,999 nous ne comptons pas car c'est plus petit que la fenêtre et le premier calcul que nous faisons seulement quand nous arrivons à 998 rapport (nous avons des données de 998,999 et 1000 rapports)
nous obtenons le premier passage avec 998 résultats
le deuxième passage nous arrivons à 996 rapport déjà formé par le passage précédent du tableau
le troisième passage nous arrivons à 994....
et ainsi de suite ...
c'est-à-dire que si vous exécutez 30 fois, vous obtenez un tableau de 960 valeurs

J'ai peut-être mal compris ?



Pas exactement. Techniquement, c'est fait un peu différemment. Avant d'appliquer un filtre, vous étendez le tableau d'origine de la moitié de la largeur de la fenêtre du filtre dans les deux sens. Vous remplissez les espaces vides du nouveau tableau soit avec une constante, c'est-à-dire la dernière valeur du bord du tableau original, soit symétriquement avec les valeurs extrêmes du tableau original. Dans ce cas, vous obtiendrez à nouveau 1000 points après avoir appliqué le filtre au tableau original de 1000 points. La prochaine fois que vous filtrez, tout se répète.
Bien entendu, dans ce cas, des distorsions peuvent apparaître sur les bords. Mais cela ne peut être évité car tout filtre à fenêtre (et tout filtre tout court) a un retard de phase, y compris le filtre médian. En général, c'est ainsi que fonctionne la nature.
Nous pouvons procéder de la manière que vous décrivez, mais alors nous n'arriverons pas au bord du tableau original ; ou nous pouvons utiliser une extension, mais alors nous n'arriverons pas au bord du résultat.
Voici les mauvaises nouvelles.
La bonne nouvelle est que le filtre médian n'est pas aussi sensible aux effets de bord que les filtres linéaires. Les quelques exemples que j'ai eu le temps d'examiner montrent que les distorsions des bords sont soit faibles soit, dans certains cas, totalement absentes.

PS. Oui... Une idée vient de me venir à l'esprit. Le filtre peut être appliqué de manière récursive. Je ne sais pas ce que ça ferait, je n'ai pas essayé, mais ça compterait plus vite.
 
Andre69, j'ai implémenté l'algorithme du filtre médian que vous avez suggéré. Il s'avère qu'après le troisième passage, la forme de la courbe lissée ne change pas. J'ai testé cet effet dans une large gamme de tailles de fenêtres (jusqu'à 10000 échantillons).
En ce qui concerne les applications dans le domaine du commerce, il est correct d'utiliser "fenêtre gauche" lorsque le point actuel se voit attribuer une valeur à partir du centre de la fenêtre située PLEIN à gauche de la valeur actuelle. Bien sûr, cela introduit un retard de phase (lag), mais c'est ainsi que va le monde :-)
 
à Neutron

Andre69, j'ai implémenté l'algorithme du filtre médian que vous avez suggéré. Il s'avère qu'après le troisième passage, la forme de la courbe lissée ne change pas. J'ai vérifié cet effet dans une large gamme de tailles de fenêtres (jusqu'à 10000 échantillons). <br/ translate="no">En ce qui concerne les applications dans le commerce, il est correct d'utiliser la "fenêtre de gauche" lorsque le point actuel se voit attribuer une valeur à partir du centre de la fenêtre qui se trouve ENTIEREMENT à gauche de la valeur actuelle. Bien sûr, cela introduit un retard de phase (lag), mais c'est ainsi que va le monde :-)


Oui... Ça ne tient pas debout. J'ai commencé à vérifier. J'ai finalement examiné mon code, que j'utilise pour le filtrage médian. Je l'ai écrit il y a N ans (N>5) pour un petit programme de sortie de graphiques. Maintenant, j'ai commencé à utiliser ce programme comme un polygone pour toutes sortes de recherches. C'est pratique, et je n'ai même pas regardé les anciennes parties du code. Tout fonctionne et bien... Maintenant que je le regarde... et j'ai soudain découvert que la fonction que je croyais être un filtrage médian ne fait pas exactement cela ! Je suis vraiment désolé pour cette désinformation involontaire ! J'incline ma tête coupable.
Pourquoi et pourquoi je l'ai fait à l'époque - Dieu m'en garde - je ne m'en souviens pas.
La médiane classique consiste à prendre la valeur centrale d'un tableau trié. Dans ce cas particulier, j'ai pris la moyenne entre la valeur centrale et celle qui la précède. Peut-être que j'en ai eu besoin il y a longtemps pour une raison quelconque. J'ai également obtenu un filtre non linéaire, même si, bien sûr, il ne s'agit pas de la médiane au sens strict. Quand j'ai repris la version classique, ça s'est passé comme vous l'avez décrit. Dans ma variante, la courbe change à chaque fois que le filtre est appliqué et tend finalement à être droite (après plusieurs centaines de filtrages). Plus la fenêtre de filtrage est grande, plus le processus est rapide.
Pour éviter toute ambiguïté supplémentaire, je fournis un morceau de code en C.
C'est simple, j'espère que tout le monde pourra le comprendre.
//---------------------------------------------------------------------------
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();

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



À propos de la "fenêtre de gauche" - tout est vrai, je suis d'accord. Mais pour l'instant, je pense que ce sont les détails.

Encore une fois, toutes mes excuses.

 
à Northwind
...Mais si vous êtes sérieusement intéressés par l'obtention de ce document de recherche, envoyez-nous un courriel (info@disserr.ru) et nous vous livrerons le travail demandé à partir des archives si possible...


Peut-être y a-t-il des nouvelles de ce travail ?
 
à Северный Ветер
...Mais si vous êtes sérieusement intéressés par l'obtention de ce document de recherche, écrivez-nous (info@disserr.ru) et nous vous livrerons le travail demandé à partir des archives si possible...


Y a-t-il eu des nouvelles de ce travail ?

Je n'ai pas pris de mesures supplémentaires après la publication de leur réponse.
Je viens de vous montrer une façon d'essayer de trouver le matériel de thèse.
Je vous préviens que le matériel peut être payant.
 
2 Andre69

Je fais de grosses batailles de position avec MatLab.
Pour commencer, j'ai décidé d'examiner la décomposition en ondelettes des valeurs des séries de prix et des séries d'indicateurs. Pour DWT je n'ai pas trouvé de surprises, tout est plus ou moins compréhensible.
Pour CWT, la décomposition de l'indicateur était également assez claire. Cependant, la série de prix a donné le tableau suivant :


La structure de cette image, de manière générale, diffère sensiblement de celle, par exemple, de l'image figurant dans le message d'Andre69 du 28.06.07 20:43 sur la page. 141. J'aimerais comprendre pourquoi.
D'autre part, il a une structure trop régulière. Pourquoi ?
Cette analyse a été effectuée pour une série de 1024 échantillons.
Paramètres de l'échelle : Min=1, Step=1, Max=512. ondelette de DMeyer

PS Au fait, le message ci-dessus était le dernier d'une série interminable sur les ondelettes. :-)
J'aimerais en savoir plus sur la poursuite. Devrait-on ?
 
à Yurixx
La structure de cette image en général est assez différente de celle, par exemple, de l'image du post Andre69 28.06.07 20:43 à la page 141. 141. J'aimerais comprendre pourquoi.
D'autre part, il a une structure trop régulière. Pourquoi ?


Yura, une telle structure régulière est inhérente à la nature des effets de bord qui se produisent inévitablement aux extrémités de la BP étudiée. Il est impossible d'éviter ces effets. Mais si les conditions du problème à résoudre le permettent, vous pouvez laisser quelques termes de la série à chaque extrémité du RV (le nombre de termes étant égal à la largeur de la fenêtre d'échantillonnage) qui participeront aux calculs, mais ne seront pas utilisés dans la visualisation. Après cette procédure, l'image sera adéquate et isotrope.
 
<br / translate="no">Mais si la condition du problème à résoudre le permet, vous pouvez laisser quelques membres de ligne à chaque extrémité de la BP, qui participeront aux calculs, mais ne seront pas utilisés dans la visualisation. Après cette procédure, l'image sera adéquate et isotrope.


Merci, Sergey, pour cette clarification. Il ne reste plus qu'à trouver comment faire ce sur quoi vous écrivez.
Parsing Wavelet Toolbox Je n'y ai pas trouvé de telles fonctionnalités. J'ai peut-être oublié quelque chose ou cela ne peut se faire que manuellement ?
 
Cet effet peut être minimisé en remplissant la condition : n/N<<1, où n est la taille de la fenêtre (dans votre cas, si je comprends bien, n = Max), N est le nombre de membres de la BP (1024). En supposant 0,01<<1, nous avons Mach<10 pour les séries disponibles.
Dans ce cas, les résultats présentés seront corrects.