Comparaison de deux graphiques de cotation avec des distorsions non linéaires sur l'axe des X - page 5

 
alsu: Le code mql ne sera probablement pas long))

il semble que le code source soit ici http://www.bytefish.de/blog/dynamic_time_warping

 
Eh bien oui, il est court, mais c'est dans la version la plus simple, et il y a quelques autres améliorations concernant la vitesse de l'algorithme et la prise en compte des contraintes...
 
Celui-ci a implémenté un support pour les dimensions de données jusqu'à 3 incluses, ainsi qu'une méthode d'estimation de la limite inférieure et un test de chemin candidat associé (d'après ce que j'ai compris, ceci est beaucoup moins cher que le DTW complet pour les dimensions >1, où la méthode principale devient un problème TK-complet et conduit à des temps de solution exponentiels).
 
Il y a un article sur le DTW sur le site Habrahabra http://habrahabr.ru/blogs/algorithm/135087/, il semble être très clair, mais je n'arrive pas à comprendre comment utiliser le DTW pour l'OHLC, quelqu'un peut-il me l'expliquer ?
 
IgorM:
Il y a un article sur le DTW sur le site Habrahabra http://habrahabr.ru/blogs/algorithm/135087/, il semble être très clair, mais je n'arrive pas à comprendre comment utiliser le DTW pour l'OHLC, quelqu'un peut-il me l'expliquer ?

Est-ce que c'est déjà fait pour un prix unique ?
 
Integer: Cela a-t-il déjà fonctionné pour un prix unique ?

Cela n'a pas marché, ce n'est pas un problème de porter la source DTW à mql, d'une manière ou d'une autre :

//+------------------------------------------------------------------+
// create cost matrix
#define costmaxM 100
#define costmaxN 100
double cost[costmaxM][costmaxN];
int costM,costN; // текущая размерность cost
//+------------------------------------------------------------------+
double dist(double x, double y){
   return(MathSqrt(MathPow((x - y), 2)));
}
//+------------------------------------------------------------------+
int dtw(double &t1[],double &t2[]) {
// возвращаемое значение -1 ошибка
// +1 массив cost[][] заполнен правильно        
                int i,j;
                costM = ArraySize(t1);
                costN = ArraySize(t2);
                if(costM>=costmaxM || costN>=costmaxN)return(-1);

                cost[0][0] = dist(t1[0], t2[0]);
                // calculate first row
                for(i = 1; i < costM; i++)
                        cost[i][0] = cost[i-1][0] + dist(t1[i], t2[0]);
                // calculate first column
                for(j = 1; j < costN; j++)
                        cost[0][j] = cost[0][j-1] + dist(t1[0], t2[j]);
                // fill matrix
                for(i = 1; i < costM; i++)
                        for(j = 1; j < costN; j++)
                                cost[i][j] = MathMin(cost[i-1][j],MathMin(cost[i][j-1], cost[i-1][j-1])) + dist(t1[i],t2[j]);
 
return(1);//            return cost[m-1][n-1];
}
//+------------------------------------------------------------------+
Le problème est que je ne comprends pas comment l'utiliser. Tout ce que j'ai compris, c'est qu'avec DTW, vous pouvez adapter différentes périodes de temps (BP) à la même échelle pour une analyse ultérieure, mais comment... - ne comprennent pas
 
IgorM:

Cela n'a pas fonctionné, la source DTW elle-même est facile à porter vers mql, d'une manière ou d'une autre :

Le problème est que je ne comprends pas comment l'utiliser. Tout ce que j'ai compris, c'est qu'avec DTW, vous pouvez adapter différentes sections temporelles (BP) à la même échelle pour une analyse ultérieure, mais comment... - ne comprennent pas


Je l'ai essayé. Je ne sais pas non plus comment l'utiliser. La sortie doit être soit le chemin de transformation, soit les données transformées. Disons que cost[][] est une matrice de distance. Mais il donne un chemin avec un retour (si on cherche la valeur minimale dans chaque colonne), la condition "1. Monotonicité - le chemin ne revient jamais, c'est-à-dire que les deux indices, i et j, qui sont utilisés dans la séquence, ne diminuent jamais." De plus, le chemin n'atteint pas l'angle opposé. D'une manière générale, je ne comprends pas vraiment le sens de toutes ces manipulations avec des nombres lors du remplissage du tableau cost[][] - d'abord les distances sont simplement comptées et ensuite elles sont additionnées.

Si nous devons compter les distances entre chaque élément t1 et chaque élément t2, pourquoi devrions-nous effectuer autant de calculs, si nous devons remplir la condition "1. Monotonicité - le chemin ne revient jamais, c'est-à-dire que les deux indices i et j utilisés dans la séquence ne sont jamais diminués" ?



.

 

Le DTW est totalement inadapté à la tâche à accomplir. DTW est utilisé pour reconnaître la parole (mots) dans un flux audio en temps réel comme suit (en gros) :

  1. Il existe un motif (mot) - une séquence de données, de longueur N.
  2. Il existe un flux audio - une séquence de données, de longueur M >> N.
  3. Dans le flux audio, les morceaux de données les plus éloignés, de longueur différente (en gros), sont sélectionnés.
  4. Chaque morceau est comparé à un modèle par DTW.
  5. Si le DTW maximum dépasse un certain seuil, on considère qu'un mot a été prononcé.

DTW n'est donc qu'un critère de comparaison de deux séquences de longueur différente. Rien de plus.

Pour rechercher des mots dans l'historique audio, la méthode DTW ne convient pas du tout, car elle est très gourmande en ressources. Par exemple, trouver combien de fois un mot a été dit au cours de la dernière heure, en utilisant DTW, est presque impossible.

Une solution rapide à ce problème consiste à utiliser un algorithme rapide pour calculer le QC de Pearson. Ce faisant, le DTW est converti à chaque fois par un ZigZag avec des paramètres d'entrée différents. Un tel algorithme est très facile à paralléliser et fonctionne presque en temps réel lorsqu'il est mis en œuvre à l'aide d'un GPU.

Une autre question est de savoir pourquoi nous en avons besoin. Personne n'a résolu cette tâche de manière sérieuse. Mais je suis presque sûr qu'après l'avoir résolu, il y aura un clou de plus dans le cercueil de la solidité de la théorie des modèles.

La théorie des modèles, ainsi que les vagues d'Elliott et les Fibo ne sont pas un niveau de pensée technocratique.

 
hrenfx:

Le DTW est totalement inadapté à la tâche à accomplir...

Nous allons d'abord vous montrer un DTW en état de marche, puis nous pourrons discuter de ce qui convient et de ce qui ne convient pas.
 

Quelque chose que j'ai inventé moi-même, mais je ne sais pas, ça n'a aucun sens.

La ligne jaune, c'est la ligne orange tendue sur la ligne rouge.